2020-01-09 Richard Sandiford <richard.sandiford@arm.com>
+ * config.gcc (aarch64*-*-*): Add aarch64-sve-builtins-sve2.o to
+ extra_objs.
+ * config/aarch64/t-aarch64 (aarch64-sve-builtins.o): Depend on
+ aarch64-sve-builtins-base.def, aarch64-sve-builtins-sve2.def and
+ aarch64-sve-builtins-sve2.h.
+ (aarch64-sve-builtins-sve2.o): New rule.
+ * config/aarch64/aarch64.h (AARCH64_ISA_SVE2_AES): New macro.
+ (AARCH64_ISA_SVE2_BITPERM, AARCH64_ISA_SVE2_SHA3): Likewise.
+ (AARCH64_ISA_SVE2_SM4, TARGET_SVE2_AES, TARGET_SVE2_BITPERM): Likewise.
+ (TARGET_SVE2_SHA, TARGET_SVE2_SM4): Likewise.
+ * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Handle
+ TARGET_SVE2_AES, TARGET_SVE2_BITPERM, TARGET_SVE2_SHA3 and
+ TARGET_SVE2_SM4.
+ * config/aarch64/aarch64-sve.md: Update comments with SVE2
+ instructions that are handled here.
+ (@cond_asrd<mode>): Generalize to...
+ (@cond_<SVE_INT_SHIFT_IMM:sve_int_op><mode>): ...this.
+ (*cond_asrd<mode>_2): Generalize to...
+ (*cond_<SVE_INT_SHIFT_IMM:sve_int_op><mode>_2): ...this.
+ (*cond_asrd<mode>_z): Generalize to...
+ (*cond_<SVE_INT_SHIFT_IMM:sve_int_op><mode>_z): ...this.
+ * config/aarch64/aarch64.md (UNSPEC_LDNT1_GATHER): New unspec.
+ (UNSPEC_STNT1_SCATTER, UNSPEC_WHILEGE, UNSPEC_WHILEGT): Likewise.
+ (UNSPEC_WHILEHI, UNSPEC_WHILEHS): Likewise.
+ * config/aarch64/aarch64-sve2.md (@aarch64_gather_ldnt<mode>): New
+ pattern.
+ (@aarch64_gather_ldnt_<ANY_EXTEND:optab><SVE_FULL_SDI:mode><SVE_PARTIAL_I:mode>)
+ (@aarch64_scatter_stnt<mode>): Likewise.
+ (@aarch64_scatter_stnt_<SVE_FULL_SDI:mode><SVE_PARTIAL_I:mode>)
+ (@aarch64_mul_lane_<mode>): Likewise.
+ (@aarch64_sve_suqadd<mode>_const): Likewise.
+ (*<sur>h<addsub><mode>): Generalize to...
+ (@aarch64_pred_<SVE2_COND_INT_BINARY_REV:sve_int_op><mode>): ...this
+ new pattern.
+ (@cond_<SVE2_COND_INT_BINARY:sve_int_op><mode>): New expander.
+ (*cond_<SVE2_COND_INT_BINARY:sve_int_op><mode>_2): New pattern.
+ (*cond_<SVE2_COND_INT_BINARY:sve_int_op><mode>_3): Likewise.
+ (*cond_<SVE2_COND_INT_BINARY:sve_int_op><mode>_any): Likewise.
+ (*cond_<SVE2_COND_INT_BINARY_NOREV:sve_int_op><mode>_z): Likewise.
+ (@aarch64_sve_<SVE2_INT_BINARY:sve_int_op><mode>):: Likewise.
+ (@aarch64_sve_<SVE2_INT_BINARY:sve_int_op>_lane_<mode>): Likewise.
+ (@aarch64_pred_<SVE2_COND_INT_SHIFT:sve_int_op><mode>): Likewise.
+ (@cond_<SVE2_COND_INT_SHIFT:sve_int_op><mode>): New expander.
+ (*cond_<SVE2_COND_INT_SHIFT:sve_int_op><mode>_2): New pattern.
+ (*cond_<SVE2_COND_INT_SHIFT:sve_int_op><mode>_3): Likewise.
+ (*cond_<SVE2_COND_INT_SHIFT:sve_int_op><mode>_any): Likewise.
+ (@aarch64_sve_<SVE2_INT_TERNARY:sve_int_op><mode>): Likewise.
+ (@aarch64_sve_<SVE2_INT_TERNARY_LANE:sve_int_op>_lane_<mode>)
+ (@aarch64_sve_add_mul_lane_<mode>): Likewise.
+ (@aarch64_sve_sub_mul_lane_<mode>): Likewise.
+ (@aarch64_sve2_xar<mode>): Likewise.
+ (@aarch64_sve2_bcax<mode>): Likewise.
+ (*aarch64_sve2_eor3<mode>): Rename to...
+ (@aarch64_sve2_eor3<mode>): ...this.
+ (@aarch64_sve2_bsl<mode>): New expander.
+ (@aarch64_sve2_nbsl<mode>): Likewise.
+ (@aarch64_sve2_bsl1n<mode>): Likewise.
+ (@aarch64_sve2_bsl2n<mode>): Likewise.
+ (@aarch64_sve_add_<SHIFTRT:sve_int_op><mode>): Likewise.
+ (*aarch64_sve2_sra<mode>): Add MOVPRFX support.
+ (@aarch64_sve_add_<VRSHR_N:sve_int_op><mode>): New pattern.
+ (@aarch64_sve_<SVE2_INT_SHIFT_INSERT:sve_int_op><mode>): Likewise.
+ (@aarch64_sve2_<USMAX:su>aba<mode>): New expander.
+ (*aarch64_sve2_<USMAX:su>aba<mode>): New pattern.
+ (@aarch64_sve_<SVE2_INT_BINARY_WIDE:sve_int_op><mode>): Likewise.
+ (<su>mull<bt><Vwide>): Generalize to...
+ (@aarch64_sve_<SVE2_INT_BINARY_LONG:sve_int_op><mode>): ...this new
+ pattern.
+ (@aarch64_sve_<SVE2_INT_BINARY_LONG_lANE:sve_int_op>_lane_<mode>)
+ (@aarch64_sve_<SVE2_INT_SHIFT_IMM_LONG:sve_int_op><mode>)
+ (@aarch64_sve_add_<SVE2_INT_ADD_BINARY_LONG:sve_int_op><mode>)
+ (@aarch64_sve_add_<SVE2_INT_ADD_BINARY_LONG_LANE:sve_int_op>_lane_<mode>)
+ (@aarch64_sve_qadd_<SVE2_INT_QADD_BINARY_LONG:sve_int_op><mode>)
+ (@aarch64_sve_qadd_<SVE2_INT_QADD_BINARY_LONG_LANE:sve_int_op>_lane_<mode>)
+ (@aarch64_sve_sub_<SVE2_INT_SUB_BINARY_LONG:sve_int_op><mode>)
+ (@aarch64_sve_sub_<SVE2_INT_SUB_BINARY_LONG_LANE:sve_int_op>_lane_<mode>)
+ (@aarch64_sve_qsub_<SVE2_INT_QSUB_BINARY_LONG:sve_int_op><mode>)
+ (@aarch64_sve_qsub_<SVE2_INT_QSUB_BINARY_LONG_LANE:sve_int_op>_lane_<mode>)
+ (@aarch64_sve_<SVE2_FP_TERNARY_LONG:sve_fp_op><mode>): New patterns.
+ (@aarch64_<SVE2_FP_TERNARY_LONG_LANE:sve_fp_op>_lane_<mode>)
+ (@aarch64_sve_<SVE2_INT_UNARY_NARROWB:sve_int_op><mode>): Likewise.
+ (@aarch64_sve_<SVE2_INT_UNARY_NARROWT:sve_int_op><mode>): Likewise.
+ (@aarch64_sve_<SVE2_INT_BINARY_NARROWB:sve_int_op><mode>): Likewise.
+ (@aarch64_sve_<SVE2_INT_BINARY_NARROWT:sve_int_op><mode>): Likewise.
+ (<SHRNB:r>shrnb<mode>): Generalize to...
+ (@aarch64_sve_<SVE2_INT_SHIFT_IMM_NARROWB:sve_int_op><mode>): ...this
+ new pattern.
+ (<SHRNT:r>shrnt<mode>): Generalize to...
+ (@aarch64_sve_<SVE2_INT_SHIFT_IMM_NARROWT:sve_int_op><mode>): ...this
+ new pattern.
+ (@aarch64_pred_<SVE2_INT_BINARY_PAIR:sve_int_op><mode>): New pattern.
+ (@aarch64_pred_<SVE2_FP_BINARY_PAIR:sve_fp_op><mode>): Likewise.
+ (@cond_<SVE2_INT_BINARY_PAIR_LONG:sve_int_op><mode>): New expander.
+ (*cond_<SVE2_INT_BINARY_PAIR_LONG:sve_int_op><mode>_2): New pattern.
+ (*cond_<SVE2_INT_BINARY_PAIR_LONG:sve_int_op><mode>_z): Likewise.
+ (@aarch64_sve_<SVE2_INT_CADD:optab><mode>): Likewise.
+ (@aarch64_sve_<SVE2_INT_CMLA:optab><mode>): Likewise.
+ (@aarch64_<SVE2_INT_CMLA:optab>_lane_<mode>): Likewise.
+ (@aarch64_sve_<SVE2_INT_CDOT:optab><mode>): Likewise.
+ (@aarch64_<SVE2_INT_CDOT:optab>_lane_<mode>): Likewise.
+ (@aarch64_pred_<SVE2_COND_FP_UNARY_LONG:sve_fp_op><mode>): Likewise.
+ (@cond_<SVE2_COND_FP_UNARY_LONG:sve_fp_op><mode>): New expander.
+ (*cond_<SVE2_COND_FP_UNARY_LONG:sve_fp_op><mode>): New pattern.
+ (@aarch64_sve2_cvtnt<mode>): Likewise.
+ (@aarch64_pred_<SVE2_COND_FP_UNARY_NARROWB:sve_fp_op><mode>): Likewise.
+ (@cond_<SVE2_COND_FP_UNARY_NARROWB:sve_fp_op><mode>): New expander.
+ (*cond_<SVE2_COND_FP_UNARY_NARROWB:sve_fp_op><mode>_any): New pattern.
+ (@aarch64_sve2_cvtxnt<mode>): Likewise.
+ (@aarch64_pred_<SVE2_U32_UNARY:sve_int_op><mode>): Likewise.
+ (@cond_<SVE2_U32_UNARY:sve_int_op><mode>): New expander.
+ (*cond_<SVE2_U32_UNARY:sve_int_op><mode>): New pattern.
+ (@aarch64_pred_<SVE2_COND_INT_UNARY_FP:sve_fp_op><mode>): Likewise.
+ (@cond_<SVE2_COND_INT_UNARY_FP:sve_fp_op><mode>): New expander.
+ (*cond_<SVE2_COND_INT_UNARY_FP:sve_fp_op><mode>): New pattern.
+ (@aarch64_sve2_pmul<mode>): Likewise.
+ (@aarch64_sve_<SVE2_PMULL:optab><mode>): Likewise.
+ (@aarch64_sve_<SVE2_PMULL_PAIR:optab><mode>): Likewise.
+ (@aarch64_sve2_tbl2<mode>): Likewise.
+ (@aarch64_sve2_tbx<mode>): Likewise.
+ (@aarch64_sve_<SVE2_INT_BITPERM:sve_int_op><mode>): Likewise.
+ (@aarch64_sve2_histcnt<mode>): Likewise.
+ (@aarch64_sve2_histseg<mode>): Likewise.
+ (@aarch64_pred_<SVE2_MATCH:sve_int_op><mode>): Likewise.
+ (*aarch64_pred_<SVE2_MATCH:sve_int_op><mode>_cc): Likewise.
+ (*aarch64_pred_<SVE2_MATCH:sve_int_op><mode>_ptest): Likewise.
+ (aarch64_sve2_aes<CRYPTO_AES:aes_op>): Likewise.
+ (aarch64_sve2_aes<CRYPTO_AESMC:aesmc_op>): Likewise.
+ (*aarch64_sve2_aese_fused, *aarch64_sve2_aesd_fused): Likewise.
+ (aarch64_sve2_rax1, aarch64_sve2_sm4e, aarch64_sve2_sm4ekey): Likewise.
+ (<su>mulh<r>s<mode>3): Update after above pattern name changes.
+ * config/aarch64/iterators.md (VNx16QI_ONLY, VNx4SF_ONLY)
+ (SVE_STRUCT2, SVE_FULL_BHI, SVE_FULL_HSI, SVE_FULL_HDI)
+ (SVE2_PMULL_PAIR_I): New mode iterators.
+ (UNSPEC_ADCLB, UNSPEC_ADCLT, UNSPEC_ADDHNB, UNSPEC_ADDHNT, UNSPEC_BDEP)
+ (UNSPEC_BEXT, UNSPEC_BGRP, UNSPEC_CADD90, UNSPEC_CADD270, UNSPEC_CDOT)
+ (UNSPEC_CDOT90, UNSPEC_CDOT180, UNSPEC_CDOT270, UNSPEC_CMLA)
+ (UNSPEC_CMLA90, UNSPEC_CMLA180, UNSPEC_CMLA270, UNSPEC_COND_FCVTLT)
+ (UNSPEC_COND_FCVTNT, UNSPEC_COND_FCVTX, UNSPEC_COND_FCVTXNT)
+ (UNSPEC_COND_FLOGB, UNSPEC_EORBT, UNSPEC_EORTB, UNSPEC_FADDP)
+ (UNSPEC_FMAXP, UNSPEC_FMAXNMP, UNSPEC_FMLALB, UNSPEC_FMLALT)
+ (UNSPEC_FMLSLB, UNSPEC_FMLSLT, UNSPEC_FMINP, UNSPEC_FMINNMP)
+ (UNSPEC_HISTCNT, UNSPEC_HISTSEG, UNSPEC_MATCH, UNSPEC_NMATCH)
+ (UNSPEC_PMULLB, UNSPEC_PMULLB_PAIR, UNSPEC_PMULLT, UNSPEC_PMULLT_PAIR)
+ (UNSPEC_RADDHNB, UNSPEC_RADDHNT, UNSPEC_RSUBHNB, UNSPEC_RSUBHNT)
+ (UNSPEC_SLI, UNSPEC_SRI, UNSPEC_SABDLB, UNSPEC_SABDLT, UNSPEC_SADDLB)
+ (UNSPEC_SADDLBT, UNSPEC_SADDLT, UNSPEC_SADDWB, UNSPEC_SADDWT)
+ (UNSPEC_SBCLB, UNSPEC_SBCLT, UNSPEC_SMAXP, UNSPEC_SMINP)
+ (UNSPEC_SQCADD90, UNSPEC_SQCADD270, UNSPEC_SQDMULLB, UNSPEC_SQDMULLBT)
+ (UNSPEC_SQDMULLT, UNSPEC_SQRDCMLAH, UNSPEC_SQRDCMLAH90)
+ (UNSPEC_SQRDCMLAH180, UNSPEC_SQRDCMLAH270, UNSPEC_SQRSHRNB)
+ (UNSPEC_SQRSHRNT, UNSPEC_SQRSHRUNB, UNSPEC_SQRSHRUNT, UNSPEC_SQSHRNB)
+ (UNSPEC_SQSHRNT, UNSPEC_SQSHRUNB, UNSPEC_SQSHRUNT, UNSPEC_SQXTNB)
+ (UNSPEC_SQXTNT, UNSPEC_SQXTUNB, UNSPEC_SQXTUNT, UNSPEC_SSHLLB)
+ (UNSPEC_SSHLLT, UNSPEC_SSUBLB, UNSPEC_SSUBLBT, UNSPEC_SSUBLT)
+ (UNSPEC_SSUBLTB, UNSPEC_SSUBWB, UNSPEC_SSUBWT, UNSPEC_SUBHNB)
+ (UNSPEC_SUBHNT, UNSPEC_TBL2, UNSPEC_UABDLB, UNSPEC_UABDLT)
+ (UNSPEC_UADDLB, UNSPEC_UADDLT, UNSPEC_UADDWB, UNSPEC_UADDWT)
+ (UNSPEC_UMAXP, UNSPEC_UMINP, UNSPEC_UQRSHRNB, UNSPEC_UQRSHRNT)
+ (UNSPEC_UQSHRNB, UNSPEC_UQSHRNT, UNSPEC_UQXTNB, UNSPEC_UQXTNT)
+ (UNSPEC_USHLLB, UNSPEC_USHLLT, UNSPEC_USUBLB, UNSPEC_USUBLT)
+ (UNSPEC_USUBWB, UNSPEC_USUBWT): New unspecs.
+ (UNSPEC_SMULLB, UNSPEC_SMULLT, UNSPEC_UMULLB, UNSPEC_UMULLT)
+ (UNSPEC_SMULHS, UNSPEC_SMULHRS, UNSPEC_UMULHS, UNSPEC_UMULHRS)
+ (UNSPEC_RSHRNB, UNSPEC_RSHRNT, UNSPEC_SHRNB, UNSPEC_SHRNT): Move
+ further down file.
+ (VNARROW, Ventype): New mode attributes.
+ (Vewtype): Handle VNx2DI. Fix typo in comment.
+ (VDOUBLE): New mode attribute.
+ (sve_lane_con): Handle VNx8HI.
+ (SVE_INT_UNARY): Include ss_abs and ss_neg for TARGET_SVE2.
+ (SVE_INT_BINARY): Likewise ss_plus, us_plus, ss_minus and us_minus.
+ (sve_int_op, sve_int_op_rev): Handle the above codes.
+ (sve_pred_int_rhs2_operand): Likewise.
+ (MULLBT, SHRNB, SHRNT): Delete.
+ (SVE_INT_SHIFT_IMM): New int iterator.
+ (SVE_WHILE): Add UNSPEC_WHILEGE, UNSPEC_WHILEGT, UNSPEC_WHILEHI
+ and UNSPEC_WHILEHS for TARGET_SVE2.
+ (SVE2_U32_UNARY, SVE2_INT_UNARY_NARROWB, SVE2_INT_UNARY_NARROWT)
+ (SVE2_INT_BINARY, SVE2_INT_BINARY_LANE, SVE2_INT_BINARY_LONG)
+ (SVE2_INT_BINARY_LONG_LANE, SVE2_INT_BINARY_NARROWB)
+ (SVE2_INT_BINARY_NARROWT, SVE2_INT_BINARY_PAIR, SVE2_FP_BINARY_PAIR)
+ (SVE2_INT_BINARY_PAIR_LONG, SVE2_INT_BINARY_WIDE): New int iterators.
+ (SVE2_INT_SHIFT_IMM_LONG, SVE2_INT_SHIFT_IMM_NARROWB): Likewise.
+ (SVE2_INT_SHIFT_IMM_NARROWT, SVE2_INT_SHIFT_INSERT, SVE2_INT_CADD)
+ (SVE2_INT_BITPERM, SVE2_INT_TERNARY, SVE2_INT_TERNARY_LANE): Likewise.
+ (SVE2_FP_TERNARY_LONG, SVE2_FP_TERNARY_LONG_LANE, SVE2_INT_CMLA)
+ (SVE2_INT_CDOT, SVE2_INT_ADD_BINARY_LONG, SVE2_INT_QADD_BINARY_LONG)
+ (SVE2_INT_SUB_BINARY_LONG, SVE2_INT_QSUB_BINARY_LONG): Likewise.
+ (SVE2_INT_ADD_BINARY_LONG_LANE, SVE2_INT_QADD_BINARY_LONG_LANE)
+ (SVE2_INT_SUB_BINARY_LONG_LANE, SVE2_INT_QSUB_BINARY_LONG_LANE)
+ (SVE2_COND_INT_UNARY_FP, SVE2_COND_FP_UNARY_LONG): Likewise.
+ (SVE2_COND_FP_UNARY_NARROWB, SVE2_COND_INT_BINARY): Likewise.
+ (SVE2_COND_INT_BINARY_NOREV, SVE2_COND_INT_BINARY_REV): Likewise.
+ (SVE2_COND_INT_SHIFT, SVE2_MATCH, SVE2_PMULL): Likewise.
+ (optab): Handle the new unspecs.
+ (su, r): Remove entries for UNSPEC_SHRNB, UNSPEC_SHRNT, UNSPEC_RSHRNB
+ and UNSPEC_RSHRNT.
+ (lr): Handle the new unspecs.
+ (bt): Delete.
+ (cmp_op, while_optab_cmp, sve_int_op): Handle the new unspecs.
+ (sve_int_op_rev, sve_int_add_op, sve_int_qadd_op, sve_int_sub_op)
+ (sve_int_qsub_op): New int attributes.
+ (sve_fp_op, rot): Handle the new unspecs.
+ * config/aarch64/aarch64-sve-builtins.h
+ (function_resolver::require_matching_pointer_type): Declare.
+ (function_resolver::resolve_unary): Add an optional boolean argument.
+ (function_resolver::finish_opt_n_resolution): Add an optional
+ type_suffix_index argument.
+ (gimple_folder::redirect_call): Declare.
+ (gimple_expander::prepare_gather_address_operands): Add an optional
+ bool parameter.
+ * config/aarch64/aarch64-sve-builtins.cc: Include
+ aarch64-sve-builtins-sve2.h.
+ (TYPES_b_unsigned, TYPES_b_integer, TYPES_bh_integer): New macros.
+ (TYPES_bs_unsigned, TYPES_hs_signed, TYPES_hs_integer): Likewise.
+ (TYPES_hd_unsigned, TYPES_hsd_signed): Likewise.
+ (TYPES_hsd_integer): Use TYPES_hsd_signed.
+ (TYPES_s_float_hsd_integer, TYPES_s_float_sd_integer): New macros.
+ (TYPES_s_unsigned): Likewise.
+ (TYPES_s_integer): Use TYPES_s_unsigned.
+ (TYPES_sd_signed, TYPES_sd_unsigned): New macros.
+ (TYPES_sd_integer): Use them.
+ (TYPES_d_unsigned): New macro.
+ (TYPES_d_integer): Use it.
+ (TYPES_d_data, TYPES_cvt_long, TYPES_cvt_narrow_s): New macros.
+ (TYPES_cvt_narrow): Likewise.
+ (DEF_SVE_TYPES_ARRAY): Include the new types macros above.
+ (preds_mx): New variable.
+ (function_builder::add_overloaded_function): Allow the new feature
+ set to be more restrictive than the original one.
+ (function_resolver::infer_pointer_type): Remove qualifiers from
+ the pointer type before printing it.
+ (function_resolver::require_matching_pointer_type): New function.
+ (function_resolver::resolve_sv_displacement): Handle functions
+ that don't support 32-bit vector indices or svint32_t vector offsets.
+ (function_resolver::finish_opt_n_resolution): Take the inferred type
+ as a separate argument.
+ (function_resolver::resolve_unary): Optionally treat all forms in
+ the same way as normal merging functions.
+ (gimple_folder::redirect_call): New function.
+ (function_expander::prepare_gather_address_operands): Add an argument
+ that says whether scaled forms are available. If they aren't,
+ handle scaling of vector indices and don't add the extension and
+ scaling operands.
+ (function_expander::map_to_unspecs): If aarch64_sve isn't available,
+ fall back to using cond_* instead.
+ * config/aarch64/aarch64-sve-builtins-functions.h (rtx_code_function):
+ Split out the member variables into...
+ (rtx_code_function_base): ...this new base class.
+ (rtx_code_function_rotated): Inherit rtx_code_function_base.
+ (unspec_based_function): Split out the member variables into...
+ (unspec_based_function_base): ...this new base class.
+ (unspec_based_function_rotated): Inherit unspec_based_function_base.
+ (unspec_based_function_exact_insn): New class.
+ (unspec_based_add_function, unspec_based_add_lane_function)
+ (unspec_based_lane_function, unspec_based_pred_function)
+ (unspec_based_qadd_function, unspec_based_qadd_lane_function)
+ (unspec_based_qsub_function, unspec_based_qsub_lane_function)
+ (unspec_based_sub_function, unspec_based_sub_lane_function): New
+ typedefs.
+ (unspec_based_fused_function): New class.
+ (unspec_based_mla_function, unspec_based_mls_function): New typedefs.
+ (unspec_based_fused_lane_function): New class.
+ (unspec_based_mla_lane_function, unspec_based_mls_lane_function): New
+ typedefs.
+ (CODE_FOR_MODE1): New macro.
+ (fixed_insn_function): New class.
+ (while_comparison): Likewise.
+ * config/aarch64/aarch64-sve-builtins-shapes.h (binary_long_lane)
+ (binary_long_opt_n, binary_narrowb_opt_n, binary_narrowt_opt_n)
+ (binary_to_uint, binary_wide, binary_wide_opt_n, compare, compare_ptr)
+ (load_ext_gather_index_restricted, load_ext_gather_offset_restricted)
+ (load_gather_sv_restricted, shift_left_imm_long): Declare.
+ (shift_left_imm_to_uint, shift_right_imm_narrowb): Likewise.
+ (shift_right_imm_narrowt, shift_right_imm_narrowb_to_uint): Likewise.
+ (shift_right_imm_narrowt_to_uint, store_scatter_index_restricted)
+ (store_scatter_offset_restricted, tbl_tuple, ternary_long_lane)
+ (ternary_long_opt_n, ternary_qq_lane_rotate, ternary_qq_rotate)
+ (ternary_shift_left_imm, ternary_shift_right_imm, ternary_uint)
+ (unary_convert_narrowt, unary_long, unary_narrowb, unary_narrowt)
+ (unary_narrowb_to_uint, unary_narrowt_to_uint, unary_to_int): Likewise.
+ * config/aarch64/aarch64-sve-builtins-shapes.cc (apply_predication):
+ Also add an initial argument for unary_convert_narrowt, regardless
+ of the predication type.
+ (build_32_64): Allow loads and stores to specify MODE_none.
+ (build_sv_index64, build_sv_uint_offset): New functions.
+ (long_type_suffix): New function.
+ (binary_imm_narrowb_base, binary_imm_narrowt_base): New classes.
+ (binary_imm_long_base, load_gather_sv_base): Likewise.
+ (shift_right_imm_narrow_wrapper, ternary_shift_imm_base): Likewise.
+ (ternary_resize2_opt_n_base, ternary_resize2_lane_base): Likewise.
+ (unary_narrowb_base, unary_narrowt_base): Likewise.
+ (binary_long_lane_def, binary_long_lane): New shape.
+ (binary_long_opt_n_def, binary_long_opt_n): Likewise.
+ (binary_narrowb_opt_n_def, binary_narrowb_opt_n): Likewise.
+ (binary_narrowt_opt_n_def, binary_narrowt_opt_n): Likewise.
+ (binary_to_uint_def, binary_to_uint): Likewise.
+ (binary_wide_def, binary_wide): Likewise.
+ (binary_wide_opt_n_def, binary_wide_opt_n): Likewise.
+ (compare_def, compare): Likewise.
+ (compare_ptr_def, compare_ptr): Likewise.
+ (load_ext_gather_index_restricted_def,
+ load_ext_gather_index_restricted): Likewise.
+ (load_ext_gather_offset_restricted_def,
+ load_ext_gather_offset_restricted): Likewise.
+ (load_gather_sv_def): Inherit from load_gather_sv_base.
+ (load_gather_sv_restricted_def, load_gather_sv_restricted): New shape.
+ (shift_left_imm_def, shift_left_imm): Likewise.
+ (shift_left_imm_long_def, shift_left_imm_long): Likewise.
+ (shift_left_imm_to_uint_def, shift_left_imm_to_uint): Likewise.
+ (store_scatter_index_restricted_def,
+ store_scatter_index_restricted): Likewise.
+ (store_scatter_offset_restricted_def,
+ store_scatter_offset_restricted): Likewise.
+ (tbl_tuple_def, tbl_tuple): Likewise.
+ (ternary_long_lane_def, ternary_long_lane): Likewise.
+ (ternary_long_opt_n_def, ternary_long_opt_n): Likewise.
+ (ternary_qq_lane_def): Inherit from ternary_resize2_lane_base.
+ (ternary_qq_lane_rotate_def, ternary_qq_lane_rotate): New shape
+ (ternary_qq_opt_n_def): Inherit from ternary_resize2_opt_n_base.
+ (ternary_qq_rotate_def, ternary_qq_rotate): New shape.
+ (ternary_shift_left_imm_def, ternary_shift_left_imm): Likewise.
+ (ternary_shift_right_imm_def, ternary_shift_right_imm): Likewise.
+ (ternary_uint_def, ternary_uint): Likewise.
+ (unary_convert): Fix typo in comment.
+ (unary_convert_narrowt_def, unary_convert_narrowt): New shape.
+ (unary_long_def, unary_long): Likewise.
+ (unary_narrowb_def, unary_narrowb): Likewise.
+ (unary_narrowt_def, unary_narrowt): Likewise.
+ (unary_narrowb_to_uint_def, unary_narrowb_to_uint): Likewise.
+ (unary_narrowt_to_uint_def, unary_narrowt_to_uint): Likewise.
+ (unary_to_int_def, unary_to_int): Likewise.
+ * config/aarch64/aarch64-sve-builtins-base.cc (unspec_cmla)
+ (unspec_fcmla, unspec_cond_fcmla, expand_mla_mls_lane): New functions.
+ (svasrd_impl): Delete.
+ (svcadd_impl::expand): Handle integer operations too.
+ (svcmla_impl::expand, svcmla_lane::expand): Likewise, using the
+ new functions to derive the unspec numbers.
+ (svmla_svmls_lane_impl): Replace with...
+ (svmla_lane_impl, svmls_lane_impl): ...these new classes. Handle
+ integer operations too.
+ (svwhile_impl): Rename to...
+ (svwhilelx_impl): ...this and inherit from while_comparison.
+ (svasrd): Use unspec_based_function.
+ (svmla_lane): Use svmla_lane_impl.
+ (svmls_lane): Use svmls_lane_impl.
+ (svrecpe, svrsqrte): Handle unsigned integer operations too.
+ (svwhilele, svwhilelt): Use svwhilelx_impl.
+ * config/aarch64/aarch64-sve-builtins-sve2.h: New file.
+ * config/aarch64/aarch64-sve-builtins-sve2.cc: Likewise.
+ * config/aarch64/aarch64-sve-builtins-sve2.def: Likewise.
+ * config/aarch64/aarch64-sve-builtins.def: Include
+ aarch64-sve-builtins-sve2.def.
+
+2020-01-09 Richard Sandiford <richard.sandiford@arm.com>
+
* config/aarch64/aarch64-protos.h (aarch64_sve_arith_immediate_p)
(aarch64_sve_sqadd_sqsub_immediate_p): Add a machine_mode argument.
* config/aarch64/aarch64.c (aarch64_sve_arith_immediate_p)
c_target_objs="aarch64-c.o"
cxx_target_objs="aarch64-c.o"
d_target_objs="aarch64-d.o"
- extra_objs="aarch64-builtins.o aarch-common.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o cortex-a57-fma-steering.o aarch64-speculation.o falkor-tag-collision-avoidance.o aarch64-bti-insert.o"
+ extra_objs="aarch64-builtins.o aarch-common.o aarch64-sve-builtins.o aarch64-sve-builtins-shapes.o aarch64-sve-builtins-base.o aarch64-sve-builtins-sve2.o cortex-a57-fma-steering.o aarch64-speculation.o falkor-tag-collision-avoidance.o aarch64-bti-insert.o"
target_gtfiles="\$(srcdir)/config/aarch64/aarch64-builtins.c \$(srcdir)/config/aarch64/aarch64-sve-builtins.h \$(srcdir)/config/aarch64/aarch64-sve-builtins.cc"
target_has_targetm_common=yes
;;
builtin_define_with_int_value ("__ARM_FEATURE_SVE_BITS", bits);
}
aarch64_def_or_undef (TARGET_SVE2, "__ARM_FEATURE_SVE2", pfile);
+ aarch64_def_or_undef (TARGET_SVE2_AES, "__ARM_FEATURE_SVE2_AES", pfile);
+ aarch64_def_or_undef (TARGET_SVE2_BITPERM,
+ "__ARM_FEATURE_SVE2_BITPERM", pfile);
+ aarch64_def_or_undef (TARGET_SVE2_SHA3, "__ARM_FEATURE_SVE2_SHA3", pfile);
+ aarch64_def_or_undef (TARGET_SVE2_SM4, "__ARM_FEATURE_SVE2_SM4", pfile);
aarch64_def_or_undef (TARGET_LSE, "__ARM_FEATURE_ATOMICS", pfile);
aarch64_def_or_undef (TARGET_AES, "__ARM_FEATURE_AES", pfile);
namespace {
+/* Return the UNSPEC_CMLA* unspec for rotation amount ROT. */
+static int
+unspec_cmla (int rot)
+{
+ switch (rot)
+ {
+ case 0: return UNSPEC_CMLA;
+ case 90: return UNSPEC_CMLA90;
+ case 180: return UNSPEC_CMLA180;
+ case 270: return UNSPEC_CMLA270;
+ default: gcc_unreachable ();
+ }
+}
+
+/* Return the UNSPEC_FCMLA* unspec for rotation amount ROT. */
+static int
+unspec_fcmla (int rot)
+{
+ switch (rot)
+ {
+ case 0: return UNSPEC_FCMLA;
+ case 90: return UNSPEC_FCMLA90;
+ case 180: return UNSPEC_FCMLA180;
+ case 270: return UNSPEC_FCMLA270;
+ default: gcc_unreachable ();
+ }
+}
+
+/* Return the UNSPEC_COND_FCMLA* unspec for rotation amount ROT. */
+static int
+unspec_cond_fcmla (int rot)
+{
+ switch (rot)
+ {
+ case 0: return UNSPEC_COND_FCMLA;
+ case 90: return UNSPEC_COND_FCMLA90;
+ case 180: return UNSPEC_COND_FCMLA180;
+ case 270: return UNSPEC_COND_FCMLA270;
+ default: gcc_unreachable ();
+ }
+}
+
/* Expand a call to svmad, or svmla after reordering its operands.
Make _m forms merge with argument MERGE_ARGNO. */
static rtx
return e.use_cond_insn (icode, merge_argno);
}
+/* Expand a call to svmla_lane or svmls_lane using floating-point unspec
+ UNSPEC. */
+static rtx
+expand_mla_mls_lane (function_expander &e, int unspec)
+{
+ /* Put the operands in the normal (fma ...) order, with the accumulator
+ last. This fits naturally since that's also the unprinted operand
+ in the asm output. */
+ e.rotate_inputs_left (0, 4);
+ insn_code icode = code_for_aarch64_lane (unspec, e.vector_mode (0));
+ return e.use_exact_insn (icode);
+}
+
/* Expand a call to svmsb, or svmls after reordering its operands.
Make _m forms merge with argument MERGE_ARGNO. */
static rtx
unsigned int m_shift;
};
-class svasrd_impl : public function_base
-{
-public:
- rtx
- expand (function_expander &e) const OVERRIDE
- {
- return e.use_cond_insn (code_for_cond_asrd (e.vector_mode (0)));
- }
-};
-
class svbic_impl : public function_base
{
public:
expand (function_expander &e) const OVERRIDE
{
/* Convert the rotation amount into a specific unspec. */
- int rot = INTVAL (e.args[3]);
- e.args.ordered_remove (3);
- int unspec = (rot == 90 ? UNSPEC_COND_FCADD90
- : rot == 270 ? UNSPEC_COND_FCADD270
- : (gcc_unreachable (), 0));
- return e.map_to_unspecs (-1, -1, unspec);
+ int rot = INTVAL (e.args.pop ());
+ if (rot == 90)
+ return e.map_to_unspecs (UNSPEC_CADD90, UNSPEC_CADD90,
+ UNSPEC_COND_FCADD90);
+ if (rot == 270)
+ return e.map_to_unspecs (UNSPEC_CADD270, UNSPEC_CADD270,
+ UNSPEC_COND_FCADD270);
+ gcc_unreachable ();
}
};
expand (function_expander &e) const OVERRIDE
{
/* Convert the rotation amount into a specific unspec. */
- int rot = INTVAL (e.args[4]);
- e.args.ordered_remove (4);
- int unspec = (rot == 0 ? UNSPEC_COND_FCMLA
- : rot == 90 ? UNSPEC_COND_FCMLA90
- : rot == 180 ? UNSPEC_COND_FCMLA180
- : rot == 270 ? UNSPEC_COND_FCMLA270
- : (gcc_unreachable (), 0));
-
- /* Make the operand order the same as the one used by the fma optabs,
- with the accumulator last. */
- e.rotate_inputs_left (1, 4);
- return e.map_to_unspecs (-1, -1, unspec, 3);
+ int rot = INTVAL (e.args.pop ());
+ if (e.type_suffix (0).float_p)
+ {
+ /* Make the operand order the same as the one used by the fma optabs,
+ with the accumulator last. */
+ e.rotate_inputs_left (1, 4);
+ return e.map_to_unspecs (-1, -1, unspec_cond_fcmla (rot), 3);
+ }
+ else
+ {
+ int cmla = unspec_cmla (rot);
+ return e.map_to_unspecs (cmla, cmla, -1);
+ }
}
};
expand (function_expander &e) const OVERRIDE
{
/* Convert the rotation amount into a specific unspec. */
- int rot = INTVAL (e.args[4]);
- e.args.ordered_remove (4);
- int unspec = (rot == 0 ? UNSPEC_FCMLA
- : rot == 90 ? UNSPEC_FCMLA90
- : rot == 180 ? UNSPEC_FCMLA180
- : rot == 270 ? UNSPEC_FCMLA270
- : (gcc_unreachable (), 0));
-
- /* Make the operand order the same as the one used by the fma optabs,
- with the accumulator last. */
- e.rotate_inputs_left (0, 4);
- insn_code icode = code_for_aarch64_lane (unspec, e.vector_mode (0));
- return e.use_exact_insn (icode);
+ int rot = INTVAL (e.args.pop ());
+ machine_mode mode = e.vector_mode (0);
+ if (e.type_suffix (0).float_p)
+ {
+ /* Make the operand order the same as the one used by the fma optabs,
+ with the accumulator last. */
+ e.rotate_inputs_left (0, 4);
+ insn_code icode = code_for_aarch64_lane (unspec_fcmla (rot), mode);
+ return e.use_exact_insn (icode);
+ }
+ else
+ {
+ insn_code icode = code_for_aarch64_lane (unspec_cmla (rot), mode);
+ return e.use_exact_insn (icode);
+ }
}
};
}
};
-/* Base class for svmla_lane and svmls_lane. */
-class svmla_svmls_lane_impl : public function_base
+class svmla_lane_impl : public function_base
{
public:
- CONSTEXPR svmla_svmls_lane_impl (int unspec)
- : m_unspec (unspec) {}
-
rtx
expand (function_expander &e) const OVERRIDE
{
- /* Put the operands in the normal (fma ...) order, with the accumulator
- last. This fits naturally since that's also the unprinted operand
- in the asm output. */
- e.rotate_inputs_left (0, 4);
- insn_code icode = code_for_aarch64_lane (m_unspec, e.vector_mode (0));
- return e.use_exact_insn (icode);
+ if (e.type_suffix (0).integer_p)
+ {
+ machine_mode mode = e.vector_mode (0);
+ return e.use_exact_insn (code_for_aarch64_sve_add_mul_lane (mode));
+ }
+ return expand_mla_mls_lane (e, UNSPEC_FMLA);
}
-
- /* The unspec code associated with the operation. */
- int m_unspec;
};
class svmls_impl : public function_base
}
};
+class svmls_lane_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ if (e.type_suffix (0).integer_p)
+ {
+ machine_mode mode = e.vector_mode (0);
+ return e.use_exact_insn (code_for_aarch64_sve_sub_mul_lane (mode));
+ }
+ return expand_mla_mls_lane (e, UNSPEC_FMLS);
+ }
+};
+
class svmsb_impl : public function_base
{
public:
};
/* A function_base for svwhilele and svwhilelt functions. */
-class svwhile_impl : public function_base
+class svwhilelx_impl : public while_comparison
{
public:
- CONSTEXPR svwhile_impl (int unspec_for_sint, int unspec_for_uint, bool eq_p)
- : m_unspec_for_sint (unspec_for_sint),
- m_unspec_for_uint (unspec_for_uint), m_eq_p (eq_p)
+ CONSTEXPR svwhilelx_impl (int unspec_for_sint, int unspec_for_uint, bool eq_p)
+ : while_comparison (unspec_for_sint, unspec_for_uint), m_eq_p (eq_p)
{}
/* Try to fold a call by treating its arguments as constants of type T. */
return fold_type<poly_int64> (f);
}
- rtx
- expand (function_expander &e) const OVERRIDE
- {
- /* Suffix 0 determines the predicate mode, suffix 1 determines the
- scalar mode and signedness. */
- int unspec = (e.type_suffix (1).unsigned_p
- ? m_unspec_for_uint
- : m_unspec_for_sint);
- machine_mode pred_mode = e.vector_mode (0);
- scalar_mode reg_mode = GET_MODE_INNER (e.vector_mode (1));
- return e.use_exact_insn (code_for_while (unspec, reg_mode, pred_mode));
- }
-
- /* The unspec codes associated with signed and unsigned operations
- respectively. */
- int m_unspec_for_sint;
- int m_unspec_for_uint;
-
/* True svwhilele, false for svwhilelt. */
bool m_eq_p;
};
FUNCTION (svandv, reduction, (UNSPEC_ANDV))
FUNCTION (svasr, rtx_code_function, (ASHIFTRT, ASHIFTRT))
FUNCTION (svasr_wide, shift_wide, (ASHIFTRT, UNSPEC_ASHIFTRT_WIDE))
-FUNCTION (svasrd, svasrd_impl,)
+FUNCTION (svasrd, unspec_based_function, (UNSPEC_ASRD, -1, -1))
FUNCTION (svbic, svbic_impl,)
FUNCTION (svbrka, svbrk_unary_impl, (UNSPEC_BRKA))
FUNCTION (svbrkb, svbrk_unary_impl, (UNSPEC_BRKB))
FUNCTION (svminnmv, reduction, (UNSPEC_FMINNMV))
FUNCTION (svminv, reduction, (UNSPEC_SMINV, UNSPEC_UMINV, UNSPEC_FMINV))
FUNCTION (svmla, svmla_impl,)
-FUNCTION (svmla_lane, svmla_svmls_lane_impl, (UNSPEC_FMLA))
+FUNCTION (svmla_lane, svmla_lane_impl,)
FUNCTION (svmls, svmls_impl,)
-FUNCTION (svmls_lane, svmla_svmls_lane_impl, (UNSPEC_FMLS))
+FUNCTION (svmls_lane, svmls_lane_impl,)
FUNCTION (svmov, svmov_impl,)
FUNCTION (svmsb, svmsb_impl,)
FUNCTION (svmul, rtx_code_function, (MULT, MULT, UNSPEC_COND_FMUL))
FUNCTION (svqsub, rtx_code_function, (SS_MINUS, US_MINUS, -1))
FUNCTION (svrbit, unspec_based_function, (UNSPEC_RBIT, UNSPEC_RBIT, -1))
FUNCTION (svrdffr, svrdffr_impl,)
-FUNCTION (svrecpe, unspec_based_function, (-1, -1, UNSPEC_FRECPE))
+FUNCTION (svrecpe, unspec_based_function, (-1, UNSPEC_URECPE, UNSPEC_FRECPE))
FUNCTION (svrecps, unspec_based_function, (-1, -1, UNSPEC_FRECPS))
FUNCTION (svrecpx, unspec_based_function, (-1, -1, UNSPEC_COND_FRECPX))
FUNCTION (svreinterpret, svreinterpret_impl,)
FUNCTION (svrintp, unspec_based_function, (-1, -1, UNSPEC_COND_FRINTP))
FUNCTION (svrintx, unspec_based_function, (-1, -1, UNSPEC_COND_FRINTX))
FUNCTION (svrintz, unspec_based_function, (-1, -1, UNSPEC_COND_FRINTZ))
-FUNCTION (svrsqrte, unspec_based_function, (-1, -1, UNSPEC_RSQRTE))
+FUNCTION (svrsqrte, unspec_based_function, (-1, UNSPEC_RSQRTE, UNSPEC_RSQRTE))
FUNCTION (svrsqrts, unspec_based_function, (-1, -1, UNSPEC_RSQRTS))
FUNCTION (svscale, unspec_based_function, (-1, -1, UNSPEC_COND_FSCALE))
FUNCTION (svsel, svsel_impl,)
FUNCTION (svunpklo, svunpk_impl, (false))
FUNCTION (svuzp1, svuzp_impl, (0))
FUNCTION (svuzp2, svuzp_impl, (1))
-FUNCTION (svwhilele, svwhile_impl, (UNSPEC_WHILELE, UNSPEC_WHILELS, true))
-FUNCTION (svwhilelt, svwhile_impl, (UNSPEC_WHILELT, UNSPEC_WHILELO, false))
+FUNCTION (svwhilele, svwhilelx_impl, (UNSPEC_WHILELE, UNSPEC_WHILELS, true))
+FUNCTION (svwhilelt, svwhilelx_impl, (UNSPEC_WHILELT, UNSPEC_WHILELO, false))
FUNCTION (svwrffr, svwrffr_impl,)
FUNCTION (svzip1, svzip_impl, (0))
FUNCTION (svzip2, svzip_impl, (1))
scalar_int_mode m_to_mode;
};
-/* A function_base for functions that have an associated rtx code.
- It supports all forms of predication except PRED_implicit. */
-class rtx_code_function : public function_base
+/* An incomplete function_base for functions that have an associated rtx code.
+ It simply records information about the mapping for derived classes
+ to use. */
+class rtx_code_function_base : public function_base
{
public:
- CONSTEXPR rtx_code_function (rtx_code code_for_sint, rtx_code code_for_uint,
- int unspec_for_fp = -1)
+ CONSTEXPR rtx_code_function_base (rtx_code code_for_sint,
+ rtx_code code_for_uint,
+ int unspec_for_fp = -1)
: m_code_for_sint (code_for_sint), m_code_for_uint (code_for_uint),
m_unspec_for_fp (unspec_for_fp) {}
- rtx
- expand (function_expander &e) const OVERRIDE
- {
- return e.map_to_rtx_codes (m_code_for_sint, m_code_for_uint,
- m_unspec_for_fp);
- }
-
/* The rtx code to use for signed and unsigned integers respectively.
Can be UNKNOWN for functions that don't have integer forms. */
rtx_code m_code_for_sint;
int m_unspec_for_fp;
};
+/* A function_base for functions that have an associated rtx code.
+ It supports all forms of predication except PRED_implicit. */
+class rtx_code_function : public rtx_code_function_base
+{
+public:
+ CONSTEXPR rtx_code_function (rtx_code code_for_sint, rtx_code code_for_uint,
+ int unspec_for_fp = -1)
+ : rtx_code_function_base (code_for_sint, code_for_uint, unspec_for_fp) {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ return e.map_to_rtx_codes (m_code_for_sint, m_code_for_uint,
+ m_unspec_for_fp);
+ }
+};
+
/* Like rtx_code_function, but for functions that take what is normally
the final argument first. One use of this class is to handle binary
reversed operations; another is to handle MLA-style operations that
are normally expressed in GCC as MAD-style operations. */
-class rtx_code_function_rotated : public function_base
+class rtx_code_function_rotated : public rtx_code_function_base
{
public:
CONSTEXPR rtx_code_function_rotated (rtx_code code_for_sint,
rtx_code code_for_uint,
int unspec_for_fp = -1)
- : m_code_for_sint (code_for_sint), m_code_for_uint (code_for_uint),
- m_unspec_for_fp (unspec_for_fp) {}
+ : rtx_code_function_base (code_for_sint, code_for_uint, unspec_for_fp) {}
rtx
expand (function_expander &e) const OVERRIDE
return e.map_to_rtx_codes (m_code_for_sint, m_code_for_uint,
m_unspec_for_fp, nargs - 1);
}
+};
- /* The rtx code to use for signed and unsigned integers respectively.
- Can be UNKNOWN for functions that don't have integer forms. */
- rtx_code m_code_for_sint;
- rtx_code m_code_for_uint;
+/* An incomplete function_base for functions that have an associated
+ unspec code, with separate codes for signed integers, unsigned
+ integers and floating-point values. The class simply records
+ information about the mapping for derived classes to use. */
+class unspec_based_function_base : public function_base
+{
+public:
+ CONSTEXPR unspec_based_function_base (int unspec_for_sint,
+ int unspec_for_uint,
+ int unspec_for_fp)
+ : m_unspec_for_sint (unspec_for_sint),
+ m_unspec_for_uint (unspec_for_uint),
+ m_unspec_for_fp (unspec_for_fp)
+ {}
- /* The UNSPEC_COND_* to use for floating-point operations. Can be -1
- for functions that only operate on integers. */
+ /* Return the unspec code to use for INSTANCE, based on type suffix 0. */
+ int
+ unspec_for (const function_instance &instance) const
+ {
+ return (!instance.type_suffix (0).integer_p ? m_unspec_for_fp
+ : instance.type_suffix (0).unsigned_p ? m_unspec_for_uint
+ : m_unspec_for_sint);
+ }
+
+ /* The unspec code associated with signed-integer, unsigned-integer
+ and floating-point operations respectively. */
+ int m_unspec_for_sint;
+ int m_unspec_for_uint;
int m_unspec_for_fp;
};
/* A function_base for functions that have an associated unspec code.
It supports all forms of predication except PRED_implicit. */
-class unspec_based_function : public function_base
+class unspec_based_function : public unspec_based_function_base
{
public:
CONSTEXPR unspec_based_function (int unspec_for_sint, int unspec_for_uint,
int unspec_for_fp)
- : m_unspec_for_sint (unspec_for_sint),
- m_unspec_for_uint (unspec_for_uint),
- m_unspec_for_fp (unspec_for_fp)
+ : unspec_based_function_base (unspec_for_sint, unspec_for_uint,
+ unspec_for_fp)
{}
rtx
return e.map_to_unspecs (m_unspec_for_sint, m_unspec_for_uint,
m_unspec_for_fp);
}
-
- /* The unspec code associated with signed-integer, unsigned-integer
- and floating-point operations respectively. */
- int m_unspec_for_sint;
- int m_unspec_for_uint;
- int m_unspec_for_fp;
};
/* Like unspec_based_function, but for functions that take what is normally
the final argument first. One use of this class is to handle binary
reversed operations; another is to handle MLA-style operations that
are normally expressed in GCC as MAD-style operations. */
-class unspec_based_function_rotated : public function_base
+class unspec_based_function_rotated : public unspec_based_function_base
{
public:
CONSTEXPR unspec_based_function_rotated (int unspec_for_sint,
int unspec_for_uint,
int unspec_for_fp)
- : m_unspec_for_sint (unspec_for_sint),
- m_unspec_for_uint (unspec_for_uint),
- m_unspec_for_fp (unspec_for_fp)
+ : unspec_based_function_base (unspec_for_sint, unspec_for_uint,
+ unspec_for_fp)
{}
rtx
return e.map_to_unspecs (m_unspec_for_sint, m_unspec_for_uint,
m_unspec_for_fp, nargs - 1);
}
+};
- /* The unspec code associated with signed-integer, unsigned-integer
- and floating-point operations respectively. */
- int m_unspec_for_sint;
- int m_unspec_for_uint;
- int m_unspec_for_fp;
+/* Like unspec_based_function, but map the function directly to
+ CODE (UNSPEC, M) instead of using the generic predication-based
+ expansion. where M is the vector mode associated with type suffix 0.
+ This is useful if the unspec doesn't describe the full operation or
+ if the usual predication rules don't apply for some reason. */
+template<insn_code (*CODE) (int, machine_mode)>
+class unspec_based_function_exact_insn : public unspec_based_function_base
+{
+public:
+ CONSTEXPR unspec_based_function_exact_insn (int unspec_for_sint,
+ int unspec_for_uint,
+ int unspec_for_fp)
+ : unspec_based_function_base (unspec_for_sint, unspec_for_uint,
+ unspec_for_fp)
+ {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ return e.use_exact_insn (CODE (unspec_for (e), e.vector_mode (0)));
+ }
+};
+
+/* A function that performs an unspec and then adds it to another value. */
+typedef unspec_based_function_exact_insn<code_for_aarch64_sve_add>
+ unspec_based_add_function;
+typedef unspec_based_function_exact_insn<code_for_aarch64_sve_add_lane>
+ unspec_based_add_lane_function;
+
+/* Generic unspec-based _lane function. */
+typedef unspec_based_function_exact_insn<code_for_aarch64_sve_lane>
+ unspec_based_lane_function;
+
+/* A functon that uses aarch64_pred* patterns regardless of the
+ predication type. */
+typedef unspec_based_function_exact_insn<code_for_aarch64_pred>
+ unspec_based_pred_function;
+
+/* Like unspec_based_add_function and unspec_based_add_lane_function,
+ but using saturating addition. */
+typedef unspec_based_function_exact_insn<code_for_aarch64_sve_qadd>
+ unspec_based_qadd_function;
+typedef unspec_based_function_exact_insn<code_for_aarch64_sve_qadd_lane>
+ unspec_based_qadd_lane_function;
+
+/* Like unspec_based_sub_function and unspec_based_sub_lane_function,
+ but using saturating subtraction. */
+typedef unspec_based_function_exact_insn<code_for_aarch64_sve_qsub>
+ unspec_based_qsub_function;
+typedef unspec_based_function_exact_insn<code_for_aarch64_sve_qsub_lane>
+ unspec_based_qsub_lane_function;
+
+/* A function that performs an unspec and then subtracts it from
+ another value. */
+typedef unspec_based_function_exact_insn<code_for_aarch64_sve_sub>
+ unspec_based_sub_function;
+typedef unspec_based_function_exact_insn<code_for_aarch64_sve_sub_lane>
+ unspec_based_sub_lane_function;
+
+/* A function that acts like unspec_based_function_exact_insn<INT_CODE>
+ when operating on integers, but that expands to an (fma ...)-style
+ aarch64_sve* operation when applied to floats. */
+template<insn_code (*INT_CODE) (int, machine_mode)>
+class unspec_based_fused_function : public unspec_based_function_base
+{
+public:
+ CONSTEXPR unspec_based_fused_function (int unspec_for_sint,
+ int unspec_for_uint,
+ int unspec_for_fp)
+ : unspec_based_function_base (unspec_for_sint, unspec_for_uint,
+ unspec_for_fp)
+ {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ int unspec = unspec_for (e);
+ insn_code icode;
+ if (e.type_suffix (0).float_p)
+ {
+ /* Put the operands in the normal (fma ...) order, with the accumulator
+ last. This fits naturally since that's also the unprinted operand
+ in the asm output. */
+ e.rotate_inputs_left (0, e.pred != PRED_none ? 4 : 3);
+ icode = code_for_aarch64_sve (unspec, e.vector_mode (0));
+ }
+ else
+ icode = INT_CODE (unspec, e.vector_mode (0));
+ return e.use_exact_insn (icode);
+ }
+};
+typedef unspec_based_fused_function<code_for_aarch64_sve_add>
+ unspec_based_mla_function;
+typedef unspec_based_fused_function<code_for_aarch64_sve_sub>
+ unspec_based_mls_function;
+
+/* Like unspec_based_fused_function, but for _lane functions. */
+template<insn_code (*INT_CODE) (int, machine_mode)>
+class unspec_based_fused_lane_function : public unspec_based_function_base
+{
+public:
+ CONSTEXPR unspec_based_fused_lane_function (int unspec_for_sint,
+ int unspec_for_uint,
+ int unspec_for_fp)
+ : unspec_based_function_base (unspec_for_sint, unspec_for_uint,
+ unspec_for_fp)
+ {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ int unspec = unspec_for (e);
+ insn_code icode;
+ if (e.type_suffix (0).float_p)
+ {
+ /* Put the operands in the normal (fma ...) order, with the accumulator
+ last. This fits naturally since that's also the unprinted operand
+ in the asm output. */
+ e.rotate_inputs_left (0, e.pred != PRED_none ? 5 : 4);
+ icode = code_for_aarch64_lane (unspec, e.vector_mode (0));
+ }
+ else
+ icode = INT_CODE (unspec, e.vector_mode (0));
+ return e.use_exact_insn (icode);
+ }
};
+typedef unspec_based_fused_lane_function<code_for_aarch64_sve_add_lane>
+ unspec_based_mla_lane_function;
+typedef unspec_based_fused_lane_function<code_for_aarch64_sve_sub_lane>
+ unspec_based_mls_lane_function;
/* A function_base that uses CODE_FOR_MODE (M) to get the associated
instruction code, where M is the vector mode associated with type
mode associated with the first type suffix. */
#define CODE_FOR_MODE0(PATTERN) code_for_mode_function<code_for_##PATTERN, 0>
+/* Likewise for the second type suffix. */
+#define CODE_FOR_MODE1(PATTERN) code_for_mode_function<code_for_##PATTERN, 1>
+
/* Like CODE_FOR_MODE0, but the function doesn't raise exceptions when
operating on floating-point data. */
#define QUIET_CODE_FOR_MODE0(PATTERN) \
quiet< code_for_mode_function<code_for_##PATTERN, 0> >
+/* A function_base for functions that always expand to a fixed insn pattern,
+ regardless of what the suffixes are. */
+class fixed_insn_function : public function_base
+{
+public:
+ CONSTEXPR fixed_insn_function (insn_code code) : m_code (code) {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ return e.use_exact_insn (m_code);
+ }
+
+ /* The instruction to use. */
+ insn_code m_code;
+};
+
/* A function_base for functions that permute their arguments. */
class permute : public quiet<function_base>
{
rtx_code m_code;
};
+/* A function_base for svwhile* functions. */
+class while_comparison : public function_base
+{
+public:
+ CONSTEXPR while_comparison (int unspec_for_sint, int unspec_for_uint)
+ : m_unspec_for_sint (unspec_for_sint),
+ m_unspec_for_uint (unspec_for_uint)
+ {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ /* Suffix 0 determines the predicate mode, suffix 1 determines the
+ scalar mode and signedness. */
+ int unspec = (e.type_suffix (1).unsigned_p
+ ? m_unspec_for_uint
+ : m_unspec_for_sint);
+ machine_mode pred_mode = e.vector_mode (0);
+ scalar_mode reg_mode = GET_MODE_INNER (e.vector_mode (1));
+ return e.use_exact_insn (code_for_while (unspec, reg_mode, pred_mode));
+ }
+
+ /* The unspec codes associated with signed and unsigned operations
+ respectively. */
+ int m_unspec_for_sint;
+ int m_unspec_for_uint;
+};
+
}
/* Declare the global function base NAME, creating it from an instance
{
argument_types.quick_insert (0, get_svbool_t ());
/* For unary merge operations, the first argument is a vector with
- the same type as the result. */
- if (argument_types.length () == 2 && instance.pred == PRED_m)
+ the same type as the result. For unary_convert_narrowt it also
+ provides the "bottom" half of active elements, and is present
+ for all types of predication. */
+ if ((argument_types.length () == 2 && instance.pred == PRED_m)
+ || instance.shape == shapes::unary_convert_narrowt)
argument_types.quick_insert (0, return_type);
}
}
group.required_extensions, force_direct_overloads);
}
-/* Add a function instance for every type and predicate combination
- in GROUP, which describes some sort of gather or scatter operation.
- If the function has any type suffixes (as for loads and stores),
- the first function type suffix specifies either a 32-bit or a 64-bit
- type; use MODE32 for the former and MODE64 for the latter. If the
- function has no type suffixes (as for prefetches), add one MODE32 form
- and one MODE64 form for each predication type.
+/* GROUP describes some sort of gather or scatter operation. There are
+ two cases:
+
+ - If the function has any type suffixes (as for loads and stores), the
+ first function type suffix specifies either a 32-bit or a 64-bit type,
+ which in turn selects either MODE32 or MODE64 as the addressing mode.
+ Add a function instance for every type and predicate combination
+ in GROUP for which the associated addressing mode is not MODE_none.
+
+ - If the function has no type suffixes (as for prefetches), add one
+ MODE32 form and one MODE64 form for each predication type.
The other arguments are as for build_all. */
static void
for (unsigned int pi = 0; group.preds[pi] != NUM_PREDS; ++pi)
if (group.types[0][0] == NUM_TYPE_SUFFIXES)
{
+ gcc_assert (mode32 != MODE_none && mode64 != MODE_none);
build_one (b, signature, group, mode32, 0, pi,
force_direct_overloads);
build_one (b, signature, group, mode64, 0, pi,
unsigned int bits = type_suffixes[group.types[ti][0]].element_bits;
gcc_assert (bits == 32 || bits == 64);
mode_suffix_index mode = bits == 32 ? mode32 : mode64;
- build_one (b, signature, group, mode, ti, pi,
- force_direct_overloads);
+ if (mode != MODE_none)
+ build_one (b, signature, group, mode, ti, pi,
+ force_direct_overloads);
}
}
build_32_64 (b, signature, group, MODE_u32index, MODE_u64index);
}
+/* Like build_sv_index, but only handle 64-bit types. */
+static void
+build_sv_index64 (function_builder &b, const char *signature,
+ const function_group_info &group)
+{
+ build_32_64 (b, signature, group, MODE_none, MODE_s64index);
+ build_32_64 (b, signature, group, MODE_none, MODE_u64index);
+}
+
/* Like build_sv_index, but taking vector byte offsets instead of vector
array indices. */
static void
build_32_64 (b, signature, group, MODE_u32offset, MODE_u64offset);
}
+/* Like build_sv_offset, but exclude offsets that must be interpreted
+ as signed (i.e. s32offset). */
+static void
+build_sv_uint_offset (function_builder &b, const char *signature,
+ const function_group_info &group)
+{
+ build_32_64 (b, signature, group, MODE_none, MODE_s64offset);
+ build_32_64 (b, signature, group, MODE_u32offset, MODE_u64offset);
+}
+
/* For every type and predicate combination in GROUP, add a function
that takes a vector base address and no displacement. The vector
base has the same element size as the first type suffix.
force_direct_overloads);
}
+/* TYPE is the largest type suffix associated with the arguments of R,
+ but the result is twice as wide. Return the associated type suffix
+ if it exists, otherwise report an appropriate error and return
+ NUM_TYPE_SUFFIXES. */
+static type_suffix_index
+long_type_suffix (function_resolver &r, type_suffix_index type)
+{
+ unsigned int element_bits = type_suffixes[type].element_bits;
+ if (type_suffixes[type].integer_p && element_bits < 64)
+ return find_type_suffix (type_suffixes[type].tclass, element_bits * 2);
+
+ r.report_no_such_form (type);
+ return NUM_TYPE_SUFFIXES;
+}
+
/* Declare the function shape NAME, pointing it to an instance
of class <NAME>_def. */
#define SHAPE(NAME) \
};
};
+/* Base class for narrowing bottom binary functions that take an
+ immediate second operand. The result is half the size of input
+ and has class CLASS. */
+template<type_class_index CLASS = function_resolver::SAME_TYPE_CLASS>
+struct binary_imm_narrowb_base : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_n);
+ STATIC_ASSERT (CLASS == function_resolver::SAME_TYPE_CLASS
+ || CLASS == TYPE_unsigned);
+ if (CLASS == TYPE_unsigned)
+ build_all (b, "vhu0,v0,su64", group, MODE_n);
+ else
+ build_all (b, "vh0,v0,su64", group, MODE_n);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_uniform (1, 1);
+ }
+};
+
+/* The top equivalent of binary_imm_narrowb_base. It takes three arguments,
+ with the first being the values of the even elements, which are typically
+ the result of the narrowb operation. */
+template<type_class_index CLASS = function_resolver::SAME_TYPE_CLASS>
+struct binary_imm_narrowt_base : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_n);
+ STATIC_ASSERT (CLASS == function_resolver::SAME_TYPE_CLASS
+ || CLASS == TYPE_unsigned);
+ if (CLASS == TYPE_unsigned)
+ build_all (b, "vhu0,vhu0,v0,su64", group, MODE_n);
+ else
+ build_all (b, "vh0,vh0,v0,su64", group, MODE_n);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (3, i, nargs)
+ || (type = r.infer_vector_type (i + 1)) == NUM_TYPE_SUFFIXES
+ || !r.require_derived_vector_type (i, i + 1, type, CLASS, r.HALF_SIZE)
+ || !r.require_integer_immediate (i + 2))
+ return error_mark_node;
+
+ return r.resolve_to (r.mode_suffix_id, type);
+ }
+};
+
+/* Base class for long (i.e. narrow op narrow -> wide) binary functions
+ that take an immediate second operand. The type suffix specifies
+ the wider type. */
+struct binary_imm_long_base : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_n);
+ build_all (b, "v0,vh0,su64", group, MODE_n);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type, result_type;
+ if (!r.check_gp_argument (2, i, nargs)
+ || (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
+ || !r.require_integer_immediate (i + 1)
+ || (result_type = long_type_suffix (r, type)) == NUM_TYPE_SUFFIXES)
+ return error_mark_node;
+
+ if (tree res = r.lookup_form (r.mode_suffix_id, result_type))
+ return res;
+
+ return r.report_no_such_form (type);
+ }
+};
+
/* Base class for inc_dec and inc_dec_pat. */
struct inc_dec_base : public overloaded_base<0>
{
}
};
+/* Base class for gather loads that take a scalar base and a vector
+ displacement (either an offset or an index). */
+struct load_gather_sv_base : public overloaded_base<0>
+{
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ mode_suffix_index mode;
+ type_suffix_index type;
+ if (!r.check_gp_argument (2, i, nargs)
+ || (type = r.infer_pointer_type (i, true)) == NUM_TYPE_SUFFIXES
+ || (mode = r.resolve_sv_displacement (i + 1, type, true),
+ mode == MODE_none))
+ return error_mark_node;
+
+ return r.resolve_to (mode, type);
+ }
+};
+
/* Base class for load_ext_gather_index and load_ext_gather_offset,
which differ only in the units of the displacement. */
struct load_ext_gather_base : public overloaded_base<1>
}
};
+/* Wraps BASE to provide a narrowing shift right function. Argument N
+ is an immediate shift amount in the range [1, sizeof(<t0>_t) * 4]. */
+template<typename BASE, unsigned int N>
+struct shift_right_imm_narrow_wrapper : public BASE
+{
+ bool
+ check (function_checker &c) const OVERRIDE
+ {
+ unsigned int bits = c.type_suffix (0).element_bits / 2;
+ return c.require_immediate_range (N, 1, bits);
+ }
+};
+
/* Base class for store_scatter_index and store_scatter_offset,
which differ only in the units of the displacement. */
struct store_scatter_base : public overloaded_base<0>
}
};
+/* Base class for ternary operations in which the final argument is an
+ immediate shift amount. The derived class should check the range. */
+struct ternary_shift_imm_base : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_n);
+ build_all (b, "v0,v0,v0,su64", group, MODE_n);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_uniform (2, 1);
+ }
+};
+
+/* Base class for ternary operations in which the first argument has the
+ same element type as the result, and in which the second and third
+ arguments have an element type that is derived the first. MODIFIER
+ is the number of element bits in the second and third arguments,
+ or a function_resolver modifier that says how this precision is
+ derived from the first argument's elements. */
+template<unsigned int MODIFIER>
+struct ternary_resize2_opt_n_base : public overloaded_base<0>
+{
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (3, i, nargs)
+ || (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
+ || !r.require_derived_vector_type (i + 1, i, type, r.SAME_TYPE_CLASS,
+ MODIFIER))
+ return error_mark_node;
+
+ return r.finish_opt_n_resolution (i + 2, i, type, r.SAME_TYPE_CLASS,
+ MODIFIER);
+ }
+};
+
+/* Like ternary_resize2_opt_n_base, but for functions that take a final
+ lane argument. */
+template<unsigned int MODIFIER>
+struct ternary_resize2_lane_base : public overloaded_base<0>
+{
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (4, i, nargs)
+ || (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
+ || !r.require_derived_vector_type (i + 1, i, type, r.SAME_TYPE_CLASS,
+ MODIFIER)
+ || !r.require_derived_vector_type (i + 2, i, type, r.SAME_TYPE_CLASS,
+ MODIFIER)
+ || !r.require_integer_immediate (i + 3))
+ return error_mark_node;
+
+ return r.resolve_to (r.mode_suffix_id, type);
+ }
+};
+
+/* Base class for narrowing bottom unary functions. The result is half
+ the size of input and has class CLASS. */
+template<type_class_index CLASS = function_resolver::SAME_TYPE_CLASS>
+struct unary_narrowb_base : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ STATIC_ASSERT (CLASS == function_resolver::SAME_TYPE_CLASS
+ || CLASS == TYPE_unsigned);
+ if (CLASS == TYPE_unsigned)
+ build_all (b, "vhu0,v0", group, MODE_none);
+ else
+ build_all (b, "vh0,v0", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_unary (CLASS, r.HALF_SIZE);
+ }
+};
+
+/* The top equivalent of unary_imm_narrowb_base. All forms take the values
+ of the even elements as an extra argument, before any governing predicate.
+ These even elements are typically the result of the narrowb operation. */
+template<type_class_index CLASS = function_resolver::SAME_TYPE_CLASS>
+struct unary_narrowt_base : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ STATIC_ASSERT (CLASS == function_resolver::SAME_TYPE_CLASS
+ || CLASS == TYPE_unsigned);
+ if (CLASS == TYPE_unsigned)
+ build_all (b, "vhu0,vhu0,v0", group, MODE_none);
+ else
+ build_all (b, "vh0,vh0,v0", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (2, i, nargs)
+ || (type = r.infer_vector_type (i + 1)) == NUM_TYPE_SUFFIXES
+ || !r.require_derived_vector_type (i, i + 1, type, CLASS, r.HALF_SIZE))
+ return error_mark_node;
+
+ return r.resolve_to (r.mode_suffix_id, type);
+ }
+};
+
/* sv<m0>_t svfoo[_m0base]_[m1]index(sv<m0>_t, sv<m1>_t)
for all valid combinations of vector base type <m0> and vector
};
SHAPE (binary_lane)
+/* sv<t0>_t svfoo[_t0](sv<t0:half>_t, sv<t0:half>_t, uint64_t).
+
+ where the final argument is an integer constant expression in the
+ range [0, 32 / sizeof (<t0>_t) - 1]. */
+struct binary_long_lane_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,vh0,vh0,su64", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type, result_type;
+ if (!r.check_gp_argument (3, i, nargs)
+ || (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
+ || !r.require_matching_vector_type (i + 1, type)
+ || !r.require_integer_immediate (i + 2)
+ || (result_type = long_type_suffix (r, type)) == NUM_TYPE_SUFFIXES)
+ return error_mark_node;
+
+ if (tree res = r.lookup_form (r.mode_suffix_id, result_type))
+ return res;
+
+ return r.report_no_such_form (type);
+ }
+
+ bool
+ check (function_checker &c) const OVERRIDE
+ {
+ return c.require_immediate_lane_index (2);
+ }
+};
+SHAPE (binary_long_lane)
+
+/* sv<t0>_t svfoo[_t0](sv<t0:half>_t, sv<t0:half>_t)
+ sv<t0>_t svfoo[_n_t0](sv<t0:half>_t, <t0:half>_t). */
+struct binary_long_opt_n_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,vh0,vh0", group, MODE_none);
+ build_all (b, "v0,vh0,sh0", group, MODE_n);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type, result_type;
+ if (!r.check_gp_argument (2, i, nargs)
+ || (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
+ || (result_type = long_type_suffix (r, type)) == NUM_TYPE_SUFFIXES)
+ return error_mark_node;
+
+ return r.finish_opt_n_resolution (i + 1, i, type, r.SAME_TYPE_CLASS,
+ r.SAME_SIZE, result_type);
+ }
+};
+SHAPE (binary_long_opt_n)
+
/* sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0>_t).
i.e. a binary operation in which the final argument is always a scalar
};
SHAPE (binary_n)
-/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
- sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
+/* sv<t0:half>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
+ sv<t0:half>_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
- i.e. the standard shape for binary operations that operate on
- uniform types. */
-struct binary_opt_n_def : public overloaded_base<0>
+ i.e. a version of binary_opt_n in which the output elements are half the
+ width of the input elements. */
+struct binary_narrowb_opt_n_def : public overloaded_base<0>
{
void
build (function_builder &b, const function_group_info &group) const OVERRIDE
{
b.add_overloaded_functions (group, MODE_none);
- build_all (b, "v0,v0,v0", group, MODE_none);
- /* _b functions do not have an _n form, but are classified as
- binary_opt_n so that they can be overloaded with vector
- functions. */
- if (group.types[0][0] == TYPE_SUFFIX_b)
- gcc_assert (group.types[0][1] == NUM_TYPE_SUFFIXES);
- else
- build_all (b, "v0,v0,s0", group, MODE_n);
+ build_all (b, "vh0,v0,v0", group, MODE_none);
+ build_all (b, "vh0,v0,s0", group, MODE_n);
}
tree
return r.resolve_uniform_opt_n (2);
}
};
-SHAPE (binary_opt_n)
-
-/* svbool_t svfoo(svbool_t, svbool_t). */
-struct binary_pred_def : public nonoverloaded_base
-{
- void
- build (function_builder &b, const function_group_info &group) const OVERRIDE
- {
- build_all (b, "v0,v0,v0", group, MODE_none);
- }
-};
-SHAPE (binary_pred)
+SHAPE (binary_narrowb_opt_n)
-/* sv<t0>_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, uint64_t)
+/* sv<t0:half>_t svfoo[_t0](sv<t0:half>_t, sv<t0>_t, sv<t0>_t)
+ sv<t0:half>_t svfoo[_n_t0](sv<t0:half>_t, sv<t0>_t, <t0>_t)
- where the final argument must be 90 or 270. */
-struct binary_rotate_def : public overloaded_base<0>
+ This is the "top" counterpart to binary_narrowb_opt_n. */
+struct binary_narrowt_opt_n_def : public overloaded_base<0>
{
void
build (function_builder &b, const function_group_info &group) const OVERRIDE
{
b.add_overloaded_functions (group, MODE_none);
- build_all (b, "v0,v0,v0,su64", group, MODE_none);
+ build_all (b, "vh0,vh0,v0,v0", group, MODE_none);
+ build_all (b, "vh0,vh0,v0,s0", group, MODE_n);
}
tree
resolve (function_resolver &r) const OVERRIDE
{
- return r.resolve_uniform (2, 1);
- }
-
- bool
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (3, i, nargs)
+ || (type = r.infer_vector_type (i + 1)) == NUM_TYPE_SUFFIXES
+ || !r.require_derived_vector_type (i, i + 1, type, r.SAME_TYPE_CLASS,
+ r.HALF_SIZE))
+ return error_mark_node;
+
+ return r.finish_opt_n_resolution (i + 2, i + 1, type);
+ }
+};
+SHAPE (binary_narrowt_opt_n)
+
+/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
+ sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
+
+ i.e. the standard shape for binary operations that operate on
+ uniform types. */
+struct binary_opt_n_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v0,v0", group, MODE_none);
+ /* _b functions do not have an _n form, but are classified as
+ binary_opt_n so that they can be overloaded with vector
+ functions. */
+ if (group.types[0][0] == TYPE_SUFFIX_b)
+ gcc_assert (group.types[0][1] == NUM_TYPE_SUFFIXES);
+ else
+ build_all (b, "v0,v0,s0", group, MODE_n);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_uniform_opt_n (2);
+ }
+};
+SHAPE (binary_opt_n)
+
+/* svbool_t svfoo(svbool_t, svbool_t). */
+struct binary_pred_def : public nonoverloaded_base
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ build_all (b, "v0,v0,v0", group, MODE_none);
+ }
+};
+SHAPE (binary_pred)
+
+/* sv<t0>_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, uint64_t)
+
+ where the final argument must be 90 or 270. */
+struct binary_rotate_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v0,v0,su64", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_uniform (2, 1);
+ }
+
+ bool
check (function_checker &c) const OVERRIDE
{
return c.require_immediate_either_or (2, 90, 270);
};
SHAPE (binary_scalar)
+/* sv<t0:uint>_t svfoo[_t0](sv<t0>_t, sv<t0>_t).
+
+ i.e. a version of "binary" that returns unsigned integers. */
+struct binary_to_uint_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "vu0,v0,v0", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_uniform (2);
+ }
+};
+SHAPE (binary_to_uint)
+
/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:uint>_t)
i.e. a version of "binary" in which the final argument is always an
};
SHAPE (binary_uint64_opt_n)
+/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t). */
+struct binary_wide_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v0,vh0", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (2, i, nargs)
+ || (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
+ || !r.require_derived_vector_type (i + 1, i, type, r.SAME_TYPE_CLASS,
+ r.HALF_SIZE))
+ return error_mark_node;
+
+ return r.resolve_to (r.mode_suffix_id, type);
+ }
+};
+SHAPE (binary_wide)
+
+/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t)
+ sv<t0>_t svfoo[_n_t0](sv<t0>_t, <t0:half>_t). */
+struct binary_wide_opt_n_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v0,vh0", group, MODE_none);
+ build_all (b, "v0,v0,sh0", group, MODE_n);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (2, i, nargs)
+ || (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES)
+ return error_mark_node;
+
+ return r.finish_opt_n_resolution (i + 1, i, type, r.SAME_TYPE_CLASS,
+ r.HALF_SIZE);
+ }
+};
+SHAPE (binary_wide_opt_n)
+
/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
<t0>_t svfoo[_n_t0](<t0>_t, sv<t0>_t). */
struct clast_def : public overloaded_base<0>
};
SHAPE (clast)
+/* svbool_t svfoo[_t0](sv<t0>_t, sv<t0>_t). */
+struct compare_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "vp,v0,v0", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_uniform (2);
+ }
+};
+SHAPE (compare)
+
/* svbool_t svfoo[_t0](sv<t0>_t, sv<t0>_t)
svbool_t svfoo[_n_t0](sv<t0>_t, <t0>_t)
};
SHAPE (compare_opt_n)
+/* svbool_t svfoo[_t0](const <t0>_t *, const <t0>_t *). */
+struct compare_ptr_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "vp,al,al", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (2, i, nargs)
+ || (type = r.infer_pointer_type (i)) == NUM_TYPE_SUFFIXES
+ || !r.require_matching_pointer_type (i + 1, i, type))
+ return error_mark_node;
+
+ return r.resolve_to (r.mode_suffix_id, type);
+ }
+};
+SHAPE (compare_ptr)
+
/* svbool_t svfoo_t0[_t1](<t1>_t, <t1>_t)
where _t0 is a _b<bits> suffix that describes the predicate result.
};
SHAPE (load_ext_gather_index)
+/* sv<t0>_t svfoo_[s64]index_t0(const <X>_t *, svint64_t)
+ sv<t0>_t svfoo_[u64]index_t0(const <X>_t *, svuint64_t)
+
+ sv<t0>_t svfoo[_u32base]_index_t0(svuint32_t, int64_t)
+ sv<t0>_t svfoo[_u64base]_index_t0(svuint64_t, int64_t)
+
+ where <X> is determined by the function base name. This is
+ load_ext_gather_index that doesn't support 32-bit vector indices. */
+struct load_ext_gather_index_restricted_def : public load_ext_gather_base
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_index);
+ build_sv_index64 (b, "t0,al,d", group);
+ build_vs_index (b, "t0,b,ss64", group);
+ }
+};
+SHAPE (load_ext_gather_index_restricted)
+
/* sv<t0>_t svfoo_[s32]offset_t0(const <X>_t *, svint32_t)
sv<t0>_t svfoo_[s64]offset_t0(const <X>_t *, svint64_t)
sv<t0>_t svfoo_[u32]offset_t0(const <X>_t *, svuint32_t)
};
SHAPE (load_ext_gather_offset)
+/* sv<t0>_t svfoo_[s64]offset_t0(const <X>_t *, svint64_t)
+ sv<t0>_t svfoo_[u32]offset_t0(const <X>_t *, svuint32_t)
+ sv<t0>_t svfoo_[u64]offset_t0(const <X>_t *, svuint64_t)
+
+ sv<t0>_t svfoo[_u32base]_t0(svuint32_t)
+ sv<t0>_t svfoo[_u64base]_t0(svuint64_t)
+
+ sv<t0>_t svfoo[_u32base]_offset_t0(svuint32_t, int64_t)
+ sv<t0>_t svfoo[_u64base]_offset_t0(svuint64_t, int64_t)
+
+ where <X> is determined by the function base name. This is
+ load_ext_gather_offset without the s32 vector offset form. */
+struct load_ext_gather_offset_restricted_def : public load_ext_gather_base
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_offset);
+ build_sv_uint_offset (b, "t0,al,d", group);
+ build_v_base (b, "t0,b", group, true);
+ build_vs_offset (b, "t0,b,ss64", group);
+ }
+};
+SHAPE (load_ext_gather_offset_restricted)
+
/* sv<t0>_t svfoo_[s32]index[_t0](const <t0>_t *, svint32_t)
sv<t0>_t svfoo_[s64]index[_t0](const <t0>_t *, svint64_t)
sv<t0>_t svfoo_[u32]index[_t0](const <t0>_t *, svuint32_t)
sv<t0>_t svfoo_[s64]offset[_t0](const <t0>_t *, svint64_t)
sv<t0>_t svfoo_[u32]offset[_t0](const <t0>_t *, svuint32_t)
sv<t0>_t svfoo_[u64]offset[_t0](const <t0>_t *, svuint64_t). */
-struct load_gather_sv_def : public overloaded_base<0>
+struct load_gather_sv_def : public load_gather_sv_base
{
void
build (function_builder &b, const function_group_info &group) const OVERRIDE
build_sv_index (b, "t0,al,d", group);
build_sv_offset (b, "t0,al,d", group);
}
+};
+SHAPE (load_gather_sv)
- tree
- resolve (function_resolver &r) const OVERRIDE
- {
- unsigned int i, nargs;
- mode_suffix_index mode;
- type_suffix_index type;
- if (!r.check_gp_argument (2, i, nargs)
- || (type = r.infer_pointer_type (i, true)) == NUM_TYPE_SUFFIXES
- || (mode = r.resolve_sv_displacement (i + 1, type, true),
- mode == MODE_none))
- return error_mark_node;
+/* sv<t0>_t svfoo_[u32]index[_t0](const <t0>_t *, svuint32_t)
+ sv<t0>_t svfoo_[u64]index[_t0](const <t0>_t *, svuint64_t)
- return r.resolve_to (mode, type);
+ sv<t0>_t svfoo_[s64]offset[_t0](const <t0>_t *, svint64_t)
+ sv<t0>_t svfoo_[u32]offset[_t0](const <t0>_t *, svuint32_t)
+ sv<t0>_t svfoo_[u64]offset[_t0](const <t0>_t *, svuint64_t)
+
+ This is load_gather_sv without the 32-bit vector index forms and
+ without the s32 vector offset form. */
+struct load_gather_sv_restricted_def : public load_gather_sv_base
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_index);
+ b.add_overloaded_functions (group, MODE_offset);
+ build_sv_index64 (b, "t0,al,d", group);
+ build_sv_uint_offset (b, "t0,al,d", group);
}
};
-SHAPE (load_gather_sv)
+SHAPE (load_gather_sv_restricted)
/* sv<t0>_t svfoo[_u32base]_t0(svuint32_t)
sv<t0>_t svfoo[_u64base]_t0(svuint64_t)
/* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
where the final argument must be an integer constant expression in the
+ range [0, sizeof (<t0>_t) * 8 - 1]. */
+struct shift_left_imm_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_n);
+ build_all (b, "v0,v0,su64", group, MODE_n);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_uniform (1, 1);
+ }
+
+ bool
+ check (function_checker &c) const OVERRIDE
+ {
+ unsigned int bits = c.type_suffix (0).element_bits;
+ return c.require_immediate_range (1, 0, bits - 1);
+ }
+};
+SHAPE (shift_left_imm)
+
+/* sv<t0>_t svfoo[_n_t0])(sv<t0:half>_t, uint64_t)
+
+ where the final argument must be an integer constant expression in the
+ range [0, sizeof (<t0>_t) * 4 - 1]. */
+struct shift_left_imm_long_def : public binary_imm_long_base
+{
+ bool
+ check (function_checker &c) const OVERRIDE
+ {
+ unsigned int bits = c.type_suffix (0).element_bits / 2;
+ return c.require_immediate_range (1, 0, bits - 1);
+ }
+};
+SHAPE (shift_left_imm_long)
+
+/* sv<t0:uint>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
+
+ where the final argument must be an integer constant expression in the
+ range [0, sizeof (<t0>_t) * 8 - 1]. */
+struct shift_left_imm_to_uint_def : public shift_left_imm_def
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_n);
+ build_all (b, "vu0,v0,su64", group, MODE_n);
+ }
+};
+SHAPE (shift_left_imm_to_uint)
+
+/* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
+
+ where the final argument must be an integer constant expression in the
range [1, sizeof (<t0>_t) * 8]. */
struct shift_right_imm_def : public overloaded_base<0>
{
};
SHAPE (shift_right_imm)
+/* sv<t0:half>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
+
+ where the final argument must be an integer constant expression in the
+ range [1, sizeof (<t0>_t) * 4]. */
+typedef shift_right_imm_narrow_wrapper<binary_imm_narrowb_base<>, 1>
+ shift_right_imm_narrowb_def;
+SHAPE (shift_right_imm_narrowb)
+
+/* sv<t0:half>_t svfoo[_n_t0])(sv<t0:half>_t, sv<t0>_t, uint64_t)
+
+ where the final argument must be an integer constant expression in the
+ range [1, sizeof (<t0>_t) * 4]. */
+typedef shift_right_imm_narrow_wrapper<binary_imm_narrowt_base<>, 2>
+ shift_right_imm_narrowt_def;
+SHAPE (shift_right_imm_narrowt)
+
+/* sv<t0:uint:half>_t svfoo[_n_t0])(sv<t0>_t, uint64_t)
+
+ where the final argument must be an integer constant expression in the
+ range [1, sizeof (<t0>_t) * 4]. */
+typedef binary_imm_narrowb_base<TYPE_unsigned>
+ binary_imm_narrowb_base_unsigned;
+typedef shift_right_imm_narrow_wrapper<binary_imm_narrowb_base_unsigned, 1>
+ shift_right_imm_narrowb_to_uint_def;
+SHAPE (shift_right_imm_narrowb_to_uint)
+
+/* sv<t0:uint:half>_t svfoo[_n_t0])(sv<t0:uint:half>_t, sv<t0>_t, uint64_t)
+
+ where the final argument must be an integer constant expression in the
+ range [1, sizeof (<t0>_t) * 4]. */
+typedef binary_imm_narrowt_base<TYPE_unsigned>
+ binary_imm_narrowt_base_unsigned;
+typedef shift_right_imm_narrow_wrapper<binary_imm_narrowt_base_unsigned, 2>
+ shift_right_imm_narrowt_to_uint_def;
+SHAPE (shift_right_imm_narrowt_to_uint)
+
/* void svfoo[_t0](<X>_t *, sv<t0>[xN]_t)
void svfoo_vnum[_t0](<X>_t *, int64_t, sv<t0>[xN]_t)
};
SHAPE (store_scatter_index)
+/* void svfoo_[s64]index[_t0](<X>_t *, svint64_t, sv<t0>_t)
+ void svfoo_[u64]index[_t0](<X>_t *, svuint64_t, sv<t0>_t)
+
+ void svfoo[_u32base]_index[_t0](svuint32_t, int64_t, sv<t0>_t)
+ void svfoo[_u64base]_index[_t0](svuint64_t, int64_t, sv<t0>_t)
+
+ i.e. a version of store_scatter_index that doesn't support 32-bit
+ vector indices. */
+struct store_scatter_index_restricted_def : public store_scatter_base
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_index);
+ build_sv_index64 (b, "_,as,d,t0", group);
+ build_vs_index (b, "_,b,ss64,t0", group);
+ }
+};
+SHAPE (store_scatter_index_restricted)
+
/* void svfoo_[s32]offset[_t0](<X>_t *, svint32_t, sv<t0>_t)
void svfoo_[s64]offset[_t0](<X>_t *, svint64_t, sv<t0>_t)
void svfoo_[u32]offset[_t0](<X>_t *, svuint32_t, sv<t0>_t)
};
SHAPE (store_scatter_offset)
+/* void svfoo_[s64]offset[_t0](<X>_t *, svint64_t, sv<t0>_t)
+ void svfoo_[u32]offset[_t0](<X>_t *, svuint32_t, sv<t0>_t)
+ void svfoo_[u64]offset[_t0](<X>_t *, svuint64_t, sv<t0>_t)
+
+ void svfoo[_u32base_t0](svuint32_t, sv<t0>_t)
+ void svfoo[_u64base_t0](svuint64_t, sv<t0>_t)
+
+ void svfoo[_u32base]_offset[_t0](svuint32_t, int64_t, sv<t0>_t)
+ void svfoo[_u64base]_offset[_t0](svuint64_t, int64_t, sv<t0>_t)
+
+ i.e. a version of store_scatter_offset that doesn't support svint32_t
+ offsets. */
+struct store_scatter_offset_restricted_def : public store_scatter_base
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ b.add_overloaded_functions (group, MODE_offset);
+ build_sv_uint_offset (b, "_,as,d,t0", group);
+ build_v_base (b, "_,b,t0", group);
+ build_vs_offset (b, "_,b,ss64,t0", group);
+ }
+};
+SHAPE (store_scatter_offset_restricted)
+
+/* sv<t0>_t svfoo[_t0](sv<t0>xN_t, sv<t0:uint>_t). */
+struct tbl_tuple_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,t0,vu0", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (2, i, nargs)
+ || (type = r.infer_tuple_type (i)) == NUM_TYPE_SUFFIXES
+ || !r.require_derived_vector_type (i + 1, i, type, TYPE_unsigned))
+ return error_mark_node;
+
+ return r.resolve_to (r.mode_suffix_id, type);
+ }
+};
+SHAPE (tbl_tuple)
+
/* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, sv<t0>_t, uint64_t)
where the final argument is an integer constant expression in the
};
SHAPE (ternary_lane_rotate)
+/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t, sv<t0:half>_t, uint64_t)
+
+ where the final argument is an integer constant expression in the range
+ [0, 32 / sizeof (<t0>_t) - 1]. */
+struct ternary_long_lane_def
+ : public ternary_resize2_lane_base<function_resolver::HALF_SIZE>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v0,vh0,vh0,su64", group, MODE_none);
+ }
+
+ bool
+ check (function_checker &c) const OVERRIDE
+ {
+ return c.require_immediate_lane_index (3);
+ }
+};
+SHAPE (ternary_long_lane)
+
+/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0:half>_t, sv<t0:half>_t)
+ sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0:half>_t, <t0:half>_t)
+
+ i.e. a version of the standard ternary shape ternary_opt_n in which
+ the element type of the last two arguments is the half-sized
+ equivalent of <t0>. */
+struct ternary_long_opt_n_def
+ : public ternary_resize2_opt_n_base<function_resolver::HALF_SIZE>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v0,vh0,vh0", group, MODE_none);
+ build_all (b, "v0,v0,vh0,sh0", group, MODE_n);
+ }
+};
+SHAPE (ternary_long_opt_n)
+
/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, sv<t0>_t)
sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0>_t, <t0>_t)
where the final argument is an integer constant expression in the range
[0, 16 / sizeof (<t0>_t) - 1]. */
-struct ternary_qq_lane_def : public overloaded_base<0>
+struct ternary_qq_lane_def
+ : public ternary_resize2_lane_base<function_resolver::QUARTER_SIZE>
{
void
build (function_builder &b, const function_group_info &group) const OVERRIDE
build_all (b, "v0,v0,vq0,vq0,su64", group, MODE_none);
}
+ bool
+ check (function_checker &c) const OVERRIDE
+ {
+ return c.require_immediate_lane_index (3, 4);
+ }
+};
+SHAPE (ternary_qq_lane)
+
+/* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0:quarter>_t, sv<t0:quarter>_t,
+ uint64_t)
+
+ where the final argument is an integer constant expression in
+ {0, 90, 180, 270}. */
+struct ternary_qq_lane_rotate_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v0,vq0,vq0,su64,su64", group, MODE_none);
+ }
+
tree
resolve (function_resolver &r) const OVERRIDE
{
unsigned int i, nargs;
type_suffix_index type;
- if (!r.check_gp_argument (4, i, nargs)
+ if (!r.check_gp_argument (5, i, nargs)
|| (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
|| !r.require_derived_vector_type (i + 1, i, type, r.SAME_TYPE_CLASS,
r.QUARTER_SIZE)
|| !r.require_derived_vector_type (i + 2, i, type, r.SAME_TYPE_CLASS,
r.QUARTER_SIZE)
- || !r.require_integer_immediate (i + 3))
+ || !r.require_integer_immediate (i + 3)
+ || !r.require_integer_immediate (i + 4))
return error_mark_node;
return r.resolve_to (r.mode_suffix_id, type);
bool
check (function_checker &c) const OVERRIDE
{
- return c.require_immediate_lane_index (3, 4);
+ return (c.require_immediate_lane_index (3, 4)
+ && c.require_immediate_one_of (4, 0, 90, 180, 270));
}
};
-SHAPE (ternary_qq_lane)
+SHAPE (ternary_qq_lane_rotate)
/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0.quarter>_t, sv<t0.quarter>_t)
sv<t0>_t svfoo[_n_t0](sv<t0>_t, sv<t0.quarter>_t, <t0.quarter>_t)
i.e. a version of the standard ternary shape ternary_opt_n in which
the element type of the last two arguments is the quarter-sized
equivalent of <t0>. */
-struct ternary_qq_opt_n_def : public overloaded_base<0>
+struct ternary_qq_opt_n_def
+ : public ternary_resize2_opt_n_base<function_resolver::QUARTER_SIZE>
{
void
build (function_builder &b, const function_group_info &group) const OVERRIDE
build_all (b, "v0,v0,vq0,vq0", group, MODE_none);
build_all (b, "v0,v0,vq0,sq0", group, MODE_n);
}
+};
+SHAPE (ternary_qq_opt_n)
+
+/* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0:quarter>_t, sv<t0:quarter>_t,
+ uint64_t)
+
+ where the final argument is an integer constant expression in
+ {0, 90, 180, 270}. */
+struct ternary_qq_rotate_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v0,vq0,vq0,su64", group, MODE_none);
+ }
tree
resolve (function_resolver &r) const OVERRIDE
{
unsigned int i, nargs;
type_suffix_index type;
- if (!r.check_gp_argument (3, i, nargs)
+ if (!r.check_gp_argument (4, i, nargs)
|| (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
|| !r.require_derived_vector_type (i + 1, i, type, r.SAME_TYPE_CLASS,
- r.QUARTER_SIZE))
+ r.QUARTER_SIZE)
+ || !r.require_derived_vector_type (i + 2, i, type, r.SAME_TYPE_CLASS,
+ r.QUARTER_SIZE)
+ || !r.require_integer_immediate (i + 3))
return error_mark_node;
- return r.finish_opt_n_resolution (i + 2, i, type, r.SAME_TYPE_CLASS,
- r.QUARTER_SIZE);
+ return r.resolve_to (r.mode_suffix_id, type);
+ }
+
+ bool
+ check (function_checker &c) const OVERRIDE
+ {
+ return c.require_immediate_one_of (3, 0, 90, 180, 270);
}
};
-SHAPE (ternary_qq_opt_n)
+SHAPE (ternary_qq_rotate)
/* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, sv<t0>_t, uint64_t)
};
SHAPE (ternary_rotate)
+/* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, sv<t0>_t, uint64_t)
+
+ where the final argument must be an integer constant expression in the
+ range [0, sizeof (<t0>_t) * 8 - 1]. */
+struct ternary_shift_left_imm_def : public ternary_shift_imm_base
+{
+ bool
+ check (function_checker &c) const OVERRIDE
+ {
+ unsigned int bits = c.type_suffix (0).element_bits;
+ return c.require_immediate_range (2, 0, bits - 1);
+ }
+};
+SHAPE (ternary_shift_left_imm)
+
+/* sv<t0>_t svfoo[_n_t0])(sv<t0>_t, sv<t0>_t, uint64_t)
+
+ where the final argument must be an integer constant expression in the
+ range [1, sizeof (<t0>_t) * 8]. */
+struct ternary_shift_right_imm_def : public ternary_shift_imm_base
+{
+ bool
+ check (function_checker &c) const OVERRIDE
+ {
+ unsigned int bits = c.type_suffix (0).element_bits;
+ return c.require_immediate_range (2, 1, bits);
+ }
+};
+SHAPE (ternary_shift_right_imm)
+
+/* sv<t0>_t svfoo[_t0](sv<t0>_t, sv<t0>_t, sv<t0:uint>_t). */
+struct ternary_uint_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v0,v0,vu0", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type;
+ if (!r.check_gp_argument (3, i, nargs)
+ || (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
+ || !r.require_matching_vector_type (i + 1, type)
+ || !r.require_derived_vector_type (i + 2, i, type, TYPE_unsigned))
+ return error_mark_node;
+
+ return r.resolve_to (r.mode_suffix_id, type);
+ }
+};
+SHAPE (ternary_uint)
+
/* svbool_t svfoo[_<t0>](sv<t0>_t, sv<t0>_t, uint64_t)
where the final argument is an integer constant expression in the
};
SHAPE (unary)
-/* sv<t0>_t svfoo_t0[_t1](svbool_t, sv<t1>_t)
+/* sv<t0>_t svfoo_t0[_t1](sv<t1>_t)
where the target type <t0> must be specified explicitly but the source
type <t1> can be inferred. */
};
SHAPE (unary_convert)
+/* sv<t0>_t svfoo_t0[_t1](sv<t0>_t, sv<t1>_t)
+
+ This is a version of unary_convert in which the even-indexed
+ elements are passed in as a first parameter, before any governing
+ predicate. */
+struct unary_convert_narrowt_def : public overloaded_base<1>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,v1", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_unary (r.type_suffix (0).tclass,
+ r.type_suffix (0).element_bits, true);
+ }
+};
+SHAPE (unary_convert_narrowt)
+
+/* sv<t0>_t svfoo[_t0](sv<t0:half>_t). */
+struct unary_long_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "v0,vh0", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ unsigned int i, nargs;
+ type_suffix_index type, result_type;
+ if (!r.check_gp_argument (1, i, nargs)
+ || (type = r.infer_vector_type (i)) == NUM_TYPE_SUFFIXES
+ || (result_type = long_type_suffix (r, type)) == NUM_TYPE_SUFFIXES)
+ return error_mark_node;
+
+ if (tree res = r.lookup_form (r.mode_suffix_id, result_type))
+ return res;
+
+ return r.report_no_such_form (type);
+ }
+};
+SHAPE (unary_long)
+
/* sv<t0>_t svfoo[_n]_t0(<t0>_t). */
struct unary_n_def : public overloaded_base<1>
{
};
SHAPE (unary_n)
+/* sv<t0:half>_t svfoo[_t0](sv<t0>_t). */
+typedef unary_narrowb_base<> unary_narrowb_def;
+SHAPE (unary_narrowb)
+
+/* sv<t0:half>_t svfoo[_t0](sv<t0:half>_t, sv<t0>_t). */
+typedef unary_narrowt_base<> unary_narrowt_def;
+SHAPE (unary_narrowt)
+
+/* sv<t0:uint:half>_t svfoo[_t0](sv<t0>_t). */
+typedef unary_narrowb_base<TYPE_unsigned> unary_narrowb_to_uint_def;
+SHAPE (unary_narrowb_to_uint)
+
+/* sv<t0:uint:half>_t svfoo[_t0](sv<t0:uint:half>_t, sv<t0>_t). */
+typedef unary_narrowt_base<TYPE_unsigned> unary_narrowt_to_uint_def;
+SHAPE (unary_narrowt_to_uint)
+
/* svbool_t svfoo(svbool_t). */
struct unary_pred_def : public nonoverloaded_base
{
};
SHAPE (unary_pred)
+/* sv<t0:int>_t svfoo[_t0](sv<t0>_t)
+
+ i.e. a version of "unary" in which the returned vector contains
+ signed integers. */
+struct unary_to_int_def : public overloaded_base<0>
+{
+ void
+ build (function_builder &b, const function_group_info &group) const OVERRIDE
+ {
+ b.add_overloaded_functions (group, MODE_none);
+ build_all (b, "vs0,v0", group, MODE_none);
+ }
+
+ tree
+ resolve (function_resolver &r) const OVERRIDE
+ {
+ return r.resolve_unary (TYPE_signed);
+ }
+};
+SHAPE (unary_to_int)
+
/* sv<t0:uint>_t svfoo[_t0](sv<t0>_t)
i.e. a version of "unary" in which the returned vector contains
extern const function_shape *const binary;
extern const function_shape *const binary_int_opt_n;
extern const function_shape *const binary_lane;
+ extern const function_shape *const binary_long_lane;
+ extern const function_shape *const binary_long_opt_n;
extern const function_shape *const binary_n;
+ extern const function_shape *const binary_narrowb_opt_n;
+ extern const function_shape *const binary_narrowt_opt_n;
extern const function_shape *const binary_opt_n;
extern const function_shape *const binary_pred;
extern const function_shape *const binary_rotate;
extern const function_shape *const binary_scalar;
+ extern const function_shape *const binary_to_uint;
extern const function_shape *const binary_uint;
extern const function_shape *const binary_uint_n;
extern const function_shape *const binary_uint_opt_n;
extern const function_shape *const binary_uint64_n;
extern const function_shape *const binary_uint64_opt_n;
+ extern const function_shape *const binary_wide;
+ extern const function_shape *const binary_wide_opt_n;
extern const function_shape *const clast;
+ extern const function_shape *const compare;
extern const function_shape *const compare_opt_n;
+ extern const function_shape *const compare_ptr;
extern const function_shape *const compare_scalar;
extern const function_shape *const compare_wide_opt_n;
extern const function_shape *const count_inherent;
extern const function_shape *const load;
extern const function_shape *const load_ext;
extern const function_shape *const load_ext_gather_index;
+ extern const function_shape *const load_ext_gather_index_restricted;
extern const function_shape *const load_ext_gather_offset;
+ extern const function_shape *const load_ext_gather_offset_restricted;
extern const function_shape *const load_gather_sv;
+ extern const function_shape *const load_gather_sv_restricted;
extern const function_shape *const load_gather_vs;
extern const function_shape *const load_replicate;
extern const function_shape *const pattern_pred;
extern const function_shape *const reduction_wide;
extern const function_shape *const set;
extern const function_shape *const setffr;
+ extern const function_shape *const shift_left_imm_long;
+ extern const function_shape *const shift_left_imm_to_uint;
extern const function_shape *const shift_right_imm;
+ extern const function_shape *const shift_right_imm_narrowb;
+ extern const function_shape *const shift_right_imm_narrowt;
+ extern const function_shape *const shift_right_imm_narrowb_to_uint;
+ extern const function_shape *const shift_right_imm_narrowt_to_uint;
extern const function_shape *const store;
extern const function_shape *const store_scatter_index;
+ extern const function_shape *const store_scatter_index_restricted;
extern const function_shape *const store_scatter_offset;
+ extern const function_shape *const store_scatter_offset_restricted;
+ extern const function_shape *const tbl_tuple;
extern const function_shape *const ternary_lane;
extern const function_shape *const ternary_lane_rotate;
+ extern const function_shape *const ternary_long_lane;
+ extern const function_shape *const ternary_long_opt_n;
extern const function_shape *const ternary_opt_n;
extern const function_shape *const ternary_qq_lane;
+ extern const function_shape *const ternary_qq_lane_rotate;
extern const function_shape *const ternary_qq_opt_n;
+ extern const function_shape *const ternary_qq_rotate;
extern const function_shape *const ternary_rotate;
+ extern const function_shape *const ternary_shift_left_imm;
+ extern const function_shape *const ternary_shift_right_imm;
+ extern const function_shape *const ternary_uint;
extern const function_shape *const tmad;
extern const function_shape *const unary;
extern const function_shape *const unary_convert;
+ extern const function_shape *const unary_convert_narrowt;
+ extern const function_shape *const unary_long;
extern const function_shape *const unary_n;
+ extern const function_shape *const unary_narrowb;
+ extern const function_shape *const unary_narrowt;
+ extern const function_shape *const unary_narrowb_to_uint;
+ extern const function_shape *const unary_narrowt_to_uint;
extern const function_shape *const unary_pred;
+ extern const function_shape *const unary_to_int;
extern const function_shape *const unary_to_uint;
extern const function_shape *const unary_uint;
extern const function_shape *const unary_widen;
--- /dev/null
+/* ACLE support for AArch64 SVE (__ARM_FEATURE_SVE2 intrinsics)
+ Copyright (C) 2020 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/>. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tree.h"
+#include "rtl.h"
+#include "tm_p.h"
+#include "memmodel.h"
+#include "insn-codes.h"
+#include "optabs.h"
+#include "recog.h"
+#include "expr.h"
+#include "basic-block.h"
+#include "function.h"
+#include "fold-const.h"
+#include "gimple.h"
+#include "gimple-iterator.h"
+#include "gimplify.h"
+#include "explow.h"
+#include "emit-rtl.h"
+#include "tree-vector-builder.h"
+#include "rtx-vector-builder.h"
+#include "vec-perm-indices.h"
+#include "aarch64-sve-builtins.h"
+#include "aarch64-sve-builtins-shapes.h"
+#include "aarch64-sve-builtins-base.h"
+#include "aarch64-sve-builtins-sve2.h"
+#include "aarch64-sve-builtins-functions.h"
+
+using namespace aarch64_sve;
+
+namespace {
+
+/* Return the UNSPEC_CDOT* unspec for rotation amount ROT. */
+static int
+unspec_cdot (int rot)
+{
+ switch (rot)
+ {
+ case 0: return UNSPEC_CDOT;
+ case 90: return UNSPEC_CDOT90;
+ case 180: return UNSPEC_CDOT180;
+ case 270: return UNSPEC_CDOT270;
+ default: gcc_unreachable ();
+ }
+}
+
+/* Return the UNSPEC_SQRDCMLAH* unspec for rotation amount ROT. */
+static int
+unspec_sqrdcmlah (int rot)
+{
+ switch (rot)
+ {
+ case 0: return UNSPEC_SQRDCMLAH;
+ case 90: return UNSPEC_SQRDCMLAH90;
+ case 180: return UNSPEC_SQRDCMLAH180;
+ case 270: return UNSPEC_SQRDCMLAH270;
+ default: gcc_unreachable ();
+ }
+}
+
+class svaba_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ rtx_code max_code = e.type_suffix (0).unsigned_p ? UMAX : SMAX;
+ machine_mode mode = e.vector_mode (0);
+ return e.use_exact_insn (code_for_aarch64_sve2_aba (max_code, mode));
+ }
+};
+
+class svcdot_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ /* Convert the rotation amount into a specific unspec. */
+ int rot = INTVAL (e.args.pop ());
+ return e.use_exact_insn (code_for_aarch64_sve (unspec_cdot (rot),
+ e.vector_mode (0)));
+ }
+};
+
+class svcdot_lane_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ /* Convert the rotation amount into a specific unspec. */
+ int rot = INTVAL (e.args.pop ());
+ return e.use_exact_insn (code_for_aarch64_lane (unspec_cdot (rot),
+ e.vector_mode (0)));
+ }
+};
+
+class svldnt1_gather_impl : public full_width_access
+{
+public:
+ unsigned int
+ call_properties (const function_instance &) const OVERRIDE
+ {
+ return CP_READ_MEMORY;
+ }
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ e.prepare_gather_address_operands (1, false);
+ machine_mode mem_mode = e.memory_vector_mode ();
+ return e.use_exact_insn (code_for_aarch64_gather_ldnt (mem_mode));
+ }
+};
+
+/* Implements extending forms of svldnt1_gather. */
+class svldnt1_gather_extend_impl : public extending_load
+{
+public:
+ CONSTEXPR svldnt1_gather_extend_impl (type_suffix_index memory_type)
+ : extending_load (memory_type) {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ e.prepare_gather_address_operands (1, false);
+ /* Add a constant predicate for the extension rtx. */
+ e.args.quick_push (CONSTM1_RTX (VNx16BImode));
+ insn_code icode = code_for_aarch64_gather_ldnt (extend_rtx_code (),
+ e.vector_mode (0),
+ e.memory_vector_mode ());
+ return e.use_exact_insn (icode);
+ }
+};
+
+/* Implements both svmatch and svnmatch; the unspec parameter decides
+ between them. */
+class svmatch_svnmatch_impl : public function_base
+{
+public:
+ CONSTEXPR svmatch_svnmatch_impl (int unspec) : m_unspec (unspec) {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ /* These are UNSPEC_PRED_Z operations and so need a hint operand. */
+ e.add_ptrue_hint (0, e.gp_mode (0));
+ return e.use_exact_insn (code_for_aarch64_pred (m_unspec,
+ e.vector_mode (0)));
+ }
+
+ int m_unspec;
+};
+
+/* Implements both svmovlb and svmovlt; the unspec parameters decide
+ between them. */
+class svmovl_lb_impl : public unspec_based_function_base
+{
+public:
+ CONSTEXPR svmovl_lb_impl (int unspec_for_sint, int unspec_for_uint,
+ int unspec_for_fp)
+ : unspec_based_function_base (unspec_for_sint, unspec_for_uint,
+ unspec_for_fp)
+ {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ e.args.quick_push (const0_rtx);
+ return e.map_to_unspecs (m_unspec_for_sint, m_unspec_for_uint,
+ m_unspec_for_fp);
+ }
+};
+
+class svqcadd_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ /* Convert the rotation amount into a specific unspec. */
+ int rot = INTVAL (e.args.pop ());
+ if (rot == 90)
+ return e.map_to_unspecs (UNSPEC_SQCADD90, -1, -1);
+ if (rot == 270)
+ return e.map_to_unspecs (UNSPEC_SQCADD270, -1, -1);
+ gcc_unreachable ();
+ }
+};
+
+class svqrdcmlah_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ /* Convert the rotation amount into a specific unspec. */
+ int rot = INTVAL (e.args.pop ());
+ return e.use_exact_insn (code_for_aarch64_sve (unspec_sqrdcmlah (rot),
+ e.vector_mode (0)));
+ }
+};
+
+class svqrdcmlah_lane_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ /* Convert the rotation amount into a specific unspec. */
+ int rot = INTVAL (e.args.pop ());
+ return e.use_exact_insn (code_for_aarch64_lane (unspec_sqrdcmlah (rot),
+ e.vector_mode (0)));
+ }
+};
+
+class svqrshl_impl : public unspec_based_function
+{
+public:
+ CONSTEXPR svqrshl_impl ()
+ : unspec_based_function (UNSPEC_SQRSHL, UNSPEC_UQRSHL, -1) {}
+
+ gimple *
+ fold (gimple_folder &f) const OVERRIDE
+ {
+ if (tree amount = uniform_integer_cst_p (gimple_call_arg (f.call, 2)))
+ {
+ if (wi::to_widest (amount) >= 0)
+ {
+ /* The rounding has no effect, and [SU]QSHL has immediate forms
+ that we can use for sensible shift amounts. */
+ function_instance instance ("svqshl", functions::svqshl,
+ shapes::binary_int_opt_n, MODE_n,
+ f.type_suffix_ids, f.pred);
+ return f.redirect_call (instance);
+ }
+ else
+ {
+ /* The saturation has no effect, and [SU]RSHL has immediate forms
+ that we can use for sensible shift amounts. */
+ function_instance instance ("svrshl", functions::svrshl,
+ shapes::binary_int_opt_n, MODE_n,
+ f.type_suffix_ids, f.pred);
+ return f.redirect_call (instance);
+ }
+ }
+ return NULL;
+ }
+};
+
+class svqshl_impl : public unspec_based_function
+{
+public:
+ CONSTEXPR svqshl_impl ()
+ : unspec_based_function (UNSPEC_SQSHL, UNSPEC_UQSHL, -1) {}
+
+ gimple *
+ fold (gimple_folder &f) const OVERRIDE
+ {
+ if (tree amount = uniform_integer_cst_p (gimple_call_arg (f.call, 2)))
+ {
+ int element_bits = f.type_suffix (0).element_bits;
+ if (wi::to_widest (amount) >= -element_bits
+ && wi::to_widest (amount) < 0)
+ {
+ /* The saturation has no effect for right shifts, so we can
+ use the immediate form of ASR or LSR. */
+ amount = wide_int_to_tree (TREE_TYPE (amount),
+ -wi::to_wide (amount));
+ function_instance instance ("svasr", functions::svasr,
+ shapes::binary_uint_opt_n, MODE_n,
+ f.type_suffix_ids, f.pred);
+ if (f.type_suffix (0).unsigned_p)
+ {
+ instance.base_name = "svlsr";
+ instance.base = functions::svlsr;
+ }
+ gcall *call = as_a <gcall *> (f.redirect_call (instance));
+ gimple_call_set_arg (call, 2, amount);
+ return call;
+ }
+ }
+ return NULL;
+ }
+};
+
+class svrshl_impl : public unspec_based_function
+{
+public:
+ CONSTEXPR svrshl_impl ()
+ : unspec_based_function (UNSPEC_SRSHL, UNSPEC_URSHL, -1) {}
+
+ gimple *
+ fold (gimple_folder &f) const OVERRIDE
+ {
+ if (tree amount = uniform_integer_cst_p (gimple_call_arg (f.call, 2)))
+ {
+ if (wi::to_widest (amount) >= 0)
+ {
+ /* The rounding has no effect, and LSL has immediate forms
+ that we can use for sensible shift amounts. */
+ function_instance instance ("svlsl", functions::svlsl,
+ shapes::binary_uint_opt_n, MODE_n,
+ f.type_suffix_ids, f.pred);
+ gcall *call = as_a <gcall *> (f.redirect_call (instance));
+ gimple_call_set_arg (call, 2, amount);
+ return call;
+ }
+ int element_bits = f.type_suffix (0).element_bits;
+ if (wi::to_widest (amount) >= -element_bits)
+ {
+ /* The shift amount is in range of [SU]RSHR. */
+ amount = wide_int_to_tree (TREE_TYPE (amount),
+ -wi::to_wide (amount));
+ function_instance instance ("svrshr", functions::svrshr,
+ shapes::shift_right_imm, MODE_n,
+ f.type_suffix_ids, f.pred);
+ gcall *call = as_a <gcall *> (f.redirect_call (instance));
+ gimple_call_set_arg (call, 2, amount);
+ return call;
+ }
+ }
+ return NULL;
+ }
+};
+
+class svsqadd_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ machine_mode mode = e.vector_mode (0);
+ if (e.pred == PRED_x
+ && aarch64_sve_sqadd_sqsub_immediate_p (mode, e.args[2], false))
+ return e.map_to_rtx_codes (UNKNOWN, US_PLUS, -1);
+ return e.map_to_unspecs (-1, UNSPEC_USQADD, -1);
+ }
+};
+
+class svsra_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ rtx_code shift_code = e.type_suffix (0).unsigned_p ? LSHIFTRT : ASHIFTRT;
+ machine_mode mode = e.vector_mode (0);
+ return e.use_exact_insn (code_for_aarch64_sve_add (shift_code, mode));
+ }
+};
+
+class svstnt1_scatter_impl : public full_width_access
+{
+public:
+ unsigned int
+ call_properties (const function_instance &) const OVERRIDE
+ {
+ return CP_WRITE_MEMORY;
+ }
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ e.prepare_gather_address_operands (1, false);
+ machine_mode mem_mode = e.memory_vector_mode ();
+ return e.use_exact_insn (code_for_aarch64_scatter_stnt (mem_mode));
+ }
+};
+
+/* Implements truncating forms of svstnt1_scatter. */
+class svstnt1_scatter_truncate_impl : public truncating_store
+{
+public:
+ CONSTEXPR svstnt1_scatter_truncate_impl (scalar_int_mode to_mode)
+ : truncating_store (to_mode) {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ e.prepare_gather_address_operands (1, false);
+ insn_code icode = code_for_aarch64_scatter_stnt (e.vector_mode (0),
+ e.memory_vector_mode ());
+ return e.use_exact_insn (icode);
+ }
+};
+
+class svtbl2_impl : public quiet<multi_vector_function>
+{
+public:
+ CONSTEXPR svtbl2_impl () : quiet<multi_vector_function> (2) {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ return e.use_exact_insn (code_for_aarch64_sve2_tbl2 (e.vector_mode (0)));
+ }
+};
+
+class svuqadd_impl : public function_base
+{
+public:
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ machine_mode mode = e.vector_mode (0);
+ if (e.pred == PRED_x
+ && aarch64_sve_arith_immediate_p (mode, e.args[2], false))
+ return e.use_unpred_insn (code_for_aarch64_sve_suqadd_const (mode));
+ return e.map_to_unspecs (UNSPEC_SUQADD, -1, -1);
+ }
+};
+
+/* Implements both svwhilerw and svwhilewr; the unspec parameter decides
+ between them. */
+class svwhilerw_svwhilewr_impl : public full_width_access
+{
+public:
+ CONSTEXPR svwhilerw_svwhilewr_impl (int unspec) : m_unspec (unspec) {}
+
+ rtx
+ expand (function_expander &e) const OVERRIDE
+ {
+ return e.use_exact_insn (code_for_while (m_unspec, Pmode, e.gp_mode (0)));
+ }
+
+ int m_unspec;
+};
+
+} /* end anonymous namespace */
+
+namespace aarch64_sve {
+
+FUNCTION (svaba, svaba_impl,)
+FUNCTION (svabalb, unspec_based_add_function, (UNSPEC_SABDLB,
+ UNSPEC_UABDLB, -1))
+FUNCTION (svabalt, unspec_based_add_function, (UNSPEC_SABDLT,
+ UNSPEC_UABDLT, -1))
+FUNCTION (svadclb, unspec_based_function, (-1, UNSPEC_ADCLB, -1))
+FUNCTION (svadclt, unspec_based_function, (-1, UNSPEC_ADCLT, -1))
+FUNCTION (svaddhnb, unspec_based_function, (UNSPEC_ADDHNB, UNSPEC_ADDHNB, -1))
+FUNCTION (svaddhnt, unspec_based_function, (UNSPEC_ADDHNT, UNSPEC_ADDHNT, -1))
+FUNCTION (svabdlb, unspec_based_function, (UNSPEC_SABDLB, UNSPEC_UABDLB, -1))
+FUNCTION (svabdlt, unspec_based_function, (UNSPEC_SABDLT, UNSPEC_UABDLT, -1))
+FUNCTION (svadalp, unspec_based_function, (UNSPEC_SADALP, UNSPEC_UADALP, -1))
+FUNCTION (svaddlb, unspec_based_function, (UNSPEC_SADDLB, UNSPEC_UADDLB, -1))
+FUNCTION (svaddlbt, unspec_based_function, (UNSPEC_SADDLBT, -1, -1))
+FUNCTION (svaddlt, unspec_based_function, (UNSPEC_SADDLT, UNSPEC_UADDLT, -1))
+FUNCTION (svaddwb, unspec_based_function, (UNSPEC_SADDWB, UNSPEC_UADDWB, -1))
+FUNCTION (svaddwt, unspec_based_function, (UNSPEC_SADDWT, UNSPEC_UADDWT, -1))
+FUNCTION (svaddp, unspec_based_pred_function, (UNSPEC_ADDP, UNSPEC_ADDP,
+ UNSPEC_FADDP))
+FUNCTION (svaesd, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesd))
+FUNCTION (svaese, fixed_insn_function, (CODE_FOR_aarch64_sve2_aese))
+FUNCTION (svaesimc, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesimc))
+FUNCTION (svaesmc, fixed_insn_function, (CODE_FOR_aarch64_sve2_aesmc))
+FUNCTION (svbcax, CODE_FOR_MODE0 (aarch64_sve2_bcax),)
+FUNCTION (svbdep, unspec_based_function, (UNSPEC_BDEP, UNSPEC_BDEP, -1))
+FUNCTION (svbext, unspec_based_function, (UNSPEC_BEXT, UNSPEC_BEXT, -1))
+FUNCTION (svbgrp, unspec_based_function, (UNSPEC_BGRP, UNSPEC_BGRP, -1))
+FUNCTION (svbsl, CODE_FOR_MODE0 (aarch64_sve2_bsl),)
+FUNCTION (svbsl1n, CODE_FOR_MODE0 (aarch64_sve2_bsl1n),)
+FUNCTION (svbsl2n, CODE_FOR_MODE0 (aarch64_sve2_bsl2n),)
+FUNCTION (svcdot, svcdot_impl,)
+FUNCTION (svcdot_lane, svcdot_lane_impl,)
+FUNCTION (svcvtlt, unspec_based_function, (-1, -1, UNSPEC_COND_FCVTLT))
+FUNCTION (svcvtnt, CODE_FOR_MODE1 (aarch64_sve2_cvtnt),)
+FUNCTION (svcvtx, unspec_based_function, (-1, -1, UNSPEC_COND_FCVTX))
+FUNCTION (svcvtxnt, CODE_FOR_MODE1 (aarch64_sve2_cvtxnt),)
+FUNCTION (sveor3, CODE_FOR_MODE0 (aarch64_sve2_eor3),)
+FUNCTION (sveorbt, unspec_based_function, (UNSPEC_EORBT, UNSPEC_EORBT, -1))
+FUNCTION (sveortb, unspec_based_function, (UNSPEC_EORTB, UNSPEC_EORTB, -1))
+FUNCTION (svhadd, unspec_based_function, (UNSPEC_SHADD, UNSPEC_UHADD, -1))
+FUNCTION (svhsub, unspec_based_function, (UNSPEC_SHSUB, UNSPEC_UHSUB, -1))
+FUNCTION (svhistcnt, CODE_FOR_MODE0 (aarch64_sve2_histcnt),)
+FUNCTION (svhistseg, CODE_FOR_MODE0 (aarch64_sve2_histseg),)
+FUNCTION (svhsubr, unspec_based_function_rotated, (UNSPEC_SHSUB,
+ UNSPEC_UHSUB, -1))
+FUNCTION (svldnt1_gather, svldnt1_gather_impl,)
+FUNCTION (svldnt1sb_gather, svldnt1_gather_extend_impl, (TYPE_SUFFIX_s8))
+FUNCTION (svldnt1sh_gather, svldnt1_gather_extend_impl, (TYPE_SUFFIX_s16))
+FUNCTION (svldnt1sw_gather, svldnt1_gather_extend_impl, (TYPE_SUFFIX_s32))
+FUNCTION (svldnt1ub_gather, svldnt1_gather_extend_impl, (TYPE_SUFFIX_u8))
+FUNCTION (svldnt1uh_gather, svldnt1_gather_extend_impl, (TYPE_SUFFIX_u16))
+FUNCTION (svldnt1uw_gather, svldnt1_gather_extend_impl, (TYPE_SUFFIX_u32))
+FUNCTION (svlogb, unspec_based_function, (-1, -1, UNSPEC_COND_FLOGB))
+FUNCTION (svmatch, svmatch_svnmatch_impl, (UNSPEC_MATCH))
+FUNCTION (svmaxp, unspec_based_pred_function, (UNSPEC_SMAXP, UNSPEC_UMAXP,
+ UNSPEC_FMAXP))
+FUNCTION (svmaxnmp, unspec_based_pred_function, (-1, -1, UNSPEC_FMAXNMP))
+FUNCTION (svminp, unspec_based_pred_function, (UNSPEC_SMINP, UNSPEC_UMINP,
+ UNSPEC_FMINP))
+FUNCTION (svminnmp, unspec_based_pred_function, (-1, -1, UNSPEC_FMINNMP))
+FUNCTION (svmlalb, unspec_based_mla_function, (UNSPEC_SMULLB,
+ UNSPEC_UMULLB, UNSPEC_FMLALB))
+FUNCTION (svmlalb_lane, unspec_based_mla_lane_function, (UNSPEC_SMULLB,
+ UNSPEC_UMULLB,
+ UNSPEC_FMLALB))
+FUNCTION (svmlalt, unspec_based_mla_function, (UNSPEC_SMULLT,
+ UNSPEC_UMULLT, UNSPEC_FMLALT))
+FUNCTION (svmlalt_lane, unspec_based_mla_lane_function, (UNSPEC_SMULLT,
+ UNSPEC_UMULLT,
+ UNSPEC_FMLALT))
+FUNCTION (svmlslb, unspec_based_mls_function, (UNSPEC_SMULLB,
+ UNSPEC_UMULLB, UNSPEC_FMLSLB))
+FUNCTION (svmlslb_lane, unspec_based_mls_lane_function, (UNSPEC_SMULLB,
+ UNSPEC_UMULLB,
+ UNSPEC_FMLSLB))
+FUNCTION (svmlslt, unspec_based_mls_function, (UNSPEC_SMULLT,
+ UNSPEC_UMULLT, UNSPEC_FMLSLT))
+FUNCTION (svmlslt_lane, unspec_based_mls_lane_function, (UNSPEC_SMULLT,
+ UNSPEC_UMULLT,
+ UNSPEC_FMLSLT))
+FUNCTION (svmovlb, svmovl_lb_impl, (UNSPEC_SSHLLB, UNSPEC_USHLLB, -1))
+FUNCTION (svmovlt, svmovl_lb_impl, (UNSPEC_SSHLLT, UNSPEC_USHLLT, -1))
+FUNCTION (svmullb, unspec_based_function, (UNSPEC_SMULLB, UNSPEC_UMULLB, -1))
+FUNCTION (svmullb_lane, unspec_based_lane_function, (UNSPEC_SMULLB,
+ UNSPEC_UMULLB, -1))
+FUNCTION (svmullt, unspec_based_function, (UNSPEC_SMULLT, UNSPEC_UMULLT, -1))
+FUNCTION (svmullt_lane, unspec_based_lane_function, (UNSPEC_SMULLT,
+ UNSPEC_UMULLT, -1))
+FUNCTION (svnbsl, CODE_FOR_MODE0 (aarch64_sve2_nbsl),)
+FUNCTION (svnmatch, svmatch_svnmatch_impl, (UNSPEC_NMATCH))
+FUNCTION (svpmul, CODE_FOR_MODE0 (aarch64_sve2_pmul),)
+FUNCTION (svpmullb, unspec_based_function, (-1, UNSPEC_PMULLB, -1))
+FUNCTION (svpmullb_pair, unspec_based_function, (-1, UNSPEC_PMULLB_PAIR, -1))
+FUNCTION (svpmullt, unspec_based_function, (-1, UNSPEC_PMULLT, -1))
+FUNCTION (svpmullt_pair, unspec_based_function, (-1, UNSPEC_PMULLT_PAIR, -1))
+FUNCTION (svqabs, rtx_code_function, (SS_ABS, UNKNOWN, UNKNOWN))
+FUNCTION (svqcadd, svqcadd_impl,)
+FUNCTION (svqdmlalb, unspec_based_qadd_function, (UNSPEC_SQDMULLB, -1, -1))
+FUNCTION (svqdmlalb_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLB,
+ -1, -1))
+FUNCTION (svqdmlalbt, unspec_based_qadd_function, (UNSPEC_SQDMULLBT, -1, -1))
+FUNCTION (svqdmlalt, unspec_based_qadd_function, (UNSPEC_SQDMULLT, -1, -1))
+FUNCTION (svqdmlalt_lane, unspec_based_qadd_lane_function, (UNSPEC_SQDMULLT,
+ -1, -1))
+FUNCTION (svqdmlslb, unspec_based_qsub_function, (UNSPEC_SQDMULLB, -1, -1))
+FUNCTION (svqdmlslb_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLB,
+ -1, -1))
+FUNCTION (svqdmlslbt, unspec_based_qsub_function, (UNSPEC_SQDMULLBT, -1, -1))
+FUNCTION (svqdmlslt, unspec_based_qsub_function, (UNSPEC_SQDMULLT, -1, -1))
+FUNCTION (svqdmlslt_lane, unspec_based_qsub_lane_function, (UNSPEC_SQDMULLT,
+ -1, -1))
+FUNCTION (svqdmulh, unspec_based_function, (UNSPEC_SQDMULH, -1, -1))
+FUNCTION (svqdmulh_lane, unspec_based_lane_function, (UNSPEC_SQDMULH, -1, -1))
+FUNCTION (svqdmullb, unspec_based_function, (UNSPEC_SQDMULLB, -1, -1))
+FUNCTION (svqdmullb_lane, unspec_based_lane_function, (UNSPEC_SQDMULLB,
+ -1, -1))
+FUNCTION (svqdmullt, unspec_based_function, (UNSPEC_SQDMULLT, -1, -1))
+FUNCTION (svqdmullt_lane, unspec_based_lane_function, (UNSPEC_SQDMULLT,
+ -1, -1))
+FUNCTION (svqneg, rtx_code_function, (SS_NEG, UNKNOWN, UNKNOWN))
+FUNCTION (svqrdcmlah, svqrdcmlah_impl,)
+FUNCTION (svqrdcmlah_lane, svqrdcmlah_lane_impl,)
+FUNCTION (svqrdmulh, unspec_based_function, (UNSPEC_SQRDMULH, -1, -1))
+FUNCTION (svqrdmulh_lane, unspec_based_lane_function, (UNSPEC_SQRDMULH,
+ -1, -1))
+FUNCTION (svqrdmlah, unspec_based_function, (UNSPEC_SQRDMLAH, -1, -1))
+FUNCTION (svqrdmlah_lane, unspec_based_lane_function, (UNSPEC_SQRDMLAH,
+ -1, -1))
+FUNCTION (svqrdmlsh, unspec_based_function, (UNSPEC_SQRDMLSH, -1, -1))
+FUNCTION (svqrdmlsh_lane, unspec_based_lane_function, (UNSPEC_SQRDMLSH,
+ -1, -1))
+FUNCTION (svqrshl, svqrshl_impl,)
+FUNCTION (svqrshrnb, unspec_based_function, (UNSPEC_SQRSHRNB,
+ UNSPEC_UQRSHRNB, -1))
+FUNCTION (svqrshrnt, unspec_based_function, (UNSPEC_SQRSHRNT,
+ UNSPEC_UQRSHRNT, -1))
+FUNCTION (svqrshrunb, unspec_based_function, (UNSPEC_SQRSHRUNB, -1, -1))
+FUNCTION (svqrshrunt, unspec_based_function, (UNSPEC_SQRSHRUNT, -1, -1))
+FUNCTION (svqshl, svqshl_impl,)
+FUNCTION (svqshlu, unspec_based_function, (UNSPEC_SQSHLU, -1, -1))
+FUNCTION (svqshrnb, unspec_based_function, (UNSPEC_SQSHRNB,
+ UNSPEC_UQSHRNB, -1))
+FUNCTION (svqshrnt, unspec_based_function, (UNSPEC_SQSHRNT,
+ UNSPEC_UQSHRNT, -1))
+FUNCTION (svqshrunb, unspec_based_function, (UNSPEC_SQSHRUNB, -1, -1))
+FUNCTION (svqshrunt, unspec_based_function, (UNSPEC_SQSHRUNT, -1, -1))
+FUNCTION (svqsubr, rtx_code_function_rotated, (SS_MINUS, US_MINUS, -1))
+FUNCTION (svqxtnb, unspec_based_function, (UNSPEC_SQXTNB, UNSPEC_UQXTNB, -1))
+FUNCTION (svqxtnt, unspec_based_function, (UNSPEC_SQXTNT, UNSPEC_UQXTNT, -1))
+FUNCTION (svqxtunb, unspec_based_function, (UNSPEC_SQXTUNB, -1, -1))
+FUNCTION (svqxtunt, unspec_based_function, (UNSPEC_SQXTUNT, -1, -1))
+FUNCTION (svraddhnb, unspec_based_function, (UNSPEC_RADDHNB,
+ UNSPEC_RADDHNB, -1))
+FUNCTION (svraddhnt, unspec_based_function, (UNSPEC_RADDHNT,
+ UNSPEC_RADDHNT, -1))
+FUNCTION (svrax1, fixed_insn_function, (CODE_FOR_aarch64_sve2_rax1))
+FUNCTION (svrhadd, unspec_based_function, (UNSPEC_SRHADD, UNSPEC_URHADD, -1))
+FUNCTION (svrshl, svrshl_impl,)
+FUNCTION (svrshr, unspec_based_function, (UNSPEC_SRSHR, UNSPEC_URSHR, -1))
+FUNCTION (svrshrnb, unspec_based_function, (UNSPEC_RSHRNB, UNSPEC_RSHRNB, -1))
+FUNCTION (svrshrnt, unspec_based_function, (UNSPEC_RSHRNT, UNSPEC_RSHRNT, -1))
+FUNCTION (svrsra, unspec_based_add_function, (UNSPEC_SRSHR, UNSPEC_URSHR, -1))
+FUNCTION (svrsubhnb, unspec_based_function, (UNSPEC_RSUBHNB,
+ UNSPEC_RSUBHNB, -1))
+FUNCTION (svrsubhnt, unspec_based_function, (UNSPEC_RSUBHNT,
+ UNSPEC_RSUBHNT, -1))
+FUNCTION (svsbclb, unspec_based_function, (-1, UNSPEC_SBCLB, -1))
+FUNCTION (svsbclt, unspec_based_function, (-1, UNSPEC_SBCLT, -1))
+FUNCTION (svshllb, unspec_based_function, (UNSPEC_SSHLLB, UNSPEC_USHLLB, -1))
+FUNCTION (svshllt, unspec_based_function, (UNSPEC_SSHLLT, UNSPEC_USHLLT, -1))
+FUNCTION (svshrnb, unspec_based_function, (UNSPEC_SHRNB, UNSPEC_SHRNB, -1))
+FUNCTION (svshrnt, unspec_based_function, (UNSPEC_SHRNT, UNSPEC_SHRNT, -1))
+FUNCTION (svsli, unspec_based_function, (UNSPEC_SLI, UNSPEC_SLI, -1))
+FUNCTION (svsm4e, fixed_insn_function, (CODE_FOR_aarch64_sve2_sm4e))
+FUNCTION (svsm4ekey, fixed_insn_function, (CODE_FOR_aarch64_sve2_sm4ekey))
+FUNCTION (svsqadd, svsqadd_impl,)
+FUNCTION (svsra, svsra_impl,)
+FUNCTION (svsri, unspec_based_function, (UNSPEC_SRI, UNSPEC_SRI, -1))
+FUNCTION (svstnt1_scatter, svstnt1_scatter_impl,)
+FUNCTION (svstnt1b_scatter, svstnt1_scatter_truncate_impl, (QImode))
+FUNCTION (svstnt1h_scatter, svstnt1_scatter_truncate_impl, (HImode))
+FUNCTION (svstnt1w_scatter, svstnt1_scatter_truncate_impl, (SImode))
+FUNCTION (svsubhnb, unspec_based_function, (UNSPEC_SUBHNB, UNSPEC_SUBHNB, -1))
+FUNCTION (svsubhnt, unspec_based_function, (UNSPEC_SUBHNT, UNSPEC_SUBHNT, -1))
+FUNCTION (svsublb, unspec_based_function, (UNSPEC_SSUBLB, UNSPEC_USUBLB, -1))
+FUNCTION (svsublbt, unspec_based_function, (UNSPEC_SSUBLBT, -1, -1))
+FUNCTION (svsublt, unspec_based_function, (UNSPEC_SSUBLT, UNSPEC_USUBLT, -1))
+FUNCTION (svsubltb, unspec_based_function, (UNSPEC_SSUBLTB, -1, -1))
+FUNCTION (svsubwb, unspec_based_function, (UNSPEC_SSUBWB, UNSPEC_USUBWB, -1))
+FUNCTION (svsubwt, unspec_based_function, (UNSPEC_SSUBWT, UNSPEC_USUBWT, -1))
+FUNCTION (svtbl2, svtbl2_impl,)
+FUNCTION (svtbx, CODE_FOR_MODE0 (aarch64_sve2_tbx),)
+FUNCTION (svuqadd, svuqadd_impl,)
+FUNCTION (svwhilege, while_comparison, (UNSPEC_WHILEGE, UNSPEC_WHILEHS))
+FUNCTION (svwhilegt, while_comparison, (UNSPEC_WHILEGT, UNSPEC_WHILEHI))
+FUNCTION (svwhilerw, svwhilerw_svwhilewr_impl, (UNSPEC_WHILERW))
+FUNCTION (svwhilewr, svwhilerw_svwhilewr_impl, (UNSPEC_WHILEWR))
+FUNCTION (svxar, CODE_FOR_MODE0 (aarch64_sve2_xar),)
+
+} /* end namespace aarch64_sve */
--- /dev/null
+/* ACLE support for AArch64 SVE (__ARM_FEATURE_SVE intrinsics)
+ Copyright (C) 2020 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/>. */
+
+#define REQUIRED_EXTENSIONS AARCH64_FL_SVE2
+DEF_SVE_FUNCTION (svaba, ternary_opt_n, all_integer, none)
+DEF_SVE_FUNCTION (svabalb, ternary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svabalt, ternary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svadalp, binary_wide, hsd_integer, mxz)
+DEF_SVE_FUNCTION (svadclb, ternary_opt_n, sd_unsigned, none)
+DEF_SVE_FUNCTION (svadclt, ternary_opt_n, sd_unsigned, none)
+DEF_SVE_FUNCTION (svaddhnb, binary_narrowb_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svaddhnt, binary_narrowt_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svabdlb, binary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svabdlt, binary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svaddlb, binary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svaddlbt, binary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svaddlt, binary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svaddp, binary, all_data, mx)
+DEF_SVE_FUNCTION (svaddwb, binary_wide_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svaddwt, binary_wide_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svbcax, ternary_opt_n, all_integer, none)
+DEF_SVE_FUNCTION (svbsl, ternary_opt_n, all_integer, none)
+DEF_SVE_FUNCTION (svbsl1n, ternary_opt_n, all_integer, none)
+DEF_SVE_FUNCTION (svbsl2n, ternary_opt_n, all_integer, none)
+DEF_SVE_FUNCTION (svcadd, binary_rotate, all_integer, none)
+DEF_SVE_FUNCTION (svcdot, ternary_qq_rotate, sd_signed, none)
+DEF_SVE_FUNCTION (svcdot_lane, ternary_qq_lane_rotate, sd_signed, none)
+DEF_SVE_FUNCTION (svcmla, ternary_rotate, all_integer, none)
+DEF_SVE_FUNCTION (svcmla_lane, ternary_lane_rotate, hs_integer, none)
+DEF_SVE_FUNCTION (svcvtlt, unary_convert, cvt_long, mx)
+DEF_SVE_FUNCTION (svcvtnt, unary_convert_narrowt, cvt_narrow, mx)
+DEF_SVE_FUNCTION (svcvtx, unary_convert, cvt_narrow_s, mxz)
+DEF_SVE_FUNCTION (svcvtxnt, unary_convert_narrowt, cvt_narrow_s, mx)
+DEF_SVE_FUNCTION (sveor3, ternary_opt_n, all_integer, none)
+DEF_SVE_FUNCTION (sveorbt, ternary_opt_n, all_integer, none)
+DEF_SVE_FUNCTION (sveortb, ternary_opt_n, all_integer, none)
+DEF_SVE_FUNCTION (svhadd, binary_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svhistcnt, binary_to_uint, sd_integer, z)
+DEF_SVE_FUNCTION (svhistseg, binary_to_uint, b_integer, none)
+DEF_SVE_FUNCTION (svhsub, binary_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svhsubr, binary_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svldnt1_gather, load_gather_sv_restricted, sd_data, implicit)
+DEF_SVE_FUNCTION (svldnt1_gather, load_gather_vs, sd_data, implicit)
+DEF_SVE_FUNCTION (svldnt1sb_gather, load_ext_gather_offset_restricted, sd_integer, implicit)
+DEF_SVE_FUNCTION (svldnt1sh_gather, load_ext_gather_offset_restricted, sd_integer, implicit)
+DEF_SVE_FUNCTION (svldnt1sh_gather, load_ext_gather_index_restricted, sd_integer, implicit)
+DEF_SVE_FUNCTION (svldnt1sw_gather, load_ext_gather_offset_restricted, d_integer, implicit)
+DEF_SVE_FUNCTION (svldnt1sw_gather, load_ext_gather_index_restricted, d_integer, implicit)
+DEF_SVE_FUNCTION (svldnt1ub_gather, load_ext_gather_offset_restricted, sd_integer, implicit)
+DEF_SVE_FUNCTION (svldnt1uh_gather, load_ext_gather_offset_restricted, sd_integer, implicit)
+DEF_SVE_FUNCTION (svldnt1uh_gather, load_ext_gather_index_restricted, sd_integer, implicit)
+DEF_SVE_FUNCTION (svldnt1uw_gather, load_ext_gather_offset_restricted, d_integer, implicit)
+DEF_SVE_FUNCTION (svldnt1uw_gather, load_ext_gather_index_restricted, d_integer, implicit)
+DEF_SVE_FUNCTION (svlogb, unary_to_int, all_float, mxz)
+DEF_SVE_FUNCTION (svmatch, compare, bh_integer, implicit)
+DEF_SVE_FUNCTION (svmaxp, binary, all_data, mx)
+DEF_SVE_FUNCTION (svmaxnmp, binary, all_float, mx)
+DEF_SVE_FUNCTION (svmla_lane, ternary_lane, hsd_integer, none)
+DEF_SVE_FUNCTION (svmlalb, ternary_long_opt_n, s_float_hsd_integer, none)
+DEF_SVE_FUNCTION (svmlalb_lane, ternary_long_lane, s_float_sd_integer, none)
+DEF_SVE_FUNCTION (svmlalt, ternary_long_opt_n, s_float_hsd_integer, none)
+DEF_SVE_FUNCTION (svmlalt_lane, ternary_long_lane, s_float_sd_integer, none)
+DEF_SVE_FUNCTION (svmls_lane, ternary_lane, hsd_integer, none)
+DEF_SVE_FUNCTION (svmlslb, ternary_long_opt_n, s_float_hsd_integer, none)
+DEF_SVE_FUNCTION (svmlslb_lane, ternary_long_lane, s_float_sd_integer, none)
+DEF_SVE_FUNCTION (svmlslt, ternary_long_opt_n, s_float_hsd_integer, none)
+DEF_SVE_FUNCTION (svmlslt_lane, ternary_long_lane, s_float_sd_integer, none)
+DEF_SVE_FUNCTION (svminp, binary, all_data, mx)
+DEF_SVE_FUNCTION (svminnmp, binary, all_float, mx)
+DEF_SVE_FUNCTION (svmovlb, unary_long, hsd_integer, none)
+DEF_SVE_FUNCTION (svmovlt, unary_long, hsd_integer, none)
+DEF_SVE_FUNCTION (svmul_lane, binary_lane, hsd_integer, none)
+DEF_SVE_FUNCTION (svmullb, binary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svmullb_lane, binary_long_lane, sd_integer, none)
+DEF_SVE_FUNCTION (svmullt, binary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svmullt_lane, binary_long_lane, sd_integer, none)
+DEF_SVE_FUNCTION (svnbsl, ternary_opt_n, all_integer, none)
+DEF_SVE_FUNCTION (svnmatch, compare, bh_integer, implicit)
+DEF_SVE_FUNCTION (svpmul, binary_opt_n, b_unsigned, none)
+DEF_SVE_FUNCTION (svpmullb, binary_long_opt_n, hd_unsigned, none)
+DEF_SVE_FUNCTION (svpmullb_pair, binary_opt_n, bs_unsigned, none)
+DEF_SVE_FUNCTION (svpmullt, binary_long_opt_n, hd_unsigned, none)
+DEF_SVE_FUNCTION (svpmullt_pair, binary_opt_n, bs_unsigned, none)
+DEF_SVE_FUNCTION (svqabs, unary, all_signed, mxz)
+DEF_SVE_FUNCTION (svqadd, binary_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svqcadd, binary_rotate, all_signed, none)
+DEF_SVE_FUNCTION (svqdmlalb, ternary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svqdmlalb_lane, ternary_long_lane, sd_signed, none)
+DEF_SVE_FUNCTION (svqdmlalbt, ternary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svqdmlalt, ternary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svqdmlalt_lane, ternary_long_lane, sd_signed, none)
+DEF_SVE_FUNCTION (svqdmlslb, ternary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svqdmlslb_lane, ternary_long_lane, sd_signed, none)
+DEF_SVE_FUNCTION (svqdmlslbt, ternary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svqdmlslt, ternary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svqdmlslt_lane, ternary_long_lane, sd_signed, none)
+DEF_SVE_FUNCTION (svqdmulh, binary_opt_n, all_signed, none)
+DEF_SVE_FUNCTION (svqdmulh_lane, binary_lane, hsd_signed, none)
+DEF_SVE_FUNCTION (svqdmullb, binary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svqdmullb_lane, binary_long_lane, sd_signed, none)
+DEF_SVE_FUNCTION (svqdmullt, binary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svqdmullt_lane, binary_long_lane, sd_signed, none)
+DEF_SVE_FUNCTION (svqneg, unary, all_signed, mxz)
+DEF_SVE_FUNCTION (svqrdmulh, binary_opt_n, all_signed, none)
+DEF_SVE_FUNCTION (svqrdmulh_lane, binary_lane, hsd_signed, none)
+DEF_SVE_FUNCTION (svqrdmlah, ternary_opt_n, all_signed, none)
+DEF_SVE_FUNCTION (svqrdmlah_lane, ternary_lane, hsd_signed, none)
+DEF_SVE_FUNCTION (svqrdmlsh, ternary_opt_n, all_signed, none)
+DEF_SVE_FUNCTION (svqrdmlsh_lane, ternary_lane, hsd_signed, none)
+DEF_SVE_FUNCTION (svqrdcmlah, ternary_rotate, all_signed, none)
+DEF_SVE_FUNCTION (svqrdcmlah_lane, ternary_lane_rotate, hs_signed, none)
+DEF_SVE_FUNCTION (svqrshrnb, shift_right_imm_narrowb, hsd_integer, none)
+DEF_SVE_FUNCTION (svqrshrnt, shift_right_imm_narrowt, hsd_integer, none)
+DEF_SVE_FUNCTION (svqrshrunb, shift_right_imm_narrowb_to_uint, hsd_signed, none)
+DEF_SVE_FUNCTION (svqrshrunt, shift_right_imm_narrowt_to_uint, hsd_signed, none)
+DEF_SVE_FUNCTION (svqshl, binary_int_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svqshlu, shift_left_imm_to_uint, all_signed, mxz)
+DEF_SVE_FUNCTION (svqshrnb, shift_right_imm_narrowb, hsd_integer, none)
+DEF_SVE_FUNCTION (svqshrnt, shift_right_imm_narrowt, hsd_integer, none)
+DEF_SVE_FUNCTION (svqshrunb, shift_right_imm_narrowb_to_uint, hsd_signed, none)
+DEF_SVE_FUNCTION (svqshrunt, shift_right_imm_narrowt_to_uint, hsd_signed, none)
+DEF_SVE_FUNCTION (svqrshl, binary_int_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svqsub, binary_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svqsubr, binary_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svqxtnb, unary_narrowb, hsd_integer, none)
+DEF_SVE_FUNCTION (svqxtnt, unary_narrowt, hsd_integer, none)
+DEF_SVE_FUNCTION (svqxtunb, unary_narrowb_to_uint, hsd_signed, none)
+DEF_SVE_FUNCTION (svqxtunt, unary_narrowt_to_uint, hsd_signed, none)
+DEF_SVE_FUNCTION (svraddhnb, binary_narrowb_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svraddhnt, binary_narrowt_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svrecpe, unary, s_unsigned, mxz)
+DEF_SVE_FUNCTION (svrhadd, binary_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svrsqrte, unary, s_unsigned, mxz)
+DEF_SVE_FUNCTION (svrshl, binary_int_opt_n, all_integer, mxz)
+DEF_SVE_FUNCTION (svrshr, shift_right_imm, all_integer, mxz)
+DEF_SVE_FUNCTION (svrshrnb, shift_right_imm_narrowb, hsd_integer, none)
+DEF_SVE_FUNCTION (svrshrnt, shift_right_imm_narrowt, hsd_integer, none)
+DEF_SVE_FUNCTION (svrsra, ternary_shift_right_imm, all_integer, none)
+DEF_SVE_FUNCTION (svrsubhnb, binary_narrowb_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svrsubhnt, binary_narrowt_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svsbclb, ternary_opt_n, sd_unsigned, none)
+DEF_SVE_FUNCTION (svsbclt, ternary_opt_n, sd_unsigned, none)
+DEF_SVE_FUNCTION (svshllb, shift_left_imm_long, hsd_integer, none)
+DEF_SVE_FUNCTION (svshllt, shift_left_imm_long, hsd_integer, none)
+DEF_SVE_FUNCTION (svshrnb, shift_right_imm_narrowb, hsd_integer, none)
+DEF_SVE_FUNCTION (svshrnt, shift_right_imm_narrowt, hsd_integer, none)
+DEF_SVE_FUNCTION (svsli, ternary_shift_left_imm, all_integer, none)
+DEF_SVE_FUNCTION (svsqadd, binary_int_opt_n, all_unsigned, mxz)
+DEF_SVE_FUNCTION (svsra, ternary_shift_right_imm, all_integer, none)
+DEF_SVE_FUNCTION (svsri, ternary_shift_right_imm, all_integer, none)
+DEF_SVE_FUNCTION (svstnt1_scatter, store_scatter_index_restricted, sd_data, implicit)
+DEF_SVE_FUNCTION (svstnt1_scatter, store_scatter_offset_restricted, sd_data, implicit)
+DEF_SVE_FUNCTION (svstnt1b_scatter, store_scatter_offset_restricted, sd_integer, implicit)
+DEF_SVE_FUNCTION (svstnt1h_scatter, store_scatter_index_restricted, sd_integer, implicit)
+DEF_SVE_FUNCTION (svstnt1h_scatter, store_scatter_offset_restricted, sd_integer, implicit)
+DEF_SVE_FUNCTION (svstnt1w_scatter, store_scatter_index_restricted, d_integer, implicit)
+DEF_SVE_FUNCTION (svstnt1w_scatter, store_scatter_offset_restricted, d_integer, implicit)
+DEF_SVE_FUNCTION (svsubhnb, binary_narrowb_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svsubhnt, binary_narrowt_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svsublb, binary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svsublbt, binary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svsublt, binary_long_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svsubltb, binary_long_opt_n, hsd_signed, none)
+DEF_SVE_FUNCTION (svsubwb, binary_wide_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svsubwt, binary_wide_opt_n, hsd_integer, none)
+DEF_SVE_FUNCTION (svtbl2, tbl_tuple, all_data, none)
+DEF_SVE_FUNCTION (svtbx, ternary_uint, all_data, none)
+DEF_SVE_FUNCTION (svuqadd, binary_uint_opt_n, all_signed, mxz)
+DEF_SVE_FUNCTION (svwhilege, compare_scalar, while, none)
+DEF_SVE_FUNCTION (svwhilegt, compare_scalar, while, none)
+DEF_SVE_FUNCTION (svwhilerw, compare_ptr, all_data, none)
+DEF_SVE_FUNCTION (svwhilewr, compare_ptr, all_data, none)
+DEF_SVE_FUNCTION (svxar, ternary_shift_right_imm, all_integer, none)
+#undef REQUIRED_EXTENSIONS
+
+#define REQUIRED_EXTENSIONS (AARCH64_FL_SVE2 | AARCH64_FL_SVE2_AES)
+DEF_SVE_FUNCTION (svaesd, binary, b_unsigned, none)
+DEF_SVE_FUNCTION (svaese, binary, b_unsigned, none)
+DEF_SVE_FUNCTION (svaesmc, unary, b_unsigned, none)
+DEF_SVE_FUNCTION (svaesimc, unary, b_unsigned, none)
+DEF_SVE_FUNCTION (svpmullb_pair, binary_opt_n, d_unsigned, none)
+DEF_SVE_FUNCTION (svpmullt_pair, binary_opt_n, d_unsigned, none)
+#undef REQUIRED_EXTENSIONS
+
+#define REQUIRED_EXTENSIONS (AARCH64_FL_SVE2 | AARCH64_FL_SVE2_BITPERM)
+DEF_SVE_FUNCTION (svbdep, binary_opt_n, all_unsigned, none)
+DEF_SVE_FUNCTION (svbext, binary_opt_n, all_unsigned, none)
+DEF_SVE_FUNCTION (svbgrp, binary_opt_n, all_unsigned, none)
+#undef REQUIRED_EXTENSIONS
+
+#define REQUIRED_EXTENSIONS (AARCH64_FL_SVE2 | AARCH64_FL_SVE2_SHA3)
+DEF_SVE_FUNCTION (svrax1, binary, d_integer, none)
+#undef REQUIRED_EXTENSIONS
+
+#define REQUIRED_EXTENSIONS (AARCH64_FL_SVE2 | AARCH64_FL_SVE2_SM4)
+DEF_SVE_FUNCTION (svsm4e, binary, s_unsigned, none)
+DEF_SVE_FUNCTION (svsm4ekey, binary, s_unsigned, none)
+#undef REQUIRED_EXTENSIONS
--- /dev/null
+/* ACLE support for AArch64 SVE (__ARM_FEATURE_SVE intrinsics)
+ Copyright (C) 2020 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_AARCH64_SVE_BUILTINS_SVE2_H
+#define GCC_AARCH64_SVE_BUILTINS_SVE2_H
+
+namespace aarch64_sve
+{
+ namespace functions
+ {
+ extern const function_base *const svaba;
+ extern const function_base *const svabalb;
+ extern const function_base *const svabalt;
+ extern const function_base *const svabdlb;
+ extern const function_base *const svabdlt;
+ extern const function_base *const svadalp;
+ extern const function_base *const svadclb;
+ extern const function_base *const svadclt;
+ extern const function_base *const svaddhnb;
+ extern const function_base *const svaddhnt;
+ extern const function_base *const svaddlb;
+ extern const function_base *const svaddlbt;
+ extern const function_base *const svaddlt;
+ extern const function_base *const svaddp;
+ extern const function_base *const svaddwb;
+ extern const function_base *const svaddwt;
+ extern const function_base *const svaesd;
+ extern const function_base *const svaese;
+ extern const function_base *const svaesimc;
+ extern const function_base *const svaesmc;
+ extern const function_base *const svbcax;
+ extern const function_base *const svbdep;
+ extern const function_base *const svbext;
+ extern const function_base *const svbgrp;
+ extern const function_base *const svbsl;
+ extern const function_base *const svbsl1n;
+ extern const function_base *const svbsl2n;
+ extern const function_base *const svcdot;
+ extern const function_base *const svcdot_lane;
+ extern const function_base *const svcvtlt;
+ extern const function_base *const svcvtnt;
+ extern const function_base *const svcvtx;
+ extern const function_base *const svcvtxnt;
+ extern const function_base *const sveor3;
+ extern const function_base *const sveorbt;
+ extern const function_base *const sveortb;
+ extern const function_base *const svhadd;
+ extern const function_base *const svhistcnt;
+ extern const function_base *const svhistseg;
+ extern const function_base *const svhsub;
+ extern const function_base *const svhsubr;
+ extern const function_base *const svldnt1_gather;
+ extern const function_base *const svldnt1sb_gather;
+ extern const function_base *const svldnt1sh_gather;
+ extern const function_base *const svldnt1sw_gather;
+ extern const function_base *const svldnt1ub_gather;
+ extern const function_base *const svldnt1uh_gather;
+ extern const function_base *const svldnt1uw_gather;
+ extern const function_base *const svlogb;
+ extern const function_base *const svmatch;
+ extern const function_base *const svmaxp;
+ extern const function_base *const svmaxnmp;
+ extern const function_base *const svmlalb;
+ extern const function_base *const svmlalb_lane;
+ extern const function_base *const svmlalt;
+ extern const function_base *const svmlalt_lane;
+ extern const function_base *const svmlslb;
+ extern const function_base *const svmlslb_lane;
+ extern const function_base *const svmlslt;
+ extern const function_base *const svmlslt_lane;
+ extern const function_base *const svminp;
+ extern const function_base *const svminnmp;
+ extern const function_base *const svmovlb;
+ extern const function_base *const svmovlt;
+ extern const function_base *const svmullb;
+ extern const function_base *const svmullb_lane;
+ extern const function_base *const svmullt;
+ extern const function_base *const svmullt_lane;
+ extern const function_base *const svnbsl;
+ extern const function_base *const svnmatch;
+ extern const function_base *const svpmul;
+ extern const function_base *const svpmullb;
+ extern const function_base *const svpmullb_pair;
+ extern const function_base *const svpmullt;
+ extern const function_base *const svpmullt_pair;
+ extern const function_base *const svqabs;
+ extern const function_base *const svqcadd;
+ extern const function_base *const svqdmlalb;
+ extern const function_base *const svqdmlalb_lane;
+ extern const function_base *const svqdmlalbt;
+ extern const function_base *const svqdmlalt;
+ extern const function_base *const svqdmlalt_lane;
+ extern const function_base *const svqdmlslb;
+ extern const function_base *const svqdmlslb_lane;
+ extern const function_base *const svqdmlslbt;
+ extern const function_base *const svqdmlslt;
+ extern const function_base *const svqdmlslt_lane;
+ extern const function_base *const svqdmulh;
+ extern const function_base *const svqdmulh_lane;
+ extern const function_base *const svqdmullb;
+ extern const function_base *const svqdmullb_lane;
+ extern const function_base *const svqdmullt;
+ extern const function_base *const svqdmullt_lane;
+ extern const function_base *const svqneg;
+ extern const function_base *const svqrdcmlah;
+ extern const function_base *const svqrdcmlah_lane;
+ extern const function_base *const svqrdmulh;
+ extern const function_base *const svqrdmulh_lane;
+ extern const function_base *const svqrdmlah;
+ extern const function_base *const svqrdmlah_lane;
+ extern const function_base *const svqrdmlsh;
+ extern const function_base *const svqrdmlsh_lane;
+ extern const function_base *const svqrshl;
+ extern const function_base *const svqrshrnb;
+ extern const function_base *const svqrshrnt;
+ extern const function_base *const svqrshrunb;
+ extern const function_base *const svqrshrunt;
+ extern const function_base *const svqshl;
+ extern const function_base *const svqshlu;
+ extern const function_base *const svqshrnb;
+ extern const function_base *const svqshrnt;
+ extern const function_base *const svqshrunb;
+ extern const function_base *const svqshrunt;
+ extern const function_base *const svqsubr;
+ extern const function_base *const svqxtnb;
+ extern const function_base *const svqxtnt;
+ extern const function_base *const svqxtunb;
+ extern const function_base *const svqxtunt;
+ extern const function_base *const svraddhnb;
+ extern const function_base *const svraddhnt;
+ extern const function_base *const svrax1;
+ extern const function_base *const svrhadd;
+ extern const function_base *const svrshl;
+ extern const function_base *const svrshr;
+ extern const function_base *const svrshrnb;
+ extern const function_base *const svrshrnt;
+ extern const function_base *const svrsra;
+ extern const function_base *const svrsubhnb;
+ extern const function_base *const svrsubhnt;
+ extern const function_base *const svsbclb;
+ extern const function_base *const svsbclt;
+ extern const function_base *const svshllb;
+ extern const function_base *const svshllt;
+ extern const function_base *const svshrnb;
+ extern const function_base *const svshrnt;
+ extern const function_base *const svsli;
+ extern const function_base *const svsm4e;
+ extern const function_base *const svsm4ekey;
+ extern const function_base *const svsqadd;
+ extern const function_base *const svsra;
+ extern const function_base *const svsri;
+ extern const function_base *const svstnt1_scatter;
+ extern const function_base *const svstnt1b_scatter;
+ extern const function_base *const svstnt1h_scatter;
+ extern const function_base *const svstnt1w_scatter;
+ extern const function_base *const svsubhnb;
+ extern const function_base *const svsubhnt;
+ extern const function_base *const svsublb;
+ extern const function_base *const svsublbt;
+ extern const function_base *const svsublt;
+ extern const function_base *const svsubltb;
+ extern const function_base *const svsubwb;
+ extern const function_base *const svsubwt;
+ extern const function_base *const svtbl2;
+ extern const function_base *const svtbx;
+ extern const function_base *const svuqadd;
+ extern const function_base *const svwhilege;
+ extern const function_base *const svwhilegt;
+ extern const function_base *const svwhilerw;
+ extern const function_base *const svwhilewr;
+ extern const function_base *const svxar;
+ }
+}
+
+#endif
#include "attribs.h"
#include "aarch64-sve-builtins.h"
#include "aarch64-sve-builtins-base.h"
+#include "aarch64-sve-builtins-sve2.h"
#include "aarch64-sve-builtins-shapes.h"
namespace aarch64_sve {
#define TYPES_b(S, D) \
S (b)
+/* _u8. */
+#define TYPES_b_unsigned(S, D) \
+ S (u8)
+
+/* _s8
+ _u8. */
+#define TYPES_b_integer(S, D) \
+ S (s8), TYPES_b_unsigned (S, D)
+
+/* _s8 _s16
+ _u8 _u16. */
+#define TYPES_bh_integer(S, D) \
+ S (s8), S (s16), S (u8), S (u16)
+
+/* _u8 _u32. */
+#define TYPES_bs_unsigned(S, D) \
+ S (u8), S (u32)
+
/* _s8 _s16 _s32. */
#define TYPES_bhs_signed(S, D) \
S (s8), S (s16), S (s32)
#define TYPES_h_integer(S, D) \
S (s16), S (u16)
+/* _s16 _s32. */
+#define TYPES_hs_signed(S, D) \
+ S (s16), S (s32)
+
+/* _s16 _s32
+ _u16 _u32. */
+#define TYPES_hs_integer(S, D) \
+ TYPES_hs_signed (S, D), S (u16), S (u32)
+
/* _f16 _f32. */
#define TYPES_hs_float(S, D) \
S (f16), S (f32)
+/* _u16 _u64. */
+#define TYPES_hd_unsigned(S, D) \
+ S (u16), S (u64)
+
+/* _s16 _s32 _s64. */
+#define TYPES_hsd_signed(S, D) \
+ S (s16), S (s32), S (s64)
+
/* _s16 _s32 _s64
_u16 _u32 _u64. */
#define TYPES_hsd_integer(S, D) \
- S (s16), S (s32), S (s64), S (u16), S (u32), S (u64)
+ TYPES_hsd_signed (S, D), S (u16), S (u32), S (u64)
+
+/* _f32
+ _s16 _s32 _s64
+ _u16 _u32 _u64. */
+#define TYPES_s_float_hsd_integer(S, D) \
+ S (f32), TYPES_hsd_integer (S, D)
+
+/* _f32
+ _s32 _s64
+ _u32 _u64. */
+#define TYPES_s_float_sd_integer(S, D) \
+ S (f32), TYPES_sd_integer (S, D)
+
+/* _u32. */
+#define TYPES_s_unsigned(S, D) \
+ S (u32)
/* _s32 _u32. */
#define TYPES_s_integer(S, D) \
- S (s32), S (u32)
+ S (s32), TYPES_s_unsigned (S, D)
+
+/* _s32 _s64. */
+#define TYPES_sd_signed(S, D) \
+ S (s32), S (s64)
+
+/* _u32 _u64. */
+#define TYPES_sd_unsigned(S, D) \
+ S (u32), S (u64)
/* _s32 _s64
_u32 _u64. */
#define TYPES_sd_integer(S, D) \
- S (s32), S (s64), S (u32), S (u64)
+ TYPES_sd_signed (S, D), TYPES_sd_unsigned (S, D)
/* _f32 _f64
_s32 _s64
#define TYPES_all_float_and_sd_integer(S, D) \
TYPES_all_float (S, D), TYPES_sd_integer (S, D)
+/* _u64. */
+#define TYPES_d_unsigned(S, D) \
+ S (u64)
+
/* _s64
_u64. */
#define TYPES_d_integer(S, D) \
- S (s64), S (u64)
+ S (s64), TYPES_d_unsigned (S, D)
+
+/* _f64
+ _s64
+ _u64. */
+#define TYPES_d_data(S, D) \
+ S (f64), TYPES_d_integer (S, D)
/* All the type combinations allowed by svcvt. */
#define TYPES_cvt(S, D) \
D (u32, f16), D (u32, f32), D (u32, f64), \
D (u64, f16), D (u64, f32), D (u64, f64)
+/* _f32_f16
+ _f64_f32. */
+#define TYPES_cvt_long(S, D) \
+ D (f32, f16), D (f64, f32)
+
+/* _f16_f32. */
+#define TYPES_cvt_narrow_s(S, D) \
+ D (f32, f64)
+
+/* _f16_f32
+ _f32_f64. */
+#define TYPES_cvt_narrow(S, D) \
+ D (f16, f32), TYPES_cvt_narrow_s (S, D)
+
/* { _s32 _s64 } x { _b8 _b16 _b32 _b64 }
{ _u32 _u64 }. */
#define TYPES_inc_dec_n1(D, A) \
DEF_SVE_TYPES_ARRAY (all_integer);
DEF_SVE_TYPES_ARRAY (all_data);
DEF_SVE_TYPES_ARRAY (b);
+DEF_SVE_TYPES_ARRAY (b_unsigned);
+DEF_SVE_TYPES_ARRAY (b_integer);
+DEF_SVE_TYPES_ARRAY (bh_integer);
+DEF_SVE_TYPES_ARRAY (bs_unsigned);
DEF_SVE_TYPES_ARRAY (bhs_signed);
DEF_SVE_TYPES_ARRAY (bhs_unsigned);
DEF_SVE_TYPES_ARRAY (bhs_integer);
DEF_SVE_TYPES_ARRAY (h_integer);
+DEF_SVE_TYPES_ARRAY (hs_signed);
+DEF_SVE_TYPES_ARRAY (hs_integer);
DEF_SVE_TYPES_ARRAY (hs_float);
+DEF_SVE_TYPES_ARRAY (hd_unsigned);
+DEF_SVE_TYPES_ARRAY (hsd_signed);
DEF_SVE_TYPES_ARRAY (hsd_integer);
+DEF_SVE_TYPES_ARRAY (s_float_hsd_integer);
+DEF_SVE_TYPES_ARRAY (s_float_sd_integer);
+DEF_SVE_TYPES_ARRAY (s_unsigned);
DEF_SVE_TYPES_ARRAY (s_integer);
+DEF_SVE_TYPES_ARRAY (sd_signed);
+DEF_SVE_TYPES_ARRAY (sd_unsigned);
DEF_SVE_TYPES_ARRAY (sd_integer);
DEF_SVE_TYPES_ARRAY (sd_data);
DEF_SVE_TYPES_ARRAY (all_float_and_sd_integer);
+DEF_SVE_TYPES_ARRAY (d_unsigned);
DEF_SVE_TYPES_ARRAY (d_integer);
+DEF_SVE_TYPES_ARRAY (d_data);
DEF_SVE_TYPES_ARRAY (cvt);
+DEF_SVE_TYPES_ARRAY (cvt_long);
+DEF_SVE_TYPES_ARRAY (cvt_narrow_s);
+DEF_SVE_TYPES_ARRAY (cvt_narrow);
DEF_SVE_TYPES_ARRAY (inc_dec_n);
DEF_SVE_TYPES_ARRAY (reinterpret);
DEF_SVE_TYPES_ARRAY (while);
explicit suffix. */
static const predication_index preds_implicit[] = { PRED_implicit, NUM_PREDS };
+/* Used by functions that allow merging and "don't care" predication,
+ but are not suitable for predicated MOVPRFX. */
+static const predication_index preds_mx[] = {
+ PRED_m, PRED_x, NUM_PREDS
+};
+
/* Used by functions that allow merging, zeroing and "don't care"
predication. */
static const predication_index preds_mxz[] = {
resolution. REQUIRED_EXTENSIONS are the set of architecture extensions
that the function requires.
- For simplicity, deal with duplicate attempts to add the same
- function. */
+ For simplicity, deal with duplicate attempts to add the same function,
+ including cases in which the new function requires more features than
+ the original one did. In that case we'll check whether the required
+ features are available as part of resolving the function to the
+ relevant unique function. */
void
function_builder::add_overloaded_function (const function_instance &instance,
uint64_t required_extensions)
char *name = get_name (instance, true);
if (registered_function **map_value = m_overload_names.get (name))
gcc_assert ((*map_value)->instance == instance
- && (*map_value)->required_extensions == required_extensions);
+ && ((*map_value)->required_extensions
+ & ~required_extensions) == 0);
else
{
registered_function &rfn
{
error_at (location, "passing %qT to argument %d of %qE, but %qT is not"
" a valid SVE element type", actual, argno + 1, fndecl,
- target);
+ build_qualified_type (target, 0));
return NUM_TYPE_SUFFIXES;
}
unsigned int bits = type_suffixes[type].element_bits;
return false;
}
+/* Require argument ARGNO to match argument FIRST_ARGNO, which was inferred
+ to be a pointer to a scalar element of type TYPE. */
+bool
+function_resolver::require_matching_pointer_type (unsigned int argno,
+ unsigned int first_argno,
+ type_suffix_index type)
+{
+ type_suffix_index new_type = infer_pointer_type (argno);
+ if (new_type == NUM_TYPE_SUFFIXES)
+ return false;
+
+ if (type != new_type)
+ {
+ error_at (location, "passing %qT to argument %d of %qE, but"
+ " argument %d had type %qT", get_argument_type (argno),
+ argno + 1, fndecl, first_argno + 1,
+ get_argument_type (first_argno));
+ return false;
+ }
+ return true;
+}
+
/* Require argument ARGNO to be a (possibly variable) scalar, using EXPECTED
as the name of its expected type. Return true if the argument has the
right form, otherwise report an appropriate error. */
return mode;
}
+ unsigned int required_bits = type_suffixes[type].element_bits;
+ if (required_bits == 32
+ && displacement_units () == UNITS_elements
+ && !lookup_form (MODE_s32index, type)
+ && !lookup_form (MODE_u32index, type))
+ {
+ if (lookup_form (MODE_u32base_index, type))
+ {
+ if (type_suffix_ids[0] == NUM_TYPE_SUFFIXES)
+ {
+ gcc_assert (!load_p);
+ error_at (location, "when storing %qT, %qE requires a vector"
+ " base and a scalar index", get_vector_type (type),
+ fndecl);
+ }
+ else
+ error_at (location, "%qE requires a vector base and a scalar"
+ " index", fndecl);
+ }
+ else
+ error_at (location, "%qE does not support 32-bit vector type %qT",
+ fndecl, get_vector_type (type));
+ return MODE_none;
+ }
+
/* Check for some form of vector type, without naming any in particular
as being expected. */
type_suffix_index displacement_type = infer_vector_type (argno);
/* If the displacement type is consistent with the data vector type,
try to find the associated mode suffix. This will fall through
for non-integral displacement types. */
- unsigned int required_bits = type_suffixes[type].element_bits;
if (type_suffixes[displacement_type].element_bits == required_bits)
{
vector_type_index displacement_vector_type
displacement_vector_type,
displacement_units ());
if (mode != MODE_none)
- return mode;
+ {
+ if (mode == MODE_s32offset
+ && !lookup_form (mode, type)
+ && lookup_form (MODE_u32offset, type))
+ {
+ if (type_suffix_ids[0] == NUM_TYPE_SUFFIXES)
+ error_at (location, "%qE does not support 32-bit sign-extended"
+ " offsets", fndecl);
+ else
+ error_at (location, "%qE does not support sign-extended"
+ " offsets", fndecl);
+ return MODE_none;
+ }
+ return mode;
+ }
}
if (type_suffix_ids[0] == NUM_TYPE_SUFFIXES)
in the latter case. This "_n" form might only exist for certain
type suffixes.
- ARGNO is the index of the final argument. The inferred type
- suffix is FIRST_TYPE, which was obtained from argument FIRST_ARGNO.
+ ARGNO is the index of the final argument. The inferred type suffix
+ was obtained from argument FIRST_ARGNO, which has type FIRST_TYPE.
EXPECTED_TCLASS and EXPECTED_BITS describe the expected properties
of the final vector or scalar argument, in the same way as for
- require_derived_vector_type.
+ require_derived_vector_type. INFERRED_TYPE is the inferred type
+ suffix itself, or NUM_TYPE_SUFFIXES if it's the same as FIRST_TYPE.
Return the function decl of the resolved function on success,
otherwise report a suitable error and return error_mark_node. */
finish_opt_n_resolution (unsigned int argno, unsigned int first_argno,
type_suffix_index first_type,
type_class_index expected_tclass,
- unsigned int expected_bits)
+ unsigned int expected_bits,
+ type_suffix_index inferred_type)
{
- tree scalar_form = lookup_form (MODE_n, first_type);
+ if (inferred_type == NUM_TYPE_SUFFIXES)
+ inferred_type = first_type;
+ tree scalar_form = lookup_form (MODE_n, inferred_type);
/* Allow the final argument to be scalar, if an _n form exists. */
if (scalar_argument_p (argno))
/* Check the vector form normally. If that succeeds, raise an
error about having no corresponding _n form. */
- tree res = resolve_to (mode_suffix_id, first_type);
+ tree res = resolve_to (mode_suffix_id, inferred_type);
if (res != error_mark_node)
error_at (location, "passing %qT to argument %d of %qE, but its"
" %qT form does not accept scalars",
expected_tclass, expected_bits))
return error_mark_node;
- return resolve_to (mode_suffix_id, first_type);
+ return resolve_to (mode_suffix_id, inferred_type);
}
/* Resolve a (possibly predicated) unary function. If the function uses
- merge predication, there is an extra vector argument before the
- governing predicate that specifies the values of inactive elements.
- This argument has the following properties:
+ merge predication or if TREAT_AS_MERGE_P is true, there is an extra
+ vector argument before the governing predicate that specifies the
+ values of inactive elements. This argument has the following
+ properties:
- the type class must be the same as for active elements if MERGE_TCLASS
is SAME_TYPE_CLASS, otherwise it must be MERGE_TCLASS itself.
otherwise report a suitable error and return error_mark_node. */
tree
function_resolver::resolve_unary (type_class_index merge_tclass,
- unsigned int merge_bits)
+ unsigned int merge_bits,
+ bool treat_as_merge_p)
{
type_suffix_index type;
- if (pred == PRED_m)
+ if (pred == PRED_m || treat_as_merge_p)
{
if (!check_num_arguments (3))
return error_mark_node;
return build_int_cst (build_pointer_type (type), TYPE_ALIGN_UNIT (type));
}
+/* Fold the call to a call to INSTANCE, with the same arguments. */
+gimple *
+gimple_folder::redirect_call (const function_instance &instance)
+{
+ registered_function *rfn
+ = function_table->find_with_hash (instance, instance.hash ());
+ if (!rfn)
+ return NULL;
+
+ gimple_call_set_fndecl (call, rfn->decl);
+ return call;
+}
+
/* Fold the call to a PTRUE, taking the element size from type suffix 0. */
gimple *
gimple_folder::fold_to_ptrue ()
- a scalar base
- a vector displacement
+
+ If SCALED_P is true, it also expects:
+
- a const_int that is 1 if the displacement is zero-extended from 32 bits
- - a scaling multiplier (1 for bytes, 2 for .h indices, etc.). */
+ - a scaling multiplier (1 for bytes, 2 for .h indices, etc.).
+
+ If SCALED_P is false, the displacement is implicitly zero-extended
+ and the scaling multiplier is implicitly 1. */
void
-function_expander::prepare_gather_address_operands (unsigned int argno)
+function_expander::prepare_gather_address_operands (unsigned int argno,
+ bool scaled_p)
{
machine_mode mem_mode = memory_vector_mode ();
tree vector_type = base_vector_type ();
units_index units = displacement_units ();
+ int shift_idx = -1;
if (units == UNITS_none)
{
/* Vector base, no displacement. Convert to an integer zero base
a vector byte offset. */
std::swap (args[argno], args[argno + 1]);
if (units == UNITS_elements)
- {
- /* Convert the original scalar array index to a byte offset. */
- rtx size = gen_int_mode (GET_MODE_UNIT_SIZE (mem_mode), DImode);
- args[argno] = simplify_gen_binary (MULT, DImode, args[argno], size);
- units = UNITS_bytes;
- }
+ shift_idx = argno;
}
else
{
- /* Scalar base, vector displacement. This is what the md pattern wants,
- so we just need to make sure that the scalar base has DImode. */
+ /* Scalar base, vector displacement. This is the order that the md
+ pattern wants. */
if (Pmode == SImode)
args[argno] = simplify_gen_unary (ZERO_EXTEND, DImode,
args[argno], SImode);
vector_type = displacement_vector_type ();
+ if (units == UNITS_elements && !scaled_p)
+ shift_idx = argno + 1;
}
tree scalar_displacement_type = TREE_TYPE (vector_type);
- bool uxtw_p = (TYPE_PRECISION (scalar_displacement_type) < 64
- && TYPE_UNSIGNED (scalar_displacement_type));
+ if (shift_idx >= 0)
+ {
+ machine_mode arg_mode = GET_MODE (args[shift_idx]);
+ if (arg_mode == VOIDmode)
+ arg_mode = DImode;
+ unsigned int elt_bytes = GET_MODE_UNIT_SIZE (mem_mode);
+ rtx shift = gen_int_mode (exact_log2 (elt_bytes), DImode);
+ args[shift_idx] = simplify_gen_binary (ASHIFT, arg_mode,
+ args[shift_idx], shift);
+ units = UNITS_bytes;
+ }
+
+ bool uxtw_p = (TYPE_PRECISION (scalar_displacement_type) == 64
+ || TYPE_UNSIGNED (scalar_displacement_type));
unsigned int scale = (units == UNITS_bytes
? 1 : GET_MODE_UNIT_SIZE (mem_mode));
- args.quick_insert (argno + 2, GEN_INT (uxtw_p));
- args.quick_insert (argno + 3, GEN_INT (scale));
+ if (scaled_p)
+ {
+ args.quick_insert (argno + 2, GEN_INT (uxtw_p));
+ args.quick_insert (argno + 3, GEN_INT (scale));
+ }
+ else
+ gcc_assert (uxtw_p && scale == 1);
}
/* The final argument is an immediate svprfop value. Add two fake arguments
}
if (pred == PRED_none || pred == PRED_x)
- return use_unpred_insn (code_for_aarch64_sve (unspec, mode));
+ {
+ insn_code icode = maybe_code_for_aarch64_sve (unspec, mode);
+ if (icode != CODE_FOR_nothing)
+ return use_unpred_insn (icode);
+ }
insn_code icode = code_for_cond (unspec, vector_mode (0));
return use_cond_insn (icode, merge_argno);
DEF_SVE_TYPE_SUFFIX (u64, svuint64_t, unsigned, 64, VNx2DImode)
#include "aarch64-sve-builtins-base.def"
+#include "aarch64-sve-builtins-sve2.def"
#undef DEF_SVE_FUNCTION
#undef DEF_SVE_TYPE_SUFFIX
type_suffix_index);
bool require_derived_scalar_type (unsigned int, type_class_index,
unsigned int = SAME_SIZE);
+ bool require_matching_pointer_type (unsigned int, unsigned int,
+ type_suffix_index);
bool require_integer_immediate (unsigned int);
vector_type_index infer_vector_base_type (unsigned int);
bool check_num_arguments (unsigned int);
bool check_gp_argument (unsigned int, unsigned int &, unsigned int &);
tree resolve_unary (type_class_index = SAME_TYPE_CLASS,
- unsigned int = SAME_SIZE);
+ unsigned int = SAME_SIZE, bool = false);
tree resolve_uniform (unsigned int, unsigned int = 0);
tree resolve_uniform_opt_n (unsigned int);
tree finish_opt_n_resolution (unsigned int, unsigned int, type_suffix_index,
type_class_index = SAME_TYPE_CLASS,
- unsigned int = SAME_SIZE);
+ unsigned int = SAME_SIZE,
+ type_suffix_index = NUM_TYPE_SUFFIXES);
tree resolve ();
tree fold_contiguous_base (gimple_seq &, tree);
tree load_store_cookie (tree);
+ gimple *redirect_call (const function_instance &);
gimple *fold_to_pfalse ();
gimple *fold_to_ptrue ();
gimple *fold_to_vl_pred (unsigned int);
void add_fixed_operand (rtx);
rtx generate_insn (insn_code);
- void prepare_gather_address_operands (unsigned int);
+ void prepare_gather_address_operands (unsigned int, bool = true);
void prepare_prefetch_operands ();
void add_ptrue_hint (unsigned int, machine_mode);
void rotate_inputs_left (unsigned int, unsigned int);
;; - ORR (merging form only)
;; - SMAX
;; - SMIN
+;; - SQADD (SVE2 merging form only)
+;; - SQSUB (SVE2 merging form only)
;; - SUB (merging form only)
;; - UMAX
;; - UMIN
+;; - UQADD (SVE2 merging form only)
+;; - UQSUB (SVE2 merging form only)
;; -------------------------------------------------------------------------
;; Unpredicated integer binary operations that have an immediate form.
;; -------------------------------------------------------------------------
;; Includes:
;; - ASRD
+;; - SQSHLU (SVE2)
+;; - SRSHR (SVE2)
+;; - URSHR (SVE2)
;; -------------------------------------------------------------------------
-;; Unpredicated ASRD.
+;; Unpredicated <SVE_INT_OP>.
(define_expand "sdiv_pow2<mode>3"
[(set (match_operand:SVE_FULL_I 0 "register_operand")
(unspec:SVE_FULL_I
}
)
-;; Predicated ASRD with merging.
-(define_expand "@cond_asrd<mode>"
+;; Predicated right shift with merging.
+(define_expand "@cond_<sve_int_op><mode>"
[(set (match_operand:SVE_FULL_I 0 "register_operand")
(unspec:SVE_FULL_I
[(match_operand:<VPRED> 1 "register_operand")
(unspec:SVE_FULL_I
[(match_operand:SVE_FULL_I 2 "register_operand")
- (match_operand:SVE_FULL_I 3 "aarch64_simd_rshift_imm")]
- UNSPEC_ASRD)
+ (match_operand:SVE_FULL_I 3 "aarch64_simd_<lr>shift_imm")]
+ SVE_INT_SHIFT_IMM)
(match_operand:SVE_FULL_I 4 "aarch64_simd_reg_or_zero")]
UNSPEC_SEL))]
"TARGET_SVE"
)
-;; Predicated ASRD, merging with the first input.
-(define_insn "*cond_asrd<mode>_2"
+;; Predicated right shift, merging with the first input.
+(define_insn "*cond_<sve_int_op><mode>_2"
[(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
(unspec:SVE_FULL_I
[(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
(unspec:SVE_FULL_I
[(match_operand:SVE_FULL_I 2 "register_operand" "0, w")
- (match_operand:SVE_FULL_I 3 "aarch64_simd_rshift_imm")]
- UNSPEC_ASRD)
+ (match_operand:SVE_FULL_I 3 "aarch64_simd_<lr>shift_imm")]
+ SVE_INT_SHIFT_IMM)
(match_dup 2)]
UNSPEC_SEL))]
"TARGET_SVE"
"@
- asrd\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
- movprfx\t%0, %2\;asrd\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3"
+ <sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
+ movprfx\t%0, %2\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3"
[(set_attr "movprfx" "*,yes")])
-;; Predicated ASRD, merging with zero.
-(define_insn "*cond_asrd<mode>_z"
+;; Predicated right shift, merging with zero.
+(define_insn "*cond_<sve_int_op><mode>_z"
[(set (match_operand:SVE_FULL_I 0 "register_operand" "=w")
(unspec:SVE_FULL_I
[(match_operand:<VPRED> 1 "register_operand" "Upl")
(unspec:SVE_FULL_I
[(match_operand:SVE_FULL_I 2 "register_operand" "w")
- (match_operand:SVE_FULL_I 3 "aarch64_simd_rshift_imm")]
- UNSPEC_ASRD)
+ (match_operand:SVE_FULL_I 3 "aarch64_simd_<lr>shift_imm")]
+ SVE_INT_SHIFT_IMM)
(match_operand:SVE_FULL_I 4 "aarch64_simd_imm_zero")]
UNSPEC_SEL))]
"TARGET_SVE"
- "movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;asrd\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3"
+ "movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3"
[(set_attr "movprfx" "yes")])
;; -------------------------------------------------------------------------
;; ---- [INT] While tests
;; -------------------------------------------------------------------------
;; Includes:
+;; - WHILEGE (SVE2)
+;; - WHILEGT (SVE2)
+;; - WHILEHI (SVE2)
+;; - WHILEHS (SVE2)
;; - WHILELE
;; - WHILELO
;; - WHILELS
;; The file is organised into the following sections (search for the full
;; line):
;;
+;; == Moves
+;; ---- Non-temporal gather loads
+;; ---- Non-temporal scatter stores
+;;
;; == Uniform binary arithmnetic
+;; ---- [INT] Multiplication
;; ---- [INT] Scaled high-part multiplication
;; ---- [INT] General binary arithmetic that maps to unspecs
+;; ---- [INT] Saturating binary arithmetic
+;; ---- [INT] Saturating left shifts
;;
;; == Uniform ternary arithmnetic
+;; ---- [INT] General ternary arithmetic that maps to unspecs
+;; ---- [INT] Multiply-and-accumulate operations
+;; ---- [INT] Binary logic operations with rotation
;; ---- [INT] Ternary logic operations
;; ---- [INT] Shift-and-accumulate operations
+;; ---- [INT] Shift-and-insert operations
+;; ---- [INT] Sum of absolute differences
;;
;; == Extending arithmetic
+;; ---- [INT] Wide binary arithmetic
;; ---- [INT] Long binary arithmetic
+;; ---- [INT] Long left shifts
+;; ---- [INT] Long binary arithmetic with accumulation
+;; ---- [FP] Long multiplication with accumulation
;;
;; == Narrowing arithnetic
+;; ---- [INT] Narrowing unary arithmetic
+;; ---- [INT] Narrowing binary arithmetic
;; ---- [INT] Narrowing right shifts
;;
+;; == Pairwise arithmetic
+;; ---- [INT] Pairwise arithmetic
+;; ---- [FP] Pairwise arithmetic
+;; ---- [INT] Pairwise arithmetic with accumulation
+;;
+;; == Complex arithmetic
+;; ---- [INT] Complex binary operations
+;; ---- [INT] Complex ternary operations
+;; ---- [INT] Complex dot product
+;;
+;; == Conversions
+;; ---- [FP<-FP] Widening conversions
+;; ---- [FP<-FP] Narrowing conversions
+;;
+;; == Other arithmetic
+;; ---- [INT] Reciprocal approximation
+;; ---- [INT<-FP] Base-2 logarithm
+;; ---- [INT] Polynomial multiplication
+;;
+;; == Permutation
+;; ---- [INT,FP] General permutes
+;; ---- [INT] Optional bit-permute extensions
+;;
;; == General
;; ---- Check for aliases between pointers
+;; ---- Histogram processing
+;; ---- String matching
+;;
+;; == Crypotographic extensions
+;; ---- Optional AES extensions
+;; ---- Optional SHA-3 extensions
+;; ---- Optional SM4 extensions
+
+;; =========================================================================
+;; == Moves
+;; =========================================================================
+
+;; -------------------------------------------------------------------------
+;; ---- Non-temporal gather loads
+;; -------------------------------------------------------------------------
+;; Includes gather forms of:
+;; - LDNT1B
+;; - LDNT1D
+;; - LDNT1H
+;; - LDNT1W
+;; -------------------------------------------------------------------------
+
+;; Non-extending loads.
+(define_insn "@aarch64_gather_ldnt<mode>"
+ [(set (match_operand:SVE_FULL_SD 0 "register_operand" "=w, w")
+ (unspec:SVE_FULL_SD
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
+ (match_operand:DI 2 "aarch64_reg_or_zero" "Z, r")
+ (match_operand:<V_INT_EQUIV> 3 "register_operand" "w, w")
+ (mem:BLK (scratch))]
+ UNSPEC_LDNT1_GATHER))]
+ "TARGET_SVE2"
+ "@
+ ldnt1<Vesize>\t%0.<Vetype>, %1/z, [%3.<Vetype>]
+ ldnt1<Vesize>\t%0.<Vetype>, %1/z, [%3.<Vetype>, %2]"
+)
+
+;; Extending loads.
+(define_insn_and_rewrite "@aarch64_gather_ldnt_<ANY_EXTEND:optab><SVE_FULL_SDI:mode><SVE_PARTIAL_I:mode>"
+ [(set (match_operand:SVE_FULL_SDI 0 "register_operand" "=w, w")
+ (unspec:SVE_FULL_SDI
+ [(match_operand:<SVE_FULL_SDI:VPRED> 4 "general_operand" "UplDnm, UplDnm")
+ (ANY_EXTEND:SVE_FULL_SDI
+ (unspec:SVE_PARTIAL_I
+ [(match_operand:<SVE_FULL_SDI:VPRED> 1 "register_operand" "Upl, Upl")
+ (match_operand:DI 2 "aarch64_reg_or_zero" "Z, r")
+ (match_operand:<SVE_FULL_SDI:V_INT_EQUIV> 3 "register_operand" "w, w")
+ (mem:BLK (scratch))]
+ UNSPEC_LDNT1_GATHER))]
+ UNSPEC_PRED_X))]
+ "TARGET_SVE2
+ && (~<SVE_FULL_SDI:narrower_mask> & <SVE_PARTIAL_I:self_mask>) == 0"
+ "@
+ ldnt1<ANY_EXTEND:s><SVE_PARTIAL_I:Vesize>\t%0.<SVE_FULL_SDI:Vetype>, %1/z, [%3.<SVE_FULL_SDI:Vetype>]
+ ldnt1<ANY_EXTEND:s><SVE_PARTIAL_I:Vesize>\t%0.<SVE_FULL_SDI:Vetype>, %1/z, [%3.<SVE_FULL_SDI:Vetype>, %2]"
+ "&& !CONSTANT_P (operands[4])"
+ {
+ operands[4] = CONSTM1_RTX (<SVE_FULL_SDI:VPRED>mode);
+ }
+)
+
+;; -------------------------------------------------------------------------
+;; ---- Non-temporal scatter stores
+;; -------------------------------------------------------------------------
+;; Includes scatter forms of:
+;; - STNT1B
+;; - STNT1D
+;; - STNT1H
+;; - STNT1W
+;; -------------------------------------------------------------------------
+
+;; Non-truncating stores.
+(define_insn "@aarch64_scatter_stnt<mode>"
+ [(set (mem:BLK (scratch))
+ (unspec:BLK
+ [(match_operand:<VPRED> 0 "register_operand" "Upl, Upl")
+ (match_operand:DI 1 "aarch64_reg_or_zero" "Z, r")
+ (match_operand:<V_INT_EQUIV> 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_SD 3 "register_operand" "w, w")]
+
+ UNSPEC_STNT1_SCATTER))]
+ "TARGET_SVE"
+ "@
+ stnt1<Vesize>\t%3.<Vetype>, %0, [%2.<Vetype>]
+ stnt1<Vesize>\t%3.<Vetype>, %0, [%2.<Vetype>, %1]"
+)
+
+;; Truncating stores.
+(define_insn "@aarch64_scatter_stnt_<SVE_FULL_SDI:mode><SVE_PARTIAL_I:mode>"
+ [(set (mem:BLK (scratch))
+ (unspec:BLK
+ [(match_operand:<SVE_FULL_SDI:VPRED> 0 "register_operand" "Upl, Upl")
+ (match_operand:DI 1 "aarch64_reg_or_zero" "Z, r")
+ (match_operand:<SVE_FULL_SDI:V_INT_EQUIV> 2 "register_operand" "w, w")
+ (truncate:SVE_PARTIAL_I
+ (match_operand:SVE_FULL_SDI 3 "register_operand" "w, w"))]
+ UNSPEC_STNT1_SCATTER))]
+ "TARGET_SVE2
+ && (~<SVE_FULL_SDI:narrower_mask> & <SVE_PARTIAL_I:self_mask>) == 0"
+ "@
+ stnt1<SVE_PARTIAL_I:Vesize>\t%3.<SVE_FULL_SDI:Vetype>, %0, [%2.<SVE_FULL_SDI:Vetype>]
+ stnt1<SVE_PARTIAL_I:Vesize>\t%3.<SVE_FULL_SDI:Vetype>, %0, [%2.<SVE_FULL_SDI:Vetype>, %1]"
+)
;; =========================================================================
;; == Uniform binary arithmnetic
;; =========================================================================
;; -------------------------------------------------------------------------
+;; ---- [INT] Multiplication
+;; -------------------------------------------------------------------------
+;; Includes the lane forms of:
+;; - MUL
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_mul_lane_<mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w")
+ (mult:SVE_FULL_HSDI
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:SVE_FULL_HSDI 2 "register_operand" "<sve_lane_con>")
+ (match_operand:SI 3 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)
+ (match_operand:SVE_FULL_HSDI 1 "register_operand" "w")))]
+ "TARGET_SVE2"
+ "mul\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>[%3]"
+)
+
+;; -------------------------------------------------------------------------
;; ---- [INT] Scaled high-part multiplication
;; -------------------------------------------------------------------------
;; The patterns in this section are synthetic.
rtx prod_b = gen_reg_rtx (<VWIDE>mode);
rtx prod_t = gen_reg_rtx (<VWIDE>mode);
- emit_insn (gen_<su>mullb<Vwide> (prod_b, operands[1], operands[2]));
- emit_insn (gen_<su>mullt<Vwide> (prod_t, operands[1], operands[2]));
+ emit_insn (gen_aarch64_sve_<su>mullb<Vwide> (prod_b, operands[1],
+ operands[2]));
+ emit_insn (gen_aarch64_sve_<su>mullt<Vwide> (prod_t, operands[1],
+ operands[2]));
rtx shift = GEN_INT (GET_MODE_UNIT_BITSIZE (<MODE>mode) - 1);
- emit_insn (gen_<r>shrnb<mode> (operands[0], prod_b, shift));
- emit_insn (gen_<r>shrnt<mode> (operands[0], operands[0], prod_t, shift));
+ emit_insn (gen_aarch64_sve_<r>shrnb<Vwide> (operands[0], prod_b, shift));
+ emit_insn (gen_aarch64_sve_<r>shrnt<Vwide> (operands[0], operands[0],
+ prod_t, shift));
DONE;
}
;; Includes:
;; - SHADD
;; - SHSUB
+;; - SHSUBR
+;; - SQRSHL
+;; - SQRSHLR
;; - SRHADD
+;; - SRSHL
+;; - SRSHLR
+;; - SUQADD
;; - UHADD
;; - UHSUB
+;; - UHSUBR
+;; - UQRSHL
+;; - UQRSHLR
;; - URHADD
+;; - URSHL
+;; - URSHLR
+;; - USQADD
;; -------------------------------------------------------------------------
;; Integer average (floor).
}
)
-;; Predicated halving addsub.
-(define_insn "*<sur>h<addsub><mode>"
+;; The immediate form of SQADD acts as an immediate form of SUQADD
+;; over its full range. In contrast to the ss_plus pattern, we do
+;; not need to treat byte immediates specially. E.g.:
+;;
+;; SQADD Z0.B, Z0.B, #128
+;;
+;; is equivalent to:
+;;
+;; MOV Z1.B, #128
+;; SUQADD Z0.B, P0/M, Z0.B, Z1.B
+;;
+;; even though it's not equivalent to:
+;;
+;; MOV Z1.B, #128
+;; SQADD Z0.B, P0/M, Z0.B, Z1.B // Saturating subtraction of 128
+(define_insn "@aarch64_sve_suqadd<mode>_const"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 1 "register_operand" "0, w")
+ (match_operand:SVE_FULL_I 2 "aarch64_sve_arith_immediate")]
+ UNSPEC_SUQADD))]
+ "TARGET_SVE2"
+ "@
+ sqadd\t%0.<Vetype>, %0.<Vetype>, #%D2
+ movprfx\t%0, %1\;sqadd\t%0.<Vetype>, %0.<Vetype>, #%D2"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; General predicated binary arithmetic. All operations handled here
+;; are commutative or have a reversed form.
+(define_insn "@aarch64_pred_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl, Upl")
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "0, w, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, 0, w")]
+ SVE2_COND_INT_BINARY_REV)]
+ UNSPEC_PRED_X))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ <sve_int_op_rev>\t%0.<Vetype>, %1/m, %0.<Vetype>, %2.<Vetype>
+ movprfx\t%0, %2\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>"
+ [(set_attr "movprfx" "*,*,yes")]
+)
+
+;; Predicated binary arithmetic with merging.
+(define_expand "@cond_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand")
+ (unspec:SVE_FULL_I
+ [(match_dup 5)
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand")
+ (match_operand:SVE_FULL_I 3 "register_operand")]
+ SVE2_COND_INT_BINARY)]
+ UNSPEC_PRED_X)
+ (match_operand:SVE_FULL_I 4 "aarch64_simd_reg_or_zero")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ {
+ operands[5] = CONSTM1_RTX (<MODE>mode);
+ }
+)
+
+;; Predicated binary arithmetic, merging with the first input.
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>_2"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
+ (unspec:SVE_FULL_I
+ [(match_operand 4)
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "0, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, w")]
+ SVE2_COND_INT_BINARY)]
+ UNSPEC_PRED_X)
+ (match_dup 2)]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ movprfx\t%0, %2\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>"
+ "&& !CONSTANT_P (operands[4])"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Predicated binary arithmetic, merging with the second input.
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>_3"
[(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
(unspec:SVE_FULL_I
[(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
(unspec:SVE_FULL_I
- [(match_operand:SVE_FULL_I 2 "register_operand" "%0, w")
- (match_operand:SVE_FULL_I 3 "register_operand" "w, w")]
- HADDSUB)]
+ [(match_operand 4)
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "0, w")]
+ SVE2_COND_INT_BINARY_REV)]
+ UNSPEC_PRED_X)
+ (match_dup 3)]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op_rev>\t%0.<Vetype>, %1/m, %0.<Vetype>, %2.<Vetype>
+ movprfx\t%0, %3\;<sve_int_op_rev>\t%0.<Vetype>, %1/m, %0.<Vetype>, %2.<Vetype>"
+ "&& !CONSTANT_P (operands[4])"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Predicated binary operations, merging with an independent value.
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>_any"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=&w, &w, &w, &w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl, Upl, Upl, Upl")
+ (unspec:SVE_FULL_I
+ [(match_operand 5)
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "0, w, w, w, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, 0, w, w, w")]
+ SVE2_COND_INT_BINARY_REV)]
+ UNSPEC_PRED_X)
+ (match_operand:SVE_FULL_I 4 "aarch64_simd_reg_or_zero" "Dz, Dz, Dz, 0, w")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2
+ && !rtx_equal_p (operands[2], operands[4])
+ && !rtx_equal_p (operands[3], operands[4])"
+ "@
+ movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op_rev>\t%0.<Vetype>, %1/m, %0.<Vetype>, %2.<Vetype>
+ movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ movprfx\t%0.<Vetype>, %1/m, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ #"
+ "&& 1"
+ {
+ if (reload_completed
+ && register_operand (operands[4], <MODE>mode)
+ && !rtx_equal_p (operands[0], operands[4]))
+ {
+ emit_insn (gen_vcond_mask_<mode><vpred> (operands[0], operands[2],
+ operands[4], operands[1]));
+ operands[4] = operands[2] = operands[0];
+ }
+ else if (!CONSTANT_P (operands[5]))
+ operands[5] = CONSTM1_RTX (<VPRED>mode);
+ else
+ FAIL;
+ }
+ [(set_attr "movprfx" "yes")]
+)
+
+;; Predicated binary operations with no reverse form, merging with zero.
+;; At present we don't generate these patterns via a cond_* optab,
+;; so there's no correctness requirement to handle merging with an
+;; independent value.
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>_z"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=&w, &w")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
+ (unspec:SVE_FULL_I
+ [(match_operand 5)
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "0, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, w")]
+ SVE2_COND_INT_BINARY_NOREV)]
+ UNSPEC_PRED_X)
+ (match_operand:SVE_FULL_I 4 "aarch64_simd_imm_zero")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ "@
+ movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>"
+ "&& !CONSTANT_P (operands[5])"
+ {
+ operands[5] = CONSTM1_RTX (<VPRED>mode);
+ }
+ [(set_attr "movprfx" "yes")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Saturating binary arithmetic
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SQDMULH
+;; - SQRDMULH
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w")
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 1 "register_operand" "w")
+ (match_operand:SVE_FULL_I 2 "register_operand" "w")]
+ SVE2_INT_BINARY))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>"
+)
+
+(define_insn "@aarch64_sve_<sve_int_op>_lane_<mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:SVE_FULL_HSDI 1 "register_operand" "w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:SVE_FULL_HSDI 2 "register_operand" "<sve_lane_con>")
+ (match_operand:SI 3 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)]
+ SVE2_INT_BINARY_LANE))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>[%3]"
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Saturating left shifts
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SQSHL
+;; - SQSHLR
+;; - UQSHL
+;; - UQSHLR
+;; -------------------------------------------------------------------------
+
+;; Predicated left shifts.
+(define_insn "@aarch64_pred_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, w, w, ?&w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl, Upl, Upl, Upl")
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "0, 0, w, w, w")
+ (match_operand:SVE_FULL_I 3 "aarch64_sve_<lr>shift_operand" "D<lr>, w, 0, D<lr>, w")]
+ SVE2_COND_INT_SHIFT)]
UNSPEC_PRED_X))]
"TARGET_SVE2"
"@
- <sur>h<addsub>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
- movprfx\t%0, %2\;<sur>h<addsub>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>"
+ <sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
+ <sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ <sve_int_op>r\t%0.<Vetype>, %1/m, %0.<Vetype>, %2.<Vetype>
+ movprfx\t%0, %2\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
+ movprfx\t%0, %2\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>"
+ [(set_attr "movprfx" "*,*,*,yes,yes")]
+)
+
+;; Predicated left shifts with merging.
+(define_expand "@cond_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand")
+ (unspec:SVE_FULL_I
+ [(match_dup 5)
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand")
+ (match_operand:SVE_FULL_I 3 "aarch64_sve_<lr>shift_operand")]
+ SVE2_COND_INT_SHIFT)]
+ UNSPEC_PRED_X)
+ (match_operand:SVE_FULL_I 4 "register_operand")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ {
+ operands[5] = CONSTM1_RTX (<VPRED>mode);
+ }
+)
+
+;; Predicated left shifts, merging with the first input.
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>_2"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, w, ?&w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl, Upl, Upl")
+ (unspec:SVE_FULL_I
+ [(match_operand 4)
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "0, 0, w, w")
+ (match_operand:SVE_FULL_I 3 "aarch64_sve_<lr>shift_operand" "D<lr>, w, D<lr>, w")]
+ SVE2_COND_INT_SHIFT)]
+ UNSPEC_PRED_X)
+ (match_dup 2)]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
+ <sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ movprfx\t%0, %2\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
+ movprfx\t%0, %2\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>"
+ "&& !CONSTANT_P (operands[4])"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+ [(set_attr "movprfx" "*,*,yes,yes")]
+)
+
+;; Predicated left shifts, merging with the second input.
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>_3"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
+ (unspec:SVE_FULL_I
+ [(match_operand 4)
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "0, w")]
+ SVE2_COND_INT_SHIFT)]
+ UNSPEC_PRED_X)
+ (match_dup 3)]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>r\t%0.<Vetype>, %1/m, %0.<Vetype>, %2.<Vetype>
+ movprfx\t%0, %3\;<sve_int_op>r\t%0.<Vetype>, %1/m, %0.<Vetype>, %2.<Vetype>"
+ "&& !CONSTANT_P (operands[4])"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
[(set_attr "movprfx" "*,yes")]
)
+;; Predicated left shifts, merging with an independent value.
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>_any"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=&w, &w, &w, &w, &w, &w, &w, ?&w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl, Upl, Upl, Upl, Upl, Upl, Upl, Upl")
+ (unspec:SVE_FULL_I
+ [(match_operand 5)
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "0, 0, w, w, w, w, w, w, w")
+ (match_operand:SVE_FULL_I 3 "aarch64_sve_<lr>shift_operand" "D<lr>, w, 0, D<lr>, w, D<lr>, w, D<lr>, w")]
+ SVE2_COND_INT_SHIFT)]
+ UNSPEC_PRED_X)
+ (match_operand:SVE_FULL_I 4 "aarch64_simd_reg_or_zero" "Dz, Dz, Dz, Dz, Dz, 0, 0, w, w")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2
+ && !rtx_equal_p (operands[2], operands[4])
+ && (CONSTANT_P (operands[4]) || !rtx_equal_p (operands[3], operands[4]))"
+ "@
+ movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
+ movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>r\t%0.<Vetype>, %1/m, %0.<Vetype>, %2.<Vetype>
+ movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
+ movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ movprfx\t%0.<Vetype>, %1/m, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, #%3
+ movprfx\t%0.<Vetype>, %1/m, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ #
+ #"
+ "&& 1"
+ {
+ if (reload_completed
+ && register_operand (operands[4], <MODE>mode)
+ && !rtx_equal_p (operands[0], operands[4]))
+ {
+ emit_insn (gen_vcond_mask_<mode><vpred> (operands[0], operands[2],
+ operands[4], operands[1]));
+ operands[4] = operands[2] = operands[0];
+ }
+ else if (!CONSTANT_P (operands[5]))
+ operands[5] = CONSTM1_RTX (<VPRED>mode);
+ else
+ FAIL;
+ }
+ [(set_attr "movprfx" "yes")]
+)
+
;; =========================================================================
;; == Uniform ternary arithmnetic
;; =========================================================================
;; -------------------------------------------------------------------------
+;; ---- [INT] General ternary arithmetic that maps to unspecs
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - ADCLB
+;; - ADCLT
+;; - EORBT
+;; - EORTB
+;; - SBCLB
+;; - SBCLT
+;; - SQRDMLAH
+;; - SQRDMLSH
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 1 "register_operand" "0, w")]
+ SVE2_INT_TERNARY))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
+ movprfx\t%0, %1\;<sve_int_op>\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>"
+)
+
+(define_insn "@aarch64_sve_<sve_int_op>_lane_<mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:SVE_FULL_HSDI 2 "register_operand" "w, w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:SVE_FULL_HSDI 3 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 4 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)
+ (match_operand:SVE_FULL_HSDI 1 "register_operand" "0, w")]
+ SVE2_INT_TERNARY_LANE))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>[%4]
+ movprfx\t%0, %1\;<sve_int_op>\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>[%4]"
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Multiply-and-accumulate operations
+;; -------------------------------------------------------------------------
+;; Includes the lane forms of:
+;; - MLA
+;; - MLS
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_add_mul_lane_<mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w, ?&w")
+ (plus:SVE_FULL_HSDI
+ (mult:SVE_FULL_HSDI
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:SVE_FULL_HSDI 3 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 4 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)
+ (match_operand:SVE_FULL_HSDI 2 "register_operand" "w, w"))
+ (match_operand:SVE_FULL_HSDI 1 "register_operand" "0, w")))]
+ "TARGET_SVE2"
+ "@
+ mla\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>[%4]
+ movprfx\t%0, %1\;mla\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>[%4]"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+(define_insn "@aarch64_sve_sub_mul_lane_<mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w, ?&w")
+ (minus:SVE_FULL_HSDI
+ (match_operand:SVE_FULL_HSDI 1 "register_operand" "0, w")
+ (mult:SVE_FULL_HSDI
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:SVE_FULL_HSDI 3 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 4 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)
+ (match_operand:SVE_FULL_HSDI 2 "register_operand" "w, w"))))]
+ "TARGET_SVE2"
+ "@
+ mls\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>[%4]
+ movprfx\t%0, %1\;mls\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>[%4]"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Binary logic operations with rotation
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - XAR
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve2_xar<mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (rotatert:SVE_FULL_I
+ (xor:SVE_FULL_I
+ (match_operand:SVE_FULL_I 1 "register_operand" "%0, w")
+ (match_operand:SVE_FULL_I 2 "register_operand" "w, w"))
+ (match_operand:SVE_FULL_I 3 "aarch64_simd_rshift_imm")))]
+ "TARGET_SVE2"
+ "@
+ xar\t%0.<Vetype>, %0.<Vetype>, %2.<Vetype>, #%3
+ movprfx\t%0, %1\;xar\t%0.<Vetype>, %0.<Vetype>, %2.<Vetype>, #%3"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; -------------------------------------------------------------------------
;; ---- [INT] Ternary logic operations
;; -------------------------------------------------------------------------
;; Includes:
+;; - BCAX
;; - BSL
;; - BSL1N
;; - BSL2N
;; - NBSL
;; -------------------------------------------------------------------------
+;; Unpredicated exclusive OR of AND.
+(define_insn "@aarch64_sve2_bcax<mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (xor:SVE_FULL_I
+ (and:SVE_FULL_I
+ (match_operand:SVE_FULL_I 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, w"))
+ (match_operand:SVE_FULL_I 1 "register_operand" "0, w")))]
+ "TARGET_SVE2"
+ "@
+ bcax\t%0.d, %0.d, %2.d, %3.d
+ movprfx\t%0, %1\;bcax\t%0.d, %0.d, %2.d, %3.d"
+ [(set_attr "movprfx" "*,yes")]
+)
+
;; Unpredicated 3-way exclusive OR.
-(define_insn "*aarch64_sve2_eor3<mode>"
+(define_insn "@aarch64_sve2_eor3<mode>"
[(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, w, w, ?&w")
(xor:SVE_FULL_I
(xor:SVE_FULL_I
;; Unpredicated bitwise select.
;; (op3 ? bsl_mov : bsl_dup) == (((bsl_mov ^ bsl_dup) & op3) ^ bsl_dup)
+(define_expand "@aarch64_sve2_bsl<mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand")
+ (xor:SVE_FULL_I
+ (and:SVE_FULL_I
+ (xor:SVE_FULL_I
+ (match_operand:SVE_FULL_I 1 "register_operand")
+ (match_operand:SVE_FULL_I 2 "register_operand"))
+ (match_operand:SVE_FULL_I 3 "register_operand"))
+ (match_dup 2)))]
+ "TARGET_SVE2"
+)
+
(define_insn "*aarch64_sve2_bsl<mode>"
[(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
(xor:SVE_FULL_I
;; Unpredicated bitwise inverted select.
;; (~(op3 ? bsl_mov : bsl_dup)) == (~(((bsl_mov ^ bsl_dup) & op3) ^ bsl_dup))
+(define_expand "@aarch64_sve2_nbsl<mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand")
+ (unspec:SVE_FULL_I
+ [(match_dup 4)
+ (not:SVE_FULL_I
+ (xor:SVE_FULL_I
+ (and:SVE_FULL_I
+ (xor:SVE_FULL_I
+ (match_operand:SVE_FULL_I 1 "register_operand")
+ (match_operand:SVE_FULL_I 2 "register_operand"))
+ (match_operand:SVE_FULL_I 3 "register_operand"))
+ (match_dup 2)))]
+ UNSPEC_PRED_X))]
+ "TARGET_SVE2"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+)
+
(define_insn_and_rewrite "*aarch64_sve2_nbsl<mode>"
[(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
(unspec:SVE_FULL_I
;; Unpredicated bitwise select with inverted first operand.
;; (op3 ? ~bsl_mov : bsl_dup) == ((~(bsl_mov ^ bsl_dup) & op3) ^ bsl_dup)
+(define_expand "@aarch64_sve2_bsl1n<mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand")
+ (xor:SVE_FULL_I
+ (and:SVE_FULL_I
+ (unspec:SVE_FULL_I
+ [(match_dup 4)
+ (not:SVE_FULL_I
+ (xor:SVE_FULL_I
+ (match_operand:SVE_FULL_I 1 "register_operand")
+ (match_operand:SVE_FULL_I 2 "register_operand")))]
+ UNSPEC_PRED_X)
+ (match_operand:SVE_FULL_I 3 "register_operand"))
+ (match_dup 2)))]
+ "TARGET_SVE2"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+)
+
(define_insn_and_rewrite "*aarch64_sve2_bsl1n<mode>"
[(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
(xor:SVE_FULL_I
;; Unpredicated bitwise select with inverted second operand.
;; (bsl_dup ? bsl_mov : ~op3) == ((bsl_dup & bsl_mov) | (~op3 & ~bsl_dup))
-(define_insn_and_rewrite "*aarch64_sve2_bsl2n<mode>"
- [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+(define_expand "@aarch64_sve2_bsl2n<mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand")
(ior:SVE_FULL_I
(and:SVE_FULL_I
- (match_operand:SVE_FULL_I 1 "register_operand" "<bsl_1st>, w")
- (match_operand:SVE_FULL_I 2 "register_operand" "<bsl_2nd>, w"))
+ (match_operand:SVE_FULL_I 1 "register_operand")
+ (match_operand:SVE_FULL_I 3 "register_operand"))
(unspec:SVE_FULL_I
- [(match_operand 4)
+ [(match_dup 4)
(and:SVE_FULL_I
(not:SVE_FULL_I
- (match_operand:SVE_FULL_I 3 "register_operand" "w, w"))
+ (match_operand:SVE_FULL_I 2 "register_operand"))
+ (not:SVE_FULL_I
+ (match_dup 3)))]
+ UNSPEC_PRED_X)))]
+ "TARGET_SVE2"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+)
+
+(define_insn_and_rewrite "*aarch64_sve2_bsl2n<mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (ior:SVE_FULL_I
+ (and:SVE_FULL_I
+ (match_operand:SVE_FULL_I 1 "register_operand" "<bsl_1st>, w")
+ (match_operand:SVE_FULL_I 2 "register_operand" "<bsl_2nd>, w"))
+ (unspec:SVE_FULL_I
+ [(match_operand 4)
+ (and:SVE_FULL_I
+ (not:SVE_FULL_I
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, w"))
(not:SVE_FULL_I
(match_dup BSL_DUP)))]
UNSPEC_PRED_X)))]
;; ---- [INT] Shift-and-accumulate operations
;; -------------------------------------------------------------------------
;; Includes:
+;; - SRSRA
;; - SSRA
+;; - URSRA
;; - USRA
;; -------------------------------------------------------------------------
-;; Unpredicated signed / unsigned shift-right accumulate.
+;; Provide the natural unpredicated interface for SSRA and USRA.
+(define_expand "@aarch64_sve_add_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand")
+ (plus:SVE_FULL_I
+ (unspec:SVE_FULL_I
+ [(match_dup 4)
+ (SHIFTRT:SVE_FULL_I
+ (match_operand:SVE_FULL_I 2 "register_operand")
+ (match_operand:SVE_FULL_I 3 "aarch64_simd_rshift_imm"))]
+ UNSPEC_PRED_X)
+ (match_operand:SVE_FULL_I 1 "register_operand")))]
+ "TARGET_SVE2"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+)
+
+;; Pattern-match SSRA and USRA as a predicated operation whose predicate
+;; isn't needed.
(define_insn_and_rewrite "*aarch64_sve2_sra<mode>"
- [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w")
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
(plus:SVE_FULL_I
(unspec:SVE_FULL_I
[(match_operand 4)
(SHIFTRT:SVE_FULL_I
- (match_operand:SVE_FULL_I 2 "register_operand" "w")
- (match_operand:SVE_FULL_I 3 "aarch64_simd_rshift_imm" "Dr"))]
+ (match_operand:SVE_FULL_I 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 3 "aarch64_simd_rshift_imm"))]
UNSPEC_PRED_X)
- (match_operand:SVE_FULL_I 1 "register_operand" "0")))]
+ (match_operand:SVE_FULL_I 1 "register_operand" "0, w")))]
"TARGET_SVE2"
- "<sra_op>sra\t%0.<Vetype>, %2.<Vetype>, #%3"
+ "@
+ <sra_op>sra\t%0.<Vetype>, %2.<Vetype>, #%3
+ movprfx\t%0, %1\;<sra_op>sra\t%0.<Vetype>, %2.<Vetype>, #%3"
"&& !CONSTANT_P (operands[4])"
{
operands[4] = CONSTM1_RTX (<VPRED>mode);
}
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; SRSRA and URSRA.
+(define_insn "@aarch64_sve_add_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (plus:SVE_FULL_I
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 3 "aarch64_simd_rshift_imm")]
+ VRSHR_N)
+ (match_operand:SVE_FULL_I 1 "register_operand" "0, w")))]
+ "TARGET_SVE2"
+ "@
+ <sur>sra\t%0.<Vetype>, %2.<Vetype>, #%3
+ movprfx\t%0, %1\;<sur>sra\t%0.<Vetype>, %2.<Vetype>, #%3"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Shift-and-insert operations
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SLI
+;; - SRI
+;; -------------------------------------------------------------------------
+
+;; These instructions do not take MOVPRFX.
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w")
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 1 "register_operand" "0")
+ (match_operand:SVE_FULL_I 2 "register_operand" "w")
+ (match_operand:SVE_FULL_I 3 "aarch64_simd_<lr>shift_imm")]
+ SVE2_INT_SHIFT_INSERT))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %2.<Vetype>, #%3"
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Sum of absolute differences
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SABA
+;; - UABA
+;; -------------------------------------------------------------------------
+
+;; Provide the natural unpredicated interface for SABA and UABA.
+(define_expand "@aarch64_sve2_<su>aba<mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (plus:SVE_FULL_I
+ (minus:SVE_FULL_I
+ (unspec:SVE_FULL_I
+ [(match_dup 4)
+ (USMAX:SVE_FULL_I
+ (match_operand:SVE_FULL_I 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, w"))]
+ UNSPEC_PRED_X)
+ (unspec:SVE_FULL_I
+ [(match_dup 4)
+ (<max_opp>:SVE_FULL_I
+ (match_dup 2)
+ (match_dup 3))]
+ UNSPEC_PRED_X))
+ (match_operand:SVE_FULL_I 1 "register_operand" "0, w")))]
+ "TARGET_SVE2"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+)
+
+;; Pattern-match SABA and UABA as an absolute-difference-and-accumulate
+;; operation whose predicates aren't needed.
+(define_insn "*aarch64_sve2_<su>aba<mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (plus:SVE_FULL_I
+ (minus:SVE_FULL_I
+ (unspec:SVE_FULL_I
+ [(match_operand 4)
+ (USMAX:SVE_FULL_I
+ (match_operand:SVE_FULL_I 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, w"))]
+ UNSPEC_PRED_X)
+ (unspec:SVE_FULL_I
+ [(match_operand 5)
+ (<max_opp>:SVE_FULL_I
+ (match_dup 2)
+ (match_dup 3))]
+ UNSPEC_PRED_X))
+ (match_operand:SVE_FULL_I 1 "register_operand" "0, w")))]
+ "TARGET_SVE2"
+ "@
+ <su>aba\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>
+ movprfx\t%0, %1\;<su>aba\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>"
+ [(set_attr "movprfx" "*,yes")]
)
;; =========================================================================
;; =========================================================================
;; -------------------------------------------------------------------------
+;; ---- [INT] Wide binary arithmetic
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SADDWB
+;; - SADDWT
+;; - SSUBWB
+;; - SSUBWT
+;; - UADDWB
+;; - UADDWT
+;; - USUBWB
+;; - USUBWT
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:SVE_FULL_HSDI 1 "register_operand" "w")
+ (match_operand:<VNARROW> 2 "register_operand" "w")]
+ SVE2_INT_BINARY_WIDE))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %1.<Vetype>, %2.<Ventype>"
+)
+
+;; -------------------------------------------------------------------------
;; ---- [INT] Long binary arithmetic
;; -------------------------------------------------------------------------
;; Includes:
+;; - SABDLB
+;; - SABDLT
+;; - SADDLB
+;; - SADDLBT
+;; - SADDLT
;; - SMULLB
;; - SMULLT
+;; - SQDMULLB
+;; - SQDMULLT
+;; - SSUBLB
+;; - SSUBLBT
+;; - SSUBLT
+;; - SSUBLTB
+;; - UABDLB
+;; - UABDLT
+;; - UADDLB
+;; - UADDLT
;; - UMULLB
;; - UMULLT
+;; - USUBLB
+;; - USUBLT
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:<VNARROW> 1 "register_operand" "w")
+ (match_operand:<VNARROW> 2 "register_operand" "w")]
+ SVE2_INT_BINARY_LONG))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %1.<Ventype>, %2.<Ventype>"
+)
+
+(define_insn "@aarch64_sve_<sve_int_op>_lane_<mode>"
+ [(set (match_operand:SVE_FULL_SDI 0 "register_operand" "=w")
+ (unspec:SVE_FULL_SDI
+ [(match_operand:<VNARROW> 1 "register_operand" "w")
+ (unspec:<VNARROW>
+ [(match_operand:<VNARROW> 2 "register_operand" "<sve_lane_con>")
+ (match_operand:SI 3 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)]
+ SVE2_INT_BINARY_LONG_LANE))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %1.<Ventype>, %2.<Ventype>[%3]"
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Long left shifts
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SSHLLB
+;; - SSHLLT
+;; - USHLLB
+;; - USHLLT
+;; -------------------------------------------------------------------------
+
+;; The immediate range is enforced before generating the instruction.
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:<VNARROW> 1 "register_operand" "w")
+ (match_operand:DI 2 "const_int_operand")]
+ SVE2_INT_SHIFT_IMM_LONG))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %1.<Ventype>, #%2"
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Long binary arithmetic with accumulation
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SABALB
+;; - SABALT
+;; - SMLALB
+;; - SMLALT
+;; - SMLSLB
+;; - SMLSLT
+;; - SQDMLALB
+;; - SQDMLALBT
+;; - SQDMLALT
+;; - SQDMLSLB
+;; - SQDMLSLBT
+;; - SQDMLSLT
+;; - UABALB
+;; - UABALT
+;; - UMLALB
+;; - UMLALT
+;; - UMLSLB
+;; - UMLSLT
+;; -------------------------------------------------------------------------
+
+;; Non-saturating MLA operations.
+(define_insn "@aarch64_sve_add_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w, ?&w")
+ (plus:SVE_FULL_HSDI
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:<VNARROW> 2 "register_operand" "w, w")
+ (match_operand:<VNARROW> 3 "register_operand" "w, w")]
+ SVE2_INT_ADD_BINARY_LONG)
+ (match_operand:SVE_FULL_HSDI 1 "register_operand" "0, w")))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_add_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>
+ movprfx\t%0, %1\;<sve_int_add_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Non-saturating MLA operations with lane select.
+(define_insn "@aarch64_sve_add_<sve_int_op>_lane_<mode>"
+ [(set (match_operand:SVE_FULL_SDI 0 "register_operand" "=w, ?&w")
+ (plus:SVE_FULL_SDI
+ (unspec:SVE_FULL_SDI
+ [(match_operand:<VNARROW> 2 "register_operand" "w, w")
+ (unspec:<VNARROW>
+ [(match_operand:<VNARROW> 3 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 4 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)]
+ SVE2_INT_ADD_BINARY_LONG_LANE)
+ (match_operand:SVE_FULL_SDI 1 "register_operand" "0, w")))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_add_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>[%4]
+ movprfx\t%0, %1\;<sve_int_add_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>[%4]"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Saturating MLA operations.
+(define_insn "@aarch64_sve_qadd_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w, ?&w")
+ (ss_plus:SVE_FULL_HSDI
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:<VNARROW> 2 "register_operand" "w, w")
+ (match_operand:<VNARROW> 3 "register_operand" "w, w")]
+ SVE2_INT_QADD_BINARY_LONG)
+ (match_operand:SVE_FULL_HSDI 1 "register_operand" "0, w")))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_qadd_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>
+ movprfx\t%0, %1\;<sve_int_qadd_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Saturating MLA operations with lane select.
+(define_insn "@aarch64_sve_qadd_<sve_int_op>_lane_<mode>"
+ [(set (match_operand:SVE_FULL_SDI 0 "register_operand" "=w, ?&w")
+ (ss_plus:SVE_FULL_SDI
+ (unspec:SVE_FULL_SDI
+ [(match_operand:<VNARROW> 2 "register_operand" "w, w")
+ (unspec:<VNARROW>
+ [(match_operand:<VNARROW> 3 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 4 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)]
+ SVE2_INT_QADD_BINARY_LONG_LANE)
+ (match_operand:SVE_FULL_SDI 1 "register_operand" "0, w")))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_qadd_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>[%4]
+ movprfx\t%0, %1\;<sve_int_qadd_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>[%4]"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Non-saturating MLS operations.
+(define_insn "@aarch64_sve_sub_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w, ?&w")
+ (minus:SVE_FULL_HSDI
+ (match_operand:SVE_FULL_HSDI 1 "register_operand" "0, w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:<VNARROW> 2 "register_operand" "w, w")
+ (match_operand:<VNARROW> 3 "register_operand" "w, w")]
+ SVE2_INT_SUB_BINARY_LONG)))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_sub_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>
+ movprfx\t%0, %1\;<sve_int_sub_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Non-saturating MLS operations with lane select.
+(define_insn "@aarch64_sve_sub_<sve_int_op>_lane_<mode>"
+ [(set (match_operand:SVE_FULL_SDI 0 "register_operand" "=w, ?&w")
+ (minus:SVE_FULL_SDI
+ (match_operand:SVE_FULL_SDI 1 "register_operand" "0, w")
+ (unspec:SVE_FULL_SDI
+ [(match_operand:<VNARROW> 2 "register_operand" "w, w")
+ (unspec:<VNARROW>
+ [(match_operand:<VNARROW> 3 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 4 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)]
+ SVE2_INT_SUB_BINARY_LONG_LANE)))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_sub_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>[%4]
+ movprfx\t%0, %1\;<sve_int_sub_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>[%4]"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Saturating MLS operations.
+(define_insn "@aarch64_sve_qsub_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w, ?&w")
+ (ss_minus:SVE_FULL_HSDI
+ (match_operand:SVE_FULL_HSDI 1 "register_operand" "0, w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:<VNARROW> 2 "register_operand" "w, w")
+ (match_operand:<VNARROW> 3 "register_operand" "w, w")]
+ SVE2_INT_QSUB_BINARY_LONG)))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_qsub_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>
+ movprfx\t%0, %1\;<sve_int_qsub_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Saturating MLS operations with lane select.
+(define_insn "@aarch64_sve_qsub_<sve_int_op>_lane_<mode>"
+ [(set (match_operand:SVE_FULL_SDI 0 "register_operand" "=w, ?&w")
+ (ss_minus:SVE_FULL_SDI
+ (match_operand:SVE_FULL_SDI 1 "register_operand" "0, w")
+ (unspec:SVE_FULL_SDI
+ [(match_operand:<VNARROW> 2 "register_operand" "w, w")
+ (unspec:<VNARROW>
+ [(match_operand:<VNARROW> 3 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 4 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)]
+ SVE2_INT_QSUB_BINARY_LONG_LANE)))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_qsub_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>[%4]
+ movprfx\t%0, %1\;<sve_int_qsub_op>\t%0.<Vetype>, %2.<Ventype>, %3.<Ventype>[%4]"
+ [(set_attr "movprfx" "*,yes")]
+)
+;; -------------------------------------------------------------------------
+;; ---- [FP] Long multiplication with accumulation
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - FMLALB
+;; - FMLALT
+;; - FMLSLB
+;; - FMLSLT
;; -------------------------------------------------------------------------
-;; Multiply long top / bottom.
-(define_insn "<su>mull<bt><Vwide>"
- [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
- (unspec:<VWIDE>
- [(match_operand:SVE_FULL_BHSI 1 "register_operand" "w")
- (match_operand:SVE_FULL_BHSI 2 "register_operand" "w")]
- MULLBT))]
+(define_insn "@aarch64_sve_<sve_fp_op><mode>"
+ [(set (match_operand:VNx4SF_ONLY 0 "register_operand" "=w, ?&w")
+ (unspec:VNx4SF_ONLY
+ [(match_operand:<VNARROW> 1 "register_operand" "w, w")
+ (match_operand:<VNARROW> 2 "register_operand" "w, w")
+ (match_operand:VNx4SF_ONLY 3 "register_operand" "0, w")]
+ SVE2_FP_TERNARY_LONG))]
"TARGET_SVE2"
- "<su>mull<bt>\t%0.<Vewtype>, %1.<Vetype>, %2.<Vetype>"
+ "@
+ <sve_fp_op>\t%0.<Vetype>, %1.<Ventype>, %2.<Ventype>
+ movprfx\t%0, %3\;<sve_fp_op>\t%0.<Vetype>, %1.<Ventype>, %2.<Ventype>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+(define_insn "@aarch64_<sve_fp_op>_lane_<mode>"
+ [(set (match_operand:VNx4SF_ONLY 0 "register_operand" "=w, ?&w")
+ (unspec:VNx4SF_ONLY
+ [(match_operand:<VNARROW> 1 "register_operand" "w, w")
+ (unspec:<VNARROW>
+ [(match_operand:<VNARROW> 2 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 3 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)
+ (match_operand:VNx4SF_ONLY 4 "register_operand" "0, w")]
+ SVE2_FP_TERNARY_LONG_LANE))]
+ "TARGET_SVE2"
+ "@
+ <sve_fp_op>\t%0.<Vetype>, %1.<Ventype>, %2.<Ventype>[%3]
+ movprfx\t%0, %4\;<sve_fp_op>\t%0.<Vetype>, %1.<Ventype>, %2.<Ventype>[%3]"
+ [(set_attr "movprfx" "*,yes")]
)
;; =========================================================================
;; =========================================================================
;; -------------------------------------------------------------------------
+;; ---- [INT] Narrowing unary arithmetic
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SQXTNB
+;; - SQXTNT
+;; - SQXTUNB
+;; - SQXTUNT
+;; - UQXTNB
+;; - UQXTNT
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:<VNARROW> 0 "register_operand" "=w")
+ (unspec:<VNARROW>
+ [(match_operand:SVE_FULL_HSDI 1 "register_operand" "w")]
+ SVE2_INT_UNARY_NARROWB))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Ventype>, %1.<Vetype>"
+)
+
+;; These instructions do not take MOVPRFX.
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:<VNARROW> 0 "register_operand" "=w")
+ (unspec:<VNARROW>
+ [(match_operand:<VNARROW> 1 "register_operand" "0")
+ (match_operand:SVE_FULL_HSDI 2 "register_operand" "w")]
+ SVE2_INT_UNARY_NARROWT))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Ventype>, %2.<Vetype>"
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Narrowing binary arithmetic
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - ADDHNB
+;; - ADDHNT
+;; - RADDHNB
+;; - RADDHNT
+;; - RSUBHNB
+;; - RSUBHNT
+;; - SUBHNB
+;; - SUBHNT
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:<VNARROW> 0 "register_operand" "=w")
+ (unspec:<VNARROW>
+ [(match_operand:SVE_FULL_HSDI 1 "register_operand" "w")
+ (match_operand:SVE_FULL_HSDI 2 "register_operand" "w")]
+ SVE2_INT_BINARY_NARROWB))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Ventype>, %1.<Vetype>, %2.<Vetype>"
+)
+
+;; These instructions do not take MOVPRFX.
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:<VNARROW> 0 "register_operand" "=w")
+ (unspec:<VNARROW>
+ [(match_operand:<VNARROW> 1 "register_operand" "0")
+ (match_operand:SVE_FULL_HSDI 2 "register_operand" "w")
+ (match_operand:SVE_FULL_HSDI 3 "register_operand" "w")]
+ SVE2_INT_BINARY_NARROWT))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Ventype>, %2.<Vetype>, %3.<Vetype>"
+)
+
+;; -------------------------------------------------------------------------
;; ---- [INT] Narrowing right shifts
;; -------------------------------------------------------------------------
;; Includes:
;; - RSHRNT
;; - SHRNB
;; - SHRNT
+;; - SQRSHRNB
+;; - SQRSHRNT
+;; - SQRSHRUNB
+;; - SQRSHRUNT
+;; - SQSHRNB
+;; - SQSHRNT
+;; - SQSHRUNB
+;; - SQSHRUNT
+;; - UQRSHRNB
+;; - UQRSHRNT
+;; - UQSHRNB
+;; - UQSHRNT
;; -------------------------------------------------------------------------
-;; (Rounding) Right shift narrow bottom.
-(define_insn "<r>shrnb<mode>"
- [(set (match_operand:SVE_FULL_BHSI 0 "register_operand" "=w")
- (unspec:SVE_FULL_BHSI
- [(match_operand:<VWIDE> 1 "register_operand" "w")
- (match_operand 2 "aarch64_simd_shift_imm_offset_<Vel>" "")]
- SHRNB))]
+;; The immediate range is enforced before generating the instruction.
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:<VNARROW> 0 "register_operand" "=w")
+ (unspec:<VNARROW>
+ [(match_operand:SVE_FULL_HSDI 1 "register_operand" "w")
+ (match_operand:DI 2 "const_int_operand")]
+ SVE2_INT_SHIFT_IMM_NARROWB))]
"TARGET_SVE2"
- "<r>shrnb\t%0.<Vetype>, %1.<Vewtype>, #%2"
+ "<sve_int_op>\t%0.<Ventype>, %1.<Vetype>, #%2"
)
-;; (Rounding) Right shift narrow top.
-(define_insn "<r>shrnt<mode>"
- [(set (match_operand:SVE_FULL_BHSI 0 "register_operand" "=w")
- (unspec:SVE_FULL_BHSI
- [(match_operand:SVE_FULL_BHSI 1 "register_operand" "0")
- (match_operand:<VWIDE> 2 "register_operand" "w")
- (match_operand 3 "aarch64_simd_shift_imm_offset_<Vel>" "i")]
- SHRNT))]
+;; The immediate range is enforced before generating the instruction.
+;; These instructions do not take MOVPRFX.
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:<VNARROW> 0 "register_operand" "=w")
+ (unspec:<VNARROW>
+ [(match_operand:<VNARROW> 1 "register_operand" "0")
+ (match_operand:SVE_FULL_HSDI 2 "register_operand" "w")
+ (match_operand:DI 3 "const_int_operand")]
+ SVE2_INT_SHIFT_IMM_NARROWT))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Ventype>, %2.<Vetype>, #%3"
+)
+
+;; =========================================================================
+;; == Pairwise arithmetic
+;; =========================================================================
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Pairwise arithmetic
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - ADDP
+;; - SMAXP
+;; - SMINP
+;; - UMAXP
+;; - UMINP
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_pred_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
+ (match_operand:SVE_FULL_I 2 "register_operand" "0, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, w")]
+ SVE2_INT_BINARY_PAIR))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ movprfx\t%0, %2\;<sve_int_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [FP] Pairwise arithmetic
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - FADDP
+;; - FMAXP
+;; - FMAXNMP
+;; - FMINP
+;; - FMINNMP
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_pred_<sve_fp_op><mode>"
+ [(set (match_operand:SVE_FULL_F 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_F
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
+ (match_operand:SVE_FULL_F 2 "register_operand" "0, w")
+ (match_operand:SVE_FULL_F 3 "register_operand" "w, w")]
+ SVE2_FP_BINARY_PAIR))]
+ "TARGET_SVE2"
+ "@
+ <sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>
+ movprfx\t%0, %2\;<sve_fp_op>\t%0.<Vetype>, %1/m, %0.<Vetype>, %3.<Vetype>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Pairwise arithmetic with accumulation
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SADALP
+;; - UADALP
+;; -------------------------------------------------------------------------
+
+;; Predicated pairwise absolute difference and accumulate with merging.
+(define_expand "@cond_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:<VPRED> 1 "register_operand")
+ (unspec:SVE_FULL_HSDI
+ [(match_dup 1)
+ (match_operand:SVE_FULL_HSDI 2 "register_operand")
+ (match_operand:<VNARROW> 3 "register_operand")]
+ SVE2_INT_BINARY_PAIR_LONG)
+ (match_operand:SVE_FULL_HSDI 4 "aarch64_simd_reg_or_zero")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+{
+ /* Only target code is aware of these operations, so we don't need
+ to handle the fully-general case. */
+ gcc_assert (rtx_equal_p (operands[2], operands[4])
+ || CONSTANT_P (operands[4]));
+})
+
+;; Predicated pairwise absolute difference and accumulate, merging with
+;; the first input.
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>_2"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand 4)
+ (match_operand:SVE_FULL_HSDI 2 "register_operand" "0, w")
+ (match_operand:<VNARROW> 3 "register_operand" "w, w")]
+ SVE2_INT_BINARY_PAIR_LONG)
+ (match_dup 2)]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %1/m, %3.<Ventype>
+ movprfx\t%0, %2\;<sve_int_op>\t%0.<Vetype>, %1/m, %3.<Ventype>"
+ "&& !CONSTANT_P (operands[4])"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; Predicated pairwise absolute difference and accumulate, merging with zero.
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>_z"
+ [(set (match_operand:SVE_FULL_HSDI 0 "register_operand" "=&w, &w")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl")
+ (unspec:SVE_FULL_HSDI
+ [(match_operand 5)
+ (match_operand:SVE_FULL_HSDI 2 "register_operand" "0, w")
+ (match_operand:<VNARROW> 3 "register_operand" "w, w")]
+ SVE2_INT_BINARY_PAIR_LONG)
+ (match_operand:SVE_FULL_HSDI 4 "aarch64_simd_imm_zero")]
+ UNSPEC_SEL))]
"TARGET_SVE2"
- "<r>shrnt\t%0.<Vetype>, %2.<Vewtype>, #%3"
+ "@
+ movprfx\t%0.<Vetype>, %1/z, %0.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %3.<Ventype>
+ movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %3.<Ventype>"
+ "&& !CONSTANT_P (operands[5])"
+ {
+ operands[5] = CONSTM1_RTX (<VPRED>mode);
+ }
+ [(set_attr "movprfx" "yes")]
+)
+
+;; =========================================================================
+;; == Complex arithmetic
+;; =========================================================================
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Complex binary operations
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - CADD
+;; - SQCADD
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<optab><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 1 "register_operand" "0, w")
+ (match_operand:SVE_FULL_I 2 "register_operand" "w, w")]
+ SVE2_INT_CADD))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %0.<Vetype>, %2.<Vetype>, #<rot>
+ movprfx\t%0, %1\;<sve_int_op>\t%0.<Vetype>, %0.<Vetype>, %2.<Vetype>, #<rot>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Complex ternary operations
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - CMLA
+;; - SQRDCMLA
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<optab><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 1 "register_operand" "0, w")
+ (match_operand:SVE_FULL_I 2 "register_operand" "w, w")
+ (match_operand:SVE_FULL_I 3 "register_operand" "w, w")]
+ SVE2_INT_CMLA))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>, #<rot>
+ movprfx\t%0, %1\;<sve_int_op>\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>, #<rot>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+(define_insn "@aarch64_<optab>_lane_<mode>"
+ [(set (match_operand:SVE_FULL_HSI 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_HSI
+ [(match_operand:SVE_FULL_HSI 1 "register_operand" "0, w")
+ (match_operand:SVE_FULL_HSI 2 "register_operand" "w, w")
+ (unspec:SVE_FULL_HSI
+ [(match_operand:SVE_FULL_HSI 3 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 4 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)]
+ SVE2_INT_CMLA))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>[%4], #<rot>
+ movprfx\t%0, %1\;<sve_int_op>\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>[%4], #<rot>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Complex dot product
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - CDOT
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<optab><mode>"
+ [(set (match_operand:SVE_FULL_SDI 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_SDI
+ [(match_operand:SVE_FULL_SDI 1 "register_operand" "0, w")
+ (match_operand:<VSI2QI> 2 "register_operand" "w, w")
+ (match_operand:<VSI2QI> 3 "register_operand" "w, w")]
+ SVE2_INT_CDOT))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %2.<Vetype_fourth>, %3.<Vetype_fourth>, #<rot>
+ movprfx\t%0, %1\;<sve_int_op>\t%0.<Vetype>, %2.<Vetype_fourth>, %3.<Vetype_fourth>, #<rot>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+(define_insn "@aarch64_<optab>_lane_<mode>"
+ [(set (match_operand:SVE_FULL_SDI 0 "register_operand" "=w, ?&w")
+ (unspec:SVE_FULL_SDI
+ [(match_operand:SVE_FULL_SDI 1 "register_operand" "0, w")
+ (match_operand:<VSI2QI> 2 "register_operand" "w, w")
+ (unspec:<VSI2QI>
+ [(match_operand:<VSI2QI> 3 "register_operand" "<sve_lane_con>, <sve_lane_con>")
+ (match_operand:SI 4 "const_int_operand")]
+ UNSPEC_SVE_LANE_SELECT)]
+ SVE2_INT_CDOT))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %2.<Vetype_fourth>, %3.<Vetype_fourth>[%4], #<rot>
+ movprfx\t%0, %1\;<sve_int_op>\t%0.<Vetype>, %2.<Vetype_fourth>, %3.<Vetype_fourth>[%4], #<rot>"
+ [(set_attr "movprfx" "*,yes")]
+)
+
+;; =========================================================================
+;; == Conversions
+;; =========================================================================
+
+;; -------------------------------------------------------------------------
+;; ---- [FP<-FP] Widening conversions
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - FCVTLT
+;; -------------------------------------------------------------------------
+
+;; Predicated convert long top.
+(define_insn "@aarch64_pred_<sve_fp_op><mode>"
+ [(set (match_operand:SVE_FULL_SDF 0 "register_operand" "=w")
+ (unspec:SVE_FULL_SDF
+ [(match_operand:<VPRED> 1 "register_operand" "Upl")
+ (match_operand:SI 3 "aarch64_sve_gp_strictness")
+ (match_operand:<VNARROW> 2 "register_operand" "w")]
+ SVE2_COND_FP_UNARY_LONG))]
+ "TARGET_SVE2"
+ "<sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Ventype>"
+)
+
+;; Predicated convert long top with merging.
+(define_expand "@cond_<sve_fp_op><mode>"
+ [(set (match_operand:SVE_FULL_SDF 0 "register_operand")
+ (unspec:SVE_FULL_SDF
+ [(match_operand:<VPRED> 1 "register_operand")
+ (unspec:SVE_FULL_SDF
+ [(match_dup 1)
+ (const_int SVE_STRICT_GP)
+ (match_operand:<VNARROW> 2 "register_operand")]
+ SVE2_COND_FP_UNARY_LONG)
+ (match_operand:SVE_FULL_SDF 3 "register_operand")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+)
+
+;; These instructions do not take MOVPRFX.
+(define_insn_and_rewrite "*cond_<sve_fp_op><mode>"
+ [(set (match_operand:SVE_FULL_SDF 0 "register_operand" "=w")
+ (unspec:SVE_FULL_SDF
+ [(match_operand:<VPRED> 1 "register_operand" "Upl")
+ (unspec:SVE_FULL_SDF
+ [(match_operand 4)
+ (match_operand:SI 5 "aarch64_sve_gp_strictness")
+ (match_operand:<VNARROW> 2 "register_operand" "w")]
+ SVE2_COND_FP_UNARY_LONG)
+ (match_operand:SVE_FULL_SDF 3 "register_operand" "0")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2 && aarch64_sve_pred_dominates_p (&operands[4], operands[1])"
+ "<sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Ventype>"
+ "&& !rtx_equal_p (operands[1], operands[4])"
+ {
+ operands[4] = copy_rtx (operands[1]);
+ }
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [FP<-FP] Narrowing conversions
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - FCVTNT
+;; - FCVTX
+;; - FCVTXNT
+;; -------------------------------------------------------------------------
+
+;; Predicated FCVTNT. This doesn't give a natural aarch64_pred_*/cond_*
+;; pair because the even elements always have to be supplied for active
+;; elements, even if the inactive elements don't matter.
+;;
+;; These instructions do not take MOVPRFX.
+(define_insn "@aarch64_sve2_cvtnt<mode>"
+ [(set (match_operand:<VNARROW> 0 "register_operand" "=w")
+ (unspec:<VNARROW>
+ [(match_operand:<VPRED> 2 "register_operand" "Upl")
+ (const_int SVE_STRICT_GP)
+ (match_operand:<VNARROW> 1 "register_operand" "0")
+ (match_operand:SVE_FULL_SDF 3 "register_operand" "w")]
+ UNSPEC_COND_FCVTNT))]
+ "TARGET_SVE2"
+ "fcvtnt\t%0.<Ventype>, %2/m, %3.<Vetype>"
+)
+
+;; Predicated FCVTX (equivalent to what would be FCVTXNB, except that
+;; it supports MOVPRFX).
+(define_insn "@aarch64_pred_<sve_fp_op><mode>"
+ [(set (match_operand:VNx4SF_ONLY 0 "register_operand" "=w")
+ (unspec:VNx4SF_ONLY
+ [(match_operand:<VWIDE_PRED> 1 "register_operand" "Upl")
+ (match_operand:SI 3 "aarch64_sve_gp_strictness")
+ (match_operand:<VWIDE> 2 "register_operand" "w")]
+ SVE2_COND_FP_UNARY_NARROWB))]
+ "TARGET_SVE2"
+ "<sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Vewtype>"
+)
+
+;; Predicated FCVTX with merging.
+(define_expand "@cond_<sve_fp_op><mode>"
+ [(set (match_operand:VNx4SF_ONLY 0 "register_operand")
+ (unspec:VNx4SF_ONLY
+ [(match_operand:<VWIDE_PRED> 1 "register_operand")
+ (unspec:VNx4SF_ONLY
+ [(match_dup 1)
+ (const_int SVE_STRICT_GP)
+ (match_operand:<VWIDE> 2 "register_operand")]
+ SVE2_COND_FP_UNARY_NARROWB)
+ (match_operand:VNx4SF_ONLY 3 "aarch64_simd_reg_or_zero")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+)
+
+(define_insn_and_rewrite "*cond_<sve_fp_op><mode>_any"
+ [(set (match_operand:VNx4SF_ONLY 0 "register_operand" "=&w, &w, &w")
+ (unspec:VNx4SF_ONLY
+ [(match_operand:<VWIDE_PRED> 1 "register_operand" "Upl, Upl, Upl")
+ (unspec:VNx4SF_ONLY
+ [(match_operand 4)
+ (match_operand:SI 5 "aarch64_sve_gp_strictness")
+ (match_operand:<VWIDE> 2 "register_operand" "w, w, w")]
+ SVE2_COND_FP_UNARY_NARROWB)
+ (match_operand:VNx4SF_ONLY 3 "aarch64_simd_reg_or_zero" "0, Dz, w")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2
+ && !rtx_equal_p (operands[2], operands[3])
+ && aarch64_sve_pred_dominates_p (&operands[4], operands[1])"
+ "@
+ <sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Vewtype>
+ movprfx\t%0.<Vewtype>, %1/z, %2.<Vewtype>\;<sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Vewtype>
+ movprfx\t%0, %3\;<sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Vewtype>"
+ "&& !rtx_equal_p (operands[1], operands[4])"
+ {
+ operands[4] = copy_rtx (operands[1]);
+ }
+ [(set_attr "movprfx" "*,yes,yes")]
+)
+
+;; Predicated FCVTXNT. This doesn't give a natural aarch64_pred_*/cond_*
+;; pair because the even elements always have to be supplied for active
+;; elements, even if the inactive elements don't matter.
+;;
+;; These instructions do not take MOVPRFX.
+(define_insn "@aarch64_sve2_cvtxnt<mode>"
+ [(set (match_operand:<VNARROW> 0 "register_operand" "=w")
+ (unspec:<VNARROW>
+ [(match_operand:<VPRED> 2 "register_operand" "Upl")
+ (const_int SVE_STRICT_GP)
+ (match_operand:<VNARROW> 1 "register_operand" "0")
+ (match_operand:VNx2DF_ONLY 3 "register_operand" "w")]
+ UNSPEC_COND_FCVTXNT))]
+ "TARGET_SVE2"
+ "fcvtxnt\t%0.<Ventype>, %2/m, %3.<Vetype>"
+)
+
+;; =========================================================================
+;; == Other arithmetic
+;; =========================================================================
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Reciprocal approximation
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - URECPE
+;; - URSQRTE
+;; -------------------------------------------------------------------------
+
+;; Predicated integer unary operations.
+(define_insn "@aarch64_pred_<sve_int_op><mode>"
+ [(set (match_operand:VNx4SI_ONLY 0 "register_operand" "=w")
+ (unspec:VNx4SI_ONLY
+ [(match_operand:<VPRED> 1 "register_operand" "Upl")
+ (unspec:VNx4SI_ONLY
+ [(match_operand:VNx4SI_ONLY 2 "register_operand" "w")]
+ SVE2_U32_UNARY)]
+ UNSPEC_PRED_X))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>"
+)
+
+;; Predicated integer unary operations with merging.
+(define_expand "@cond_<sve_int_op><mode>"
+ [(set (match_operand:VNx4SI_ONLY 0 "register_operand")
+ (unspec:VNx4SI_ONLY
+ [(match_operand:<VPRED> 1 "register_operand")
+ (unspec:VNx4SI_ONLY
+ [(match_dup 4)
+ (unspec:VNx4SI_ONLY
+ [(match_operand:VNx4SI_ONLY 2 "register_operand")]
+ SVE2_U32_UNARY)]
+ UNSPEC_PRED_X)
+ (match_operand:VNx4SI_ONLY 3 "aarch64_simd_reg_or_zero")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ {
+ operands[4] = CONSTM1_RTX (<MODE>mode);
+ }
+)
+
+(define_insn_and_rewrite "*cond_<sve_int_op><mode>"
+ [(set (match_operand:VNx4SI_ONLY 0 "register_operand" "=w, ?&w, ?&w")
+ (unspec:VNx4SI_ONLY
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl, Upl")
+ (unspec:VNx4SI_ONLY
+ [(match_operand 4)
+ (unspec:VNx4SI_ONLY
+ [(match_operand:VNx4SI_ONLY 2 "register_operand" "w, w, w")]
+ SVE2_U32_UNARY)]
+ UNSPEC_PRED_X)
+ (match_operand:VNx4SI_ONLY 3 "aarch64_simd_reg_or_zero" "0, Dz, w")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+ "@
+ <sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
+ movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
+ movprfx\t%0, %3\;<sve_int_op>\t%0.<Vetype>, %1/m, %2.<Vetype>"
+ "&& !CONSTANT_P (operands[4])"
+ {
+ operands[4] = CONSTM1_RTX (<VPRED>mode);
+ }
+ [(set_attr "movprfx" "*,yes,yes")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT<-FP] Base-2 logarithm
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - FLOGB
+;; -------------------------------------------------------------------------
+
+;; Predicated FLOGB.
+(define_insn "@aarch64_pred_<sve_fp_op><mode>"
+ [(set (match_operand:<V_INT_EQUIV> 0 "register_operand" "=w")
+ (unspec:<V_INT_EQUIV>
+ [(match_operand:<VPRED> 1 "register_operand" "Upl")
+ (match_operand:SI 3 "aarch64_sve_gp_strictness")
+ (match_operand:SVE_FULL_F 2 "register_operand" "w")]
+ SVE2_COND_INT_UNARY_FP))]
+ "TARGET_SVE2"
+ "<sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Vetype>"
+)
+
+;; Predicated FLOGB with merging.
+(define_expand "@cond_<sve_fp_op><mode>"
+ [(set (match_operand:<V_INT_EQUIV> 0 "register_operand")
+ (unspec:<V_INT_EQUIV>
+ [(match_operand:<VPRED> 1 "register_operand")
+ (unspec:<V_INT_EQUIV>
+ [(match_dup 1)
+ (const_int SVE_STRICT_GP)
+ (match_operand:SVE_FULL_F 2 "register_operand")]
+ SVE2_COND_INT_UNARY_FP)
+ (match_operand:<V_INT_EQUIV> 3 "aarch64_simd_reg_or_zero")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2"
+)
+
+(define_insn_and_rewrite "*cond_<sve_fp_op><mode>"
+ [(set (match_operand:<V_INT_EQUIV> 0 "register_operand" "=&w, ?&w, ?&w")
+ (unspec:<V_INT_EQUIV>
+ [(match_operand:<VPRED> 1 "register_operand" "Upl, Upl, Upl")
+ (unspec:<V_INT_EQUIV>
+ [(match_operand 4)
+ (match_operand:SI 5 "aarch64_sve_gp_strictness")
+ (match_operand:SVE_FULL_F 2 "register_operand" "w, w, w")]
+ SVE2_COND_INT_UNARY_FP)
+ (match_operand:<V_INT_EQUIV> 3 "aarch64_simd_reg_or_zero" "0, Dz, w")]
+ UNSPEC_SEL))]
+ "TARGET_SVE2
+ && !rtx_equal_p (operands[2], operands[3])
+ && aarch64_sve_pred_dominates_p (&operands[4], operands[1])"
+ "@
+ <sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
+ movprfx\t%0.<Vetype>, %1/z, %2.<Vetype>\;<sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Vetype>
+ movprfx\t%0, %3\;<sve_fp_op>\t%0.<Vetype>, %1/m, %2.<Vetype>"
+ "&& !rtx_equal_p (operands[1], operands[4])"
+ {
+ operands[4] = copy_rtx (operands[1]);
+ }
+ [(set_attr "movprfx" "*,yes,yes")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Polynomial multiplication
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - PMUL
+;; - PMULLB
+;; - PMULLT
+;; -------------------------------------------------------------------------
+
+;; Uniform PMUL.
+(define_insn "@aarch64_sve2_pmul<mode>"
+ [(set (match_operand:VNx16QI_ONLY 0 "register_operand" "=w")
+ (unspec:VNx16QI_ONLY
+ [(match_operand:VNx16QI_ONLY 1 "register_operand" "w")
+ (match_operand:VNx16QI_ONLY 2 "register_operand" "w")]
+ UNSPEC_PMUL))]
+ "TARGET_SVE2"
+ "pmul\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>"
+)
+
+;; Extending PMUL, with the results modeled as wider vectors.
+;; This representation is only possible for .H and .D, not .Q.
+(define_insn "@aarch64_sve_<optab><mode>"
+ [(set (match_operand:SVE_FULL_HDI 0 "register_operand" "=w")
+ (unspec:SVE_FULL_HDI
+ [(match_operand:<VNARROW> 1 "register_operand" "w")
+ (match_operand:<VNARROW> 2 "register_operand" "w")]
+ SVE2_PMULL))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %1.<Ventype>, %2.<Ventype>"
+)
+
+;; Extending PMUL, with the results modeled as pairs of values.
+;; This representation works for .H, .D and .Q, with .Q requiring
+;; the AES extension. (This is enforced by the mode iterator.)
+(define_insn "@aarch64_sve_<optab><mode>"
+ [(set (match_operand:SVE2_PMULL_PAIR_I 0 "register_operand" "=w")
+ (unspec:SVE2_PMULL_PAIR_I
+ [(match_operand:SVE2_PMULL_PAIR_I 1 "register_operand" "w")
+ (match_operand:SVE2_PMULL_PAIR_I 2 "register_operand" "w")]
+ SVE2_PMULL_PAIR))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vewtype>, %1.<Vetype>, %2.<Vetype>"
+)
+
+;; =========================================================================
+;; == Permutation
+;; =========================================================================
+
+;; -------------------------------------------------------------------------
+;; ---- [INT,FP] General permutes
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - TBL (vector pair form)
+;; - TBX
+;; -------------------------------------------------------------------------
+
+;; TBL on a pair of data vectors.
+(define_insn "@aarch64_sve2_tbl2<mode>"
+ [(set (match_operand:SVE_FULL 0 "register_operand" "=w")
+ (unspec:SVE_FULL
+ [(match_operand:<VDOUBLE> 1 "register_operand" "w")
+ (match_operand:<V_INT_EQUIV> 2 "register_operand" "w")]
+ UNSPEC_TBL2))]
+ "TARGET_SVE2"
+ "tbl\t%0.<Vetype>, %1, %2.<Vetype>"
+)
+
+;; TBX. These instructions do not take MOVPRFX.
+(define_insn "@aarch64_sve2_tbx<mode>"
+ [(set (match_operand:SVE_FULL 0 "register_operand" "=w")
+ (unspec:SVE_FULL
+ [(match_operand:SVE_FULL 1 "register_operand" "0")
+ (match_operand:SVE_FULL 2 "register_operand" "w")
+ (match_operand:<V_INT_EQUIV> 3 "register_operand" "w")]
+ UNSPEC_TBX))]
+ "TARGET_SVE2"
+ "tbx\t%0.<Vetype>, %2.<Vetype>, %3.<Vetype>"
+)
+
+;; -------------------------------------------------------------------------
+;; ---- [INT] Optional bit-permute extensions
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - BDEP
+;; - BEXT
+;; - BGRP
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve_<sve_int_op><mode>"
+ [(set (match_operand:SVE_FULL_I 0 "register_operand" "=w")
+ (unspec:SVE_FULL_I
+ [(match_operand:SVE_FULL_I 1 "register_operand" "w")
+ (match_operand:SVE_FULL_I 2 "register_operand" "w")]
+ SVE2_INT_BITPERM))]
+ "TARGET_SVE2_BITPERM"
+ "<sve_int_op>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>"
)
;; =========================================================================
emit_insn (gen_aarch64_cstore<mode> (operands[0], cmp, cc_reg));
DONE;
})
+
+;; -------------------------------------------------------------------------
+;; ---- Histogram processing
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - HISTCNT
+;; - HISTSEG
+;; -------------------------------------------------------------------------
+
+(define_insn "@aarch64_sve2_histcnt<mode>"
+ [(set (match_operand:SVE_FULL_SDI 0 "register_operand" "=w")
+ (unspec:SVE_FULL_SDI
+ [(match_operand:<VPRED> 1 "register_operand" "Upl")
+ (match_operand:SVE_FULL_SDI 2 "register_operand" "w")
+ (match_operand:SVE_FULL_SDI 3 "register_operand" "w")]
+ UNSPEC_HISTCNT))]
+ "TARGET_SVE2"
+ "histcnt\t%0.<Vetype>, %1/z, %2.<Vetype>, %3.<Vetype>"
+)
+
+(define_insn "@aarch64_sve2_histseg<mode>"
+ [(set (match_operand:VNx16QI_ONLY 0 "register_operand" "=w")
+ (unspec:VNx16QI_ONLY
+ [(match_operand:VNx16QI_ONLY 1 "register_operand" "w")
+ (match_operand:VNx16QI_ONLY 2 "register_operand" "w")]
+ UNSPEC_HISTSEG))]
+ "TARGET_SVE2"
+ "histseg\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>"
+)
+
+;; -------------------------------------------------------------------------
+;; ---- String matching
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - MATCH
+;; - NMATCH
+;; -------------------------------------------------------------------------
+
+;; Predicated string matching.
+(define_insn "@aarch64_pred_<sve_int_op><mode>"
+ [(set (match_operand:<VPRED> 0 "register_operand" "=Upa")
+ (unspec:<VPRED>
+ [(match_operand:<VPRED> 1 "register_operand" "Upl")
+ (match_operand:SI 2 "aarch64_sve_ptrue_flag")
+ (unspec:<VPRED>
+ [(match_operand:SVE_FULL_BHI 3 "register_operand" "w")
+ (match_operand:SVE_FULL_BHI 4 "register_operand" "w")]
+ SVE2_MATCH)]
+ UNSPEC_PRED_Z))
+ (clobber (reg:CC_NZC CC_REGNUM))]
+ "TARGET_SVE2"
+ "<sve_int_op>\t%0.<Vetype>, %1/z, %3.<Vetype>, %4.<Vetype>"
+)
+
+;; Predicated string matching in which both the flag and predicate results
+;; are interesting.
+(define_insn_and_rewrite "*aarch64_pred_<sve_int_op><mode>_cc"
+ [(set (reg:CC_NZC CC_REGNUM)
+ (unspec:CC_NZC
+ [(match_operand:VNx16BI 1 "register_operand" "Upl")
+ (match_operand 4)
+ (match_operand:SI 5 "aarch64_sve_ptrue_flag")
+ (unspec:<VPRED>
+ [(match_operand 6)
+ (match_operand:SI 7 "aarch64_sve_ptrue_flag")
+ (unspec:<VPRED>
+ [(match_operand:SVE_FULL_BHI 2 "register_operand" "w")
+ (match_operand:SVE_FULL_BHI 3 "register_operand" "w")]
+ SVE2_MATCH)]
+ UNSPEC_PRED_Z)]
+ UNSPEC_PTEST))
+ (set (match_operand:<VPRED> 0 "register_operand" "=Upa")
+ (unspec:<VPRED>
+ [(match_dup 6)
+ (match_dup 7)
+ (unspec:<VPRED>
+ [(match_dup 2)
+ (match_dup 3)]
+ SVE2_MATCH)]
+ UNSPEC_PRED_Z))]
+ "TARGET_SVE2
+ && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])"
+ "<sve_int_op>\t%0.<Vetype>, %1/z, %2.<Vetype>, %3.<Vetype>"
+ "&& !rtx_equal_p (operands[4], operands[6])"
+ {
+ operands[6] = copy_rtx (operands[4]);
+ operands[7] = operands[5];
+ }
+)
+
+;; Predicated string matching in which only the flags result is interesting.
+(define_insn_and_rewrite "*aarch64_pred_<sve_int_op><mode>_ptest"
+ [(set (reg:CC_NZC CC_REGNUM)
+ (unspec:CC_NZC
+ [(match_operand:VNx16BI 1 "register_operand" "Upl")
+ (match_operand 4)
+ (match_operand:SI 5 "aarch64_sve_ptrue_flag")
+ (unspec:<VPRED>
+ [(match_operand 6)
+ (match_operand:SI 7 "aarch64_sve_ptrue_flag")
+ (unspec:<VPRED>
+ [(match_operand:SVE_FULL_BHI 2 "register_operand" "w")
+ (match_operand:SVE_FULL_BHI 3 "register_operand" "w")]
+ SVE2_MATCH)]
+ UNSPEC_PRED_Z)]
+ UNSPEC_PTEST))
+ (clobber (match_scratch:<VPRED> 0 "=Upa"))]
+ "TARGET_SVE2
+ && aarch64_sve_same_pred_for_ptest_p (&operands[4], &operands[6])"
+ "<sve_int_op>\t%0.<Vetype>, %1/z, %2.<Vetype>, %3.<Vetype>"
+ "&& !rtx_equal_p (operands[4], operands[6])"
+ {
+ operands[6] = copy_rtx (operands[4]);
+ operands[7] = operands[5];
+ }
+)
+
+;; =========================================================================
+;; == Crypotographic extensions
+;; =========================================================================
+
+;; -------------------------------------------------------------------------
+;; ---- Optional AES extensions
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - AESD
+;; - AESE
+;; - AESIMC
+;; - AESMC
+;; -------------------------------------------------------------------------
+
+;; AESD and AESE.
+(define_insn "aarch64_sve2_aes<aes_op>"
+ [(set (match_operand:VNx16QI 0 "register_operand" "=w")
+ (unspec:VNx16QI
+ [(xor:VNx16QI
+ (match_operand:VNx16QI 1 "register_operand" "%0")
+ (match_operand:VNx16QI 2 "register_operand" "w"))]
+ CRYPTO_AES))]
+ "TARGET_SVE2_AES"
+ "aes<aes_op>\t%0.b, %0.b, %2.b"
+ [(set_attr "type" "crypto_aese")]
+)
+
+;; AESMC and AESIMC. These instructions do not take MOVPRFX.
+(define_insn "aarch64_sve2_aes<aesmc_op>"
+ [(set (match_operand:VNx16QI 0 "register_operand" "=w")
+ (unspec:VNx16QI
+ [(match_operand:VNx16QI 1 "register_operand" "0")]
+ CRYPTO_AESMC))]
+ "TARGET_SVE2_AES"
+ "aes<aesmc_op>\t%0.b, %0.b"
+ [(set_attr "type" "crypto_aesmc")]
+)
+
+;; When AESE/AESMC and AESD/AESIMC fusion is enabled, we really want
+;; to keep the two together and enforce the register dependency without
+;; scheduling or register allocation messing up the order or introducing
+;; moves inbetween. Mash the two together during combine.
+
+(define_insn "*aarch64_sve2_aese_fused"
+ [(set (match_operand:VNx16QI 0 "register_operand" "=w")
+ (unspec:VNx16QI
+ [(unspec:VNx16QI
+ [(xor:VNx16QI
+ (match_operand:VNx16QI 1 "register_operand" "%0")
+ (match_operand:VNx16QI 2 "register_operand" "w"))]
+ UNSPEC_AESE)]
+ UNSPEC_AESMC))]
+ "TARGET_SVE2_AES && aarch64_fusion_enabled_p (AARCH64_FUSE_AES_AESMC)"
+ "aese\t%0.b, %0.b, %2.b\;aesmc\t%0.b, %0.b"
+ [(set_attr "type" "crypto_aese")
+ (set_attr "length" "8")]
+)
+
+(define_insn "*aarch64_sve2_aesd_fused"
+ [(set (match_operand:VNx16QI 0 "register_operand" "=w")
+ (unspec:VNx16QI
+ [(unspec:VNx16QI
+ [(xor:VNx16QI
+ (match_operand:VNx16QI 1 "register_operand" "%0")
+ (match_operand:VNx16QI 2 "register_operand" "w"))]
+ UNSPEC_AESD)]
+ UNSPEC_AESIMC))]
+ "TARGET_SVE2_AES && aarch64_fusion_enabled_p (AARCH64_FUSE_AES_AESMC)"
+ "aesd\t%0.b, %0.b, %2.b\;aesimc\t%0.b, %0.b"
+ [(set_attr "type" "crypto_aese")
+ (set_attr "length" "8")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- Optional SHA-3 extensions
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - RAX1
+;; -------------------------------------------------------------------------
+
+(define_insn "aarch64_sve2_rax1"
+ [(set (match_operand:VNx2DI 0 "register_operand" "=w")
+ (xor:VNx2DI
+ (rotate:VNx2DI
+ (match_operand:VNx2DI 2 "register_operand" "w")
+ (const_int 1))
+ (match_operand:VNx2DI 1 "register_operand" "w")))]
+ "TARGET_SVE2_SHA3"
+ "rax1\t%0.d, %1.d, %2.d"
+ [(set_attr "type" "crypto_sha3")]
+)
+
+;; -------------------------------------------------------------------------
+;; ---- Optional SM4 extensions
+;; -------------------------------------------------------------------------
+;; Includes:
+;; - SM4E
+;; - SM4EKEY
+;; -------------------------------------------------------------------------
+
+;; These instructions do not take MOVPRFX.
+(define_insn "aarch64_sve2_sm4e"
+ [(set (match_operand:VNx4SI 0 "register_operand" "=w")
+ (unspec:VNx4SI
+ [(match_operand:VNx4SI 1 "register_operand" "0")
+ (match_operand:VNx4SI 2 "register_operand" "w")]
+ UNSPEC_SM4E))]
+ "TARGET_SVE2_SM4"
+ "sm4e\t%0.s, %0.s, %2.s"
+ [(set_attr "type" "crypto_sm4")]
+)
+
+(define_insn "aarch64_sve2_sm4ekey"
+ [(set (match_operand:VNx4SI 0 "register_operand" "=w")
+ (unspec:VNx4SI
+ [(match_operand:VNx4SI 1 "register_operand" "w")
+ (match_operand:VNx4SI 2 "register_operand" "w")]
+ UNSPEC_SM4EKEY))]
+ "TARGET_SVE2_SM4"
+ "sm4ekey\t%0.s, %1.s, %2.s"
+ [(set_attr "type" "crypto_sm4")]
+)
#define AARCH64_ISA_F16 (aarch64_isa_flags & AARCH64_FL_F16)
#define AARCH64_ISA_SVE (aarch64_isa_flags & AARCH64_FL_SVE)
#define AARCH64_ISA_SVE2 (aarch64_isa_flags & AARCH64_FL_SVE2)
+#define AARCH64_ISA_SVE2_AES (aarch64_isa_flags & AARCH64_FL_SVE2_AES)
+#define AARCH64_ISA_SVE2_BITPERM (aarch64_isa_flags & AARCH64_FL_SVE2_BITPERM)
+#define AARCH64_ISA_SVE2_SHA3 (aarch64_isa_flags & AARCH64_FL_SVE2_SHA3)
+#define AARCH64_ISA_SVE2_SM4 (aarch64_isa_flags & AARCH64_FL_SVE2_SM4)
#define AARCH64_ISA_V8_3 (aarch64_isa_flags & AARCH64_FL_V8_3)
#define AARCH64_ISA_DOTPROD (aarch64_isa_flags & AARCH64_FL_DOTPROD)
#define AARCH64_ISA_AES (aarch64_isa_flags & AARCH64_FL_AES)
/* SVE2 instructions, enabled through +sve2. */
#define TARGET_SVE2 (AARCH64_ISA_SVE2)
+/* SVE2 AES instructions, enabled through +sve2-aes. */
+#define TARGET_SVE2_AES (AARCH64_ISA_SVE2_AES)
+
+/* SVE2 BITPERM instructions, enabled through +sve2-bitperm. */
+#define TARGET_SVE2_BITPERM (AARCH64_ISA_SVE2_BITPERM)
+
+/* SVE2 SHA3 instructions, enabled through +sve2-sha3. */
+#define TARGET_SVE2_SHA3 (AARCH64_ISA_SVE2_SHA3)
+
+/* SVE2 SM4 instructions, enabled through +sve2-sm4. */
+#define TARGET_SVE2_SM4 (AARCH64_ISA_SVE2_SM4)
+
/* ARMv8.3-A features. */
#define TARGET_ARMV8_3 (AARCH64_ISA_V8_3)
UNSPEC_LD1RQ
UNSPEC_LD1_GATHER
UNSPEC_LDFF1_GATHER
+ UNSPEC_LDNT1_GATHER
UNSPEC_ST1_SCATTER
+ UNSPEC_STNT1_SCATTER
UNSPEC_PRED_X
UNSPEC_PRED_Z
UNSPEC_PTEST
UNSPEC_UNPACKSLO
UNSPEC_UNPACKULO
UNSPEC_PACK
+ UNSPEC_WHILEGE
+ UNSPEC_WHILEGT
+ UNSPEC_WHILEHI
+ UNSPEC_WHILEHS
UNSPEC_WHILELE
UNSPEC_WHILELO
UNSPEC_WHILELS
(define_mode_iterator VMUL_CHANGE_NLANES [V4HI V8HI V2SI V4SI V2SF V4SF])
;; Iterators for single modes, for "@" patterns.
+(define_mode_iterator VNx16QI_ONLY [VNx16QI])
(define_mode_iterator VNx8HI_ONLY [VNx8HI])
(define_mode_iterator VNx4SI_ONLY [VNx4SI])
+(define_mode_iterator VNx4SF_ONLY [VNx4SF])
(define_mode_iterator VNx2DI_ONLY [VNx2DI])
(define_mode_iterator VNx2DF_ONLY [VNx2DF])
VNx64QI VNx32HI VNx16SI VNx8DI
VNx32HF VNx16SF VNx8DF])
+;; SVE_STRUCT restricted to 2-vector tuples.
+(define_mode_iterator SVE_STRUCT2 [VNx32QI VNx16HI VNx8SI VNx4DI
+ VNx16HF VNx8SF VNx4DF])
+
;; All fully-packed SVE vector modes.
(define_mode_iterator SVE_FULL [VNx16QI VNx8HI VNx4SI VNx2DI
VNx8HF VNx4SF VNx2DF])
;; All fully-packed SVE floating-point vector modes.
(define_mode_iterator SVE_FULL_F [VNx8HF VNx4SF VNx2DF])
+;; Fully-packed SVE integer vector modes that have 8-bit or 16-bit elements.
+(define_mode_iterator SVE_FULL_BHI [VNx16QI VNx8HI])
+
;; Fully-packed SVE integer vector modes that have 8-bit, 16-bit or 32-bit
;; elements.
(define_mode_iterator SVE_FULL_BHSI [VNx16QI VNx8HI VNx4SI])
;; elements.
(define_mode_iterator SVE_FULL_HSDI [VNx8HI VNx4SI VNx2DI])
+;; Fully-packed SVE integer vector modes that have 16-bit or 32-bit
+;; elements.
+(define_mode_iterator SVE_FULL_HSI [VNx8HI VNx4SI])
+
;; Fully-packed SVE floating-point vector modes that have 16-bit or 32-bit
;; elements.
(define_mode_iterator SVE_FULL_HSF [VNx8HF VNx4SF])
+;; Fully-packed SVE integer vector modes that have 16-bit or 64-bit elements.
+(define_mode_iterator SVE_FULL_HDI [VNx8HI VNx2DI])
+
;; Fully-packed SVE vector modes that have 32-bit or 64-bit elements.
(define_mode_iterator SVE_FULL_SD [VNx4SI VNx2DI VNx4SF VNx2DF])
;; SVE integer modes with 4 elements, excluding the narrowest element.
(define_mode_iterator SVE_4HSI [VNx4HI VNx4SI])
+;; SVE integer modes that can form the input to an SVE2 PMULL[BT] instruction.
+(define_mode_iterator SVE2_PMULL_PAIR_I [VNx16QI VNx4SI
+ (VNx2DI "TARGET_SVE2_AES")])
+
;; Modes involved in extending or truncating SVE data, for 8 elements per
;; 128-bit block.
(define_mode_iterator VNx8_NARROW [VNx8QI])
UNSPEC_RSUBHN2 ; Used in aarch64-simd.md.
UNSPEC_SQDMULH ; Used in aarch64-simd.md.
UNSPEC_SQRDMULH ; Used in aarch64-simd.md.
- UNSPEC_SMULLB ; Used in aarch64-sve2.md.
- UNSPEC_SMULLT ; Used in aarch64-sve2.md.
- UNSPEC_UMULLB ; Used in aarch64-sve2.md.
- UNSPEC_UMULLT ; Used in aarch64-sve2.md.
UNSPEC_PMUL ; Used in aarch64-simd.md.
UNSPEC_FMULX ; Used in aarch64-simd.md.
UNSPEC_USQADD ; Used in aarch64-simd.md.
UNSPEC_UQSHRN ; Used in aarch64-simd.md.
UNSPEC_SQRSHRN ; Used in aarch64-simd.md.
UNSPEC_UQRSHRN ; Used in aarch64-simd.md.
- UNSPEC_SHRNB ; Used in aarch64-sve2.md.
- UNSPEC_SHRNT ; Used in aarch64-sve2.md.
- UNSPEC_RSHRNB ; Used in aarch64-sve2.md.
- UNSPEC_RSHRNT ; Used in aarch64-sve2.md.
UNSPEC_SSHL ; Used in aarch64-simd.md.
UNSPEC_USHL ; Used in aarch64-simd.md.
UNSPEC_SRSHL ; Used in aarch64-simd.md.
UNSPEC_FCMLA90 ; Used in aarch64-simd.md.
UNSPEC_FCMLA180 ; Used in aarch64-simd.md.
UNSPEC_FCMLA270 ; Used in aarch64-simd.md.
- UNSPEC_SMULHS ; Used in aarch64-sve2.md.
+ UNSPEC_ASRD ; Used in aarch64-sve.md.
+ UNSPEC_ADCLB ; Used in aarch64-sve2.md.
+ UNSPEC_ADCLT ; Used in aarch64-sve2.md.
+ UNSPEC_ADDHNB ; Used in aarch64-sve2.md.
+ UNSPEC_ADDHNT ; Used in aarch64-sve2.md.
+ UNSPEC_BDEP ; Used in aarch64-sve2.md.
+ UNSPEC_BEXT ; Used in aarch64-sve2.md.
+ UNSPEC_BGRP ; Used in aarch64-sve2.md.
+ UNSPEC_CADD270 ; Used in aarch64-sve2.md.
+ UNSPEC_CADD90 ; Used in aarch64-sve2.md.
+ UNSPEC_CDOT ; Used in aarch64-sve2.md.
+ UNSPEC_CDOT180 ; Used in aarch64-sve2.md.
+ UNSPEC_CDOT270 ; Used in aarch64-sve2.md.
+ UNSPEC_CDOT90 ; Used in aarch64-sve2.md.
+ UNSPEC_CMLA ; Used in aarch64-sve2.md.
+ UNSPEC_CMLA180 ; Used in aarch64-sve2.md.
+ UNSPEC_CMLA270 ; Used in aarch64-sve2.md.
+ UNSPEC_CMLA90 ; Used in aarch64-sve2.md.
+ UNSPEC_COND_FCVTLT ; Used in aarch64-sve2.md.
+ UNSPEC_COND_FCVTNT ; Used in aarch64-sve2.md.
+ UNSPEC_COND_FCVTX ; Used in aarch64-sve2.md.
+ UNSPEC_COND_FCVTXNT ; Used in aarch64-sve2.md.
+ UNSPEC_COND_FLOGB ; Used in aarch64-sve2.md.
+ UNSPEC_EORBT ; Used in aarch64-sve2.md.
+ UNSPEC_EORTB ; Used in aarch64-sve2.md.
+ UNSPEC_FADDP ; Used in aarch64-sve2.md.
+ UNSPEC_FMAXNMP ; Used in aarch64-sve2.md.
+ UNSPEC_FMAXP ; Used in aarch64-sve2.md.
+ UNSPEC_FMINNMP ; Used in aarch64-sve2.md.
+ UNSPEC_FMINP ; Used in aarch64-sve2.md.
+ UNSPEC_FMLALB ; Used in aarch64-sve2.md.
+ UNSPEC_FMLALT ; Used in aarch64-sve2.md.
+ UNSPEC_FMLSLB ; Used in aarch64-sve2.md.
+ UNSPEC_FMLSLT ; Used in aarch64-sve2.md.
+ UNSPEC_HISTCNT ; Used in aarch64-sve2.md.
+ UNSPEC_HISTSEG ; Used in aarch64-sve2.md.
+ UNSPEC_MATCH ; Used in aarch64-sve2.md.
+ UNSPEC_NMATCH ; Used in aarch64-sve2.md.
+ UNSPEC_PMULLB ; Used in aarch64-sve2.md.
+ UNSPEC_PMULLB_PAIR ; Used in aarch64-sve2.md.
+ UNSPEC_PMULLT ; Used in aarch64-sve2.md.
+ UNSPEC_PMULLT_PAIR ; Used in aarch64-sve2.md.
+ UNSPEC_RADDHNB ; Used in aarch64-sve2.md.
+ UNSPEC_RADDHNT ; Used in aarch64-sve2.md.
+ UNSPEC_RSHRNB ; Used in aarch64-sve2.md.
+ UNSPEC_RSHRNT ; Used in aarch64-sve2.md.
+ UNSPEC_RSUBHNB ; Used in aarch64-sve2.md.
+ UNSPEC_RSUBHNT ; Used in aarch64-sve2.md.
+ UNSPEC_SABDLB ; Used in aarch64-sve2.md.
+ UNSPEC_SABDLT ; Used in aarch64-sve2.md.
+ UNSPEC_SADDLB ; Used in aarch64-sve2.md.
+ UNSPEC_SADDLBT ; Used in aarch64-sve2.md.
+ UNSPEC_SADDLT ; Used in aarch64-sve2.md.
+ UNSPEC_SADDWB ; Used in aarch64-sve2.md.
+ UNSPEC_SADDWT ; Used in aarch64-sve2.md.
+ UNSPEC_SBCLB ; Used in aarch64-sve2.md.
+ UNSPEC_SBCLT ; Used in aarch64-sve2.md.
+ UNSPEC_SHRNB ; Used in aarch64-sve2.md.
+ UNSPEC_SHRNT ; Used in aarch64-sve2.md.
+ UNSPEC_SLI ; Used in aarch64-sve2.md.
+ UNSPEC_SMAXP ; Used in aarch64-sve2.md.
+ UNSPEC_SMINP ; Used in aarch64-sve2.md.
UNSPEC_SMULHRS ; Used in aarch64-sve2.md.
- UNSPEC_UMULHS ; Used in aarch64-sve2.md.
+ UNSPEC_SMULHS ; Used in aarch64-sve2.md.
+ UNSPEC_SMULLB ; Used in aarch64-sve2.md.
+ UNSPEC_SMULLT ; Used in aarch64-sve2.md.
+ UNSPEC_SQCADD270 ; Used in aarch64-sve2.md.
+ UNSPEC_SQCADD90 ; Used in aarch64-sve2.md.
+ UNSPEC_SQDMULLB ; Used in aarch64-sve2.md.
+ UNSPEC_SQDMULLBT ; Used in aarch64-sve2.md.
+ UNSPEC_SQDMULLT ; Used in aarch64-sve2.md.
+ UNSPEC_SQRDCMLAH ; Used in aarch64-sve2.md.
+ UNSPEC_SQRDCMLAH180 ; Used in aarch64-sve2.md.
+ UNSPEC_SQRDCMLAH270 ; Used in aarch64-sve2.md.
+ UNSPEC_SQRDCMLAH90 ; Used in aarch64-sve2.md.
+ UNSPEC_SQRSHRNB ; Used in aarch64-sve2.md.
+ UNSPEC_SQRSHRNT ; Used in aarch64-sve2.md.
+ UNSPEC_SQRSHRUNB ; Used in aarch64-sve2.md.
+ UNSPEC_SQRSHRUNT ; Used in aarch64-sve2.md.
+ UNSPEC_SQSHRNB ; Used in aarch64-sve2.md.
+ UNSPEC_SQSHRNT ; Used in aarch64-sve2.md.
+ UNSPEC_SQSHRUNB ; Used in aarch64-sve2.md.
+ UNSPEC_SQSHRUNT ; Used in aarch64-sve2.md.
+ UNSPEC_SQXTNB ; Used in aarch64-sve2.md.
+ UNSPEC_SQXTNT ; Used in aarch64-sve2.md.
+ UNSPEC_SQXTUNB ; Used in aarch64-sve2.md.
+ UNSPEC_SQXTUNT ; Used in aarch64-sve2.md.
+ UNSPEC_SRI ; Used in aarch64-sve2.md.
+ UNSPEC_SSHLLB ; Used in aarch64-sve2.md.
+ UNSPEC_SSHLLT ; Used in aarch64-sve2.md.
+ UNSPEC_SSUBLB ; Used in aarch64-sve2.md.
+ UNSPEC_SSUBLBT ; Used in aarch64-sve2.md.
+ UNSPEC_SSUBLT ; Used in aarch64-sve2.md.
+ UNSPEC_SSUBLTB ; Used in aarch64-sve2.md.
+ UNSPEC_SSUBWB ; Used in aarch64-sve2.md.
+ UNSPEC_SSUBWT ; Used in aarch64-sve2.md.
+ UNSPEC_SUBHNB ; Used in aarch64-sve2.md.
+ UNSPEC_SUBHNT ; Used in aarch64-sve2.md.
+ UNSPEC_TBL2 ; Used in aarch64-sve2.md.
+ UNSPEC_UABDLB ; Used in aarch64-sve2.md.
+ UNSPEC_UABDLT ; Used in aarch64-sve2.md.
+ UNSPEC_UADDLB ; Used in aarch64-sve2.md.
+ UNSPEC_UADDLT ; Used in aarch64-sve2.md.
+ UNSPEC_UADDWB ; Used in aarch64-sve2.md.
+ UNSPEC_UADDWT ; Used in aarch64-sve2.md.
+ UNSPEC_UMAXP ; Used in aarch64-sve2.md.
+ UNSPEC_UMINP ; Used in aarch64-sve2.md.
UNSPEC_UMULHRS ; Used in aarch64-sve2.md.
- UNSPEC_ASRD ; Used in aarch64-sve.md.
+ UNSPEC_UMULHS ; Used in aarch64-sve2.md.
+ UNSPEC_UMULLB ; Used in aarch64-sve2.md.
+ UNSPEC_UMULLT ; Used in aarch64-sve2.md.
+ UNSPEC_UQRSHRNB ; Used in aarch64-sve2.md.
+ UNSPEC_UQRSHRNT ; Used in aarch64-sve2.md.
+ UNSPEC_UQSHRNB ; Used in aarch64-sve2.md.
+ UNSPEC_UQSHRNT ; Used in aarch64-sve2.md.
+ UNSPEC_UQXTNB ; Used in aarch64-sve2.md.
+ UNSPEC_UQXTNT ; Used in aarch64-sve2.md.
+ UNSPEC_USHLLB ; Used in aarch64-sve2.md.
+ UNSPEC_USHLLT ; Used in aarch64-sve2.md.
+ UNSPEC_USUBLB ; Used in aarch64-sve2.md.
+ UNSPEC_USUBLT ; Used in aarch64-sve2.md.
+ UNSPEC_USUBWB ; Used in aarch64-sve2.md.
+ UNSPEC_USUBWT ; Used in aarch64-sve2.md.
])
;; ------------------------------------------------------------------
(define_mode_attr VNARROWQ2 [(V8HI "V16QI") (V4SI "V8HI")
(V2DI "V4SI")])
+;; Narrowed modes of vector modes.
+(define_mode_attr VNARROW [(VNx8HI "VNx16QI")
+ (VNx4SI "VNx8HI") (VNx4SF "VNx8HF")
+ (VNx2DI "VNx4SI") (VNx2DF "VNx4SF")])
+
;; Register suffix narrowed modes for VQN.
(define_mode_attr Vntype [(V8HI "8b") (V4SI "4h")
(V2DI "2s")])
(V8HI "4s") (V4SI "2d")
(V8HF "4s") (V4SF "2d")])
-;; SVE vector after widening
+;; SVE vector after narrowing.
+(define_mode_attr Ventype [(VNx8HI "b")
+ (VNx4SI "h") (VNx4SF "h")
+ (VNx2DI "s") (VNx2DF "s")])
+
+;; SVE vector after widening.
(define_mode_attr Vewtype [(VNx16QI "h")
(VNx8HI "s") (VNx8HF "s")
- (VNx4SI "d") (VNx4SF "d")])
+ (VNx4SI "d") (VNx4SF "d")
+ (VNx2DI "q")])
;; Widened mode register suffixes for VDW/VQW.
(define_mode_attr Vmwtype [(V8QI ".8h") (V4HI ".4s")
(VNx16SI "vnx4bi") (VNx16SF "vnx4bi")
(VNx8DI "vnx2bi") (VNx8DF "vnx2bi")])
+(define_mode_attr VDOUBLE [(VNx16QI "VNx32QI")
+ (VNx8HI "VNx16HI") (VNx8HF "VNx16HF")
+ (VNx4SI "VNx8SI") (VNx4SF "VNx8SF")
+ (VNx2DI "VNx4DI") (VNx2DF "VNx4DF")])
+
;; On AArch64 the By element instruction doesn't have a 2S variant.
;; However because the instruction always selects a pair of values
;; The normal 3SAME instruction can be used here instead.
(VNx2DI "0x27")])
;; The constraint to use for an SVE [SU]DOT, FMUL, FMLA or FMLS lane index.
-(define_mode_attr sve_lane_con [(VNx4SI "y") (VNx2DI "x")
+(define_mode_attr sve_lane_con [(VNx8HI "y") (VNx4SI "y") (VNx2DI "x")
(VNx8HF "y") (VNx4SF "y") (VNx2DF "x")])
;; The constraint to use for an SVE FCMLA lane index.
(define_code_iterator FAC_COMPARISONS [lt le ge gt])
;; SVE integer unary operations.
-(define_code_iterator SVE_INT_UNARY [abs neg not clrsb clz popcount])
+(define_code_iterator SVE_INT_UNARY [abs neg not clrsb clz popcount
+ (ss_abs "TARGET_SVE2")
+ (ss_neg "TARGET_SVE2")])
;; SVE integer binary operations.
(define_code_iterator SVE_INT_BINARY [plus minus mult smax umax smin umin
ashift ashiftrt lshiftrt
- and ior xor])
+ and ior xor
+ (ss_plus "TARGET_SVE2")
+ (us_plus "TARGET_SVE2")
+ (ss_minus "TARGET_SVE2")
+ (us_minus "TARGET_SVE2")])
;; SVE integer binary division operations.
(define_code_iterator SVE_INT_BINARY_SD [div udiv])
(not "not")
(clrsb "cls")
(clz "clz")
- (popcount "cnt")])
+ (popcount "cnt")
+ (ss_plus "sqadd")
+ (us_plus "uqadd")
+ (ss_minus "sqsub")
+ (us_minus "uqsub")
+ (ss_neg "sqneg")
+ (ss_abs "sqabs")])
(define_code_attr sve_int_op_rev [(plus "add")
(minus "subr")
(lshiftrt "lsrr")
(and "and")
(ior "orr")
- (xor "eor")])
+ (xor "eor")
+ (ss_plus "sqadd")
+ (us_plus "uqadd")
+ (ss_minus "sqsubr")
+ (us_minus "uqsubr")])
;; The floating-point SVE instruction that implements an rtx code.
(define_code_attr sve_fp_op [(plus "fadd")
(lshiftrt "aarch64_sve_rshift_operand")
(and "aarch64_sve_pred_and_operand")
(ior "register_operand")
- (xor "register_operand")])
+ (xor "register_operand")
+ (ss_plus "register_operand")
+ (us_plus "register_operand")
+ (ss_minus "register_operand")
+ (us_minus "register_operand")])
(define_code_attr inc_dec [(minus "dec") (ss_minus "sqdec") (us_minus "uqdec")
(plus "inc") (ss_plus "sqinc") (us_plus "uqinc")])
(define_int_iterator RHADD [UNSPEC_SRHADD UNSPEC_URHADD])
-(define_int_iterator MULLBT [UNSPEC_SMULLB UNSPEC_UMULLB
- UNSPEC_SMULLT UNSPEC_UMULLT])
-
-(define_int_iterator SHRNB [UNSPEC_SHRNB UNSPEC_RSHRNB])
-
-(define_int_iterator SHRNT [UNSPEC_SHRNT UNSPEC_RSHRNT])
-
(define_int_iterator BSL_DUP [1 2])
(define_int_iterator DOTPROD [UNSPEC_SDOT UNSPEC_UDOT])
(define_int_iterator SVE_FP_UNARY_INT [UNSPEC_FEXPA])
+(define_int_iterator SVE_INT_SHIFT_IMM [UNSPEC_ASRD
+ (UNSPEC_SQSHLU "TARGET_SVE2")
+ (UNSPEC_SRSHR "TARGET_SVE2")
+ (UNSPEC_URSHR "TARGET_SVE2")])
+
(define_int_iterator SVE_FP_BINARY [UNSPEC_FRECPS UNSPEC_RSQRTS])
(define_int_iterator SVE_FP_BINARY_INT [UNSPEC_FTSMUL UNSPEC_FTSSEL])
(define_int_iterator SVE_WHILE [UNSPEC_WHILELE UNSPEC_WHILELO
UNSPEC_WHILELS UNSPEC_WHILELT
+ (UNSPEC_WHILEGE "TARGET_SVE2")
+ (UNSPEC_WHILEGT "TARGET_SVE2")
+ (UNSPEC_WHILEHI "TARGET_SVE2")
+ (UNSPEC_WHILEHS "TARGET_SVE2")
(UNSPEC_WHILERW "TARGET_SVE2")
(UNSPEC_WHILEWR "TARGET_SVE2")])
(define_int_iterator SVE_LDFF1_LDNF1 [UNSPEC_LDFF1 UNSPEC_LDNF1])
+(define_int_iterator SVE2_U32_UNARY [UNSPEC_URECPE UNSPEC_RSQRTE])
+
+(define_int_iterator SVE2_INT_UNARY_NARROWB [UNSPEC_SQXTNB
+ UNSPEC_SQXTUNB
+ UNSPEC_UQXTNB])
+
+(define_int_iterator SVE2_INT_UNARY_NARROWT [UNSPEC_SQXTNT
+ UNSPEC_SQXTUNT
+ UNSPEC_UQXTNT])
+
+(define_int_iterator SVE2_INT_BINARY [UNSPEC_SQDMULH
+ UNSPEC_SQRDMULH])
+
+(define_int_iterator SVE2_INT_BINARY_LANE [UNSPEC_SQDMULH
+ UNSPEC_SQRDMULH])
+
+(define_int_iterator SVE2_INT_BINARY_LONG [UNSPEC_SABDLB
+ UNSPEC_SABDLT
+ UNSPEC_SADDLB
+ UNSPEC_SADDLBT
+ UNSPEC_SADDLT
+ UNSPEC_SMULLB
+ UNSPEC_SMULLT
+ UNSPEC_SQDMULLB
+ UNSPEC_SQDMULLT
+ UNSPEC_SSUBLB
+ UNSPEC_SSUBLBT
+ UNSPEC_SSUBLT
+ UNSPEC_SSUBLTB
+ UNSPEC_UABDLB
+ UNSPEC_UABDLT
+ UNSPEC_UADDLB
+ UNSPEC_UADDLT
+ UNSPEC_UMULLB
+ UNSPEC_UMULLT
+ UNSPEC_USUBLB
+ UNSPEC_USUBLT])
+
+(define_int_iterator SVE2_INT_BINARY_LONG_LANE [UNSPEC_SMULLB
+ UNSPEC_SMULLT
+ UNSPEC_SQDMULLB
+ UNSPEC_SQDMULLT
+ UNSPEC_UMULLB
+ UNSPEC_UMULLT])
+
+(define_int_iterator SVE2_INT_BINARY_NARROWB [UNSPEC_ADDHNB
+ UNSPEC_RADDHNB
+ UNSPEC_RSUBHNB
+ UNSPEC_SUBHNB])
+
+(define_int_iterator SVE2_INT_BINARY_NARROWT [UNSPEC_ADDHNT
+ UNSPEC_RADDHNT
+ UNSPEC_RSUBHNT
+ UNSPEC_SUBHNT])
+
+(define_int_iterator SVE2_INT_BINARY_PAIR [UNSPEC_ADDP
+ UNSPEC_SMAXP
+ UNSPEC_SMINP
+ UNSPEC_UMAXP
+ UNSPEC_UMINP])
+
+(define_int_iterator SVE2_FP_BINARY_PAIR [UNSPEC_FADDP
+ UNSPEC_FMAXP
+ UNSPEC_FMAXNMP
+ UNSPEC_FMINP
+ UNSPEC_FMINNMP])
+
+(define_int_iterator SVE2_INT_BINARY_PAIR_LONG [UNSPEC_SADALP UNSPEC_UADALP])
+
+(define_int_iterator SVE2_INT_BINARY_WIDE [UNSPEC_SADDWB
+ UNSPEC_SADDWT
+ UNSPEC_SSUBWB
+ UNSPEC_SSUBWT
+ UNSPEC_UADDWB
+ UNSPEC_UADDWT
+ UNSPEC_USUBWB
+ UNSPEC_USUBWT])
+
+(define_int_iterator SVE2_INT_SHIFT_IMM_LONG [UNSPEC_SSHLLB
+ UNSPEC_SSHLLT
+ UNSPEC_USHLLB
+ UNSPEC_USHLLT])
+
+(define_int_iterator SVE2_INT_SHIFT_IMM_NARROWB [UNSPEC_RSHRNB
+ UNSPEC_SHRNB
+ UNSPEC_SQRSHRNB
+ UNSPEC_SQRSHRUNB
+ UNSPEC_SQSHRNB
+ UNSPEC_SQSHRUNB
+ UNSPEC_UQRSHRNB
+ UNSPEC_UQSHRNB])
+
+(define_int_iterator SVE2_INT_SHIFT_IMM_NARROWT [UNSPEC_RSHRNT
+ UNSPEC_SHRNT
+ UNSPEC_SQRSHRNT
+ UNSPEC_SQRSHRUNT
+ UNSPEC_SQSHRNT
+ UNSPEC_SQSHRUNT
+ UNSPEC_UQRSHRNT
+ UNSPEC_UQSHRNT])
+
+(define_int_iterator SVE2_INT_SHIFT_INSERT [UNSPEC_SLI UNSPEC_SRI])
+
+(define_int_iterator SVE2_INT_CADD [UNSPEC_CADD90
+ UNSPEC_CADD270
+ UNSPEC_SQCADD90
+ UNSPEC_SQCADD270])
+
+(define_int_iterator SVE2_INT_BITPERM [UNSPEC_BDEP UNSPEC_BEXT UNSPEC_BGRP])
+
+(define_int_iterator SVE2_INT_TERNARY [UNSPEC_ADCLB
+ UNSPEC_ADCLT
+ UNSPEC_EORBT
+ UNSPEC_EORTB
+ UNSPEC_SBCLB
+ UNSPEC_SBCLT
+ UNSPEC_SQRDMLAH
+ UNSPEC_SQRDMLSH])
+
+(define_int_iterator SVE2_INT_TERNARY_LANE [UNSPEC_SQRDMLAH
+ UNSPEC_SQRDMLSH])
+
+(define_int_iterator SVE2_FP_TERNARY_LONG [UNSPEC_FMLALB
+ UNSPEC_FMLALT
+ UNSPEC_FMLSLB
+ UNSPEC_FMLSLT])
+
+(define_int_iterator SVE2_FP_TERNARY_LONG_LANE [UNSPEC_FMLALB
+ UNSPEC_FMLALT
+ UNSPEC_FMLSLB
+ UNSPEC_FMLSLT])
+
+(define_int_iterator SVE2_INT_CMLA [UNSPEC_CMLA
+ UNSPEC_CMLA90
+ UNSPEC_CMLA180
+ UNSPEC_CMLA270
+ UNSPEC_SQRDCMLAH
+ UNSPEC_SQRDCMLAH90
+ UNSPEC_SQRDCMLAH180
+ UNSPEC_SQRDCMLAH270])
+
+(define_int_iterator SVE2_INT_CDOT [UNSPEC_CDOT
+ UNSPEC_CDOT90
+ UNSPEC_CDOT180
+ UNSPEC_CDOT270])
+
+(define_int_iterator SVE2_INT_ADD_BINARY_LONG [UNSPEC_SABDLB
+ UNSPEC_SABDLT
+ UNSPEC_SMULLB
+ UNSPEC_SMULLT
+ UNSPEC_UABDLB
+ UNSPEC_UABDLT
+ UNSPEC_UMULLB
+ UNSPEC_UMULLT])
+
+(define_int_iterator SVE2_INT_QADD_BINARY_LONG [UNSPEC_SQDMULLB
+ UNSPEC_SQDMULLBT
+ UNSPEC_SQDMULLT])
+
+(define_int_iterator SVE2_INT_SUB_BINARY_LONG [UNSPEC_SMULLB
+ UNSPEC_SMULLT
+ UNSPEC_UMULLB
+ UNSPEC_UMULLT])
+
+(define_int_iterator SVE2_INT_QSUB_BINARY_LONG [UNSPEC_SQDMULLB
+ UNSPEC_SQDMULLBT
+ UNSPEC_SQDMULLT])
+
+(define_int_iterator SVE2_INT_ADD_BINARY_LONG_LANE [UNSPEC_SMULLB
+ UNSPEC_SMULLT
+ UNSPEC_UMULLB
+ UNSPEC_UMULLT])
+
+(define_int_iterator SVE2_INT_QADD_BINARY_LONG_LANE [UNSPEC_SQDMULLB
+ UNSPEC_SQDMULLT])
+
+(define_int_iterator SVE2_INT_SUB_BINARY_LONG_LANE [UNSPEC_SMULLB
+ UNSPEC_SMULLT
+ UNSPEC_UMULLB
+ UNSPEC_UMULLT])
+
+(define_int_iterator SVE2_INT_QSUB_BINARY_LONG_LANE [UNSPEC_SQDMULLB
+ UNSPEC_SQDMULLT])
+
+(define_int_iterator SVE2_COND_INT_UNARY_FP [UNSPEC_COND_FLOGB])
+
+(define_int_iterator SVE2_COND_FP_UNARY_LONG [UNSPEC_COND_FCVTLT])
+
+(define_int_iterator SVE2_COND_FP_UNARY_NARROWB [UNSPEC_COND_FCVTX])
+
+(define_int_iterator SVE2_COND_INT_BINARY [UNSPEC_SHADD
+ UNSPEC_SHSUB
+ UNSPEC_SQRSHL
+ UNSPEC_SRHADD
+ UNSPEC_SRSHL
+ UNSPEC_SUQADD
+ UNSPEC_UHADD
+ UNSPEC_UHSUB
+ UNSPEC_UQRSHL
+ UNSPEC_URHADD
+ UNSPEC_URSHL
+ UNSPEC_USQADD])
+
+(define_int_iterator SVE2_COND_INT_BINARY_NOREV [UNSPEC_SUQADD
+ UNSPEC_USQADD])
+
+(define_int_iterator SVE2_COND_INT_BINARY_REV [UNSPEC_SHADD
+ UNSPEC_SHSUB
+ UNSPEC_SQRSHL
+ UNSPEC_SRHADD
+ UNSPEC_SRSHL
+ UNSPEC_UHADD
+ UNSPEC_UHSUB
+ UNSPEC_UQRSHL
+ UNSPEC_URHADD
+ UNSPEC_URSHL])
+
+(define_int_iterator SVE2_COND_INT_SHIFT [UNSPEC_SQSHL
+ UNSPEC_UQSHL])
+
+(define_int_iterator SVE2_MATCH [UNSPEC_MATCH UNSPEC_NMATCH])
+
+(define_int_iterator SVE2_PMULL [UNSPEC_PMULLB UNSPEC_PMULLT])
+
+(define_int_iterator SVE2_PMULL_PAIR [UNSPEC_PMULLB_PAIR UNSPEC_PMULLT_PAIR])
+
(define_int_iterator FCADD [UNSPEC_FCADD90
UNSPEC_FCADD270])
(UNSPEC_UMINV "umin")
(UNSPEC_SMAXV "smax")
(UNSPEC_SMINV "smin")
+ (UNSPEC_CADD90 "cadd90")
+ (UNSPEC_CADD270 "cadd270")
+ (UNSPEC_CDOT "cdot")
+ (UNSPEC_CDOT90 "cdot90")
+ (UNSPEC_CDOT180 "cdot180")
+ (UNSPEC_CDOT270 "cdot270")
+ (UNSPEC_CMLA "cmla")
+ (UNSPEC_CMLA90 "cmla90")
+ (UNSPEC_CMLA180 "cmla180")
+ (UNSPEC_CMLA270 "cmla270")
(UNSPEC_FADDV "plus")
(UNSPEC_FMAXNMV "smax")
(UNSPEC_FMAXV "smax_nan")
(UNSPEC_FEXPA "fexpa")
(UNSPEC_FTSMUL "ftsmul")
(UNSPEC_FTSSEL "ftssel")
+ (UNSPEC_PMULLB "pmullb")
+ (UNSPEC_PMULLB_PAIR "pmullb_pair")
+ (UNSPEC_PMULLT "pmullt")
+ (UNSPEC_PMULLT_PAIR "pmullt_pair")
+ (UNSPEC_SQCADD90 "sqcadd90")
+ (UNSPEC_SQCADD270 "sqcadd270")
+ (UNSPEC_SQRDCMLAH "sqrdcmlah")
+ (UNSPEC_SQRDCMLAH90 "sqrdcmlah90")
+ (UNSPEC_SQRDCMLAH180 "sqrdcmlah180")
+ (UNSPEC_SQRDCMLAH270 "sqrdcmlah270")
(UNSPEC_WHILERW "vec_check_raw_alias")
(UNSPEC_WHILEWR "vec_check_war_alias")
(UNSPEC_COND_FABS "abs")
(UNSPEC_COND_FCVTZU "u")
(UNSPEC_COND_SCVTF "s")
(UNSPEC_COND_UCVTF "u")
- (UNSPEC_SMULLB "s") (UNSPEC_UMULLB "u")
- (UNSPEC_SMULLT "s") (UNSPEC_UMULLT "u")
(UNSPEC_SMULHS "s") (UNSPEC_UMULHS "u")
(UNSPEC_SMULHRS "s") (UNSPEC_UMULHRS "u")])
(UNSPEC_SQRSHRN "r") (UNSPEC_UQRSHRN "r")
(UNSPEC_SQSHL "") (UNSPEC_UQSHL "")
(UNSPEC_SQRSHL "r")(UNSPEC_UQRSHL "r")
- (UNSPEC_SHRNB "") (UNSPEC_SHRNT "")
- (UNSPEC_RSHRNB "r") (UNSPEC_RSHRNT "r")
(UNSPEC_SMULHS "") (UNSPEC_UMULHS "")
(UNSPEC_SMULHRS "r") (UNSPEC_UMULHRS "r")
])
(define_int_attr lr [(UNSPEC_SSLI "l") (UNSPEC_USLI "l")
- (UNSPEC_SSRI "r") (UNSPEC_USRI "r")])
+ (UNSPEC_SSRI "r") (UNSPEC_USRI "r")
+ (UNSPEC_SQSHL "l") (UNSPEC_UQSHL "l")
+ (UNSPEC_SQSHLU "l")
+ (UNSPEC_SRSHR "r") (UNSPEC_URSHR "r")
+ (UNSPEC_ASRD "r")
+ (UNSPEC_SLI "l") (UNSPEC_SRI "r")])
(define_int_attr u [(UNSPEC_SQSHLU "u") (UNSPEC_SQSHL "") (UNSPEC_UQSHL "")
(UNSPEC_SQSHRUN "u") (UNSPEC_SQRSHRUN "u")
(UNSPEC_SHADD "") (UNSPEC_UHADD "u")
(UNSPEC_SRHADD "") (UNSPEC_URHADD "u")])
-(define_int_attr bt [(UNSPEC_SMULLB "b") (UNSPEC_UMULLB "b")
- (UNSPEC_SMULLT "t") (UNSPEC_UMULLT "t")])
-
(define_int_attr fn [(UNSPEC_LDFF1 "f") (UNSPEC_LDNF1 "n")])
(define_int_attr ab [(UNSPEC_CLASTA "a") (UNSPEC_CLASTB "b")
(UNSPEC_COND_FCMLE "le")
(UNSPEC_COND_FCMLT "lt")
(UNSPEC_COND_FCMNE "ne")
+ (UNSPEC_WHILEGE "ge")
+ (UNSPEC_WHILEGT "gt")
+ (UNSPEC_WHILEHI "hi")
+ (UNSPEC_WHILEHS "hs")
(UNSPEC_WHILELE "le")
(UNSPEC_WHILELO "lo")
(UNSPEC_WHILELS "ls")
(UNSPEC_WHILERW "rw")
(UNSPEC_WHILEWR "wr")])
-(define_int_attr while_optab_cmp [(UNSPEC_WHILELE "le")
+(define_int_attr while_optab_cmp [(UNSPEC_WHILEGE "ge")
+ (UNSPEC_WHILEGT "gt")
+ (UNSPEC_WHILEHI "ugt")
+ (UNSPEC_WHILEHS "uge")
+ (UNSPEC_WHILELE "le")
(UNSPEC_WHILELO "ult")
(UNSPEC_WHILELS "ule")
(UNSPEC_WHILELT "lt")
(define_int_attr sve_pred_op [(UNSPEC_PFIRST "pfirst") (UNSPEC_PNEXT "pnext")])
-(define_int_attr sve_int_op [(UNSPEC_ANDV "andv")
- (UNSPEC_IORV "orv")
- (UNSPEC_XORV "eorv")
- (UNSPEC_UMAXV "umaxv")
- (UNSPEC_UMINV "uminv")
- (UNSPEC_SMAXV "smaxv")
- (UNSPEC_SMINV "sminv")
- (UNSPEC_SMUL_HIGHPART "smulh")
- (UNSPEC_UMUL_HIGHPART "umulh")
- (UNSPEC_ASHIFT_WIDE "lsl")
+(define_int_attr sve_int_op [(UNSPEC_ADCLB "adclb")
+ (UNSPEC_ADCLT "adclt")
+ (UNSPEC_ADDHNB "addhnb")
+ (UNSPEC_ADDHNT "addhnt")
+ (UNSPEC_ADDP "addp")
+ (UNSPEC_ANDV "andv")
(UNSPEC_ASHIFTRT_WIDE "asr")
+ (UNSPEC_ASHIFT_WIDE "lsl")
+ (UNSPEC_ASRD "asrd")
+ (UNSPEC_BDEP "bdep")
+ (UNSPEC_BEXT "bext")
+ (UNSPEC_BGRP "bgrp")
+ (UNSPEC_CADD90 "cadd")
+ (UNSPEC_CADD270 "cadd")
+ (UNSPEC_CDOT "cdot")
+ (UNSPEC_CDOT90 "cdot")
+ (UNSPEC_CDOT180 "cdot")
+ (UNSPEC_CDOT270 "cdot")
+ (UNSPEC_CMLA "cmla")
+ (UNSPEC_CMLA90 "cmla")
+ (UNSPEC_CMLA180 "cmla")
+ (UNSPEC_CMLA270 "cmla")
+ (UNSPEC_EORBT "eorbt")
+ (UNSPEC_EORTB "eortb")
+ (UNSPEC_IORV "orv")
(UNSPEC_LSHIFTRT_WIDE "lsr")
+ (UNSPEC_MATCH "match")
+ (UNSPEC_NMATCH "nmatch")
+ (UNSPEC_PMULLB "pmullb")
+ (UNSPEC_PMULLB_PAIR "pmullb")
+ (UNSPEC_PMULLT "pmullt")
+ (UNSPEC_PMULLT_PAIR "pmullt")
+ (UNSPEC_RADDHNB "raddhnb")
+ (UNSPEC_RADDHNT "raddhnt")
(UNSPEC_RBIT "rbit")
(UNSPEC_REVB "revb")
(UNSPEC_REVH "revh")
- (UNSPEC_REVW "revw")])
+ (UNSPEC_REVW "revw")
+ (UNSPEC_RSHRNB "rshrnb")
+ (UNSPEC_RSHRNT "rshrnt")
+ (UNSPEC_RSQRTE "ursqrte")
+ (UNSPEC_RSUBHNB "rsubhnb")
+ (UNSPEC_RSUBHNT "rsubhnt")
+ (UNSPEC_SABDLB "sabdlb")
+ (UNSPEC_SABDLT "sabdlt")
+ (UNSPEC_SADALP "sadalp")
+ (UNSPEC_SADDLB "saddlb")
+ (UNSPEC_SADDLBT "saddlbt")
+ (UNSPEC_SADDLT "saddlt")
+ (UNSPEC_SADDWB "saddwb")
+ (UNSPEC_SADDWT "saddwt")
+ (UNSPEC_SBCLB "sbclb")
+ (UNSPEC_SBCLT "sbclt")
+ (UNSPEC_SHADD "shadd")
+ (UNSPEC_SHRNB "shrnb")
+ (UNSPEC_SHRNT "shrnt")
+ (UNSPEC_SHSUB "shsub")
+ (UNSPEC_SLI "sli")
+ (UNSPEC_SMAXP "smaxp")
+ (UNSPEC_SMAXV "smaxv")
+ (UNSPEC_SMINP "sminp")
+ (UNSPEC_SMINV "sminv")
+ (UNSPEC_SMUL_HIGHPART "smulh")
+ (UNSPEC_SMULLB "smullb")
+ (UNSPEC_SMULLT "smullt")
+ (UNSPEC_SQCADD90 "sqcadd")
+ (UNSPEC_SQCADD270 "sqcadd")
+ (UNSPEC_SQDMULH "sqdmulh")
+ (UNSPEC_SQDMULLB "sqdmullb")
+ (UNSPEC_SQDMULLBT "sqdmullbt")
+ (UNSPEC_SQDMULLT "sqdmullt")
+ (UNSPEC_SQRDCMLAH "sqrdcmlah")
+ (UNSPEC_SQRDCMLAH90 "sqrdcmlah")
+ (UNSPEC_SQRDCMLAH180 "sqrdcmlah")
+ (UNSPEC_SQRDCMLAH270 "sqrdcmlah")
+ (UNSPEC_SQRDMLAH "sqrdmlah")
+ (UNSPEC_SQRDMLSH "sqrdmlsh")
+ (UNSPEC_SQRDMULH "sqrdmulh")
+ (UNSPEC_SQRSHL "sqrshl")
+ (UNSPEC_SQRSHRNB "sqrshrnb")
+ (UNSPEC_SQRSHRNT "sqrshrnt")
+ (UNSPEC_SQRSHRUNB "sqrshrunb")
+ (UNSPEC_SQRSHRUNT "sqrshrunt")
+ (UNSPEC_SQSHL "sqshl")
+ (UNSPEC_SQSHLU "sqshlu")
+ (UNSPEC_SQSHRNB "sqshrnb")
+ (UNSPEC_SQSHRNT "sqshrnt")
+ (UNSPEC_SQSHRUNB "sqshrunb")
+ (UNSPEC_SQSHRUNT "sqshrunt")
+ (UNSPEC_SQXTNB "sqxtnb")
+ (UNSPEC_SQXTNT "sqxtnt")
+ (UNSPEC_SQXTUNB "sqxtunb")
+ (UNSPEC_SQXTUNT "sqxtunt")
+ (UNSPEC_SRHADD "srhadd")
+ (UNSPEC_SRI "sri")
+ (UNSPEC_SRSHL "srshl")
+ (UNSPEC_SRSHR "srshr")
+ (UNSPEC_SSHLLB "sshllb")
+ (UNSPEC_SSHLLT "sshllt")
+ (UNSPEC_SSUBLB "ssublb")
+ (UNSPEC_SSUBLBT "ssublbt")
+ (UNSPEC_SSUBLT "ssublt")
+ (UNSPEC_SSUBLTB "ssubltb")
+ (UNSPEC_SSUBWB "ssubwb")
+ (UNSPEC_SSUBWT "ssubwt")
+ (UNSPEC_SUBHNB "subhnb")
+ (UNSPEC_SUBHNT "subhnt")
+ (UNSPEC_SUQADD "suqadd")
+ (UNSPEC_UABDLB "uabdlb")
+ (UNSPEC_UABDLT "uabdlt")
+ (UNSPEC_UADALP "uadalp")
+ (UNSPEC_UADDLB "uaddlb")
+ (UNSPEC_UADDLT "uaddlt")
+ (UNSPEC_UADDWB "uaddwb")
+ (UNSPEC_UADDWT "uaddwt")
+ (UNSPEC_UHADD "uhadd")
+ (UNSPEC_UHSUB "uhsub")
+ (UNSPEC_UMAXP "umaxp")
+ (UNSPEC_UMAXV "umaxv")
+ (UNSPEC_UMINP "uminp")
+ (UNSPEC_UMINV "uminv")
+ (UNSPEC_UMUL_HIGHPART "umulh")
+ (UNSPEC_UMULLB "umullb")
+ (UNSPEC_UMULLT "umullt")
+ (UNSPEC_UQRSHL "uqrshl")
+ (UNSPEC_UQRSHRNB "uqrshrnb")
+ (UNSPEC_UQRSHRNT "uqrshrnt")
+ (UNSPEC_UQSHL "uqshl")
+ (UNSPEC_UQSHRNB "uqshrnb")
+ (UNSPEC_UQSHRNT "uqshrnt")
+ (UNSPEC_UQXTNB "uqxtnb")
+ (UNSPEC_UQXTNT "uqxtnt")
+ (UNSPEC_URECPE "urecpe")
+ (UNSPEC_URHADD "urhadd")
+ (UNSPEC_URSHL "urshl")
+ (UNSPEC_URSHR "urshr")
+ (UNSPEC_USHLLB "ushllb")
+ (UNSPEC_USHLLT "ushllt")
+ (UNSPEC_USQADD "usqadd")
+ (UNSPEC_USUBLB "usublb")
+ (UNSPEC_USUBLT "usublt")
+ (UNSPEC_USUBWB "usubwb")
+ (UNSPEC_USUBWT "usubwt")
+ (UNSPEC_XORV "eorv")])
+
+(define_int_attr sve_int_op_rev [(UNSPEC_SHADD "shadd")
+ (UNSPEC_SHSUB "shsubr")
+ (UNSPEC_SQRSHL "sqrshlr")
+ (UNSPEC_SRHADD "srhadd")
+ (UNSPEC_SRSHL "srshlr")
+ (UNSPEC_UHADD "uhadd")
+ (UNSPEC_UHSUB "uhsubr")
+ (UNSPEC_UQRSHL "uqrshlr")
+ (UNSPEC_URHADD "urhadd")
+ (UNSPEC_URSHL "urshlr")])
+
+(define_int_attr sve_int_add_op [(UNSPEC_SABDLB "sabalb")
+ (UNSPEC_SABDLT "sabalt")
+ (UNSPEC_SMULLB "smlalb")
+ (UNSPEC_SMULLT "smlalt")
+ (UNSPEC_UABDLB "uabalb")
+ (UNSPEC_UABDLT "uabalt")
+ (UNSPEC_UMULLB "umlalb")
+ (UNSPEC_UMULLT "umlalt")])
+
+(define_int_attr sve_int_qadd_op [(UNSPEC_SQDMULLB "sqdmlalb")
+ (UNSPEC_SQDMULLBT "sqdmlalbt")
+ (UNSPEC_SQDMULLT "sqdmlalt")])
+
+(define_int_attr sve_int_sub_op [(UNSPEC_SMULLB "smlslb")
+ (UNSPEC_SMULLT "smlslt")
+ (UNSPEC_UMULLB "umlslb")
+ (UNSPEC_UMULLT "umlslt")])
+
+(define_int_attr sve_int_qsub_op [(UNSPEC_SQDMULLB "sqdmlslb")
+ (UNSPEC_SQDMULLBT "sqdmlslbt")
+ (UNSPEC_SQDMULLT "sqdmlslt")])
(define_int_attr sve_fp_op [(UNSPEC_FRECPE "frecpe")
(UNSPEC_FRECPS "frecps")
(UNSPEC_RSQRTE "frsqrte")
(UNSPEC_RSQRTS "frsqrts")
+ (UNSPEC_FADDP "faddp")
(UNSPEC_FADDV "faddv")
+ (UNSPEC_FMAXNMP "fmaxnmp")
(UNSPEC_FMAXNMV "fmaxnmv")
+ (UNSPEC_FMAXP "fmaxp")
(UNSPEC_FMAXV "fmaxv")
+ (UNSPEC_FMINNMP "fminnmp")
(UNSPEC_FMINNMV "fminnmv")
+ (UNSPEC_FMINP "fminp")
(UNSPEC_FMINV "fminv")
(UNSPEC_FMLA "fmla")
+ (UNSPEC_FMLALB "fmlalb")
+ (UNSPEC_FMLALT "fmlalt")
(UNSPEC_FMLS "fmls")
+ (UNSPEC_FMLSLB "fmlslb")
+ (UNSPEC_FMLSLT "fmlslt")
(UNSPEC_FEXPA "fexpa")
(UNSPEC_FTSMUL "ftsmul")
(UNSPEC_FTSSEL "ftssel")
(UNSPEC_COND_FABS "fabs")
(UNSPEC_COND_FADD "fadd")
+ (UNSPEC_COND_FCVTLT "fcvtlt")
+ (UNSPEC_COND_FCVTX "fcvtx")
(UNSPEC_COND_FDIV "fdiv")
+ (UNSPEC_COND_FLOGB "flogb")
(UNSPEC_COND_FMAX "fmax")
(UNSPEC_COND_FMAXNM "fmaxnm")
(UNSPEC_COND_FMIN "fmin")
(UNSPEC_COND_FMULX "fmulx")
(UNSPEC_COND_FSUB "fsubr")])
-(define_int_attr rot [(UNSPEC_FCADD90 "90")
+(define_int_attr rot [(UNSPEC_CADD90 "90")
+ (UNSPEC_CADD270 "270")
+ (UNSPEC_CDOT "0")
+ (UNSPEC_CDOT90 "90")
+ (UNSPEC_CDOT180 "180")
+ (UNSPEC_CDOT270 "270")
+ (UNSPEC_CMLA "0")
+ (UNSPEC_CMLA90 "90")
+ (UNSPEC_CMLA180 "180")
+ (UNSPEC_CMLA270 "270")
+ (UNSPEC_FCADD90 "90")
(UNSPEC_FCADD270 "270")
(UNSPEC_FCMLA "0")
(UNSPEC_FCMLA90 "90")
(UNSPEC_FCMLA180 "180")
(UNSPEC_FCMLA270 "270")
+ (UNSPEC_SQCADD90 "90")
+ (UNSPEC_SQCADD270 "270")
+ (UNSPEC_SQRDCMLAH "0")
+ (UNSPEC_SQRDCMLAH90 "90")
+ (UNSPEC_SQRDCMLAH180 "180")
+ (UNSPEC_SQRDCMLAH270 "270")
(UNSPEC_COND_FCADD90 "90")
(UNSPEC_COND_FCADD270 "270")
(UNSPEC_COND_FCMLA "0")
aarch64-sve-builtins.o: $(srcdir)/config/aarch64/aarch64-sve-builtins.cc \
$(srcdir)/config/aarch64/aarch64-sve-builtins.def \
+ $(srcdir)/config/aarch64/aarch64-sve-builtins-base.def \
+ $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.def \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
$(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) $(RECOG_H) $(DIAGNOSTIC_H) \
$(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
stringpool.h \
$(srcdir)/config/aarch64/aarch64-sve-builtins.h \
$(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
- $(srcdir)/config/aarch64/aarch64-sve-builtins-base.h
+ $(srcdir)/config/aarch64/aarch64-sve-builtins-base.h \
+ $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.h
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(srcdir)/config/aarch64/aarch64-sve-builtins.cc
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(srcdir)/config/aarch64/aarch64-sve-builtins-base.cc
+aarch64-sve-builtins-sve2.o: \
+ $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.cc \
+ $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
+ $(TM_P_H) memmodel.h insn-codes.h $(OPTABS_H) $(RECOG_H) \
+ $(EXPR_H) $(BASIC_BLOCK_H) $(FUNCTION_H) fold-const.h $(GIMPLE_H) \
+ gimple-iterator.h gimplify.h explow.h $(EMIT_RTL_H) tree-vector-builder.h \
+ rtx-vector-builder.h vec-perm-indices.h \
+ $(srcdir)/config/aarch64/aarch64-sve-builtins.h \
+ $(srcdir)/config/aarch64/aarch64-sve-builtins-shapes.h \
+ $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.h \
+ $(srcdir)/config/aarch64/aarch64-sve-builtins-functions.h
+ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ $(srcdir)/config/aarch64/aarch64-sve-builtins-sve2.cc
+
aarch64-builtin-iterators.h: $(srcdir)/config/aarch64/geniterators.sh \
$(srcdir)/config/aarch64/iterators.md
$(SHELL) $(srcdir)/config/aarch64/geniterators.sh \
2020-01-09 Richard Sandiford <richard.sandiford@arm.com>
+ * g++.target/aarch64/sve/acle/general-c++/mul_lane_1.c: New test.
+ * g++.target/aarch64/sve2/acle: New directory.
+ * gcc.target/aarch64/pragma_cpp_predefs_3.c: New test.
+ * gcc.target/aarch64/sve/acle/asm/test_sve_acle.h (TEST_TYPE_CHANGE_Z)
+ (TEST_DUAL_ZD, TEST_TYPE_CHANGE_ZX, TEST_TBL2, TEST_TBL2_REV): New
+ macros.
+ * gcc.target/aarch64/sve/acle/general-c/binary_lane_1.c: Do not
+ expect an error saying that the function has no f32 form, but instead
+ expect an error about SVE2 being required if the current target
+ doesn't support SVE2.
+ * gcc.target/aarch64/sve/acle/general-c/ternary_lane_1.c: Likewise.
+ * gcc.target/aarch64/sve/acle/general-c/ternary_lane_rotate_1.c Likewise.
+ * gcc.target/aarch64/sve/acle/general-c/binary_long_lane_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/binary_long_opt_n_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/binary_narrowb_opt_n_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/binary_narrowt_opt_n_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/binary_to_uint_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/binary_wide_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/binary_wide_opt_n_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/compare_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/compare_ptr_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_index_restricted_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_2.c,
+ * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_3.c,
+ * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_4.c,
+ * gcc.target/aarch64/sve/acle/general-c/load_gather_sv_restricted_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/load_gather_sv_restricted_2.c,
+ * gcc.target/aarch64/sve/acle/general-c/mul_lane_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/shift_left_imm_long_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/shift_left_imm_to_uint_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/shift_left_imm_to_uint_2.c,
+ * gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowb_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowb_to_uint_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowt_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowt_to_uint_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/tbl_tuple_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/ternary_long_lane_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/ternary_long_opt_n_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/ternary_qq_lane_rotate_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/ternary_qq_rotate_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/ternary_shift_right_imm_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/ternary_uint_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/unary_convert_narrowt_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/unary_narrowb_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/unary_narrowb_to_uint_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/unary_narrowt_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/unary_narrowt_to_uint_1.c,
+ * gcc.target/aarch64/sve/acle/general-c/unary_to_int_1.c: New tests.
+ * gcc.target/aarch64/sve2/bcax_1.c: Likewise.
+ * gcc.target/aarch64/sve2/acle: New directory.
+
+2020-01-09 Richard Sandiford <richard.sandiford@arm.com>
+
* gcc.target/aarch64/sve/acle/general-c/unary_count_1.c: Rename to...
* gcc.target/aarch64/sve/acle/general-c/unary_to_uint_1.c: ...this.
* gcc.target/aarch64/sve/acle/general-c/unary_count_2.c: Rename to...
--- /dev/null
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f2 (svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16, svfloat16_t f16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64)
+{
+ s8 = svmul_lane (s8, s8, 1); /* { dg-error {no matching function} } */
+ u8 = svmul_lane (u8, u8, 1); /* { dg-error {no matching function} } */
+ s16 = svmul_lane (s16, s16, 1);
+ u16 = svmul_lane (u16, u16, 1);
+ f16 = svmul_lane (f16, f16, 1);
+ s32 = svmul_lane (s32, s32, 1);
+ u32 = svmul_lane (u32, u32, 1);
+ f32 = svmul_lane (f32, f32, 1);
+ s64 = svmul_lane (s64, s64, 1);
+ u64 = svmul_lane (u64, u64, 1);
+ f64 = svmul_lane (f64, f64, 1);
+}
+
+#pragma GCC target ("arch=armv8-a+sve")
+
+void
+f1 (svint8_t s8, svuint8_t u8, svint16_t s16)
+{
+ s8 = svmul_lane (s8, s8, 1); /* { dg-error {no matching function} } */
+ u8 = svmul_lane (u8, u8, 1); /* { dg-error {no matching function} } */
+ s16 = svmul_lane (s16, s16, 1); /* { dg-error {ACLE function 'svint16_t svmul_lane[^']*' requires ISA extension 'sve2'} } */
+}
--- /dev/null
+# Assembly-based regression-test driver for the SVE ACLE
+# Copyright (C) 2009-2020 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/>. */
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't an AArch64 target.
+if { ![istarget aarch64*-*-*] } {
+ return
+}
+
+# Load support procs.
+load_lib g++-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+# Force SVE if we're not testing it already.
+if { [check_effective_target_aarch64_sve2] } {
+ set sve2_flags ""
+} else {
+ set sve2_flags "-march=armv8.5-a+sve2"
+}
+
+set gcc_subdir [string replace $subdir 0 2 gcc]
+lappend extra_flags "-fno-ipa-icf" "-I$srcdir/$gcc_subdir/../../sve/acle/asm"
+
+global gcc_runtest_parallelize_limit_minor
+if { [info exists gcc_runtest_parallelize_limit_minor] } {
+ set old_limit_minor $gcc_runtest_parallelize_limit_minor
+ set gcc_runtest_parallelize_limit_minor 1
+}
+
+torture-init
+set-torture-options {
+ "-std=c++98 -O0 -g"
+ "-std=c++98 -O1 -g"
+ "-std=c++11 -O2 -g"
+ "-std=c++14 -O3 -g"
+ "-std=c++17 -Og -g"
+ "-std=c++2a -Os -g"
+ "-std=gnu++98 -O2 -fno-schedule-insns -DCHECK_ASM --save-temps"
+ "-std=gnu++11 -Ofast -g"
+ "-std=gnu++17 -O3 -g"
+ "-std=gnu++2a -O0 -g"
+} {
+ "-DTEST_FULL"
+ "-DTEST_OVERLOADS"
+}
+
+# Main loop.
+set files [glob -nocomplain $srcdir/$gcc_subdir/asm/*.c]
+set save-dg-do-what-default ${dg-do-what-default}
+if { [check_effective_target_aarch64_asm_sve_ok]
+ && [check_effective_target_aarch64_variant_pcs] } {
+ set dg-do-what-default assemble
+} else {
+ set dg-do-what-default compile
+}
+gcc-dg-runtest [lsort $files] "" "$sve2_flags $extra_flags"
+set dg-do-what-default ${save-dg-do-what-default}
+
+torture-finish
+
+if { [info exists gcc_runtest_parallelize_limit_minor] } {
+ set gcc_runtest_parallelize_limit_minor $old_limit_minor
+}
+
+# All done.
+dg-finish
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8-a")
+
+#ifdef __ARM_FEATURE_SVE
+#error "__ARM_FEATURE_SVE is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2
+#error "__ARM_FEATURE_SVE2 is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_AES
+#error "__ARM_FEATURE_SVE2_AES is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_BITPERM
+#error "__ARM_FEATURE_SVE2_BITPERM is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SHA3
+#error "__ARM_FEATURE_SVE2_SHA3 is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SM4
+#error "__ARM_FEATURE_SVE2_SM4 is defined but should not be!"
+#endif
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.2-a+sve")
+
+#ifndef __ARM_FEATURE_SVE
+#error "__ARM_FEATURE_SVE is not defined but should be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2
+#error "__ARM_FEATURE_SVE2 is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_AES
+#error "__ARM_FEATURE_SVE2_AES is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_BITPERM
+#error "__ARM_FEATURE_SVE2_BITPERM is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SHA3
+#error "__ARM_FEATURE_SVE2_SHA3 is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SM4
+#error "__ARM_FEATURE_SVE2_SM4 is defined but should not be!"
+#endif
+
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.5-a+sve2")
+
+#ifndef __ARM_FEATURE_SVE
+#error "__ARM_FEATURE_SVE is not defined but should be!"
+#endif
+
+#ifndef __ARM_FEATURE_SVE2
+#error "__ARM_FEATURE_SVE2 is not defined but should be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_AES
+#error "__ARM_FEATURE_SVE2_AES is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_BITPERM
+#error "__ARM_FEATURE_SVE2_BITPERM is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SHA3
+#error "__ARM_FEATURE_SVE2_SHA3 is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SM4
+#error "__ARM_FEATURE_SVE2_SM4 is defined but should not be!"
+#endif
+
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.5-a+sve2-aes")
+
+#ifndef __ARM_FEATURE_SVE
+#error "__ARM_FEATURE_SVE is not defined but should be!"
+#endif
+
+#ifndef __ARM_FEATURE_SVE2
+#error "__ARM_FEATURE_SVE2 is not defined but should be!"
+#endif
+
+#ifndef __ARM_FEATURE_AES
+#error "__ARM_FEATURE_AES is not defined but should be!"
+#endif
+
+#ifndef __ARM_FEATURE_SVE2_AES
+#error "__ARM_FEATURE_SVE2_AES is not defined but should be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_BITPERM
+#error "__ARM_FEATURE_SVE2_BITPERM is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SHA3
+#error "__ARM_FEATURE_SVE2_SHA3 is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SM4
+#error "__ARM_FEATURE_SVE2_SM4 is defined but should not be!"
+#endif
+
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.5-a+sve2-bitperm")
+
+#ifndef __ARM_FEATURE_SVE
+#error "__ARM_FEATURE_SVE is not defined but should be!"
+#endif
+
+#ifndef __ARM_FEATURE_SVE2
+#error "__ARM_FEATURE_SVE2 is not defined but should be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_AES
+#error "__ARM_FEATURE_SVE2_AES is defined but should not be!"
+#endif
+
+#ifndef __ARM_FEATURE_SVE2_BITPERM
+#error "__ARM_FEATURE_SVE2_BITPERM is not defined but should be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SHA3
+#error "__ARM_FEATURE_SVE2_SHA3 is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SM4
+#error "__ARM_FEATURE_SVE2_SM4 is defined but should not be!"
+#endif
+
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.5-a+sve2-sha3")
+
+#ifndef __ARM_FEATURE_SVE
+#error "__ARM_FEATURE_SVE is not defined but should be!"
+#endif
+
+#ifndef __ARM_FEATURE_SVE2
+#error "__ARM_FEATURE_SVE2 is not defined but should be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_AES
+#error "__ARM_FEATURE_SVE2_AES is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_BITPERM
+#error "__ARM_FEATURE_SVE2_BITPERM is defined but should not be!"
+#endif
+
+#ifndef __ARM_FEATURE_SHA3
+#error "__ARM_FEATURE_SHA3 is not defined but should be!"
+#endif
+
+#ifndef __ARM_FEATURE_SVE2_SHA3
+#error "__ARM_FEATURE_SVE2_SHA3 is not defined but should be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SM4
+#error "__ARM_FEATURE_SVE2_SM4 is defined but should not be!"
+#endif
+
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.5-a+sve2-sm4")
+
+#ifndef __ARM_FEATURE_SVE
+#error "__ARM_FEATURE_SVE is not defined but should be!"
+#endif
+
+#ifndef __ARM_FEATURE_SVE2
+#error "__ARM_FEATURE_SVE2 is not defined but should be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_AES
+#error "__ARM_FEATURE_SVE2_AES is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_BITPERM
+#error "__ARM_FEATURE_SVE2_BITPERM is defined but should not be!"
+#endif
+
+#ifdef __ARM_FEATURE_SVE2_SHA3
+#error "__ARM_FEATURE_SVE2_SHA3 is defined but should not be!"
+#endif
+
+#ifndef __ARM_FEATURE_SM4
+#error "__ARM_FEATURE_SM4 is not defined but should be!"
+#endif
+
+#ifndef __ARM_FEATURE_SVE2_SM4
+#error "__ARM_FEATURE_SVE2_SM4 is not defined but should be!"
+#endif
+
+#pragma GCC pop_options
+
+int
+foo (int a)
+{
+ return a;
+}
__asm volatile ("" :: "w" (z0)); \
}
+#define TEST_TYPE_CHANGE_Z(NAME, TYPE1, TYPE2, CODE1, CODE2) \
+ PROTO (NAME, TYPE1, (TYPE2 z0, TYPE2 z1, TYPE2 z2, TYPE2 z3, \
+ svbool_t p0, svbool_t p1)) \
+ { \
+ TYPE1 z0_res; \
+ INVOKE (CODE1, CODE2); \
+ return z0_res; \
+ }
+
#define TEST_UNIFORM_ZX(NAME, ZTYPE, STYPE, CODE1, CODE2) \
PROTO (NAME, ZTYPE, (ZTYPE z0, ZTYPE z1, ZTYPE z2, ZTYPE z3, \
svbool_t p0, STYPE x0)) \
return p0; \
}
+#define TEST_DUAL_ZD(NAME, ZTYPE1, ZTYPE2, STYPE, CODE1, CODE2) \
+ PROTO (NAME, ZTYPE1, (ZTYPE1 z0, ZTYPE1 z1, ZTYPE1 z2, \
+ ZTYPE1 z3, ZTYPE2 z4, ZTYPE2 z5, \
+ ZTYPE2 z6, STYPE d7, svbool_t p0, \
+ svbool_t p1)) \
+ { \
+ INVOKE (CODE1, CODE2); \
+ return z0; \
+ }
+
#define TEST_DUAL_ZX(NAME, ZTYPE1, ZTYPE2, STYPE, CODE1, CODE2) \
PROTO (NAME, ZTYPE1, (ZTYPE1 z0, ZTYPE1 z1, ZTYPE1 z2, \
ZTYPE1 z3, ZTYPE2 z4, ZTYPE2 z5, \
return z0; \
}
+#define TEST_TYPE_CHANGE_ZX(NAME, ZTYPE1, ZTYPE2, STYPE, CODE1, CODE2) \
+ PROTO (NAME, ZTYPE1, (ZTYPE2 z0, ZTYPE2 z1, ZTYPE2 z2, \
+ ZTYPE2 z3, svbool_t p0, svbool_t p1, \
+ STYPE x0)) \
+ { \
+ ZTYPE1 z0_res; \
+ INVOKE (CODE1, CODE2); \
+ return z0_res; \
+ }
+
#define TEST_LOAD(NAME, ZTYPE, STYPE, CODE1, CODE2) \
PROTO (NAME, ZTYPE, (svbool_t p0, const STYPE *x0, \
intptr_t x1)) \
__asm volatile ("" :: "w" (z4), "w" (z24)); \
}
+#define TEST_TBL2(NAME, TTYPE, ZTYPE, UTYPE, CODE1, CODE2) \
+ PROTO (NAME, ZTYPE, (TTYPE z0, TTYPE z2, UTYPE z4)) \
+ { \
+ register ZTYPE z0_res __asm ("z0"); \
+ INVOKE (CODE1, CODE2); \
+ return z0_res; \
+ }
+
+#define TEST_TBL2_REV(NAME, TTYPE, ZTYPE, UTYPE, CODE1, CODE2) \
+ PROTO (NAME, ZTYPE, (UTYPE z0, TTYPE z1, TTYPE z3)) \
+ { \
+ register ZTYPE z0_res __asm ("z0"); \
+ INVOKE (CODE1, CODE2); \
+ return z0_res; \
+ }
+
#endif
svmul_lane (f32, f32); /* { dg-error {too few arguments to function 'svmul_lane'} } */
svmul_lane (f32, f32, 0, 0); /* { dg-error {too many arguments to function 'svmul_lane'} } */
svmul_lane (pg, pg, 0); /* { dg-error {'svmul_lane' has no form that takes 'svbool_t' arguments} } */
- svmul_lane (s32, s32, 0); /* { dg-error {'svmul_lane' has no form that takes 'svint32_t' arguments} } */
+ svmul_lane (s32, s32, 0); /* { dg-error {ACLE function 'svmul_lane_s32' requires ISA extension 'sve2'} "" { xfail aarch64_sve2 } } */
svmul_lane (1, f32, 0); /* { dg-error {passing 'int' to argument 1 of 'svmul_lane', which expects an SVE vector type} } */
svmul_lane (f32, 1, 0); /* { dg-error {passing 'int' to argument 2 of 'svmul_lane', which expects an SVE vector type} } */
svmul_lane (f32, f64, 0); /* { dg-error {passing 'svfloat64_t' to argument 2 of 'svmul_lane', but previous arguments had type 'svfloat32_t'} } */
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8, svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32, svint64_t s64, svuint64_t u64,
+ svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, int i)
+{
+ svmullb_lane (u32, u32); /* { dg-error {too few arguments to function 'svmullb_lane'} } */
+ svmullb_lane (u32, u32, 0, 0); /* { dg-error {too many arguments to function 'svmullb_lane'} } */
+ svmullb_lane (pg, pg, 0); /* { dg-error {'svmullb_lane' has no form that takes 'svbool_t' arguments} } */
+ svmullb_lane (s8, s8, 0); /* { dg-error {'svmullb_lane' has no form that takes 'svint8_t' arguments} } */
+ svmullb_lane (u8, u8, 0); /* { dg-error {'svmullb_lane' has no form that takes 'svuint8_t' arguments} } */
+ svmullb_lane (s64, s64, 0); /* { dg-error {'svmullb_lane' has no form that takes 'svint64_t' arguments} } */
+ svmullb_lane (u64, u64, 0); /* { dg-error {'svmullb_lane' has no form that takes 'svuint64_t' arguments} } */
+ svmullb_lane (f16, f16, 0); /* { dg-error {'svmullb_lane' has no form that takes 'svfloat16_t' arguments} } */
+ svmullb_lane (f32, f32, 0); /* { dg-error {'svmullb_lane' has no form that takes 'svfloat32_t' arguments} } */
+ svmullb_lane (f64, f64, 0); /* { dg-error {'svmullb_lane' has no form that takes 'svfloat64_t' arguments} } */
+ svmullb_lane (1, u32, 0); /* { dg-error {passing 'int' to argument 1 of 'svmullb_lane', which expects an SVE vector type} } */
+ svmullb_lane (u32, 1, 0); /* { dg-error {passing 'int' to argument 2 of 'svmullb_lane', which expects an SVE vector type} } */
+ svmullb_lane (u32, s32, 0); /* { dg-error {passing 'svint32_t' to argument 2 of 'svmullb_lane', but previous arguments had type 'svuint32_t'} } */
+ svmullb_lane (u32, u32, s32); /* { dg-error {argument 3 of 'svmullb_lane' must be an integer constant expression} } */
+ svmullb_lane (u32, u32, i); /* { dg-error {argument 3 of 'svmullb_lane' must be an integer constant expression} } */
+
+ svmullb_lane (s16, s16, 0);
+ svmullb_lane (s16, s16, 7);
+ svmullb_lane (s16, s16, 8); /* { dg-error {passing 8 to argument 3 of 'svmullb_lane', which expects a value in the range \[0, 7\]} } */
+ svmullb_lane (s16, s16, -1); /* { dg-error {passing -1 to argument 3 of 'svmullb_lane', which expects a value in the range \[0, 7\]} } */
+
+ svmullb_lane (u16, u16, 0);
+ svmullb_lane (u16, u16, 7);
+ svmullb_lane (u16, u16, 8); /* { dg-error {passing 8 to argument 3 of 'svmullb_lane', which expects a value in the range \[0, 7\]} } */
+ svmullb_lane (u16, u16, -1); /* { dg-error {passing -1 to argument 3 of 'svmullb_lane', which expects a value in the range \[0, 7\]} } */
+
+ svmullb_lane (s32, s32, 0);
+ svmullb_lane (s32, s32, 3);
+ svmullb_lane (s32, s32, 4); /* { dg-error {passing 4 to argument 3 of 'svmullb_lane', which expects a value in the range \[0, 3\]} } */
+ svmullb_lane (s32, s32, -1); /* { dg-error {passing -1 to argument 3 of 'svmullb_lane', which expects a value in the range \[0, 3\]} } */
+
+ svmullb_lane (u32, u32, 0);
+ svmullb_lane (u32, u32, 3);
+ svmullb_lane (u32, u32, 4); /* { dg-error {passing 4 to argument 3 of 'svmullb_lane', which expects a value in the range \[0, 3\]} } */
+ svmullb_lane (u32, u32, -1); /* { dg-error {passing -1 to argument 3 of 'svmullb_lane', which expects a value in the range \[0, 3\]} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat16_t f16)
+{
+ svaddlb (u16); /* { dg-error {too few arguments to function 'svaddlb'} } */
+ svaddlb (u16, u16, u16); /* { dg-error {too many arguments to function 'svaddlb'} } */
+ svaddlb (pg, pg); /* { dg-error {'svaddlb' has no form that takes 'svbool_t' arguments} } */
+ svaddlb (u8, u8);
+ svaddlb (s8, s8);
+ svaddlb (u16, u16);
+ svaddlb (s16, s16);
+ svaddlb (u32, u32);
+ svaddlb (s32, s32);
+ svaddlb (u64, u64); /* { dg-error {'svaddlb' has no form that takes 'svuint64_t' arguments} } */
+ svaddlb (s64, s64); /* { dg-error {'svaddlb' has no form that takes 'svint64_t' arguments} } */
+ svaddlb (f16, f16); /* { dg-error {'svaddlb' has no form that takes 'svfloat16_t' arguments} } */
+ svaddlb (1, u8); /* { dg-error {passing 'int' to argument 1 of 'svaddlb', which expects an SVE vector type} } */
+ svaddlb (u8, s8); /* { dg-error {passing 'svint8_t' to argument 2 of 'svaddlb', but previous arguments had type 'svuint8_t'} } */
+ svaddlb (u8, s16); /* { dg-error {passing 'svint16_t' to argument 2 of 'svaddlb', but previous arguments had type 'svuint8_t'} } */
+ svaddlb (u8, u16); /* { dg-error {passing 'svuint16_t' to argument 2 of 'svaddlb', but previous arguments had type 'svuint8_t'} } */
+ svaddlb (u16, pg); /* { dg-error {passing 'svbool_t' to argument 2 of 'svaddlb', but previous arguments had type 'svuint16_t'} } */
+ svaddlb (u8, 0);
+ svaddlb (u16, 0);
+ svaddlb (u32, 0);
+ svaddlb (u64, 0); /* { dg-error {'svaddlb' has no form that takes 'svuint64_t' arguments} } */
+ svaddlb (pg, 0); /* { dg-error {'svaddlb' has no form that takes 'svbool_t' arguments} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat32_t f32)
+{
+ svaddhnb (u16); /* { dg-error {too few arguments to function 'svaddhnb'} } */
+ svaddhnb (u16, u16, u16); /* { dg-error {too many arguments to function 'svaddhnb'} } */
+ svaddhnb (pg, pg); /* { dg-error {'svaddhnb' has no form that takes 'svbool_t' arguments} } */
+ svaddhnb (u8, u8); /* { dg-error {'svaddhnb' has no form that takes 'svuint8_t' arguments} } */
+ svaddhnb (s8, s8); /* { dg-error {'svaddhnb' has no form that takes 'svint8_t' arguments} } */
+ svaddhnb (u16, u16);
+ svaddhnb (s16, s16);
+ svaddhnb (u32, u32);
+ svaddhnb (s32, s32);
+ svaddhnb (u64, u64);
+ svaddhnb (s64, s64);
+ svaddhnb (f32, f32); /* { dg-error {'svaddhnb' has no form that takes 'svfloat32_t' arguments} } */
+ svaddhnb (1, u16); /* { dg-error {passing 'int' to argument 1 of 'svaddhnb', which expects an SVE vector type} } */
+ svaddhnb (u16, s8); /* { dg-error {passing 'svint8_t' to argument 2 of 'svaddhnb', but previous arguments had type 'svuint16_t'} } */
+ svaddhnb (u16, s16); /* { dg-error {passing 'svint16_t' to argument 2 of 'svaddhnb', but previous arguments had type 'svuint16_t'} } */
+ svaddhnb (u16, u32); /* { dg-error {passing 'svuint32_t' to argument 2 of 'svaddhnb', but previous arguments had type 'svuint16_t'} } */
+ svaddhnb (u16, pg); /* { dg-error {passing 'svbool_t' to argument 2 of 'svaddhnb', but previous arguments had type 'svuint16_t'} } */
+ svaddhnb (u8, 0); /* { dg-error {'svaddhnb' has no form that takes 'svuint8_t' arguments} } */
+ svaddhnb (u16, 0);
+ svaddhnb (u32, 0);
+ svaddhnb (u64, 0);
+ svaddhnb (pg, 0); /* { dg-error {'svaddhnb' has no form that takes 'svbool_t' arguments} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat16_t f16, svfloat32_t f32)
+{
+ svaddhnt (u32, u16); /* { dg-error {too few arguments to function 'svaddhnt'} } */
+ svaddhnt (u32, u16, u16, u16); /* { dg-error {too many arguments to function 'svaddhnt'} } */
+ svaddhnt (pg, pg, pg); /* { dg-error {'svaddhnt' has no form that takes 'svbool_t' arguments} } */
+ svaddhnt (u8, u8, u8); /* { dg-error {'svaddhnt' has no form that takes 'svuint8_t' arguments} } */
+ svaddhnt (s8, s8, s8); /* { dg-error {'svaddhnt' has no form that takes 'svint8_t' arguments} } */
+ svaddhnt (u16, u16, u16); /* { dg-error {passing 'svuint16_t' instead of the expected 'svuint8_t' to argument 1 of 'svaddhnt', after passing 'svuint16_t' to argument 2} } */
+ svaddhnt (s8, u16, u16); /* { dg-error {arguments 1 and 2 of 'svaddhnt' must have the same signedness, but the values passed here have type 'svint8_t' and 'svuint16_t' respectively} } */
+ svaddhnt (pg, u16, u16); /* { dg-error {passing 'svbool_t' instead of the expected 'svuint8_t' to argument 1 of 'svaddhnt', after passing 'svuint16_t' to argument 2} } */
+ svaddhnt (u8, u16, u16);
+ svaddhnt (s8, s16, s16);
+ svaddhnt (u16, u32, u32);
+ svaddhnt (s16, s32, s32);
+ svaddhnt (u32, u64, u64);
+ svaddhnt (s32, s64, s64);
+ svaddhnt (f16, f32, f32); /* { dg-error {'svaddhnt' has no form that takes 'svfloat32_t' arguments} } */
+ svaddhnt (1, u16, u16); /* { dg-error {passing 'int' to argument 1 of 'svaddhnt', which expects an SVE vector type} } */
+ svaddhnt (u8, 1, u16); /* { dg-error {passing 'int' to argument 2 of 'svaddhnt', which expects an SVE vector type} } */
+ svaddhnt (u8, u16, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svaddhnt', but previous arguments had type 'svuint16_t'} } */
+ svaddhnt (u8, u16, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svaddhnt', but previous arguments had type 'svuint16_t'} } */
+ svaddhnt (u8, u16, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svaddhnt', but previous arguments had type 'svuint16_t'} } */
+ svaddhnt (u8, u16, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svaddhnt', but previous arguments had type 'svuint16_t'} } */
+ svaddhnt (u8, u8, 0); /* { dg-error {'svaddhnt' has no form that takes 'svuint8_t' arguments} } */
+ svaddhnt (u16, u16, 0); /* { dg-error {passing 'svuint16_t' instead of the expected 'svuint8_t' to argument 1 of 'svaddhnt', after passing 'svuint16_t' to argument 2} } */
+ svaddhnt (s8, u16, 0); /* { dg-error {arguments 1 and 2 of 'svaddhnt' must have the same signedness, but the values passed here have type 'svint8_t' and 'svuint16_t' respectively} } */
+ svaddhnt (pg, u16, 0); /* { dg-error {passing 'svbool_t' instead of the expected 'svuint8_t' to argument 1 of 'svaddhnt', after passing 'svuint16_t' to argument 2} } */
+ svaddhnt (u8, u16, 0);
+ svaddhnt (u16, u32, 0);
+ svaddhnt (u32, u64, 0);
+ svaddhnt (pg, pg, 0); /* { dg-error {'svaddhnt' has no form that takes 'svbool_t' arguments} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+svuint8_t
+f1 (svbool_t pg, svint32_t s32, svuint32_t u32)
+{
+ svhistcnt_z (pg, s32); /* { dg-error {too few arguments to function 'svhistcnt_z'} } */
+ svhistcnt_z (pg, s32, s32, 0); /* { dg-error {too many arguments to function 'svhistcnt_z'} } */
+ svhistcnt_z (0, s32, s32); /* { dg-error {passing 'int' to argument 1 of 'svhistcnt_z', which expects 'svbool_t'} } */
+ svhistcnt_z (s32, s32, s32); /* { dg-error {passing 'svint32_t' to argument 1 of 'svhistcnt_z', which expects 'svbool_t'} } */
+ svhistcnt_z (pg, 0, s32); /* { dg-error {passing 'int' to argument 2 of 'svhistcnt_z', which expects an SVE vector type} } */
+ svhistcnt_z (pg, pg, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svhistcnt_z', but previous arguments had type 'svbool_t'} } */
+ svhistcnt_z (pg, s32, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svhistcnt_z', but previous arguments had type 'svint32_t'} } */
+ svhistcnt_z (pg, s32, 0); /* { dg-error {passing 'int' to argument 3 of 'svhistcnt_z', which expects an SVE vector type} } */
+ svhistcnt_z (pg, pg, pg); /* { dg-error {'svhistcnt_z' has no form that takes 'svbool_t' arguments} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat16_t f16, svfloat32_t f32)
+{
+ svadalp_m (pg, u16); /* { dg-error {too few arguments to function 'svadalp_m'} } */
+ svadalp_m (pg, u16, u8, u8); /* { dg-error {too many arguments to function 'svadalp_m'} } */
+ svadalp_m (0, pg, pg); /* { dg-error {passing 'int' to argument 1 of 'svadalp_m', which expects 'svbool_t'} } */
+ svadalp_m (u16, u8, u8); /* { dg-error {passing 'svuint16_t' to argument 1 of 'svadalp_m', which expects 'svbool_t'} } */
+ svadalp_m (u32, u32, u16); /* { dg-error {passing 'svuint32_t' to argument 1 of 'svadalp_m', which expects 'svbool_t'} } */
+ svadalp_m (pg, pg, pg); /* { dg-error {'svadalp_m' has no form that takes 'svbool_t' arguments} } */
+ svadalp_m (pg, u8, u8); /* { dg-error {'svadalp_m' has no form that takes 'svuint8_t' arguments} } */
+ svadalp_m (pg, s8, s8); /* { dg-error {'svadalp_m' has no form that takes 'svint8_t' arguments} } */
+ svadalp_m (pg, u16, u16); /* { dg-error {passing 'svuint16_t' instead of the expected 'svuint8_t' to argument 3 of 'svadalp_m', after passing 'svuint16_t' to argument 2} } */
+ svadalp_m (pg, u16, s16); /* { dg-error {passing 'svint16_t' instead of the expected 'svuint8_t' to argument 3 of 'svadalp_m', after passing 'svuint16_t' to argument 2} } */
+ svadalp_m (pg, u16, u8);
+ svadalp_m (pg, u16, s8); /* { dg-error {arguments 2 and 3 of 'svadalp_m' must have the same signedness, but the values passed here have type 'svuint16_t' and 'svint8_t' respectively} } */
+ svadalp_m (pg, u16, pg); /* { dg-error {passing 'svbool_t' instead of the expected 'svuint8_t' to argument 3 of 'svadalp_m', after passing 'svuint16_t' to argument 2} } */
+ svadalp_m (pg, s16, u16); /* { dg-error {passing 'svuint16_t' instead of the expected 'svint8_t' to argument 3 of 'svadalp_m', after passing 'svint16_t' to argument 2} } */
+ svadalp_m (pg, s16, s16); /* { dg-error {passing 'svint16_t' instead of the expected 'svint8_t' to argument 3 of 'svadalp_m', after passing 'svint16_t' to argument 2} } */
+ svadalp_m (pg, s16, u8); /* { dg-error {arguments 2 and 3 of 'svadalp_m' must have the same signedness, but the values passed here have type 'svint16_t' and 'svuint8_t' respectively} } */
+ svadalp_m (pg, s16, s8);
+ svadalp_m (pg, f32, f16); /* { dg-error {'svadalp_m' has no form that takes 'svfloat32_t' arguments} } */
+ svadalp_m (pg, f16, f32); /* { dg-error {'svadalp_m' has no form that takes 'svfloat16_t' arguments} } */
+ svadalp_m (pg, 0, u32); /* { dg-error {passing 'int' to argument 2 of 'svadalp_m', which expects an SVE vector type} } */
+ svadalp_m (pg, 0, u64); /* { dg-error {passing 'int' to argument 2 of 'svadalp_m', which expects an SVE vector type} } */
+ svadalp_m (pg, u8, 0); /* { dg-error {passing 'int' to argument 3 of 'svadalp_m', which expects an SVE vector type} } */
+ svadalp_m (pg, u16, 0); /* { dg-error {passing 'int' to argument 3 of 'svadalp_m', which expects an SVE vector type} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat16_t f16, svfloat32_t f32)
+{
+ svaddwb (u16); /* { dg-error {too few arguments to function 'svaddwb'} } */
+ svaddwb (u16, u8, u8); /* { dg-error {too many arguments to function 'svaddwb'} } */
+ svaddwb (pg, pg); /* { dg-error {'svaddwb' has no form that takes 'svbool_t' arguments} } */
+ svaddwb (u8, u8); /* { dg-error {'svaddwb' has no form that takes 'svuint8_t' arguments} } */
+ svaddwb (s8, s8); /* { dg-error {'svaddwb' has no form that takes 'svint8_t' arguments} } */
+ svaddwb (u16, u16); /* { dg-error {passing 'svuint16_t' instead of the expected 'svuint8_t' to argument 2 of 'svaddwb', after passing 'svuint16_t' to argument 1} } */
+ svaddwb (u16, s16); /* { dg-error {passing 'svint16_t' instead of the expected 'svuint8_t' to argument 2 of 'svaddwb', after passing 'svuint16_t' to argument 1} } */
+ svaddwb (u16, u8);
+ svaddwb (u16, s8); /* { dg-error {arguments 1 and 2 of 'svaddwb' must have the same signedness, but the values passed here have type 'svuint16_t' and 'svint8_t' respectively} } */
+ svaddwb (u16, pg); /* { dg-error {passing 'svbool_t' instead of the expected 'svuint8_t' to argument 2 of 'svaddwb', after passing 'svuint16_t' to argument 1} } */
+ svaddwb (s16, u16); /* { dg-error {passing 'svuint16_t' instead of the expected 'svint8_t' to argument 2 of 'svaddwb', after passing 'svint16_t' to argument 1} } */
+ svaddwb (s16, s16); /* { dg-error {passing 'svint16_t' instead of the expected 'svint8_t' to argument 2 of 'svaddwb', after passing 'svint16_t' to argument 1} } */
+ svaddwb (s16, u8); /* { dg-error {arguments 1 and 2 of 'svaddwb' must have the same signedness, but the values passed here have type 'svint16_t' and 'svuint8_t' respectively} } */
+ svaddwb (s16, s8);
+ svaddwb (f32, f16); /* { dg-error {'svaddwb' has no form that takes 'svfloat32_t' arguments} } */
+ svaddwb (f16, f32); /* { dg-error {'svaddwb' has no form that takes 'svfloat16_t' arguments} } */
+ svaddwb (0, u32); /* { dg-error {passing 'int' to argument 1 of 'svaddwb', which expects an SVE vector type} } */
+ svaddwb (0, u64); /* { dg-error {passing 'int' to argument 1 of 'svaddwb', which expects an SVE vector type} } */
+ svaddwb (u8, 0); /* { dg-error {'svaddwb' has no form that takes 'svuint8_t' arguments} } */
+ svaddwb (u16, 0);
+ svaddwb (u32, 0);
+ svaddwb (u64, 0);
+ svaddwb (pg, 0); /* { dg-error {'svaddwb' has no form that takes 'svbool_t' arguments} } */
+ svaddwb (f32, 0); /* { dg-error {'svaddwb' has no form that takes 'svfloat32_t' arguments} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16, svfloat16_t f16)
+{
+ svmatch (pg, u8); /* { dg-error {too few arguments to function 'svmatch'} } */
+ svmatch (pg, u8, u8, u8); /* { dg-error {too many arguments to function 'svmatch'} } */
+ svmatch (u8, u8, u8); /* { dg-error {passing 'svuint8_t' to argument 1 of 'svmatch', which expects 'svbool_t'} } */
+ svmatch (pg, pg, pg); /* { dg-error {'svmatch' has no form that takes 'svbool_t' arguments} } */
+ svmatch (pg, 1, u8); /* { dg-error {passing 'int' to argument 2 of 'svmatch', which expects an SVE vector type} } */
+ svmatch (pg, u8, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svmatch', but previous arguments had type 'svuint8_t'} } */
+ svmatch (pg, u8, u8);
+ svmatch (pg, u8, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svmatch', but previous arguments had type 'svuint8_t'} } */
+ svmatch (pg, u8, u16); /* { dg-error {passing 'svuint16_t' to argument 3 of 'svmatch', but previous arguments had type 'svuint8_t'} } */
+ svmatch (pg, u8, f16); /* { dg-error {passing 'svfloat16_t' to argument 3 of 'svmatch', but previous arguments had type 'svuint8_t'} } */
+ svmatch (pg, u8, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svmatch', but previous arguments had type 'svuint8_t'} } */
+ svmatch (pg, u8, 0); /* { dg-error {passing 'int' to argument 3 of 'svmatch', which expects an SVE vector type} } */
+
+ svmatch (pg, f16, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svmatch', but previous arguments had type 'svfloat16_t'} } */
+ svmatch (pg, f16, u16); /* { dg-error {passing 'svuint16_t' to argument 3 of 'svmatch', but previous arguments had type 'svfloat16_t'} } */
+ svmatch (pg, f16, f16); /* { dg-error {'svmatch' has no form that takes 'svfloat16_t' arguments} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct foo;
+
+void
+f1 (svbool_t pg, svint8_t s8, int8_t *s8_ptr, uint8_t *u8_ptr,
+ uint16_t *u16_ptr, svbool_t *pg_ptr, const struct foo *foo_ptr)
+{
+ svwhilerw (u8_ptr); /* { dg-error {too few arguments to function 'svwhilerw'} } */
+ svwhilerw (u8_ptr, u8_ptr, u8_ptr); /* { dg-error {too many arguments to function 'svwhilerw'} } */
+ svwhilerw (pg, u8_ptr); /* { dg-error {passing 'svbool_t' to argument 1 of 'svwhilerw', which expects a pointer type} } */
+ svwhilerw (0, u8_ptr); /* { dg-error {passing 'int' to argument 1 of 'svwhilerw', which expects a pointer type} } */
+ svwhilerw (s8, u8_ptr); /* { dg-error {passing 'svint8_t' to argument 1 of 'svwhilerw', which expects a pointer type} } */
+ svwhilerw (1, u8_ptr); /* { dg-error {passing 'int' to argument 1 of 'svwhilerw', which expects a pointer type} } */
+ svwhilerw (pg_ptr, u8_ptr); /* { dg-error {passing 'svbool_t \*' to argument 1 of 'svwhilerw', but 'svbool_t' is not a valid SVE element type} } */
+ svwhilerw (foo_ptr, u8_ptr); /* { dg-error {passing 'const struct foo \*' to argument 1 of 'svwhilerw', but 'struct foo' is not a valid SVE element type} } */
+ svwhilerw (u8_ptr, 0); /* { dg-error {passing 'int' to argument 2 of 'svwhilerw', which expects a pointer type} } */
+ svwhilerw (u8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 2 of 'svwhilerw', which expects a pointer type} } */
+ svwhilerw (u8_ptr, u8_ptr);
+ svwhilerw (u8_ptr, s8_ptr); /* { dg-error {passing 'int8_t \*'[^\n]* to argument 2 of 'svwhilerw', but argument 1 had type 'uint8_t \*'} } */
+ svwhilerw (u8_ptr, u16_ptr); /* { dg-error {passing 'uint16_t \*'[^\n]* to argument 2 of 'svwhilerw', but argument 1 had type 'uint8_t \*'} } */
+ svwhilerw (s8_ptr, u8_ptr); /* { dg-error {passing 'uint8_t \*'[^\n]* to argument 2 of 'svwhilerw', but argument 1 had type 'int8_t \*'} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -Wpointer-sign" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct s { int i; };
+
+void
+f1 (svbool_t pg, short *s16_ptr, unsigned short *u16_ptr,
+ svint8_t s8, svint16_t s16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64, struct s s)
+{
+ svldnt1sh_gather_index (pg, s16_ptr, s64); /* { dg-warning {implicit declaration of function 'svldnt1sh_gather_index'; did you mean 'svldnt1_gather_index'} } */
+ svldnt1sh_gather_index_u64 (pg, s16_ptr); /* { dg-error {too few arguments to function 'svldnt1sh_gather_index_u64'} } */
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, s64, 0); /* { dg-error {too many arguments to function 'svldnt1sh_gather_index_u64'} } */
+ svldnt1sh_gather_index_u64 (pg, u16_ptr, s64); /* { dg-warning {pointer targets in passing argument 2 of 'svldnt1sh_gather_s64index_u64' differ in signedness} } */
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svldnt1sh_gather_index_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svldnt1sh_gather_index_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svldnt1sh_gather_index_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, s64);
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, u64);
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1sh_gather_index_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svldnt1sh_gather_index_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svldnt1sh_gather_index_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sh_gather_index_u64 (pg, s16_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1sh_gather_index_u64', which expects a vector of 64-bit integers} } */
+
+ svldnt1sh_gather_index_u64 (pg, 0, s64);
+ svldnt1sh_gather_index_u64 (pg, s, s64); /* { dg-error {'struct s' to argument 2 of 'svldnt1sh_gather_index_u64', which expects a vector or pointer base address} } */
+
+ svldnt1sh_gather_index_u64 (pg, pg, 0); /* { dg-error {passing 'svbool_t' to argument 2 of 'svldnt1sh_gather_index_u64', which expects 'svuint64_t'} } */
+ svldnt1sh_gather_index_u64 (pg, s64, 0); /* { dg-error {passing 'svint64_t' to argument 2 of 'svldnt1sh_gather_index_u64', which expects 'svuint64_t'} } */
+ svldnt1sh_gather_index_u64 (pg, u64, 0);
+ svldnt1sh_gather_index_u64 (pg, u32, 0); /* { dg-error {passing 'svuint32_t' to argument 2 of 'svldnt1sh_gather_index_u64', which expects 'svuint64_t'} } */
+
+ svldnt1sh_gather_index_u32 (pg, u16_ptr, s32); /* { dg-error {'svldnt1sh_gather_index_u32' requires a vector base and a scalar index} } */
+ svldnt1sh_gather_index_u32 (pg, s16_ptr, pg); /* { dg-error {'svldnt1sh_gather_index_u32' requires a vector base and a scalar index} } */
+ svldnt1sh_gather_index_u32 (pg, s16_ptr, s8); /* { dg-error {'svldnt1sh_gather_index_u32' requires a vector base and a scalar index} } */
+ svldnt1sh_gather_index_u32 (pg, s16_ptr, s16); /* { dg-error {'svldnt1sh_gather_index_u32' requires a vector base and a scalar index} } */
+ svldnt1sh_gather_index_u32 (pg, s16_ptr, 0); /* { dg-error {'svldnt1sh_gather_index_u32' requires a vector base and a scalar index} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c99" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct s { int i; };
+
+void
+f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr,
+ svint8_t s8, svint16_t s16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64, struct s s)
+{
+ svldnt1sb_gather_offset (pg, s8_ptr, s32); /* { dg-warning {implicit declaration of function 'svldnt1sb_gather_offset'; did you mean 'svldnt1_gather_offset'} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svldnt1sb_gather_offset_s32'} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, u32, 0); /* { dg-error {too many arguments to function 'svldnt1sb_gather_offset_s32'} } */
+ svldnt1sb_gather_offset_s32 (pg, s16_ptr, u32); /* { dg-warning {passing argument 2 of 'svldnt1sb_gather_u32offset_s32' from incompatible pointer type} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, s32); /* { dg-error {'svldnt1sb_gather_offset_s32' does not support sign-extended offsets} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, u32);
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, s64); /* { dg-error {passing 'svint64_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, u64); /* { dg-error {passing 'svuint64_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_s32 (pg, s8_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */
+
+ svldnt1sb_gather_offset_s32 (pg, 0, u32);
+ svldnt1sb_gather_offset_s32 (pg, s, u32); /* { dg-error {'struct s' to argument 2 of 'svldnt1sb_gather_offset_s32', which expects a vector or pointer base address} } */
+
+ svldnt1sb_gather_offset_s32 (pg, pg, 0); /* { dg-error {passing 'svbool_t' to argument 2 of 'svldnt1sb_gather_offset_s32', which expects 'svuint32_t'} } */
+ svldnt1sb_gather_offset_s32 (pg, s32, 0); /* { dg-error {passing 'svint32_t' to argument 2 of 'svldnt1sb_gather_offset_s32', which expects 'svuint32_t'} } */
+ svldnt1sb_gather_offset_s32 (pg, u32, 0);
+ svldnt1sb_gather_offset_s32 (pg, u64, 0); /* { dg-error {passing 'svuint64_t' to argument 2 of 'svldnt1sb_gather_offset_s32', which expects 'svuint32_t'} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c99" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct s { int i; };
+
+void
+f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr,
+ svint8_t s8, svint16_t s16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64, struct s s)
+{
+ svldnt1sb_gather_offset (pg, s8_ptr, s32); /* { dg-warning {implicit declaration of function 'svldnt1sb_gather_offset'; did you mean 'svldnt1_gather_offset'} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svldnt1sb_gather_offset_u32'} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, u32, 0); /* { dg-error {too many arguments to function 'svldnt1sb_gather_offset_u32'} } */
+ svldnt1sb_gather_offset_u32 (pg, s16_ptr, u32); /* { dg-warning {passing argument 2 of 'svldnt1sb_gather_u32offset_u32' from incompatible pointer type} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, s32); /* { dg-error {'svldnt1sb_gather_offset_u32' does not support sign-extended offsets} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, u32);
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, s64); /* { dg-error {passing 'svint64_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, u64); /* { dg-error {passing 'svuint64_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */
+ svldnt1sb_gather_offset_u32 (pg, s8_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */
+
+ svldnt1sb_gather_offset_u32 (pg, 0, u32);
+ svldnt1sb_gather_offset_u32 (pg, s, u32); /* { dg-error {'struct s' to argument 2 of 'svldnt1sb_gather_offset_u32', which expects a vector or pointer base address} } */
+
+ svldnt1sb_gather_offset_u32 (pg, pg, 0); /* { dg-error {passing 'svbool_t' to argument 2 of 'svldnt1sb_gather_offset_u32', which expects 'svuint32_t'} } */
+ svldnt1sb_gather_offset_u32 (pg, s32, 0); /* { dg-error {passing 'svint32_t' to argument 2 of 'svldnt1sb_gather_offset_u32', which expects 'svuint32_t'} } */
+ svldnt1sb_gather_offset_u32 (pg, u32, 0);
+ svldnt1sb_gather_offset_u32 (pg, u64, 0); /* { dg-error {passing 'svuint64_t' to argument 2 of 'svldnt1sb_gather_offset_u32', which expects 'svuint32_t'} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c99" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct s { int i; };
+
+void
+f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr,
+ svint8_t s8, svint16_t s16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64, struct s s)
+{
+ svldnt1sb_gather_offset (pg, s8_ptr, s64); /* { dg-warning {implicit declaration of function 'svldnt1sb_gather_offset'; did you mean 'svldnt1_gather_offset'} } */
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svldnt1sb_gather_offset_s64'} } */
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, s64, 0); /* { dg-error {too many arguments to function 'svldnt1sb_gather_offset_s64'} } */
+ svldnt1sb_gather_offset_s64 (pg, s16_ptr, s64); /* { dg-warning {passing argument 2 of 'svldnt1sb_gather_s64offset_s64' from incompatible pointer type} } */
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, s64);
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, u64);
+ svldnt1sb_gather_offset_s64 (pg, s8_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */
+
+ svldnt1sb_gather_offset_s64 (pg, 0, s64);
+ svldnt1sb_gather_offset_s64 (pg, s, s64); /* { dg-error {'struct s' to argument 2 of 'svldnt1sb_gather_offset_s64', which expects a vector or pointer base address} } */
+
+ svldnt1sb_gather_offset_s64 (pg, pg, 0); /* { dg-error {passing 'svbool_t' to argument 2 of 'svldnt1sb_gather_offset_s64', which expects 'svuint64_t'} } */
+ svldnt1sb_gather_offset_s64 (pg, s32, 0); /* { dg-error {passing 'svint32_t' to argument 2 of 'svldnt1sb_gather_offset_s64', which expects 'svuint64_t'} } */
+ svldnt1sb_gather_offset_s64 (pg, u32, 0); /* { dg-error {passing 'svuint32_t' to argument 2 of 'svldnt1sb_gather_offset_s64', which expects 'svuint64_t'} } */
+ svldnt1sb_gather_offset_s64 (pg, u64, 0);
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c99" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct s { int i; };
+
+void
+f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr,
+ svint8_t s8, svint16_t s16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64, struct s s)
+{
+ svldnt1sb_gather_offset (pg, s8_ptr, s64); /* { dg-warning {implicit declaration of function 'svldnt1sb_gather_offset'; did you mean 'svldnt1_gather_offset'} } */
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svldnt1sb_gather_offset_u64'} } */
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, s64, 0); /* { dg-error {too many arguments to function 'svldnt1sb_gather_offset_u64'} } */
+ svldnt1sb_gather_offset_u64 (pg, s16_ptr, s64); /* { dg-warning {passing argument 2 of 'svldnt1sb_gather_s64offset_u64' from incompatible pointer type} } */
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, s64);
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, u64);
+ svldnt1sb_gather_offset_u64 (pg, s8_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */
+
+ svldnt1sb_gather_offset_u64 (pg, 0, s64);
+ svldnt1sb_gather_offset_u64 (pg, s, s64); /* { dg-error {'struct s' to argument 2 of 'svldnt1sb_gather_offset_u64', which expects a vector or pointer base address} } */
+
+ svldnt1sb_gather_offset_u64 (pg, pg, 0); /* { dg-error {passing 'svbool_t' to argument 2 of 'svldnt1sb_gather_offset_u64', which expects 'svuint64_t'} } */
+ svldnt1sb_gather_offset_u64 (pg, s32, 0); /* { dg-error {passing 'svint32_t' to argument 2 of 'svldnt1sb_gather_offset_u64', which expects 'svuint64_t'} } */
+ svldnt1sb_gather_offset_u64 (pg, u32, 0); /* { dg-error {passing 'svuint32_t' to argument 2 of 'svldnt1sb_gather_offset_u64', which expects 'svuint64_t'} } */
+ svldnt1sb_gather_offset_u64 (pg, u64, 0);
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c99" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct s { signed char x; };
+
+svuint32_t
+f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr,
+ int32_t *s32_ptr, uint32_t *u32_ptr, float *f32_ptr,
+ int64_t *s64_ptr, uint64_t *u64_ptr, double *f64_ptr,
+ void *void_ptr, struct s *s_ptr, _Complex float *cf32_ptr, int **ptr_ptr,
+ svuint8_t u8, svuint16_t u16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64)
+{
+ svldnt1_gather_offset (pg, s32_ptr); /* { dg-error {too few arguments to function 'svldnt1_gather_offset'} } */
+ svldnt1_gather_offset (pg, s32_ptr, s32, 0); /* { dg-error {too many arguments to function 'svldnt1_gather_offset'} } */
+ svldnt1_gather_offset (0, s32_ptr, u32); /* { dg-error {passing 'int' to argument 1 of 'svldnt1_gather_offset', which expects 'svbool_t'} } */
+ svldnt1_gather_offset (pg, 0, s32); /* { dg-error {passing 'int' to argument 2 of 'svldnt1_gather_offset', which expects a pointer type} } */
+ svldnt1_gather_offset (pg, (int *) 0, u32);
+ svldnt1_gather_offset (pg, void_ptr, u32); /* { dg-error {passing 'void \*' to argument 2 of 'svldnt1_gather_offset', but 'void' is not a valid SVE element type} } */
+ svldnt1_gather_offset (pg, s_ptr, u32); /* { dg-error {passing 'struct s \*' to argument 2 of 'svldnt1_gather_offset', but 'struct s' is not a valid SVE element type} } */
+ svldnt1_gather_offset (pg, f32_ptr, u32);
+ svldnt1_gather_offset (pg, cf32_ptr, u32); /* { dg-error {passing '_Complex float \*' to argument 2 of 'svldnt1_gather_offset', but 'complex float' is not a valid SVE element type} } */
+ svldnt1_gather_offset (pg, ptr_ptr, u64); /* { dg-error {passing 'int \*\*' to argument 2 of 'svldnt1_gather_offset', but 'int \*' is not a valid SVE element type} } */
+ svldnt1_gather_offset (pg, u32, 0); /* { dg-error {passing 'svuint32_t' to argument 2 of 'svldnt1_gather_offset', which expects a pointer type} } */
+ /* { dg-message {an explicit type suffix is needed when using a vector of base addresses} "" { target *-*-* } .-1 } */
+ svldnt1_gather_offset (pg, u64, 0); /* { dg-error {passing 'svuint64_t' to argument 2 of 'svldnt1_gather_offset', which expects a pointer type} } */
+ /* { dg-message {an explicit type suffix is needed when using a vector of base addresses} "" { target *-*-* } .-1 } */
+
+ svldnt1_gather_offset (pg, s8_ptr, u8); /* { dg-error {passing 'signed char \*' to argument 2 of 'svldnt1_gather_offset', which expects a pointer to 32-bit or 64-bit elements} } */
+ svldnt1_gather_offset (pg, s8_ptr, u32); /* { dg-error {passing 'signed char \*' to argument 2 of 'svldnt1_gather_offset', which expects a pointer to 32-bit or 64-bit elements} } */
+ svldnt1_gather_offset (pg, s16_ptr, u16); /* { dg-error {passing 'short( int)? \*' to argument 2 of 'svldnt1_gather_offset', which expects a pointer to 32-bit or 64-bit elements} } */
+ svldnt1_gather_offset (pg, s16_ptr, u32); /* { dg-error {passing 'short( int)? \*' to argument 2 of 'svldnt1_gather_offset', which expects a pointer to 32-bit or 64-bit elements} } */
+
+ svldnt1_gather_offset (pg, s32_ptr, s32); /* { dg-error {'svldnt1_gather_offset' does not support 32-bit sign-extended offsets} } */
+ svldnt1_gather_offset (pg, s32_ptr, u32);
+ svldnt1_gather_offset (pg, s32_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svint32_t' expects a vector of 32-bit integers} } */
+ svldnt1_gather_offset (pg, s32_ptr, s64); /* { dg-error {passing 'svint64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svint32_t' expects a vector of 32-bit integers} } */
+ svldnt1_gather_offset (pg, s32_ptr, u64); /* { dg-error {passing 'svuint64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svint32_t' expects a vector of 32-bit integers} } */
+ svldnt1_gather_offset (pg, s32_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svint32_t' expects a vector of 32-bit integers} } */
+
+ svldnt1_gather_offset (pg, u32_ptr, s32); /* { dg-error {'svldnt1_gather_offset' does not support 32-bit sign-extended offsets} } */
+ svldnt1_gather_offset (pg, u32_ptr, u32);
+ svldnt1_gather_offset (pg, u32_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svuint32_t' expects a vector of 32-bit integers} } */
+ svldnt1_gather_offset (pg, u32_ptr, s64); /* { dg-error {passing 'svint64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svuint32_t' expects a vector of 32-bit integers} } */
+ svldnt1_gather_offset (pg, u32_ptr, u64); /* { dg-error {passing 'svuint64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svuint32_t' expects a vector of 32-bit integers} } */
+ svldnt1_gather_offset (pg, u32_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svuint32_t' expects a vector of 32-bit integers} } */
+
+ svldnt1_gather_offset (pg, f32_ptr, s32); /* { dg-error {'svldnt1_gather_offset' does not support 32-bit sign-extended offsets} } */
+ svldnt1_gather_offset (pg, f32_ptr, u32);
+ svldnt1_gather_offset (pg, f32_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svfloat32_t' expects a vector of 32-bit integers} } */
+ svldnt1_gather_offset (pg, f32_ptr, s64); /* { dg-error {passing 'svint64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svfloat32_t' expects a vector of 32-bit integers} } */
+ svldnt1_gather_offset (pg, f32_ptr, u64); /* { dg-error {passing 'svuint64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svfloat32_t' expects a vector of 32-bit integers} } */
+ svldnt1_gather_offset (pg, f32_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svfloat32_t' expects a vector of 32-bit integers} } */
+
+ svldnt1_gather_offset (pg, s64_ptr, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_offset (pg, s64_ptr, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_offset (pg, s64_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_offset (pg, s64_ptr, s64);
+ svldnt1_gather_offset (pg, s64_ptr, u64);
+ svldnt1_gather_offset (pg, s64_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svint64_t' expects a vector of 64-bit integers} } */
+
+ svldnt1_gather_offset (pg, u64_ptr, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svuint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_offset (pg, u64_ptr, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svuint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_offset (pg, u64_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svuint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_offset (pg, u64_ptr, s64);
+ svldnt1_gather_offset (pg, u64_ptr, u64);
+ svldnt1_gather_offset (pg, u64_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svuint64_t' expects a vector of 64-bit integers} } */
+
+ svldnt1_gather_offset (pg, f64_ptr, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_offset (pg, f64_ptr, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_offset (pg, f64_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_offset (pg, f64_ptr, s64);
+ svldnt1_gather_offset (pg, f64_ptr, u64);
+ svldnt1_gather_offset (pg, f64_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1_gather_offset', which when loading 'svfloat64_t' expects a vector of 64-bit integers} } */
+
+ return svldnt1_gather_offset (pg, s32_ptr, u32); /* { dg-error {incompatible types when returning type 'svint32_t' but 'svuint32_t' was expected} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c99" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct s { signed char x; };
+
+svuint64_t
+f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr,
+ int32_t *s32_ptr, uint32_t *u32_ptr, float *f32_ptr,
+ int64_t *s64_ptr, uint64_t *u64_ptr, double *f64_ptr,
+ void *void_ptr, struct s *s_ptr, _Complex float *cf32_ptr, int **ptr_ptr,
+ svint8_t s8, svint16_t s16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64)
+{
+ svldnt1_gather_index (pg, s64_ptr); /* { dg-error {too few arguments to function 'svldnt1_gather_index'} } */
+ svldnt1_gather_index (pg, s64_ptr, s64, 0); /* { dg-error {too many arguments to function 'svldnt1_gather_index'} } */
+ svldnt1_gather_index (0, s64_ptr, s64); /* { dg-error {passing 'int' to argument 1 of 'svldnt1_gather_index', which expects 'svbool_t'} } */
+ svldnt1_gather_index (pg, 0, s64); /* { dg-error {passing 'int' to argument 2 of 'svldnt1_gather_index', which expects a pointer type} } */
+ svldnt1_gather_index (pg, (uint64_t *) 0, s64);
+ svldnt1_gather_index (pg, void_ptr, s64); /* { dg-error {passing 'void \*' to argument 2 of 'svldnt1_gather_index', but 'void' is not a valid SVE element type} } */
+ svldnt1_gather_index (pg, s_ptr, s64); /* { dg-error {passing 'struct s \*' to argument 2 of 'svldnt1_gather_index', but 'struct s' is not a valid SVE element type} } */
+ svldnt1_gather_index (pg, cf32_ptr, s32); /* { dg-error {passing '_Complex float \*' to argument 2 of 'svldnt1_gather_index', but 'complex float' is not a valid SVE element type} } */
+ svldnt1_gather_index (pg, ptr_ptr, u64); /* { dg-error {passing 'int \*\*' to argument 2 of 'svldnt1_gather_index', but 'int \*' is not a valid SVE element type} } */
+ svldnt1_gather_index (pg, u32, 0); /* { dg-error {passing 'svuint32_t' to argument 2 of 'svldnt1_gather_index', which expects a pointer type} } */
+ /* { dg-message {an explicit type suffix is needed when using a vector of base addresses} "" { target *-*-* } .-1 } */
+ svldnt1_gather_index (pg, u64, 0); /* { dg-error {passing 'svuint64_t' to argument 2 of 'svldnt1_gather_index', which expects a pointer type} } */
+ /* { dg-message {an explicit type suffix is needed when using a vector of base addresses} "" { target *-*-* } .-1 } */
+
+ svldnt1_gather_index (pg, s8_ptr, s8); /* { dg-error {passing 'signed char \*' to argument 2 of 'svldnt1_gather_index', which expects a pointer to 32-bit or 64-bit elements} } */
+ svldnt1_gather_index (pg, s8_ptr, s64); /* { dg-error {passing 'signed char \*' to argument 2 of 'svldnt1_gather_index', which expects a pointer to 32-bit or 64-bit elements} } */
+ svldnt1_gather_index (pg, s16_ptr, s16); /* { dg-error {passing 'short( int)? \*' to argument 2 of 'svldnt1_gather_index', which expects a pointer to 32-bit or 64-bit elements} } */
+ svldnt1_gather_index (pg, s16_ptr, s64); /* { dg-error {passing 'short( int)? \*' to argument 2 of 'svldnt1_gather_index', which expects a pointer to 32-bit or 64-bit elements} } */
+
+ svldnt1_gather_index (pg, s32_ptr, s32); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svint32_t'} } */
+ svldnt1_gather_index (pg, s32_ptr, u32); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svint32_t'} } */
+ svldnt1_gather_index (pg, s32_ptr, f32); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svint32_t'} } */
+ svldnt1_gather_index (pg, s32_ptr, s64); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svint32_t'} } */
+
+ svldnt1_gather_index (pg, u32_ptr, s32); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svuint32_t'} } */
+ svldnt1_gather_index (pg, u32_ptr, u32); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svuint32_t'} } */
+ svldnt1_gather_index (pg, u32_ptr, f32); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svuint32_t'} } */
+ svldnt1_gather_index (pg, u32_ptr, s64); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svuint32_t'} } */
+
+ svldnt1_gather_index (pg, f32_ptr, s32); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svfloat32_t'} } */
+ svldnt1_gather_index (pg, f32_ptr, u32); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svfloat32_t'} } */
+ svldnt1_gather_index (pg, f32_ptr, f32); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svfloat32_t'} } */
+ svldnt1_gather_index (pg, f32_ptr, s64); /* { dg-error {'svldnt1_gather_index' does not support 32-bit vector type 'svfloat32_t'} } */
+
+ svldnt1_gather_index (pg, s64_ptr, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_index (pg, s64_ptr, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_index (pg, s64_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_index (pg, s64_ptr, s64);
+ svldnt1_gather_index (pg, s64_ptr, u64);
+ svldnt1_gather_index (pg, s64_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svint64_t' expects a vector of 64-bit integers} } */
+
+ svldnt1_gather_index (pg, u64_ptr, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svuint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_index (pg, u64_ptr, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svuint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_index (pg, u64_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svuint64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_index (pg, u64_ptr, s64);
+ svldnt1_gather_index (pg, u64_ptr, u64);
+ svldnt1_gather_index (pg, u64_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svuint64_t' expects a vector of 64-bit integers} } */
+
+ svldnt1_gather_index (pg, f64_ptr, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_index (pg, f64_ptr, u32); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_index (pg, f64_ptr, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svldnt1_gather_index (pg, f64_ptr, s64);
+ svldnt1_gather_index (pg, f64_ptr, u64);
+ svldnt1_gather_index (pg, f64_ptr, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svldnt1_gather_index', which when loading 'svfloat64_t' expects a vector of 64-bit integers} } */
+
+ return svldnt1_gather_index (pg, s64_ptr, s64); /* { dg-error {incompatible types when returning type 'svint64_t' but 'svuint64_t' was expected} } */
+}
--- /dev/null
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f2 (svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16, svfloat16_t f16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64)
+{
+ s8 = svmul_lane (s8, s8, 1); /* { dg-error {'svmul_lane' has no form that takes 'svint8_t' arguments} } */
+ u8 = svmul_lane (u8, u8, 1); /* { dg-error {'svmul_lane' has no form that takes 'svuint8_t' arguments} } */
+ s16 = svmul_lane (s16, s16, 1);
+ u16 = svmul_lane (u16, u16, 1);
+ f16 = svmul_lane (f16, f16, 1);
+ s32 = svmul_lane (s32, s32, 1);
+ u32 = svmul_lane (u32, u32, 1);
+ f32 = svmul_lane (f32, f32, 1);
+ s64 = svmul_lane (s64, s64, 1);
+ u64 = svmul_lane (u64, u64, 1);
+ f64 = svmul_lane (f64, f64, 1);
+}
+
+#pragma GCC target ("arch=armv8-a+sve")
+
+void
+f1 (svint8_t s8, svuint8_t u8, svint16_t s16)
+{
+ s8 = svmul_lane (s8, s8, 1); /* { dg-error {'svmul_lane' has no form that takes 'svint8_t' arguments} } */
+ u8 = svmul_lane (u8, u8, 1); /* { dg-error {'svmul_lane' has no form that takes 'svuint8_t' arguments} } */
+ s16 = svmul_lane (s16, s16, 1); /* { dg-error {ACLE function 'svmul_lane_s16' requires ISA extension 'sve2'} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-std=c99 -Wall -Wextra" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8, svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32, svint64_t s64, svuint64_t u64,
+ svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, int x)
+{
+ const int one = 1;
+ s16 = svshllb (s8, x); /* { dg-error {argument 2 of 'svshllb' must be an integer constant expression} } */
+ s16 = svshllb (s8, one); /* { dg-error {argument 2 of 'svshllb' must be an integer constant expression} } */
+ s16 = svshllb (s8, -1); /* { dg-error {passing -1 to argument 2 of 'svshllb', which expects a value in the range \[0, 7\]} } */
+ s16 = svshllb (s8, 0.0);
+ s16 = svshllb (s8, 0);
+ s16 = svshllb (s8, 1);
+ s16 = svshllb (s8, 1 + 1);
+ s16 = svshllb (s8, 7);
+ s16 = svshllb (s8, 7.2);
+ s16 = svshllb (s8, 8); /* { dg-error {passing 8 to argument 2 of 'svshllb', which expects a value in the range \[0, 7\]} } */
+ s16 = svshllb (s8, 8.2); /* { dg-error {passing 8 to argument 2 of 'svshllb', which expects a value in the range \[0, 7\]} } */
+ s16 = svshllb (s8, (1ULL << 62) + 1); /* { dg-error {passing [^ ]* to argument 2 of 'svshllb', which expects a value in the range \[0, 7\]} } */
+ u16 = svshllb (u8, -1); /* { dg-error {passing -1 to argument 2 of 'svshllb', which expects a value in the range \[0, 7\]} } */
+ u16 = svshllb (u8, 0);
+ u16 = svshllb (u8, 1);
+ u16 = svshllb (u8, 7);
+ u16 = svshllb (u8, 8); /* { dg-error {passing 8 to argument 2 of 'svshllb', which expects a value in the range \[0, 7\]} } */
+ s32 = svshllb (s16, -1); /* { dg-error {passing -1 to argument 2 of 'svshllb', which expects a value in the range \[0, 15\]} } */
+ s32 = svshllb (s16, 0);
+ s32 = svshllb (s16, 1);
+ s32 = svshllb (s16, 15);
+ s32 = svshllb (s16, 16); /* { dg-error {passing 16 to argument 2 of 'svshllb', which expects a value in the range \[0, 15\]} } */
+ u32 = svshllb (u16, -1); /* { dg-error {passing -1 to argument 2 of 'svshllb', which expects a value in the range \[0, 15\]} } */
+ u32 = svshllb (u16, 0);
+ u32 = svshllb (u16, 1);
+ u32 = svshllb (u16, 15);
+ u32 = svshllb (u16, 16); /* { dg-error {passing 16 to argument 2 of 'svshllb', which expects a value in the range \[0, 15\]} } */
+ s64 = svshllb (s32, -1); /* { dg-error {passing -1 to argument 2 of 'svshllb', which expects a value in the range \[0, 31\]} } */
+ s64 = svshllb (s32, 0);
+ s64 = svshllb (s32, 1);
+ s64 = svshllb (s32, 31);
+ s64 = svshllb (s32, 32); /* { dg-error {passing 32 to argument 2 of 'svshllb', which expects a value in the range \[0, 31\]} } */
+ u64 = svshllb (u32, -1); /* { dg-error {passing -1 to argument 2 of 'svshllb', which expects a value in the range \[0, 31\]} } */
+ u64 = svshllb (u32, 0);
+ u64 = svshllb (u32, 1);
+ u64 = svshllb (u32, 31);
+ u64 = svshllb (u32, 32); /* { dg-error {passing 32 to argument 2 of 'svshllb', which expects a value in the range \[0, 31\]} } */
+ svshllb (s64, -1); /* { dg-error {'svshllb' has no form that takes 'svint64_t' arguments} } */
+ svshllb (u64, -1); /* { dg-error {'svshllb' has no form that takes 'svuint64_t' arguments} } */
+ svshllb (pg, -1); /* { dg-error {'svshllb' has no form that takes 'svbool_t' arguments} } */
+ svshllb (f16, -1); /* { dg-error {'svshllb' has no form that takes 'svfloat16_t' arguments} } */
+ svshllb (f32, -1); /* { dg-error {'svshllb' has no form that takes 'svfloat32_t' arguments} } */
+ svshllb (f64, -1); /* { dg-error {'svshllb' has no form that takes 'svfloat64_t' arguments} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-std=c99 -Wall -Wextra" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svuint8_t u8, svint8_t s8, svint16_t s16, svint32_t s32,
+ svint64_t s64, int x)
+{
+ const int one = 1;
+ svuint16_t u16 __attribute__((unused));
+ svuint32_t u32 __attribute__((unused));
+ svuint64_t u64 __attribute__((unused));
+ u8 = svqshlu_x (pg, u8, 1); /* { dg-error {'svqshlu_x' has no form that takes 'svuint8_t' arguments} } */
+ u8 = svqshlu_x (pg, s8, x); /* { dg-error {argument 3 of 'svqshlu_x' must be an integer constant expression} } */
+ u8 = svqshlu_x (pg, s8, one); /* { dg-error {argument 3 of 'svqshlu_x' must be an integer constant expression} } */
+ u8 = svqshlu_x (pg, s8, -1); /* { dg-error {passing -1 to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 7\]} } */
+ u8 = svqshlu_x (pg, s8, 0.0);
+ u8 = svqshlu_x (pg, s8, 0);
+ u8 = svqshlu_x (pg, s8, 1);
+ u8 = svqshlu_x (pg, s8, 1 + 1);
+ u8 = svqshlu_x (pg, s8, 7);
+ u8 = svqshlu_x (pg, s8, 7.2);
+ u8 = svqshlu_x (pg, s8, 8); /* { dg-error {passing 8 to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 7\]} } */
+ u8 = svqshlu_x (pg, s8, 8.2); /* { dg-error {passing 8 to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 7\]} } */
+ u8 = svqshlu_x (pg, s8, (1ULL << 62) + 1); /* { dg-error {passing [^ ]* to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 7\]} } */
+ u16 = svqshlu_x (pg, s16, -1); /* { dg-error {passing -1 to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 15\]} } */
+ u16 = svqshlu_x (pg, s16, 0);
+ u16 = svqshlu_x (pg, s16, 1);
+ u16 = svqshlu_x (pg, s16, 15);
+ u16 = svqshlu_x (pg, s16, 16); /* { dg-error {passing 16 to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 15\]} } */
+ u32 = svqshlu_x (pg, s32, -1); /* { dg-error {passing -1 to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 31\]} } */
+ u32 = svqshlu_x (pg, s32, 0);
+ u32 = svqshlu_x (pg, s32, 1);
+ u32 = svqshlu_x (pg, s32, 31);
+ u32 = svqshlu_x (pg, s32, 32); /* { dg-error {passing 32 to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 31\]} } */
+ u64 = svqshlu_x (pg, s64, -1); /* { dg-error {passing -1 to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 63\]} } */
+ u64 = svqshlu_x (pg, s64, 0);
+ u64 = svqshlu_x (pg, s64, 1);
+ u64 = svqshlu_x (pg, s64, 63);
+ u64 = svqshlu_x (pg, s64, 64); /* { dg-error {passing 64 to argument 3 of 'svqshlu_x', which expects a value in the range \[0, 63\]} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-std=c99 -Wall -Wextra" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svint16_t s16, svint32_t s32, svint64_t s64,
+ int x)
+{
+ const int one = 1;
+ svuint8_t u8 __attribute__((unused));
+ svuint16_t u16 __attribute__((unused));
+ svuint32_t u32 __attribute__((unused));
+ svuint64_t u64 __attribute__((unused));
+ u8 = svqshlu_n_s8_x (pg, s8, x); /* { dg-error {argument 3 of 'svqshlu_n_s8_x' must be an integer constant expression} } */
+ u8 = svqshlu_n_s8_x (pg, s8, one); /* { dg-error {argument 3 of 'svqshlu_n_s8_x' must be an integer constant expression} } */
+ u8 = svqshlu_n_s8_x (pg, s8, -1); /* { dg-error {passing -1 to argument 3 of 'svqshlu_n_s8_x', which expects a value in the range \[0, 7\]} } */
+ u8 = svqshlu_n_s8_x (pg, s8, 0.0);
+ u8 = svqshlu_n_s8_x (pg, s8, 0);
+ u8 = svqshlu_n_s8_x (pg, s8, 1);
+ u8 = svqshlu_n_s8_x (pg, s8, 1 + 1);
+ u8 = svqshlu_n_s8_x (pg, s8, 7);
+ u8 = svqshlu_n_s8_x (pg, s8, 7.2);
+ u8 = svqshlu_n_s8_x (pg, s8, 8); /* { dg-error {passing 8 to argument 3 of 'svqshlu_n_s8_x', which expects a value in the range \[0, 7\]} } */
+ u8 = svqshlu_n_s8_x (pg, s8, 8.2); /* { dg-error {passing 8 to argument 3 of 'svqshlu_n_s8_x', which expects a value in the range \[0, 7\]} } */
+ u8 = svqshlu_n_s8_x (pg, s8, (1ULL << 62) + 1); /* { dg-error {passing [^ ]* to argument 3 of 'svqshlu_n_s8_x', which expects a value in the range \[0, 7\]} } */
+ u16 = svqshlu_n_s16_x (pg, s16, -1); /* { dg-error {passing -1 to argument 3 of 'svqshlu_n_s16_x', which expects a value in the range \[0, 15\]} } */
+ u16 = svqshlu_n_s16_x (pg, s16, 0);
+ u16 = svqshlu_n_s16_x (pg, s16, 1);
+ u16 = svqshlu_n_s16_x (pg, s16, 15);
+ u16 = svqshlu_n_s16_x (pg, s16, 16); /* { dg-error {passing 16 to argument 3 of 'svqshlu_n_s16_x', which expects a value in the range \[0, 15\]} } */
+ u32 = svqshlu_n_s32_x (pg, s32, -1); /* { dg-error {passing -1 to argument 3 of 'svqshlu_n_s32_x', which expects a value in the range \[0, 31\]} } */
+ u32 = svqshlu_n_s32_x (pg, s32, 0);
+ u32 = svqshlu_n_s32_x (pg, s32, 1);
+ u32 = svqshlu_n_s32_x (pg, s32, 31);
+ u32 = svqshlu_n_s32_x (pg, s32, 32); /* { dg-error {passing 32 to argument 3 of 'svqshlu_n_s32_x', which expects a value in the range \[0, 31\]} } */
+ u64 = svqshlu_n_s64_x (pg, s64, -1); /* { dg-error {passing -1 to argument 3 of 'svqshlu_n_s64_x', which expects a value in the range \[0, 63\]} } */
+ u64 = svqshlu_n_s64_x (pg, s64, 0);
+ u64 = svqshlu_n_s64_x (pg, s64, 1);
+ u64 = svqshlu_n_s64_x (pg, s64, 63);
+ u64 = svqshlu_n_s64_x (pg, s64, 64); /* { dg-error {passing 64 to argument 3 of 'svqshlu_n_s64_x', which expects a value in the range \[0, 63\]} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat32_t f32, int x)
+{
+ const int one = 1;
+ svshrnb (u16); /* { dg-error {too few arguments to function 'svshrnb'} } */
+ svshrnb (u16, u16, 1); /* { dg-error {too many arguments to function 'svshrnb'} } */
+
+ svshrnb (u16, x); /* { dg-error {argument 2 of 'svshrnb' must be an integer constant expression} } */
+ svshrnb (u16, one); /* { dg-error {argument 2 of 'svshrnb' must be an integer constant expression} } */
+ svshrnb (u16, 0.4); /* { dg-error {passing 0 to argument 2 of 'svshrnb', which expects a value in the range \[1, 8\]} } */
+ svshrnb (u16, 1.0);
+
+ svshrnb (pg, 1); /* { dg-error {'svshrnb' has no form that takes 'svbool_t' arguments} } */
+
+ svshrnb (u8, -1); /* { dg-error {'svshrnb' has no form that takes 'svuint8_t' arguments} } */
+ svshrnb (u8, 1); /* { dg-error {'svshrnb' has no form that takes 'svuint8_t' arguments} } */
+ svshrnb (u8, 100); /* { dg-error {'svshrnb' has no form that takes 'svuint8_t' arguments} } */
+
+ svshrnb (s8, 1); /* { dg-error {'svshrnb' has no form that takes 'svint8_t' arguments} } */
+
+ svshrnb (u16, -1); /* { dg-error {passing -1 to argument 2 of 'svshrnb', which expects a value in the range \[1, 8\]} } */
+ svshrnb (u16, 0); /* { dg-error {passing 0 to argument 2 of 'svshrnb', which expects a value in the range \[1, 8\]} } */
+ svshrnb (u16, 1);
+ svshrnb (u16, 8);
+ svshrnb (u16, 9); /* { dg-error {passing 9 to argument 2 of 'svshrnb', which expects a value in the range \[1, 8\]} } */
+
+ svshrnb (s16, -1); /* { dg-error {passing -1 to argument 2 of 'svshrnb', which expects a value in the range \[1, 8\]} } */
+ svshrnb (s16, 0); /* { dg-error {passing 0 to argument 2 of 'svshrnb', which expects a value in the range \[1, 8\]} } */
+ svshrnb (s16, 1);
+ svshrnb (s16, 8);
+ svshrnb (s16, 9); /* { dg-error {passing 9 to argument 2 of 'svshrnb', which expects a value in the range \[1, 8\]} } */
+
+ svshrnb (u32, -1); /* { dg-error {passing -1 to argument 2 of 'svshrnb', which expects a value in the range \[1, 16\]} } */
+ svshrnb (u32, 0); /* { dg-error {passing 0 to argument 2 of 'svshrnb', which expects a value in the range \[1, 16\]} } */
+ svshrnb (u32, 1);
+ svshrnb (u32, 16);
+ svshrnb (u32, 17); /* { dg-error {passing 17 to argument 2 of 'svshrnb', which expects a value in the range \[1, 16\]} } */
+
+ svshrnb (s32, -1); /* { dg-error {passing -1 to argument 2 of 'svshrnb', which expects a value in the range \[1, 16\]} } */
+ svshrnb (s32, 0); /* { dg-error {passing 0 to argument 2 of 'svshrnb', which expects a value in the range \[1, 16\]} } */
+ svshrnb (s32, 1);
+ svshrnb (s32, 16);
+ svshrnb (s32, 17); /* { dg-error {passing 17 to argument 2 of 'svshrnb', which expects a value in the range \[1, 16\]} } */
+
+ svshrnb (u64, -1); /* { dg-error {passing -1 to argument 2 of 'svshrnb', which expects a value in the range \[1, 32\]} } */
+ svshrnb (u64, 0); /* { dg-error {passing 0 to argument 2 of 'svshrnb', which expects a value in the range \[1, 32\]} } */
+ svshrnb (u64, 1);
+ svshrnb (u64, 32);
+ svshrnb (u64, 33); /* { dg-error {passing 33 to argument 2 of 'svshrnb', which expects a value in the range \[1, 32\]} } */
+
+ svshrnb (s64, -1); /* { dg-error {passing -1 to argument 2 of 'svshrnb', which expects a value in the range \[1, 32\]} } */
+ svshrnb (s64, 0); /* { dg-error {passing 0 to argument 2 of 'svshrnb', which expects a value in the range \[1, 32\]} } */
+ svshrnb (s64, 1);
+ svshrnb (s64, 32);
+ svshrnb (s64, 33); /* { dg-error {passing 33 to argument 2 of 'svshrnb', which expects a value in the range \[1, 32\]} } */
+
+ svshrnb (f32, 1); /* { dg-error {'svshrnb' has no form that takes 'svfloat32_t' arguments} } */
+
+ svshrnb (1, 1); /* { dg-error {passing 'int' to argument 1 of 'svshrnb', which expects an SVE vector type} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat32_t f32, int x)
+{
+ const int one = 1;
+ svqshrunb (s16); /* { dg-error {too few arguments to function 'svqshrunb'} } */
+ svqshrunb (s16, s16, 1); /* { dg-error {too many arguments to function 'svqshrunb'} } */
+
+ svqshrunb (s16, x); /* { dg-error {argument 2 of 'svqshrunb' must be an integer constant expression} } */
+ svqshrunb (s16, one); /* { dg-error {argument 2 of 'svqshrunb' must be an integer constant expression} } */
+ svqshrunb (s16, 0.4); /* { dg-error {passing 0 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 8\]} } */
+ svqshrunb (s16, 1.0);
+
+ svqshrunb (pg, 1); /* { dg-error {'svqshrunb' has no form that takes 'svbool_t' arguments} } */
+
+ svqshrunb (u8, -1); /* { dg-error {'svqshrunb' has no form that takes 'svuint8_t' arguments} } */
+ svqshrunb (u8, 1); /* { dg-error {'svqshrunb' has no form that takes 'svuint8_t' arguments} } */
+ svqshrunb (u8, 100); /* { dg-error {'svqshrunb' has no form that takes 'svuint8_t' arguments} } */
+
+ svqshrunb (s8, 1); /* { dg-error {'svqshrunb' has no form that takes 'svint8_t' arguments} } */
+
+ svqshrunb (u16, 1); /* { dg-error {'svqshrunb' has no form that takes 'svuint16_t' arguments} } */
+
+ svqshrunb (s16, -1); /* { dg-error {passing -1 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 8\]} } */
+ svqshrunb (s16, 0); /* { dg-error {passing 0 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 8\]} } */
+ svqshrunb (s16, 1);
+ svqshrunb (s16, 8);
+ svqshrunb (s16, 9); /* { dg-error {passing 9 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 8\]} } */
+
+ svqshrunb (u32, 1); /* { dg-error {'svqshrunb' has no form that takes 'svuint32_t' arguments} } */
+
+ svqshrunb (s32, -1); /* { dg-error {passing -1 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 16\]} } */
+ svqshrunb (s32, 0); /* { dg-error {passing 0 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 16\]} } */
+ svqshrunb (s32, 1);
+ svqshrunb (s32, 16);
+ svqshrunb (s32, 17); /* { dg-error {passing 17 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 16\]} } */
+
+ svqshrunb (u64, 1); /* { dg-error {'svqshrunb' has no form that takes 'svuint64_t' arguments} } */
+
+ svqshrunb (s64, -1); /* { dg-error {passing -1 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 32\]} } */
+ svqshrunb (s64, 0); /* { dg-error {passing 0 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 32\]} } */
+ svqshrunb (s64, 1);
+ svqshrunb (s64, 32);
+ svqshrunb (s64, 33); /* { dg-error {passing 33 to argument 2 of 'svqshrunb', which expects a value in the range \[1, 32\]} } */
+
+ svqshrunb (f32, 1); /* { dg-error {'svqshrunb' has no form that takes 'svfloat32_t' arguments} } */
+
+ svqshrunb (1, 1); /* { dg-error {passing 'int' to argument 1 of 'svqshrunb', which expects an SVE vector type} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat32_t f32, int x)
+{
+ const int one = 1;
+ svshrnt (u8, u16); /* { dg-error {too few arguments to function 'svshrnt'} } */
+ svshrnt (u8, u16, u16, 1); /* { dg-error {too many arguments to function 'svshrnt'} } */
+
+ svshrnt (u16, u16, 1); /* { dg-error {passing 'svuint16_t' instead of the expected 'svuint8_t' to argument 1 of 'svshrnt', after passing 'svuint16_t' to argument 2} } */
+ svshrnt (s16, u16, 1); /* { dg-error {passing 'svint16_t' instead of the expected 'svuint8_t' to argument 1 of 'svshrnt', after passing 'svuint16_t' to argument 2} } */
+ svshrnt (s8, u16, 1); /* { dg-error {arguments 1 and 2 of 'svshrnt' must have the same signedness, but the values passed here have type 'svint8_t' and 'svuint16_t' respectively} } */
+ svshrnt (pg, u16, 1); /* { dg-error {passing 'svbool_t' instead of the expected 'svuint8_t' to argument 1 of 'svshrnt', after passing 'svuint16_t' to argument 2} } */
+
+ svshrnt (s16, s16, 1); /* { dg-error {passing 'svint16_t' instead of the expected 'svint8_t' to argument 1 of 'svshrnt', after passing 'svint16_t' to argument 2} } */
+ svshrnt (u16, s16, 1); /* { dg-error {passing 'svuint16_t' instead of the expected 'svint8_t' to argument 1 of 'svshrnt', after passing 'svint16_t' to argument 2} } */
+ svshrnt (u8, s16, 1); /* { dg-error {arguments 1 and 2 of 'svshrnt' must have the same signedness, but the values passed here have type 'svuint8_t' and 'svint16_t' respectively} } */
+ svshrnt (pg, s16, 1); /* { dg-error {passing 'svbool_t' instead of the expected 'svint8_t' to argument 1 of 'svshrnt', after passing 'svint16_t' to argument 2} } */
+
+ svshrnt (u8, u16, x); /* { dg-error {argument 3 of 'svshrnt' must be an integer constant expression} } */
+ svshrnt (u8, u16, one); /* { dg-error {argument 3 of 'svshrnt' must be an integer constant expression} } */
+ svshrnt (u8, u16, 0.4); /* { dg-error {passing 0 to argument 3 of 'svshrnt', which expects a value in the range \[1, 8\]} } */
+ svshrnt (u8, u16, 1.0);
+
+ svshrnt (pg, pg, 1); /* { dg-error {'svshrnt' has no form that takes 'svbool_t' arguments} } */
+
+ svshrnt (u8, u8, -1); /* { dg-error {'svshrnt' has no form that takes 'svuint8_t' arguments} } */
+ svshrnt (u8, u8, 1); /* { dg-error {'svshrnt' has no form that takes 'svuint8_t' arguments} } */
+ svshrnt (u8, u8, 100); /* { dg-error {'svshrnt' has no form that takes 'svuint8_t' arguments} } */
+
+ svshrnt (s8, s8, 1); /* { dg-error {'svshrnt' has no form that takes 'svint8_t' arguments} } */
+
+ svshrnt (u8, u16, -1); /* { dg-error {passing -1 to argument 3 of 'svshrnt', which expects a value in the range \[1, 8\]} } */
+ svshrnt (u8, u16, 0); /* { dg-error {passing 0 to argument 3 of 'svshrnt', which expects a value in the range \[1, 8\]} } */
+ svshrnt (u8, u16, 1);
+ svshrnt (u8, u16, 8);
+ svshrnt (u8, u16, 9); /* { dg-error {passing 9 to argument 3 of 'svshrnt', which expects a value in the range \[1, 8\]} } */
+
+ svshrnt (s8, s16, -1); /* { dg-error {passing -1 to argument 3 of 'svshrnt', which expects a value in the range \[1, 8\]} } */
+ svshrnt (s8, s16, 0); /* { dg-error {passing 0 to argument 3 of 'svshrnt', which expects a value in the range \[1, 8\]} } */
+ svshrnt (s8, s16, 1);
+ svshrnt (s8, s16, 8);
+ svshrnt (s8, s16, 9); /* { dg-error {passing 9 to argument 3 of 'svshrnt', which expects a value in the range \[1, 8\]} } */
+
+ svshrnt (u16, u32, -1); /* { dg-error {passing -1 to argument 3 of 'svshrnt', which expects a value in the range \[1, 16\]} } */
+ svshrnt (u16, u32, 0); /* { dg-error {passing 0 to argument 3 of 'svshrnt', which expects a value in the range \[1, 16\]} } */
+ svshrnt (u16, u32, 1);
+ svshrnt (u16, u32, 16);
+ svshrnt (u16, u32, 17); /* { dg-error {passing 17 to argument 3 of 'svshrnt', which expects a value in the range \[1, 16\]} } */
+
+ svshrnt (s16, s32, -1); /* { dg-error {passing -1 to argument 3 of 'svshrnt', which expects a value in the range \[1, 16\]} } */
+ svshrnt (s16, s32, 0); /* { dg-error {passing 0 to argument 3 of 'svshrnt', which expects a value in the range \[1, 16\]} } */
+ svshrnt (s16, s32, 1);
+ svshrnt (s16, s32, 16);
+ svshrnt (s16, s32, 17); /* { dg-error {passing 17 to argument 3 of 'svshrnt', which expects a value in the range \[1, 16\]} } */
+
+ svshrnt (u32, u64, -1); /* { dg-error {passing -1 to argument 3 of 'svshrnt', which expects a value in the range \[1, 32\]} } */
+ svshrnt (u32, u64, 0); /* { dg-error {passing 0 to argument 3 of 'svshrnt', which expects a value in the range \[1, 32\]} } */
+ svshrnt (u32, u64, 1);
+ svshrnt (u32, u64, 32);
+ svshrnt (u32, u64, 33); /* { dg-error {passing 33 to argument 3 of 'svshrnt', which expects a value in the range \[1, 32\]} } */
+
+ svshrnt (s32, s64, -1); /* { dg-error {passing -1 to argument 3 of 'svshrnt', which expects a value in the range \[1, 32\]} } */
+ svshrnt (s32, s64, 0); /* { dg-error {passing 0 to argument 3 of 'svshrnt', which expects a value in the range \[1, 32\]} } */
+ svshrnt (s32, s64, 1);
+ svshrnt (s32, s64, 32);
+ svshrnt (s32, s64, 33); /* { dg-error {passing 33 to argument 3 of 'svshrnt', which expects a value in the range \[1, 32\]} } */
+
+ svshrnt (f32, f32, 1); /* { dg-error {'svshrnt' has no form that takes 'svfloat32_t' arguments} } */
+
+ svshrnt (1, s32, 1); /* { dg-error {passing 'int' to argument 1 of 'svshrnt', which expects an SVE vector type} } */
+ svshrnt (s32, 1, 1); /* { dg-error {passing 'int' to argument 2 of 'svshrnt', which expects an SVE vector type} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat32_t f32, int x)
+{
+ const int one = 1;
+ svqshrunt (u8, s16); /* { dg-error {too few arguments to function 'svqshrunt'} } */
+ svqshrunt (u8, s16, s16, 1); /* { dg-error {too many arguments to function 'svqshrunt'} } */
+
+ svqshrunt (u16, s16, 1); /* { dg-error {passing 'svuint16_t' instead of the expected 'svuint8_t' to argument 1 of 'svqshrunt', after passing 'svint16_t' to argument 2} } */
+ svqshrunt (s16, s16, 1); /* { dg-error {passing 'svint16_t' to argument 1 of 'svqshrunt', which expects a vector of unsigned integers} } */
+ svqshrunt (s8, s16, 1); /* { dg-error {passing 'svint8_t' to argument 1 of 'svqshrunt', which expects a vector of unsigned integers} } */
+ svqshrunt (pg, s16, 1); /* { dg-error {passing 'svbool_t' to argument 1 of 'svqshrunt', which expects a vector of unsigned integers} } */
+
+ svqshrunt (u8, s16, x); /* { dg-error {argument 3 of 'svqshrunt' must be an integer constant expression} } */
+ svqshrunt (u8, s16, one); /* { dg-error {argument 3 of 'svqshrunt' must be an integer constant expression} } */
+ svqshrunt (u8, s16, 0.4); /* { dg-error {passing 0 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 8\]} } */
+ svqshrunt (u8, s16, 1.0);
+
+ svqshrunt (u8, pg, 1); /* { dg-error {'svqshrunt' has no form that takes 'svbool_t' arguments} } */
+
+ svqshrunt (u8, u8, -1); /* { dg-error {'svqshrunt' has no form that takes 'svuint8_t' arguments} } */
+ svqshrunt (u8, u8, 1); /* { dg-error {'svqshrunt' has no form that takes 'svuint8_t' arguments} } */
+ svqshrunt (u8, u8, 100); /* { dg-error {'svqshrunt' has no form that takes 'svuint8_t' arguments} } */
+
+ svqshrunt (u8, s8, 1); /* { dg-error {'svqshrunt' has no form that takes 'svint8_t' arguments} } */
+
+ svqshrunt (u8, u16, 1); /* { dg-error {'svqshrunt' has no form that takes 'svuint16_t' arguments} } */
+
+ svqshrunt (u8, s16, -1); /* { dg-error {passing -1 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 8\]} } */
+ svqshrunt (u8, s16, 0); /* { dg-error {passing 0 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 8\]} } */
+ svqshrunt (u8, s16, 1);
+ svqshrunt (u8, s16, 8);
+ svqshrunt (u8, s16, 9); /* { dg-error {passing 9 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 8\]} } */
+
+ svqshrunt (u16, u32, 1); /* { dg-error {'svqshrunt' has no form that takes 'svuint32_t' arguments} } */
+
+ svqshrunt (u16, s32, -1); /* { dg-error {passing -1 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 16\]} } */
+ svqshrunt (u16, s32, 0); /* { dg-error {passing 0 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 16\]} } */
+ svqshrunt (u16, s32, 1);
+ svqshrunt (u16, s32, 16);
+ svqshrunt (u16, s32, 17); /* { dg-error {passing 17 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 16\]} } */
+
+ svqshrunt (u32, u64, 1); /* { dg-error {'svqshrunt' has no form that takes 'svuint64_t' arguments} } */
+
+ svqshrunt (u32, s64, -1); /* { dg-error {passing -1 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 32\]} } */
+ svqshrunt (u32, s64, 0); /* { dg-error {passing 0 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 32\]} } */
+ svqshrunt (u32, s64, 1);
+ svqshrunt (u32, s64, 32);
+ svqshrunt (u32, s64, 33); /* { dg-error {passing 33 to argument 3 of 'svqshrunt', which expects a value in the range \[1, 32\]} } */
+
+ svqshrunt (u16, f32, 1); /* { dg-error {'svqshrunt' has no form that takes 'svfloat32_t' arguments} } */
+
+ svqshrunt (1, u32, 1); /* { dg-error {passing 'int' to argument 1 of 'svqshrunt', which expects an SVE vector type} } */
+ svqshrunt (u32, 1, 1); /* { dg-error {passing 'int' to argument 2 of 'svqshrunt', which expects an SVE vector type} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c99" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct s { signed char x; };
+
+svuint32_t
+f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr,
+ int32_t *s32_ptr, uint32_t *u32_ptr, float *f32_ptr,
+ int64_t *s64_ptr, uint64_t *u64_ptr, double *f64_ptr,
+ void *void_ptr, struct s *s_ptr, _Complex float *cf64_ptr,
+ svint8_t s8, svuint8_t u8, svint16_t s16, svuint16_t u16, svfloat16_t f16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64, struct s s)
+{
+ svstnt1_scatter_index (pg, s64_ptr, s64); /* { dg-error {too few arguments to function 'svstnt1_scatter_index'} } */
+ svstnt1_scatter_index (pg, s64_ptr, s64, s64, 0); /* { dg-error {too many arguments to function 'svstnt1_scatter_index'} } */
+ svstnt1_scatter_index (0, s64_ptr, s64, s64); /* { dg-error {passing 'int' to argument 1 of 'svstnt1_scatter_index', which expects 'svbool_t'} } */
+ svstnt1_scatter_index (pg, 0, s64, s64);
+ svstnt1_scatter_index (pg, (int64_t *) 0, s64, s64);
+ svstnt1_scatter_index (pg, void_ptr, s64, s64);
+ svstnt1_scatter_index (pg, s_ptr, s64, s64); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_s64index_s64' from incompatible pointer type" } */
+ svstnt1_scatter_index (pg, f32_ptr, s64, s64); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_s64index_s64' from incompatible pointer type" } */
+ svstnt1_scatter_index (pg, f64_ptr, s64, f64);
+ svstnt1_scatter_index (pg, cf64_ptr, s64, f64); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_s64index_f64' from incompatible pointer type" } */
+ svstnt1_scatter_index (pg, s, s64, s64); /* { dg-error {passing 'struct s' to argument 2 of 'svstnt1_scatter_index', which expects a vector or pointer base address} } */
+
+ svstnt1_scatter_index (pg, u32, void_ptr, s32); /* { dg-warning "passing argument 3 of 'svstnt1_scatter_u32base_index_s32' makes integer from pointer without a cast" } */
+ svstnt1_scatter_index (pg, u32, pg, s32); /* { dg-error {passing 'svbool_t' to argument 3 of 'svstnt1_scatter_index', which expects 'int64_t'} } */
+ svstnt1_scatter_index (pg, u32, s32, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_index', which expects 'int64_t'} } */
+
+ svstnt1_scatter_index (pg, void_ptr, u64, pg); /* { dg-error {passing 'svbool_t' to argument 4 of 'svstnt1_scatter_index', which expects a vector of 32-bit or 64-bit elements} } */
+
+ svstnt1_scatter_index (pg, s8_ptr, u64, s8); /* { dg-error {passing 'svint8_t' to argument 4 of 'svstnt1_scatter_index', which expects a vector of 32-bit or 64-bit elements} } */
+ svstnt1_scatter_index (pg, s8_ptr, u64, u8); /* { dg-error {passing 'svuint8_t' to argument 4 of 'svstnt1_scatter_index', which expects a vector of 32-bit or 64-bit elements} } */
+
+ svstnt1_scatter_index (pg, s16_ptr, u64, s16); /* { dg-error {passing 'svint16_t' to argument 4 of 'svstnt1_scatter_index', which expects a vector of 32-bit or 64-bit elements} } */
+ svstnt1_scatter_index (pg, s16_ptr, u64, u16); /* { dg-error {passing 'svuint16_t' to argument 4 of 'svstnt1_scatter_index', which expects a vector of 32-bit or 64-bit elements} } */
+ svstnt1_scatter_index (pg, s16_ptr, u64, f16); /* { dg-error {passing 'svfloat16_t' to argument 4 of 'svstnt1_scatter_index', which expects a vector of 32-bit or 64-bit elements} } */
+
+ svstnt1_scatter_index (pg, u32, 0, s32);
+ svstnt1_scatter_index (pg, s32, 0, s32); /* { dg-error {passing 'svint32_t' to argument 2 of 'svstnt1_scatter_index', which expects 'svuint32_t'} } */
+
+ svstnt1_scatter_index (pg, u32, 0, u32);
+ svstnt1_scatter_index (pg, s32, 0, u32); /* { dg-error {passing 'svint32_t' to argument 2 of 'svstnt1_scatter_index', which expects 'svuint32_t'} } */
+
+ svstnt1_scatter_index (pg, u32, 0, f32);
+ svstnt1_scatter_index (pg, s32, 0, f32); /* { dg-error {passing 'svint32_t' to argument 2 of 'svstnt1_scatter_index', which expects 'svuint32_t'} } */
+
+ svstnt1_scatter_index (pg, u64, 0, s64);
+ svstnt1_scatter_index (pg, s64, 0, s64); /* { dg-error {passing 'svint64_t' to argument 2 of 'svstnt1_scatter_index', which expects 'svuint64_t'} } */
+
+ svstnt1_scatter_index (pg, u64, 0, u64);
+ svstnt1_scatter_index (pg, s64, 0, u64); /* { dg-error {passing 'svint64_t' to argument 2 of 'svstnt1_scatter_index', which expects 'svuint64_t'} } */
+
+ svstnt1_scatter_index (pg, u64, 0, f64);
+ svstnt1_scatter_index (pg, s64, 0, f64); /* { dg-error {passing 'svint64_t' to argument 2 of 'svstnt1_scatter_index', which expects 'svuint64_t'} } */
+
+ svstnt1_scatter_index (pg, s32_ptr, s32, s32); /* { dg-error {when storing 'svint32_t', 'svstnt1_scatter_index' requires a vector base and a scalar index} } */
+ svstnt1_scatter_index (pg, s32_ptr, u32, s32); /* { dg-error {when storing 'svint32_t', 'svstnt1_scatter_index' requires a vector base and a scalar index} } */
+ svstnt1_scatter_index (pg, s32_ptr, f32, s32); /* { dg-error {when storing 'svint32_t', 'svstnt1_scatter_index' requires a vector base and a scalar index} } */
+
+ svstnt1_scatter_index (pg, u32_ptr, s32, u32); /* { dg-error {when storing 'svuint32_t', 'svstnt1_scatter_index' requires a vector base and a scalar index} } */
+ svstnt1_scatter_index (pg, u32_ptr, u32, u32); /* { dg-error {when storing 'svuint32_t', 'svstnt1_scatter_index' requires a vector base and a scalar index} } */
+ svstnt1_scatter_index (pg, u32_ptr, f32, u32); /* { dg-error {when storing 'svuint32_t', 'svstnt1_scatter_index' requires a vector base and a scalar index} } */
+
+ svstnt1_scatter_index (pg, f32_ptr, s32, f32); /* { dg-error {when storing 'svfloat32_t', 'svstnt1_scatter_index' requires a vector base and a scalar index} } */
+ svstnt1_scatter_index (pg, f32_ptr, u32, f32); /* { dg-error {when storing 'svfloat32_t', 'svstnt1_scatter_index' requires a vector base and a scalar index} } */
+ svstnt1_scatter_index (pg, f32_ptr, f32, f32); /* { dg-error {when storing 'svfloat32_t', 'svstnt1_scatter_index' requires a vector base and a scalar index} } */
+
+ svstnt1_scatter_index (pg, s64_ptr, s32, s64); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_index (pg, s64_ptr, u32, s64); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_index (pg, s64_ptr, f32, s64); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_index (pg, s64_ptr, s64, s64);
+ svstnt1_scatter_index (pg, s64_ptr, u64, s64);
+ svstnt1_scatter_index (pg, s64_ptr, f64, s64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svint64_t' expects a vector of 64-bit integers} } */
+
+ svstnt1_scatter_index (pg, u64_ptr, s32, u64); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svuint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_index (pg, u64_ptr, u32, u64); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svuint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_index (pg, u64_ptr, f32, u64); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svuint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_index (pg, u64_ptr, s64, u64);
+ svstnt1_scatter_index (pg, u64_ptr, u64, u64);
+ svstnt1_scatter_index (pg, u64_ptr, f64, u64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svuint64_t' expects a vector of 64-bit integers} } */
+
+ svstnt1_scatter_index (pg, f64_ptr, s32, f64); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_index (pg, f64_ptr, u32, f64); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_index (pg, f64_ptr, f32, f64); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_index (pg, f64_ptr, s64, f64);
+ svstnt1_scatter_index (pg, f64_ptr, u64, f64);
+ svstnt1_scatter_index (pg, f64_ptr, f64, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svstnt1_scatter_index', which when storing 'svfloat64_t' expects a vector of 64-bit integers} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-std=c99" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+struct s { signed char x; };
+
+svuint32_t
+f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr,
+ int32_t *s32_ptr, uint32_t *u32_ptr, float *f32_ptr,
+ int64_t *s64_ptr, uint64_t *u64_ptr, double *f64_ptr,
+ void *void_ptr, struct s *s_ptr, _Complex float *cf32_ptr,
+ svint8_t s8, svuint8_t u8, svint16_t s16, svuint16_t u16, svfloat16_t f16,
+ svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64, struct s s)
+{
+ svstnt1_scatter_offset (pg, s32_ptr, u32); /* { dg-error {too few arguments to function 'svstnt1_scatter_offset'} } */
+ svstnt1_scatter_offset (pg, s32_ptr, u32, s32, 0); /* { dg-error {too many arguments to function 'svstnt1_scatter_offset'} } */
+ svstnt1_scatter_offset (0, s32_ptr, u32, s32); /* { dg-error {passing 'int' to argument 1 of 'svstnt1_scatter_offset', which expects 'svbool_t'} } */
+ svstnt1_scatter_offset (pg, 0, u32, s32);
+ svstnt1_scatter_offset (pg, (int *) 0, u32, s32);
+ svstnt1_scatter_offset (pg, void_ptr, u32, s32);
+ svstnt1_scatter_offset (pg, s_ptr, u32, s32); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_u32offset_s32' from incompatible pointer type" } */
+ svstnt1_scatter_offset (pg, f32_ptr, u32, s32); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_u32offset_s32' from incompatible pointer type" } */
+ svstnt1_scatter_offset (pg, f32_ptr, u32, f32);
+ svstnt1_scatter_offset (pg, cf32_ptr, u32, f32); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_u32offset_f32' from incompatible pointer type" } */
+ svstnt1_scatter_offset (pg, s, u32, s32); /* { dg-error {passing 'struct s' to argument 2 of 'svstnt1_scatter_offset', which expects a vector or pointer base address} } */
+
+ svstnt1_scatter_offset (pg, u32, void_ptr, s32); /* { dg-warning "passing argument 3 of 'svstnt1_scatter_u32base_offset_s32' makes integer from pointer without a cast" } */
+ svstnt1_scatter_offset (pg, u32, pg, s32); /* { dg-error {passing 'svbool_t' to argument 3 of 'svstnt1_scatter_offset', which expects 'int64_t'} } */
+ svstnt1_scatter_offset (pg, u32, s32, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_offset', which expects 'int64_t'} } */
+
+ svstnt1_scatter_offset (pg, void_ptr, u32, pg); /* { dg-error {passing 'svbool_t' to argument 4 of 'svstnt1_scatter_offset', which expects a vector of 32-bit or 64-bit elements} } */
+
+ svstnt1_scatter_offset (pg, s8_ptr, u32, s8); /* { dg-error {passing 'svint8_t' to argument 4 of 'svstnt1_scatter_offset', which expects a vector of 32-bit or 64-bit elements} } */
+ svstnt1_scatter_offset (pg, s8_ptr, u32, u8); /* { dg-error {passing 'svuint8_t' to argument 4 of 'svstnt1_scatter_offset', which expects a vector of 32-bit or 64-bit elements} } */
+
+ svstnt1_scatter_offset (pg, s16_ptr, u32, s16); /* { dg-error {passing 'svint16_t' to argument 4 of 'svstnt1_scatter_offset', which expects a vector of 32-bit or 64-bit elements} } */
+ svstnt1_scatter_offset (pg, s16_ptr, u32, u16); /* { dg-error {passing 'svuint16_t' to argument 4 of 'svstnt1_scatter_offset', which expects a vector of 32-bit or 64-bit elements} } */
+ svstnt1_scatter_offset (pg, s16_ptr, u32, f16); /* { dg-error {passing 'svfloat16_t' to argument 4 of 'svstnt1_scatter_offset', which expects a vector of 32-bit or 64-bit elements} } */
+
+ svstnt1_scatter_offset (pg, u32, 0, s32);
+ svstnt1_scatter_offset (pg, s32, 0, s32); /* { dg-error {passing 'svint32_t' to argument 2 of 'svstnt1_scatter_offset', which expects 'svuint32_t'} } */
+
+ svstnt1_scatter_offset (pg, u32, 0, u32);
+ svstnt1_scatter_offset (pg, s32, 0, u32); /* { dg-error {passing 'svint32_t' to argument 2 of 'svstnt1_scatter_offset', which expects 'svuint32_t'} } */
+
+ svstnt1_scatter_offset (pg, u32, 0, f32);
+ svstnt1_scatter_offset (pg, s32, 0, f32); /* { dg-error {passing 'svint32_t' to argument 2 of 'svstnt1_scatter_offset', which expects 'svuint32_t'} } */
+
+ svstnt1_scatter_offset (pg, u64, 0, s64);
+ svstnt1_scatter_offset (pg, s64, 0, s64); /* { dg-error {passing 'svint64_t' to argument 2 of 'svstnt1_scatter_offset', which expects 'svuint64_t'} } */
+
+ svstnt1_scatter_offset (pg, u64, 0, u64);
+ svstnt1_scatter_offset (pg, s64, 0, u64); /* { dg-error {passing 'svint64_t' to argument 2 of 'svstnt1_scatter_offset', which expects 'svuint64_t'} } */
+
+ svstnt1_scatter_offset (pg, u64, 0, f64);
+ svstnt1_scatter_offset (pg, s64, 0, f64); /* { dg-error {passing 'svint64_t' to argument 2 of 'svstnt1_scatter_offset', which expects 'svuint64_t'} } */
+
+ svstnt1_scatter_offset (pg, s32_ptr, s32, s32); /* { dg-error {'svstnt1_scatter_offset' does not support 32-bit sign-extended offsets} } */
+ svstnt1_scatter_offset (pg, s32_ptr, u32, s32);
+ svstnt1_scatter_offset (pg, s32_ptr, f32, s32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svint32_t' expects a vector of 32-bit integers} } */
+ svstnt1_scatter_offset (pg, s32_ptr, s64, s32); /* { dg-error {passing 'svint64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svint32_t' expects a vector of 32-bit integers} } */
+ svstnt1_scatter_offset (pg, s32_ptr, u64, s32); /* { dg-error {passing 'svuint64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svint32_t' expects a vector of 32-bit integers} } */
+ svstnt1_scatter_offset (pg, s32_ptr, f64, s32); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svint32_t' expects a vector of 32-bit integers} } */
+
+ svstnt1_scatter_offset (pg, u32_ptr, s32, u32); /* { dg-error {'svstnt1_scatter_offset' does not support 32-bit sign-extended offsets} } */
+ svstnt1_scatter_offset (pg, u32_ptr, u32, u32);
+ svstnt1_scatter_offset (pg, u32_ptr, f32, u32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svuint32_t' expects a vector of 32-bit integers} } */
+ svstnt1_scatter_offset (pg, u32_ptr, s64, u32); /* { dg-error {passing 'svint64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svuint32_t' expects a vector of 32-bit integers} } */
+ svstnt1_scatter_offset (pg, u32_ptr, u64, u32); /* { dg-error {passing 'svuint64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svuint32_t' expects a vector of 32-bit integers} } */
+ svstnt1_scatter_offset (pg, u32_ptr, f64, u32); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svuint32_t' expects a vector of 32-bit integers} } */
+
+ svstnt1_scatter_offset (pg, f32_ptr, s32, f32); /* { dg-error {'svstnt1_scatter_offset' does not support 32-bit sign-extended offsets} } */
+ svstnt1_scatter_offset (pg, f32_ptr, u32, f32);
+ svstnt1_scatter_offset (pg, f32_ptr, f32, f32); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svfloat32_t' expects a vector of 32-bit integers} } */
+ svstnt1_scatter_offset (pg, f32_ptr, s64, f32); /* { dg-error {passing 'svint64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svfloat32_t' expects a vector of 32-bit integers} } */
+ svstnt1_scatter_offset (pg, f32_ptr, u64, f32); /* { dg-error {passing 'svuint64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svfloat32_t' expects a vector of 32-bit integers} } */
+ svstnt1_scatter_offset (pg, f32_ptr, f64, f32); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svfloat32_t' expects a vector of 32-bit integers} } */
+
+ svstnt1_scatter_offset (pg, s64_ptr, s32, s64); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_offset (pg, s64_ptr, u32, s64); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_offset (pg, s64_ptr, f32, s64); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_offset (pg, s64_ptr, s64, s64);
+ svstnt1_scatter_offset (pg, s64_ptr, u64, s64);
+ svstnt1_scatter_offset (pg, s64_ptr, f64, s64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svint64_t' expects a vector of 64-bit integers} } */
+
+ svstnt1_scatter_offset (pg, u64_ptr, s32, u64); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svuint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_offset (pg, u64_ptr, u32, u64); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svuint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_offset (pg, u64_ptr, f32, u64); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svuint64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_offset (pg, u64_ptr, s64, u64);
+ svstnt1_scatter_offset (pg, u64_ptr, u64, u64);
+ svstnt1_scatter_offset (pg, u64_ptr, f64, u64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svuint64_t' expects a vector of 64-bit integers} } */
+
+ svstnt1_scatter_offset (pg, f64_ptr, s32, f64); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_offset (pg, f64_ptr, u32, f64); /* { dg-error {passing 'svuint32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_offset (pg, f64_ptr, f32, f64); /* { dg-error {passing 'svfloat32_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svfloat64_t' expects a vector of 64-bit integers} } */
+ svstnt1_scatter_offset (pg, f64_ptr, s64, f64);
+ svstnt1_scatter_offset (pg, f64_ptr, u64, f64);
+ svstnt1_scatter_offset (pg, f64_ptr, f64, f64); /* { dg-error {passing 'svfloat64_t' to argument 3 of 'svstnt1_scatter_offset', which when storing 'svfloat64_t' expects a vector of 64-bit integers} } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-std=c99 -Wall -Wextra" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+svfloat64_t
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint8x2_t s8x2, svuint8x2_t u8x2, svuint8x3_t u8x3)
+{
+ svfloat64_t f64;
+
+ u8 = svtbl2 (u8x2); /* { dg-error {too few arguments to function 'svtbl2'} } */
+ u8 = svtbl2 (u8x2); /* { dg-error {too few arguments to function 'svtbl2'} } */
+ u8 = svtbl2 (u8x2, u8, 3); /* { dg-error {too many arguments to function 'svtbl2'} } */
+ u8 = svtbl2 (u8, u8); /* { dg-error {passing single vector 'svuint8_t' to argument 1 of 'svtbl2', which expects a tuple of 2 vectors} } */
+ u8 = svtbl2 (u8x3, u8); /* { dg-error {passing 'svuint8x3_t' to argument 1 of 'svtbl2', which expects a tuple of 2 vectors} } */
+ u8 = svtbl2 (pg, u8); /* { dg-error {passing 'svbool_t' to argument 1 of 'svtbl2', which expects a tuple of 2 vectors} } */
+ u8 = svtbl2 (u8x2, u8x2); /* { dg-error {passing 'svuint8x2_t' to argument 2 of 'svtbl2', which expects a single SVE vector rather than a tuple} } */
+ u8 = svtbl2 (u8x2, f64); /* { dg-error {passing 'svfloat64_t' to argument 2 of 'svtbl2', which expects a vector of unsigned integers} } */
+ u8 = svtbl2 (u8x2, pg); /* { dg-error {passing 'svbool_t' to argument 2 of 'svtbl2', which expects a vector of unsigned integers} } */
+ u8 = svtbl2 (u8x2, u8);
+ u8 = svtbl2 (u8x2, s8); /* { dg-error {passing 'svint8_t' to argument 2 of 'svtbl2', which expects a vector of unsigned integers} } */
+ s8 = svtbl2 (s8x2, f64); /* { dg-error {passing 'svfloat64_t' to argument 2 of 'svtbl2', which expects a vector of unsigned integers} } */
+ s8 = svtbl2 (s8x2, pg); /* { dg-error {passing 'svbool_t' to argument 2 of 'svtbl2', which expects a vector of unsigned integers} } */
+ s8 = svtbl2 (s8x2, u8);
+ s8 = svtbl2 (s8x2, s8); /* { dg-error {passing 'svint8_t' to argument 2 of 'svtbl2', which expects a vector of unsigned integers} } */
+
+ return f64;
+}
svmla_lane (f32, f32, f32); /* { dg-error {too few arguments to function 'svmla_lane'} } */
svmla_lane (f32, f32, f32, 0, 0); /* { dg-error {too many arguments to function 'svmla_lane'} } */
svmla_lane (pg, pg, pg, 0); /* { dg-error {'svmla_lane' has no form that takes 'svbool_t' arguments} } */
- svmla_lane (s32, s32, s32, 0); /* { dg-error {'svmla_lane' has no form that takes 'svint32_t' arguments} } */
+ svmla_lane (s32, s32, s32, 0); /* { dg-error {ACLE function 'svmla_lane_s32' requires ISA extension 'sve2'} "" { xfail aarch64_sve2 } } */
svmla_lane (1, f32, f32, 0); /* { dg-error {passing 'int' to argument 1 of 'svmla_lane', which expects an SVE vector type} } */
svmla_lane (f32, 1, f32, 0); /* { dg-error {passing 'int' to argument 2 of 'svmla_lane', which expects an SVE vector type} } */
svmla_lane (f32, f32, 1, 0); /* { dg-error {passing 'int' to argument 3 of 'svmla_lane', which expects an SVE vector type} } */
svcmla_lane (f32, f32, f32, 0); /* { dg-error {too few arguments to function 'svcmla_lane'} } */
svcmla_lane (f32, f32, f32, 0, 90, 90); /* { dg-error {too many arguments to function 'svcmla_lane'} } */
svcmla_lane (pg, pg, pg, 0, 90); /* { dg-error {'svcmla_lane' has no form that takes 'svbool_t' arguments} } */
- svcmla_lane (s32, s32, s32, 0, 90); /* { dg-error {'svcmla_lane' has no form that takes 'svint32_t' arguments} } */
+ svcmla_lane (s32, s32, s32, 0, 90); /* { dg-error {ACLE function 'svcmla_lane_s32' requires ISA extension 'sve2'} "" { xfail aarch64_sve2 } } */
svcmla_lane (f64, f64, f64, 0, 90); /* { dg-error {'svcmla_lane' has no form that takes 'svfloat64_t' arguments} } */
svcmla_lane (1, f32, f32, 0, 90); /* { dg-error {passing 'int' to argument 1 of 'svcmla_lane', which expects an SVE vector type} } */
svcmla_lane (f32, 1, f32, 0, 90); /* { dg-error {passing 'int' to argument 2 of 'svcmla_lane', which expects an SVE vector type} } */
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8, svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32, svint64_t s64, svuint64_t u64,
+ svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, int i)
+{
+ svmlalb_lane (u64, u32, u32); /* { dg-error {too few arguments to function 'svmlalb_lane'} } */
+ svmlalb_lane (u64, u32, u32, 0, 0); /* { dg-error {too many arguments to function 'svmlalb_lane'} } */
+ svmlalb_lane (0, u16, u16, 0); /* { dg-error {passing 'int' to argument 1 of 'svmlalb_lane', which expects an SVE vector type} } */
+ svmlalb_lane (pg, u16, u16, 0); /* { dg-error {'svmlalb_lane' has no form that takes 'svbool_t' arguments} } */
+ svmlalb_lane (u8, u8, u8, 0); /* { dg-error {'svmlalb_lane' has no form that takes 'svuint8_t' arguments} } */
+ svmlalb_lane (u16, u8, u8, 0); /* { dg-error {'svmlalb_lane' has no form that takes 'svuint16_t' arguments} } */
+ svmlalb_lane (f16, u16, u16, 0); /* { dg-error {'svmlalb_lane' has no form that takes 'svfloat16_t' arguments} } */
+ svmlalb_lane (f32, f16, f16, 0);
+ svmlalb_lane (u32, u16, u16, 0);
+ svmlalb_lane (u32, 0, u16, 0); /* { dg-error {passing 'int' to argument 2 of 'svmlalb_lane', which expects an SVE vector type} } */
+ svmlalb_lane (u32, s16, u16, 0); /* { dg-error {arguments 1 and 2 of 'svmlalb_lane' must have the same signedness, but the values passed here have type 'svuint32_t' and 'svint16_t' respectively} } */
+ svmlalb_lane (u32, u16, 0, 0); /* { dg-error {passing 'int' to argument 3 of 'svmlalb_lane', which expects an SVE vector type} } */
+ svmlalb_lane (u32, u16, s16, 0); /* { dg-error {arguments 1 and 3 of 'svmlalb_lane' must have the same signedness, but the values passed here have type 'svuint32_t' and 'svint16_t' respectively} } */
+ svmlalb_lane (u32, u32, u32, 0); /* { dg-error {passing 'svuint32_t' instead of the expected 'svuint16_t' to argument 2 of 'svmlalb_lane', after passing 'svuint32_t' to argument 1} } */
+ svmlalb_lane (u32, u8, u16, 0); /* { dg-error {passing 'svuint8_t' instead of the expected 'svuint16_t' to argument 2 of 'svmlalb_lane', after passing 'svuint32_t' to argument 1} } */
+ svmlalb_lane (u32, u16, u8, 0); /* { dg-error {passing 'svuint8_t' instead of the expected 'svuint16_t' to argument 3 of 'svmlalb_lane', after passing 'svuint32_t' to argument 1} } */
+ svmlalb_lane (u64, u32, u32, s32); /* { dg-error {argument 4 of 'svmlalb_lane' must be an integer constant expression} } */
+ svmlalb_lane (u64, u32, u32, i); /* { dg-error {argument 4 of 'svmlalb_lane' must be an integer constant expression} } */
+
+ svmlalb_lane (s32, s16, s16, 0);
+ svmlalb_lane (s32, s16, s16, 7);
+ svmlalb_lane (s32, s16, s16, 8); /* { dg-error {passing 8 to argument 4 of 'svmlalb_lane', which expects a value in the range \[0, 7\]} } */
+ svmlalb_lane (s32, s16, s16, -1); /* { dg-error {passing -1 to argument 4 of 'svmlalb_lane', which expects a value in the range \[0, 7\]} } */
+
+ svmlalb_lane (u32, u16, u16, 0);
+ svmlalb_lane (u32, u16, u16, 7);
+ svmlalb_lane (u32, u16, u16, 8); /* { dg-error {passing 8 to argument 4 of 'svmlalb_lane', which expects a value in the range \[0, 7\]} } */
+ svmlalb_lane (u32, u16, u16, -1); /* { dg-error {passing -1 to argument 4 of 'svmlalb_lane', which expects a value in the range \[0, 7\]} } */
+
+ svmlalb_lane (s64, s32, s32, 0);
+ svmlalb_lane (s64, s32, s32, 3);
+ svmlalb_lane (s64, s32, s32, 4); /* { dg-error {passing 4 to argument 4 of 'svmlalb_lane', which expects a value in the range \[0, 3\]} } */
+ svmlalb_lane (s64, s32, s32, -1); /* { dg-error {passing -1 to argument 4 of 'svmlalb_lane', which expects a value in the range \[0, 3\]} } */
+
+ svmlalb_lane (u64, u32, u32, 0);
+ svmlalb_lane (u64, u32, u32, 3);
+ svmlalb_lane (u64, u32, u32, 4); /* { dg-error {passing 4 to argument 4 of 'svmlalb_lane', which expects a value in the range \[0, 3\]} } */
+ svmlalb_lane (u64, u32, u32, -1); /* { dg-error {passing -1 to argument 4 of 'svmlalb_lane', which expects a value in the range \[0, 3\]} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8, svuint16_t u16, svuint32_t u32,
+ svfloat16_t f16, svfloat32_t f32)
+{
+ svabalb (u16, u8); /* { dg-error {too few arguments to function 'svabalb'} } */
+ svabalb (u16, u8, u8, u8); /* { dg-error {too many arguments to function 'svabalb'} } */
+ svabalb (0, u8, u8); /* { dg-error {passing 'int' to argument 1 of 'svabalb', which expects an SVE vector type} } */
+ svabalb (pg, u8, u8); /* { dg-error {'svabalb' has no form that takes 'svbool_t' arguments} } */
+ svabalb (u8, u8, u8); /* { dg-error {'svabalb' has no form that takes 'svuint8_t' arguments} } */
+ svabalb (f16, u8, u8); /* { dg-error {'svabalb' has no form that takes 'svfloat16_t' arguments} } */
+ svabalb (f32, f16, f16); /* { dg-error {'svabalb' has no form that takes 'svfloat32_t' arguments} } */
+ svabalb (u16, u8, u8);
+ svabalb (u16, 0, u8); /* { dg-error {passing 'int' to argument 2 of 'svabalb', which expects an SVE vector type} } */
+ svabalb (u16, s8, u8); /* { dg-error {arguments 1 and 2 of 'svabalb' must have the same signedness, but the values passed here have type 'svuint16_t' and 'svint8_t' respectively} } */
+ svabalb (u16, u8, 0);
+ svabalb (u16, u8, s8); /* { dg-error {arguments 1 and 3 of 'svabalb' must have the same signedness, but the values passed here have type 'svuint16_t' and 'svint8_t' respectively} } */
+ svabalb (u16, u16, u16); /* { dg-error {passing 'svuint16_t' instead of the expected 'svuint8_t' to argument 2 of 'svabalb', after passing 'svuint16_t' to argument 1} } */
+ svabalb (u32, u8, u16); /* { dg-error {passing 'svuint8_t' instead of the expected 'svuint16_t' to argument 2 of 'svabalb', after passing 'svuint32_t' to argument 1} } */
+ svabalb (u32, u16, u8); /* { dg-error {passing 'svuint8_t' instead of the expected 'svuint16_t' to argument 3 of 'svabalb', after passing 'svuint32_t' to argument 1} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8, svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32, svint64_t s64, svuint64_t u64,
+ svfloat32_t f32, int i)
+{
+ svcdot_lane (u32, u8, u8, 0); /* { dg-error {too few arguments to function 'svcdot_lane'} } */
+ svcdot_lane (u32, u8, u8, 0, 0, 0); /* { dg-error {too many arguments to function 'svcdot_lane'} } */
+ svcdot_lane (0, u8, u8, 0, 0); /* { dg-error {passing 'int' to argument 1 of 'svcdot_lane', which expects an SVE vector type} } */
+ svcdot_lane (pg, u8, u8, 0, 0); /* { dg-error {'svcdot_lane' has no form that takes 'svbool_t' arguments} } */
+ svcdot_lane (s8, s8, s8, 0, 0); /* { dg-error {'svcdot_lane' has no form that takes 'svint8_t' arguments} } */
+ svcdot_lane (f32, s8, s8, 0, 0); /* { dg-error {'svcdot_lane' has no form that takes 'svfloat32_t' arguments} } */
+ svcdot_lane (s32, s8, s8, 0, 0);
+ svcdot_lane (s32, 0, s8, 0, 0); /* { dg-error {passing 'int' to argument 2 of 'svcdot_lane', which expects an SVE vector type} } */
+ svcdot_lane (s32, s8, 0, 0, 0); /* { dg-error {passing 'int' to argument 3 of 'svcdot_lane', which expects an SVE vector type} } */
+
+ svcdot_lane (s32, s8, s8, 0, 0);
+ svcdot_lane (s32, u8, s8, 0, 0); /* { dg-error {arguments 1 and 2 of 'svcdot_lane' must have the same signedness, but the values passed here have type 'svint32_t' and 'svuint8_t' respectively} } */
+ svcdot_lane (s32, s8, u8, 0, 0); /* { dg-error {arguments 1 and 3 of 'svcdot_lane' must have the same signedness, but the values passed here have type 'svint32_t' and 'svuint8_t' respectively} } */
+ svcdot_lane (s32, s32, s8, 0, 0); /* { dg-error {passing 'svint32_t' instead of the expected 'svint8_t' to argument 2 of 'svcdot_lane', after passing 'svint32_t' to argument 1} } */
+ svcdot_lane (s32, s8, s32, 0, 0); /* { dg-error {passing 'svint32_t' instead of the expected 'svint8_t' to argument 3 of 'svcdot_lane', after passing 'svint32_t' to argument 1} } */
+
+ svcdot_lane (u32, u8, u8, 0, 0); /* { dg-error {'svcdot_lane' has no form that takes 'svuint32_t' arguments} } */
+
+ svcdot_lane (s64, s16, s16, 0, 0);
+ svcdot_lane (s64, u16, s16, 0, 0); /* { dg-error {arguments 1 and 2 of 'svcdot_lane' must have the same signedness, but the values passed here have type 'svint64_t' and 'svuint16_t' respectively} } */
+ svcdot_lane (s64, s16, u16, 0, 0); /* { dg-error {arguments 1 and 3 of 'svcdot_lane' must have the same signedness, but the values passed here have type 'svint64_t' and 'svuint16_t' respectively} } */
+ svcdot_lane (s64, s64, s16, 0, 0); /* { dg-error {passing 'svint64_t' instead of the expected 'svint16_t' to argument 2 of 'svcdot_lane', after passing 'svint64_t' to argument 1} } */
+ svcdot_lane (s64, s16, s64, 0, 0); /* { dg-error {passing 'svint64_t' instead of the expected 'svint16_t' to argument 3 of 'svcdot_lane', after passing 'svint64_t' to argument 1} } */
+
+ svcdot_lane (u64, u16, u16, 0, 0); /* { dg-error {'svcdot_lane' has no form that takes 'svuint64_t' arguments} } */
+
+ svcdot_lane (s32, s8, s8, i, 0); /* { dg-error {argument 4 of 'svcdot_lane' must be an integer constant expression} } */
+ svcdot_lane (s32, s8, s8, -1, 0); /* { dg-error {passing -1 to argument 4 of 'svcdot_lane', which expects a value in the range \[0, 3\]} } */
+ svcdot_lane (s32, s8, s8, 0, 0);
+ svcdot_lane (s32, s8, s8, 3, 0);
+ svcdot_lane (s32, s8, s8, 4, 0); /* { dg-error {passing 4 to argument 4 of 'svcdot_lane', which expects a value in the range \[0, 3\]} } */
+
+ svcdot_lane (s64, s16, s16, i, 0); /* { dg-error {argument 4 of 'svcdot_lane' must be an integer constant expression} } */
+ svcdot_lane (s64, s16, s16, -1, 0); /* { dg-error {passing -1 to argument 4 of 'svcdot_lane', which expects a value in the range \[0, 1\]} } */
+ svcdot_lane (s64, s16, s16, 0, 0);
+ svcdot_lane (s64, s16, s16, 1, 0);
+ svcdot_lane (s64, s16, s16, 2, 0); /* { dg-error {passing 2 to argument 4 of 'svcdot_lane', which expects a value in the range \[0, 1\]} } */
+
+ svcdot_lane (s32, s8, s8, 0, i); /* { dg-error {argument 5 of 'svcdot_lane' must be an integer constant expression} } */
+ svcdot_lane (s32, s8, s8, 0, -90); /* { dg-error {passing -90 to argument 5 of 'svcdot_lane', which expects 0, 90, 180 or 270} } */
+ svcdot_lane (s32, s8, s8, 0, 0);
+ svcdot_lane (s32, s8, s8, 0, 3); /* { dg-error {passing 3 to argument 5 of 'svcdot_lane', which expects 0, 90, 180 or 270} } */
+ svcdot_lane (s32, s8, s8, 0, 90);
+ svcdot_lane (s32, s8, s8, 0, 180);
+ svcdot_lane (s32, s8, s8, 0, 270);
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8, svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32, svint64_t s64, svuint64_t u64,
+ svfloat32_t f32, int i)
+{
+ svcdot (u32, u8, u8); /* { dg-error {too few arguments to function 'svcdot'} } */
+ svcdot (u32, u8, u8, 0, 0); /* { dg-error {too many arguments to function 'svcdot'} } */
+ svcdot (0, u8, u8, 0); /* { dg-error {passing 'int' to argument 1 of 'svcdot', which expects an SVE vector type} } */
+ svcdot (pg, u8, u8, 0); /* { dg-error {'svcdot' has no form that takes 'svbool_t' arguments} } */
+ svcdot (s8, s8, s8, 0); /* { dg-error {'svcdot' has no form that takes 'svint8_t' arguments} } */
+ svcdot (f32, s8, s8, 0); /* { dg-error {'svcdot' has no form that takes 'svfloat32_t' arguments} } */
+ svcdot (s32, s8, s8, 0);
+ svcdot (s32, 0, s8, 0); /* { dg-error {passing 'int' to argument 2 of 'svcdot', which expects an SVE vector type} } */
+ svcdot (s32, s8, 0, 0); /* { dg-error {passing 'int' to argument 3 of 'svcdot', which expects an SVE vector type} } */
+
+ svcdot (s32, s8, s8, 0);
+ svcdot (s32, u8, s8, 0); /* { dg-error {arguments 1 and 2 of 'svcdot' must have the same signedness, but the values passed here have type 'svint32_t' and 'svuint8_t' respectively} } */
+ svcdot (s32, s8, u8, 0); /* { dg-error {arguments 1 and 3 of 'svcdot' must have the same signedness, but the values passed here have type 'svint32_t' and 'svuint8_t' respectively} } */
+ svcdot (s32, s32, s8, 0); /* { dg-error {passing 'svint32_t' instead of the expected 'svint8_t' to argument 2 of 'svcdot', after passing 'svint32_t' to argument 1} } */
+ svcdot (s32, s8, s32, 0); /* { dg-error {passing 'svint32_t' instead of the expected 'svint8_t' to argument 3 of 'svcdot', after passing 'svint32_t' to argument 1} } */
+
+ svcdot (u32, u8, u8, 0); /* { dg-error {'svcdot' has no form that takes 'svuint32_t' arguments} } */
+
+ svcdot (s64, s16, s16, 0);
+ svcdot (s64, u16, s16, 0); /* { dg-error {arguments 1 and 2 of 'svcdot' must have the same signedness, but the values passed here have type 'svint64_t' and 'svuint16_t' respectively} } */
+ svcdot (s64, s16, u16, 0); /* { dg-error {arguments 1 and 3 of 'svcdot' must have the same signedness, but the values passed here have type 'svint64_t' and 'svuint16_t' respectively} } */
+ svcdot (s64, s64, s16, 0); /* { dg-error {passing 'svint64_t' instead of the expected 'svint16_t' to argument 2 of 'svcdot', after passing 'svint64_t' to argument 1} } */
+ svcdot (s64, s16, s64, 0); /* { dg-error {passing 'svint64_t' instead of the expected 'svint16_t' to argument 3 of 'svcdot', after passing 'svint64_t' to argument 1} } */
+
+ svcdot (u64, u16, u16, 0); /* { dg-error {'svcdot' has no form that takes 'svuint64_t' arguments} } */
+
+ svcdot (s32, s8, s8, i); /* { dg-error {argument 4 of 'svcdot' must be an integer constant expression} } */
+ svcdot (s32, s8, s8, -90); /* { dg-error {passing -90 to argument 4 of 'svcdot', which expects 0, 90, 180 or 270} } */
+ svcdot (s32, s8, s8, 0);
+ svcdot (s32, s8, s8, 3); /* { dg-error {passing 3 to argument 4 of 'svcdot', which expects 0, 90, 180 or 270} } */
+ svcdot (s32, s8, s8, 90);
+ svcdot (s32, s8, s8, 180);
+ svcdot (s32, s8, s8, 270);
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-std=c99 -Wall -Wextra" } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svuint8_t u8, svint8_t s8, svint16_t s16,
+ svint32_t s32, svint64_t s64, int x)
+{
+ const int one = 1;
+ pg = svsra (pg, pg, 1); /* { dg-error {'svsra' has no form that takes 'svbool_t' arguments} } */
+ pg = svsra (pg, s8, 1); /* { dg-error {passing 'svint8_t' to argument 2 of 'svsra', but previous arguments had type 'svbool_t'} } */
+ s8 = svsra (1, s8, 1); /* { dg-error {passing 'int' to argument 1 of 'svsra', which expects an SVE vector type} } */
+ s8 = svsra (s8, u8, 1); /* { dg-error {passing 'svuint8_t' to argument 2 of 'svsra', but previous arguments had type 'svint8_t'} } */
+ s8 = svsra (s8, pg, 1); /* { dg-error {passing 'svbool_t' to argument 2 of 'svsra', but previous arguments had type 'svint8_t'} } */
+ s8 = svsra (s8, 1, 1); /* { dg-error {passing 'int' to argument 2 of 'svsra', which expects an SVE vector type} } */
+ s8 = svsra (s8, s8, x); /* { dg-error {argument 3 of 'svsra' must be an integer constant expression} } */
+ s8 = svsra (s8, s8, one); /* { dg-error {argument 3 of 'svsra' must be an integer constant expression} } */
+ s8 = svsra (s8, s8, 0.4); /* { dg-error {passing 0 to argument 3 of 'svsra', which expects a value in the range \[1, 8\]} } */
+ s8 = svsra (s8, s8, 1.0);
+ s8 = svsra (s8, s8, 0); /* { dg-error {passing 0 to argument 3 of 'svsra', which expects a value in the range \[1, 8\]} } */
+ s8 = svsra (s8, s8, 1);
+ s8 = svsra (s8, s8, 1 + 1);
+ s8 = svsra (s8, s8, 8);
+ s8 = svsra (s8, s8, 9); /* { dg-error {passing 9 to argument 3 of 'svsra', which expects a value in the range \[1, 8\]} } */
+ s8 = svsra (s8, s8, (1ULL << 62) + 1); /* { dg-error {passing [^ ]* to argument 3 of 'svsra', which expects a value in the range \[1, 8\]} } */
+ s16 = svsra (s16, s16, 0); /* { dg-error {passing 0 to argument 3 of 'svsra', which expects a value in the range \[1, 16\]} } */
+ s16 = svsra (s16, s16, 1);
+ s16 = svsra (s16, s16, 16);
+ s16 = svsra (s16, s16, 17); /* { dg-error {passing 17 to argument 3 of 'svsra', which expects a value in the range \[1, 16\]} } */
+ s32 = svsra (s32, s32, 0); /* { dg-error {passing 0 to argument 3 of 'svsra', which expects a value in the range \[1, 32\]} } */
+ s32 = svsra (s32, s32, 1);
+ s32 = svsra (s32, s32, 32);
+ s32 = svsra (s32, s32, 33); /* { dg-error {passing 33 to argument 3 of 'svsra', which expects a value in the range \[1, 32\]} } */
+ s64 = svsra (s64, s64, 0); /* { dg-error {passing 0 to argument 3 of 'svsra', which expects a value in the range \[1, 64\]} } */
+ s64 = svsra (s64, s64, 1);
+ s64 = svsra (s64, s64, 64);
+ s64 = svsra (s64, s64, 65); /* { dg-error {passing 65 to argument 3 of 'svsra', which expects a value in the range \[1, 64\]} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svuint8_t u8, svint8_t s8, svuint16_t u16, svint16_t s16,
+ svfloat16_t f16)
+{
+ svtbx (u8, u8); /* { dg-error {too few arguments to function 'svtbx'} } */
+ svtbx (u8, u8, u8, u8); /* { dg-error {too many arguments to function 'svtbx'} } */
+ svtbx (pg, pg, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (pg, pg, u8); /* { dg-error {'svtbx' has no form that takes 'svbool_t' arguments} } */
+
+ svtbx (u8, 0, u8); /* { dg-error {passing 'int' to argument 2 of 'svtbx', which expects an SVE vector type} } */
+ svtbx (u8, u8, 0); /* { dg-error {passing 'int' to argument 3 of 'svtbx', which expects an SVE vector type} } */
+ svtbx (u8, s8, u8); /* { dg-error {passing 'svint8_t' to argument 2 of 'svtbx', but previous arguments had type 'svuint8_t'} } */
+ svtbx (u8, u8, u8);
+ svtbx (u8, u8, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (u8, u8, u16); /* { dg-error {arguments 1 and 3 of 'svtbx' must have the same element size, but the values passed here have type 'svuint8_t' and 'svuint16_t' respectively} } */
+ svtbx (u8, u8, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (u8, u8, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+
+ svtbx (s8, u8, u8); /* { dg-error {passing 'svuint8_t' to argument 2 of 'svtbx', but previous arguments had type 'svint8_t'} } */
+ svtbx (s8, s8, u8);
+ svtbx (s8, s8, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (s8, s8, u16); /* { dg-error {arguments 1 and 3 of 'svtbx' must have the same element size, but the values passed here have type 'svint8_t' and 'svuint16_t' respectively} } */
+ svtbx (s8, s8, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (s8, s8, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+
+ svtbx (u16, 0, u16); /* { dg-error {passing 'int' to argument 2 of 'svtbx', which expects an SVE vector type} } */
+ svtbx (u16, u16, u8); /* { dg-error {arguments 1 and 3 of 'svtbx' must have the same element size, but the values passed here have type 'svuint16_t' and 'svuint8_t' respectively} } */
+ svtbx (u16, u16, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (u16, u16, u16);
+ svtbx (u16, u16, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (u16, u16, f16); /* { dg-error {passing 'svfloat16_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+
+ svtbx (s16, u16, u16); /* { dg-error {passing 'svuint16_t' to argument 2 of 'svtbx', but previous arguments had type 'svint16_t'} } */
+ svtbx (s16, s16, u8); /* { dg-error {arguments 1 and 3 of 'svtbx' must have the same element size, but the values passed here have type 'svint16_t' and 'svuint8_t' respectively} } */
+ svtbx (s16, s16, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (s16, s16, u16);
+ svtbx (s16, s16, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (s16, s16, f16); /* { dg-error {passing 'svfloat16_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+
+ svtbx (f16, f16, u8); /* { dg-error {arguments 1 and 3 of 'svtbx' must have the same element size, but the values passed here have type 'svfloat16_t' and 'svuint8_t' respectively} } */
+ svtbx (f16, f16, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (f16, f16, u16);
+ svtbx (f16, f16, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+ svtbx (f16, f16, f16); /* { dg-error {passing 'svfloat16_t' to argument 3 of 'svtbx', which expects a vector of unsigned integers} } */
+}
--- /dev/null
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+test (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16, svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64, svfloat16_t f16, svfloat32_t f32,
+ svfloat64_t f64)
+{
+ svcvtnt_f32_m (f32, pg); /* { dg-error {too few arguments to function 'svcvtnt_f32_m'} } */
+ svcvtnt_f32_m (f32, pg, f64, 0); /* { dg-error {too many arguments to function 'svcvtnt_f32_m'} } */
+ svcvtnt_f32_m (f16, pg, f64); /* { dg-error {passing 'svfloat16_t' to argument 1 of 'svcvtnt_f32_m', which expects 'svfloat32_t'} } */
+ svcvtnt_f32_m (0, pg, f64); /* { dg-error {passing 'int' to argument 1 of 'svcvtnt_f32_m', which expects 'svfloat32_t'} } */
+ svcvtnt_f32_m (pg, pg, f64); /* { dg-error {passing 'svbool_t' to argument 1 of 'svcvtnt_f32_m', which expects 'svfloat32_t'} } */
+ svcvtnt_f32_m (f32, s32, f64); /* { dg-error {passing 'svint32_t' to argument 2 of 'svcvtnt_f32_m', which expects 'svbool_t'} } */
+ svcvtnt_f32_m (f32, pg, 0); /* { dg-error {passing 'int' to argument 3 of 'svcvtnt_f32_m', which expects an SVE vector type} } */
+
+ svcvtnt_f32_m (f32, pg, s8); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svint8_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, s16); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svint16_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, s32); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svint32_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, s64); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svint64_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, u8); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svuint8_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, u16); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svuint16_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, u32); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svuint32_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, u64); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svuint64_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, f16); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svfloat16_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, f32); /* { dg-error {'svcvtnt_f32_m' has no form that takes 'svfloat32_t' arguments} } */
+ svcvtnt_f32_m (f32, pg, f64);
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat32_t f32)
+{
+ svqxtnb (); /* { dg-error {too few arguments to function 'svqxtnb'} } */
+ svqxtnb (u16, u16); /* { dg-error {too many arguments to function 'svqxtnb'} } */
+ svqxtnb (pg); /* { dg-error {'svqxtnb' has no form that takes 'svbool_t' arguments} } */
+ svqxtnb (u8); /* { dg-error {'svqxtnb' has no form that takes 'svuint8_t' arguments} } */
+ svqxtnb (s8); /* { dg-error {'svqxtnb' has no form that takes 'svint8_t' arguments} } */
+ svqxtnb (u16);
+ svqxtnb (s16);
+ svqxtnb (u32);
+ svqxtnb (s32);
+ svqxtnb (u64);
+ svqxtnb (s64);
+ svqxtnb (f32); /* { dg-error {'svqxtnb' has no form that takes 'svfloat32_t' arguments} } */
+ svqxtnb (1); /* { dg-error {passing 'int' to argument 1 of 'svqxtnb', which expects an SVE vector type} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat32_t f32)
+{
+ svqxtunb (); /* { dg-error {too few arguments to function 'svqxtunb'} } */
+ svqxtunb (u16, u16); /* { dg-error {too many arguments to function 'svqxtunb'} } */
+ svqxtunb (pg); /* { dg-error {'svqxtunb' has no form that takes 'svbool_t' arguments} } */
+ svqxtunb (u8); /* { dg-error {'svqxtunb' has no form that takes 'svuint8_t' arguments} } */
+ svqxtunb (s8); /* { dg-error {'svqxtunb' has no form that takes 'svint8_t' arguments} } */
+ svqxtunb (u16); /* { dg-error {'svqxtunb' has no form that takes 'svuint16_t' arguments} } */
+ svqxtunb (s16);
+ svqxtunb (u32); /* { dg-error {'svqxtunb' has no form that takes 'svuint32_t' arguments} } */
+ svqxtunb (s32);
+ svqxtunb (u64); /* { dg-error {'svqxtunb' has no form that takes 'svuint64_t' arguments} } */
+ svqxtunb (s64);
+ svqxtunb (f32); /* { dg-error {'svqxtunb' has no form that takes 'svfloat32_t' arguments} } */
+ svqxtunb (1); /* { dg-error {passing 'int' to argument 1 of 'svqxtunb', which expects an SVE vector type} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat16_t f16, svfloat32_t f32)
+{
+ svqxtnt (u32); /* { dg-error {too few arguments to function 'svqxtnt'} } */
+ svqxtnt (u32, u16, u16); /* { dg-error {too many arguments to function 'svqxtnt'} } */
+ svqxtnt (pg, pg); /* { dg-error {'svqxtnt' has no form that takes 'svbool_t' arguments} } */
+ svqxtnt (u8, u8); /* { dg-error {'svqxtnt' has no form that takes 'svuint8_t' arguments} } */
+ svqxtnt (s8, s8); /* { dg-error {'svqxtnt' has no form that takes 'svint8_t' arguments} } */
+ svqxtnt (u16, u16); /* { dg-error {passing 'svuint16_t' instead of the expected 'svuint8_t' to argument 1 of 'svqxtnt', after passing 'svuint16_t' to argument 2} } */
+ svqxtnt (s8, u16); /* { dg-error {arguments 1 and 2 of 'svqxtnt' must have the same signedness, but the values passed here have type 'svint8_t' and 'svuint16_t' respectively} } */
+ svqxtnt (pg, u16); /* { dg-error {passing 'svbool_t' instead of the expected 'svuint8_t' to argument 1 of 'svqxtnt', after passing 'svuint16_t' to argument 2} } */
+ svqxtnt (u8, u16);
+ svqxtnt (s8, s16);
+ svqxtnt (u16, u32);
+ svqxtnt (s16, s32);
+ svqxtnt (u32, u64);
+ svqxtnt (s32, s64);
+ svqxtnt (f16, f32); /* { dg-error {'svqxtnt' has no form that takes 'svfloat32_t' arguments} } */
+ svqxtnt (1, u16); /* { dg-error {passing 'int' to argument 1 of 'svqxtnt', which expects an SVE vector type} } */
+ svqxtnt (u8, 1); /* { dg-error {passing 'int' to argument 2 of 'svqxtnt', which expects an SVE vector type} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint8_t s8, svuint8_t u8,
+ svint16_t s16, svuint16_t u16,
+ svint32_t s32, svuint32_t u32,
+ svint64_t s64, svuint64_t u64,
+ svfloat16_t f16, svfloat32_t f32)
+{
+ svqxtunt (u32); /* { dg-error {too few arguments to function 'svqxtunt'} } */
+ svqxtunt (u32, s16, s16); /* { dg-error {too many arguments to function 'svqxtunt'} } */
+ svqxtunt (u8, pg); /* { dg-error {'svqxtunt' has no form that takes 'svbool_t' arguments} } */
+ svqxtunt (u8, u8); /* { dg-error {'svqxtunt' has no form that takes 'svuint8_t' arguments} } */
+ svqxtunt (u8, s8); /* { dg-error {'svqxtunt' has no form that takes 'svint8_t' arguments} } */
+ svqxtunt (u16, s16); /* { dg-error {passing 'svuint16_t' instead of the expected 'svuint8_t' to argument 1 of 'svqxtunt', after passing 'svint16_t' to argument 2} } */
+ svqxtunt (s8, s16); /* { dg-error {passing 'svint8_t' to argument 1 of 'svqxtunt', which expects a vector of unsigned integers} } */
+ svqxtunt (pg, s16); /* { dg-error {passing 'svbool_t' to argument 1 of 'svqxtunt', which expects a vector of unsigned integers} } */
+ svqxtunt (u8, u16); /* { dg-error {'svqxtunt' has no form that takes 'svuint16_t' arguments} } */
+ svqxtunt (u8, s16);
+ svqxtunt (u16, u32); /* { dg-error {'svqxtunt' has no form that takes 'svuint32_t' arguments} } */
+ svqxtunt (u16, s32);
+ svqxtunt (u32, u64); /* { dg-error {'svqxtunt' has no form that takes 'svuint64_t' arguments} } */
+ svqxtunt (u32, s64);
+ svqxtunt (u16, f32); /* { dg-error {'svqxtunt' has no form that takes 'svfloat32_t' arguments} } */
+ svqxtunt (1, u16); /* { dg-error {passing 'int' to argument 1 of 'svqxtunt', which expects an SVE vector type} } */
+ svqxtunt (u8, 1); /* { dg-error {passing 'int' to argument 2 of 'svqxtunt', which expects an SVE vector type} } */
+}
--- /dev/null
+/* { dg-do compile } */
+
+#include <arm_sve.h>
+
+#pragma GCC target ("arch=armv8.2-a+sve2")
+
+void
+f1 (svbool_t pg, svint32_t s32, svuint32_t u32, svfloat32_t f32,
+ svint64_t s64, svuint64_t u64, svfloat64_t f64)
+{
+ svlogb_m (s32, pg); /* { dg-error {too few arguments to function 'svlogb_m'} } */
+ svlogb_m (s32, pg, f32, s32); /* { dg-error {too many arguments to function 'svlogb_m'} } */
+ svlogb_m (0, pg, f32); /* { dg-error {passing 'int' to argument 1 of 'svlogb_m', which expects an SVE vector type} } */
+ svlogb_m (s32, u32, f32); /* { dg-error {passing 'svuint32_t' to argument 2 of 'svlogb_m', which expects 'svbool_t'} } */
+ svlogb_m (s32, 0, f32); /* { dg-error {passing 'int' to argument 2 of 'svlogb_m', which expects 'svbool_t'} } */
+ svlogb_m (s32, pg, s32); /* { dg-error {'svlogb_m' has no form that takes 'svint32_t' arguments} } */
+ svlogb_m (s32, pg, u32); /* { dg-error {'svlogb_m' has no form that takes 'svuint32_t' arguments} } */
+ svlogb_m (s32, pg, f32);
+ svlogb_m (s32, pg, pg); /* { dg-error {'svlogb_m' has no form that takes 'svbool_t' arguments} } */
+
+ svlogb_m (pg, pg, f32); /* { dg-error {passing 'svbool_t' to argument 1 of 'svlogb_m', which expects a vector of signed integers} } */
+ svlogb_m (u32, pg, f32); /* { dg-error {passing 'svuint32_t' to argument 1 of 'svlogb_m', which expects a vector of signed integers} } */
+ svlogb_m (f32, pg, f32); /* { dg-error {passing 'svfloat32_t' to argument 1 of 'svlogb_m', which expects a vector of signed integers} } */
+ svlogb_m (u64, pg, f32); /* { dg-error {passing 'svuint64_t' to argument 1 of 'svlogb_m', which expects a vector of signed integers} } */
+ svlogb_m (s64, pg, f32); /* { dg-error {arguments 1 and 3 of 'svlogb_m' must have the same element size, but the values passed here have type 'svint64_t' and 'svfloat32_t' respectively} } */
+ svlogb_m (s32, pg, f64); /* { dg-error {arguments 1 and 3 of 'svlogb_m' must have the same element size, but the values passed here have type 'svint32_t' and 'svfloat64_t' respectively} } */
+}
--- /dev/null
+# Assembly-based regression-test driver for the SVE ACLE
+# Copyright (C) 2009-2020 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/>. */
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't an AArch64 target.
+if {![istarget aarch64*-*-*] } {
+ return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+# Force SVE if we're not testing it already.
+if { [check_effective_target_aarch64_sve2] } {
+ set sve2_flags ""
+} else {
+ set sve2_flags "-march=armv8.5-a+sve2"
+}
+
+lappend extra_flags "-fno-ipa-icf"
+
+global gcc_runtest_parallelize_limit_minor
+if { [info exists gcc_runtest_parallelize_limit_minor] } {
+ set old_limit_minor $gcc_runtest_parallelize_limit_minor
+ set gcc_runtest_parallelize_limit_minor 1
+}
+
+torture-init
+set-torture-options {
+ "-std=c90 -O0 -g"
+ "-std=c90 -O1 -g"
+ "-std=c99 -O2 -g"
+ "-std=c11 -O3 -g"
+ "-std=gnu90 -O2 -fno-schedule-insns -DCHECK_ASM --save-temps"
+ "-std=gnu99 -Ofast -g"
+ "-std=gnu11 -Os -g"
+} {
+ "-DTEST_FULL"
+ "-DTEST_OVERLOADS"
+}
+
+# Main loop.
+set files [glob -nocomplain $srcdir/$subdir/asm/*.c]
+set save-dg-do-what-default ${dg-do-what-default}
+if { [check_effective_target_aarch64_asm_sve_ok]
+ && [check_effective_target_aarch64_variant_pcs] } {
+ set dg-do-what-default assemble
+} else {
+ set dg-do-what-default compile
+}
+gcc-dg-runtest [lsort $files] "" "$sve2_flags $extra_flags"
+set dg-do-what-default ${save-dg-do-what-default}
+
+torture-finish
+
+if { [info exists gcc_runtest_parallelize_limit_minor] } {
+ set gcc_runtest_parallelize_limit_minor $old_limit_minor
+}
+
+# All done.
+dg-finish
--- /dev/null
+# Specific regression driver for AArch64 SVE.
+# Copyright (C) 2009-2020 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/>. */
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't an AArch64 target.
+if {![istarget aarch64*-*-*] } {
+ return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# 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
+
+# Force SVE if we're not testing it already.
+if { [check_effective_target_aarch64_sve2] } {
+ set sve2_flags ""
+} else {
+ set sve2_flags "-march=armv8.5-a+sve2"
+}
+
+# Main loop.
+set files [glob -nocomplain "$srcdir/$subdir/general/*.c"]
+dg-runtest [lsort $files] "$sve2_flags" $DEFAULT_CFLAGS
+
+# All done.
+dg-finish
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** aba_s16_tied1:
+** saba z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (aba_s16_tied1, svint16_t,
+ z0 = svaba_s16 (z0, z1, z2),
+ z0 = svaba (z0, z1, z2))
+
+/*
+** aba_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.h, \1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (aba_s16_tied2, svint16_t,
+ z0 = svaba_s16 (z1, z0, z2),
+ z0 = svaba (z1, z0, z2))
+
+/*
+** aba_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.h, z2\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (aba_s16_tied3, svint16_t,
+ z0 = svaba_s16 (z1, z2, z0),
+ z0 = svaba (z1, z2, z0))
+
+/*
+** aba_s16_untied:
+** movprfx z0, z1
+** saba z0\.h, z2\.h, z3\.h
+** ret
+*/
+TEST_UNIFORM_Z (aba_s16_untied, svint16_t,
+ z0 = svaba_s16 (z1, z2, z3),
+ z0 = svaba (z1, z2, z3))
+
+/*
+** aba_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** saba z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svaba_n_s16 (z0, z1, x0),
+ z0 = svaba (z0, z1, x0))
+
+/*
+** aba_w0_s16_tied2:
+** mov (z[0-9]+\.h), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_s16_tied2, svint16_t, int16_t,
+ z0 = svaba_n_s16 (z1, z0, x0),
+ z0 = svaba (z1, z0, x0))
+
+/*
+** aba_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** saba z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_s16_untied, svint16_t, int16_t,
+ z0 = svaba_n_s16 (z1, z2, x0),
+ z0 = svaba (z1, z2, x0))
+
+/*
+** aba_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** saba z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s16_tied1, svint16_t,
+ z0 = svaba_n_s16 (z0, z1, 11),
+ z0 = svaba (z0, z1, 11))
+
+/*
+** aba_11_s16_tied2:
+** mov (z[0-9]+\.h), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s16_tied2, svint16_t,
+ z0 = svaba_n_s16 (z1, z0, 11),
+ z0 = svaba (z1, z0, 11))
+
+/*
+** aba_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** saba z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s16_untied, svint16_t,
+ z0 = svaba_n_s16 (z1, z2, 11),
+ z0 = svaba (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** aba_s32_tied1:
+** saba z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (aba_s32_tied1, svint32_t,
+ z0 = svaba_s32 (z0, z1, z2),
+ z0 = svaba (z0, z1, z2))
+
+/*
+** aba_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (aba_s32_tied2, svint32_t,
+ z0 = svaba_s32 (z1, z0, z2),
+ z0 = svaba (z1, z0, z2))
+
+/*
+** aba_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (aba_s32_tied3, svint32_t,
+ z0 = svaba_s32 (z1, z2, z0),
+ z0 = svaba (z1, z2, z0))
+
+/*
+** aba_s32_untied:
+** movprfx z0, z1
+** saba z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (aba_s32_untied, svint32_t,
+ z0 = svaba_s32 (z1, z2, z3),
+ z0 = svaba (z1, z2, z3))
+
+/*
+** aba_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** saba z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svaba_n_s32 (z0, z1, x0),
+ z0 = svaba (z0, z1, x0))
+
+/*
+** aba_w0_s32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_s32_tied2, svint32_t, int32_t,
+ z0 = svaba_n_s32 (z1, z0, x0),
+ z0 = svaba (z1, z0, x0))
+
+/*
+** aba_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** saba z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_s32_untied, svint32_t, int32_t,
+ z0 = svaba_n_s32 (z1, z2, x0),
+ z0 = svaba (z1, z2, x0))
+
+/*
+** aba_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** saba z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s32_tied1, svint32_t,
+ z0 = svaba_n_s32 (z0, z1, 11),
+ z0 = svaba (z0, z1, 11))
+
+/*
+** aba_11_s32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s32_tied2, svint32_t,
+ z0 = svaba_n_s32 (z1, z0, 11),
+ z0 = svaba (z1, z0, 11))
+
+/*
+** aba_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** saba z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s32_untied, svint32_t,
+ z0 = svaba_n_s32 (z1, z2, 11),
+ z0 = svaba (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** aba_s64_tied1:
+** saba z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (aba_s64_tied1, svint64_t,
+ z0 = svaba_s64 (z0, z1, z2),
+ z0 = svaba (z0, z1, z2))
+
+/*
+** aba_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** saba z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (aba_s64_tied2, svint64_t,
+ z0 = svaba_s64 (z1, z0, z2),
+ z0 = svaba (z1, z0, z2))
+
+/*
+** aba_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** saba z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_s64_tied3, svint64_t,
+ z0 = svaba_s64 (z1, z2, z0),
+ z0 = svaba (z1, z2, z0))
+
+/*
+** aba_s64_untied:
+** movprfx z0, z1
+** saba z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (aba_s64_untied, svint64_t,
+ z0 = svaba_s64 (z1, z2, z3),
+ z0 = svaba (z1, z2, z3))
+
+/*
+** aba_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** saba z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svaba_n_s64 (z0, z1, x0),
+ z0 = svaba (z0, z1, x0))
+
+/*
+** aba_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** saba z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_x0_s64_tied2, svint64_t, int64_t,
+ z0 = svaba_n_s64 (z1, z0, x0),
+ z0 = svaba (z1, z0, x0))
+
+/*
+** aba_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** saba z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_x0_s64_untied, svint64_t, int64_t,
+ z0 = svaba_n_s64 (z1, z2, x0),
+ z0 = svaba (z1, z2, x0))
+
+/*
+** aba_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** saba z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s64_tied1, svint64_t,
+ z0 = svaba_n_s64 (z0, z1, 11),
+ z0 = svaba (z0, z1, 11))
+
+/*
+** aba_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** saba z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s64_tied2, svint64_t,
+ z0 = svaba_n_s64 (z1, z0, 11),
+ z0 = svaba (z1, z0, 11))
+
+/*
+** aba_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** saba z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s64_untied, svint64_t,
+ z0 = svaba_n_s64 (z1, z2, 11),
+ z0 = svaba (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** aba_s8_tied1:
+** saba z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (aba_s8_tied1, svint8_t,
+ z0 = svaba_s8 (z0, z1, z2),
+ z0 = svaba (z0, z1, z2))
+
+/*
+** aba_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.b, \1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (aba_s8_tied2, svint8_t,
+ z0 = svaba_s8 (z1, z0, z2),
+ z0 = svaba (z1, z0, z2))
+
+/*
+** aba_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.b, z2\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (aba_s8_tied3, svint8_t,
+ z0 = svaba_s8 (z1, z2, z0),
+ z0 = svaba (z1, z2, z0))
+
+/*
+** aba_s8_untied:
+** movprfx z0, z1
+** saba z0\.b, z2\.b, z3\.b
+** ret
+*/
+TEST_UNIFORM_Z (aba_s8_untied, svint8_t,
+ z0 = svaba_s8 (z1, z2, z3),
+ z0 = svaba (z1, z2, z3))
+
+/*
+** aba_w0_s8_tied1:
+** mov (z[0-9]+\.b), w0
+** saba z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svaba_n_s8 (z0, z1, x0),
+ z0 = svaba (z0, z1, x0))
+
+/*
+** aba_w0_s8_tied2:
+** mov (z[0-9]+\.b), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_s8_tied2, svint8_t, int8_t,
+ z0 = svaba_n_s8 (z1, z0, x0),
+ z0 = svaba (z1, z0, x0))
+
+/*
+** aba_w0_s8_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** saba z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_s8_untied, svint8_t, int8_t,
+ z0 = svaba_n_s8 (z1, z2, x0),
+ z0 = svaba (z1, z2, x0))
+
+/*
+** aba_11_s8_tied1:
+** mov (z[0-9]+\.b), #11
+** saba z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s8_tied1, svint8_t,
+ z0 = svaba_n_s8 (z0, z1, 11),
+ z0 = svaba (z0, z1, 11))
+
+/*
+** aba_11_s8_tied2:
+** mov (z[0-9]+\.b), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** saba z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s8_tied2, svint8_t,
+ z0 = svaba_n_s8 (z1, z0, 11),
+ z0 = svaba (z1, z0, 11))
+
+/*
+** aba_11_s8_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** saba z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_s8_untied, svint8_t,
+ z0 = svaba_n_s8 (z1, z2, 11),
+ z0 = svaba (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** aba_u16_tied1:
+** uaba z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (aba_u16_tied1, svuint16_t,
+ z0 = svaba_u16 (z0, z1, z2),
+ z0 = svaba (z0, z1, z2))
+
+/*
+** aba_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.h, \1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (aba_u16_tied2, svuint16_t,
+ z0 = svaba_u16 (z1, z0, z2),
+ z0 = svaba (z1, z0, z2))
+
+/*
+** aba_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.h, z2\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (aba_u16_tied3, svuint16_t,
+ z0 = svaba_u16 (z1, z2, z0),
+ z0 = svaba (z1, z2, z0))
+
+/*
+** aba_u16_untied:
+** movprfx z0, z1
+** uaba z0\.h, z2\.h, z3\.h
+** ret
+*/
+TEST_UNIFORM_Z (aba_u16_untied, svuint16_t,
+ z0 = svaba_u16 (z1, z2, z3),
+ z0 = svaba (z1, z2, z3))
+
+/*
+** aba_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** uaba z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svaba_n_u16 (z0, z1, x0),
+ z0 = svaba (z0, z1, x0))
+
+/*
+** aba_w0_u16_tied2:
+** mov (z[0-9]+\.h), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_u16_tied2, svuint16_t, uint16_t,
+ z0 = svaba_n_u16 (z1, z0, x0),
+ z0 = svaba (z1, z0, x0))
+
+/*
+** aba_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uaba z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svaba_n_u16 (z1, z2, x0),
+ z0 = svaba (z1, z2, x0))
+
+/*
+** aba_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** uaba z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u16_tied1, svuint16_t,
+ z0 = svaba_n_u16 (z0, z1, 11),
+ z0 = svaba (z0, z1, 11))
+
+/*
+** aba_11_u16_tied2:
+** mov (z[0-9]+\.h), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u16_tied2, svuint16_t,
+ z0 = svaba_n_u16 (z1, z0, 11),
+ z0 = svaba (z1, z0, 11))
+
+/*
+** aba_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** uaba z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u16_untied, svuint16_t,
+ z0 = svaba_n_u16 (z1, z2, 11),
+ z0 = svaba (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** aba_u32_tied1:
+** uaba z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (aba_u32_tied1, svuint32_t,
+ z0 = svaba_u32 (z0, z1, z2),
+ z0 = svaba (z0, z1, z2))
+
+/*
+** aba_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (aba_u32_tied2, svuint32_t,
+ z0 = svaba_u32 (z1, z0, z2),
+ z0 = svaba (z1, z0, z2))
+
+/*
+** aba_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (aba_u32_tied3, svuint32_t,
+ z0 = svaba_u32 (z1, z2, z0),
+ z0 = svaba (z1, z2, z0))
+
+/*
+** aba_u32_untied:
+** movprfx z0, z1
+** uaba z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (aba_u32_untied, svuint32_t,
+ z0 = svaba_u32 (z1, z2, z3),
+ z0 = svaba (z1, z2, z3))
+
+/*
+** aba_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** uaba z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svaba_n_u32 (z0, z1, x0),
+ z0 = svaba (z0, z1, x0))
+
+/*
+** aba_w0_u32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svaba_n_u32 (z1, z0, x0),
+ z0 = svaba (z1, z0, x0))
+
+/*
+** aba_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uaba z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svaba_n_u32 (z1, z2, x0),
+ z0 = svaba (z1, z2, x0))
+
+/*
+** aba_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** uaba z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u32_tied1, svuint32_t,
+ z0 = svaba_n_u32 (z0, z1, 11),
+ z0 = svaba (z0, z1, 11))
+
+/*
+** aba_11_u32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u32_tied2, svuint32_t,
+ z0 = svaba_n_u32 (z1, z0, 11),
+ z0 = svaba (z1, z0, 11))
+
+/*
+** aba_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** uaba z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u32_untied, svuint32_t,
+ z0 = svaba_n_u32 (z1, z2, 11),
+ z0 = svaba (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** aba_u64_tied1:
+** uaba z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (aba_u64_tied1, svuint64_t,
+ z0 = svaba_u64 (z0, z1, z2),
+ z0 = svaba (z0, z1, z2))
+
+/*
+** aba_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uaba z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (aba_u64_tied2, svuint64_t,
+ z0 = svaba_u64 (z1, z0, z2),
+ z0 = svaba (z1, z0, z2))
+
+/*
+** aba_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uaba z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_u64_tied3, svuint64_t,
+ z0 = svaba_u64 (z1, z2, z0),
+ z0 = svaba (z1, z2, z0))
+
+/*
+** aba_u64_untied:
+** movprfx z0, z1
+** uaba z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (aba_u64_untied, svuint64_t,
+ z0 = svaba_u64 (z1, z2, z3),
+ z0 = svaba (z1, z2, z3))
+
+/*
+** aba_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** uaba z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svaba_n_u64 (z0, z1, x0),
+ z0 = svaba (z0, z1, x0))
+
+/*
+** aba_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uaba z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svaba_n_u64 (z1, z0, x0),
+ z0 = svaba (z1, z0, x0))
+
+/*
+** aba_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** uaba z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svaba_n_u64 (z1, z2, x0),
+ z0 = svaba (z1, z2, x0))
+
+/*
+** aba_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** uaba z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u64_tied1, svuint64_t,
+ z0 = svaba_n_u64 (z0, z1, 11),
+ z0 = svaba (z0, z1, 11))
+
+/*
+** aba_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uaba z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u64_tied2, svuint64_t,
+ z0 = svaba_n_u64 (z1, z0, 11),
+ z0 = svaba (z1, z0, 11))
+
+/*
+** aba_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** uaba z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u64_untied, svuint64_t,
+ z0 = svaba_n_u64 (z1, z2, 11),
+ z0 = svaba (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** aba_u8_tied1:
+** uaba z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (aba_u8_tied1, svuint8_t,
+ z0 = svaba_u8 (z0, z1, z2),
+ z0 = svaba (z0, z1, z2))
+
+/*
+** aba_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.b, \1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (aba_u8_tied2, svuint8_t,
+ z0 = svaba_u8 (z1, z0, z2),
+ z0 = svaba (z1, z0, z2))
+
+/*
+** aba_u8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.b, z2\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (aba_u8_tied3, svuint8_t,
+ z0 = svaba_u8 (z1, z2, z0),
+ z0 = svaba (z1, z2, z0))
+
+/*
+** aba_u8_untied:
+** movprfx z0, z1
+** uaba z0\.b, z2\.b, z3\.b
+** ret
+*/
+TEST_UNIFORM_Z (aba_u8_untied, svuint8_t,
+ z0 = svaba_u8 (z1, z2, z3),
+ z0 = svaba (z1, z2, z3))
+
+/*
+** aba_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** uaba z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svaba_n_u8 (z0, z1, x0),
+ z0 = svaba (z0, z1, x0))
+
+/*
+** aba_w0_u8_tied2:
+** mov (z[0-9]+\.b), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_u8_tied2, svuint8_t, uint8_t,
+ z0 = svaba_n_u8 (z1, z0, x0),
+ z0 = svaba (z1, z0, x0))
+
+/*
+** aba_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uaba z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (aba_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svaba_n_u8 (z1, z2, x0),
+ z0 = svaba (z1, z2, x0))
+
+/*
+** aba_11_u8_tied1:
+** mov (z[0-9]+\.b), #11
+** uaba z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u8_tied1, svuint8_t,
+ z0 = svaba_n_u8 (z0, z1, 11),
+ z0 = svaba (z0, z1, 11))
+
+/*
+** aba_11_u8_tied2:
+** mov (z[0-9]+\.b), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uaba z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u8_tied2, svuint8_t,
+ z0 = svaba_n_u8 (z1, z0, 11),
+ z0 = svaba (z1, z0, 11))
+
+/*
+** aba_11_u8_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** uaba z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (aba_11_u8_untied, svuint8_t,
+ z0 = svaba_n_u8 (z1, z2, 11),
+ z0 = svaba (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalb_s16_tied1:
+** sabalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (abalb_s16_tied1, svint16_t, svint8_t,
+ z0 = svabalb_s16 (z0, z4, z5),
+ z0 = svabalb (z0, z4, z5))
+
+/*
+** abalb_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalb z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svabalb_s16 (z4, z0, z1),
+ z0_res = svabalb (z4, z0, z1))
+
+/*
+** abalb_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalb z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_s16_tied3, svint16_t, svint8_t,
+ z0_res = svabalb_s16 (z4, z1, z0),
+ z0_res = svabalb (z4, z1, z0))
+
+/*
+** abalb_s16_untied:
+** movprfx z0, z1
+** sabalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (abalb_s16_untied, svint16_t, svint8_t,
+ z0 = svabalb_s16 (z1, z4, z5),
+ z0 = svabalb (z1, z4, z5))
+
+/*
+** abalb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sabalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svabalb_n_s16 (z0, z4, x0),
+ z0 = svabalb (z0, z4, x0))
+
+/*
+** abalb_w0_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sabalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svabalb_n_s16 (z1, z4, x0),
+ z0 = svabalb (z1, z4, x0))
+
+/*
+** abalb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sabalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svabalb_n_s16 (z0, z4, 11),
+ z0 = svabalb (z0, z4, 11))
+
+/*
+** abalb_11_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sabalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_s16_untied, svint16_t, svint8_t,
+ z0 = svabalb_n_s16 (z1, z4, 11),
+ z0 = svabalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalb_s32_tied1:
+** sabalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (abalb_s32_tied1, svint32_t, svint16_t,
+ z0 = svabalb_s32 (z0, z4, z5),
+ z0 = svabalb (z0, z4, z5))
+
+/*
+** abalb_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svabalb_s32 (z4, z0, z1),
+ z0_res = svabalb (z4, z0, z1))
+
+/*
+** abalb_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_s32_tied3, svint32_t, svint16_t,
+ z0_res = svabalb_s32 (z4, z1, z0),
+ z0_res = svabalb (z4, z1, z0))
+
+/*
+** abalb_s32_untied:
+** movprfx z0, z1
+** sabalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (abalb_s32_untied, svint32_t, svint16_t,
+ z0 = svabalb_s32 (z1, z4, z5),
+ z0 = svabalb (z1, z4, z5))
+
+/*
+** abalb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sabalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svabalb_n_s32 (z0, z4, x0),
+ z0 = svabalb (z0, z4, x0))
+
+/*
+** abalb_w0_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sabalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svabalb_n_s32 (z1, z4, x0),
+ z0 = svabalb (z1, z4, x0))
+
+/*
+** abalb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sabalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svabalb_n_s32 (z0, z4, 11),
+ z0 = svabalb (z0, z4, 11))
+
+/*
+** abalb_11_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sabalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_s32_untied, svint32_t, svint16_t,
+ z0 = svabalb_n_s32 (z1, z4, 11),
+ z0 = svabalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalb_s64_tied1:
+** sabalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (abalb_s64_tied1, svint64_t, svint32_t,
+ z0 = svabalb_s64 (z0, z4, z5),
+ z0 = svabalb (z0, z4, z5))
+
+/*
+** abalb_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalb z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svabalb_s64 (z4, z0, z1),
+ z0_res = svabalb (z4, z0, z1))
+
+/*
+** abalb_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalb z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_s64_tied3, svint64_t, svint32_t,
+ z0_res = svabalb_s64 (z4, z1, z0),
+ z0_res = svabalb (z4, z1, z0))
+
+/*
+** abalb_s64_untied:
+** movprfx z0, z1
+** sabalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (abalb_s64_untied, svint64_t, svint32_t,
+ z0 = svabalb_s64 (z1, z4, z5),
+ z0 = svabalb (z1, z4, z5))
+
+/*
+** abalb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sabalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svabalb_n_s64 (z0, z4, x0),
+ z0 = svabalb (z0, z4, x0))
+
+/*
+** abalb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sabalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svabalb_n_s64 (z1, z4, x0),
+ z0 = svabalb (z1, z4, x0))
+
+/*
+** abalb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sabalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svabalb_n_s64 (z0, z4, 11),
+ z0 = svabalb (z0, z4, 11))
+
+/*
+** abalb_11_s64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sabalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_s64_untied, svint64_t, svint32_t,
+ z0 = svabalb_n_s64 (z1, z4, 11),
+ z0 = svabalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalb_u16_tied1:
+** uabalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (abalb_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svabalb_u16 (z0, z4, z5),
+ z0 = svabalb (z0, z4, z5))
+
+/*
+** abalb_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalb z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svabalb_u16 (z4, z0, z1),
+ z0_res = svabalb (z4, z0, z1))
+
+/*
+** abalb_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalb z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_u16_tied3, svuint16_t, svuint8_t,
+ z0_res = svabalb_u16 (z4, z1, z0),
+ z0_res = svabalb (z4, z1, z0))
+
+/*
+** abalb_u16_untied:
+** movprfx z0, z1
+** uabalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (abalb_u16_untied, svuint16_t, svuint8_t,
+ z0 = svabalb_u16 (z1, z4, z5),
+ z0 = svabalb (z1, z4, z5))
+
+/*
+** abalb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** uabalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0 = svabalb_n_u16 (z0, z4, x0),
+ z0 = svabalb (z0, z4, x0))
+
+/*
+** abalb_w0_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uabalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0 = svabalb_n_u16 (z1, z4, x0),
+ z0 = svabalb (z1, z4, x0))
+
+/*
+** abalb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** uabalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svabalb_n_u16 (z0, z4, 11),
+ z0 = svabalb (z0, z4, 11))
+
+/*
+** abalb_11_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** uabalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_u16_untied, svuint16_t, svuint8_t,
+ z0 = svabalb_n_u16 (z1, z4, 11),
+ z0 = svabalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalb_u32_tied1:
+** uabalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (abalb_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svabalb_u32 (z0, z4, z5),
+ z0 = svabalb (z0, z4, z5))
+
+/*
+** abalb_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svabalb_u32 (z4, z0, z1),
+ z0_res = svabalb (z4, z0, z1))
+
+/*
+** abalb_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svabalb_u32 (z4, z1, z0),
+ z0_res = svabalb (z4, z1, z0))
+
+/*
+** abalb_u32_untied:
+** movprfx z0, z1
+** uabalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (abalb_u32_untied, svuint32_t, svuint16_t,
+ z0 = svabalb_u32 (z1, z4, z5),
+ z0 = svabalb (z1, z4, z5))
+
+/*
+** abalb_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** uabalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0 = svabalb_n_u32 (z0, z4, x0),
+ z0 = svabalb (z0, z4, x0))
+
+/*
+** abalb_w0_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uabalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0 = svabalb_n_u32 (z1, z4, x0),
+ z0 = svabalb (z1, z4, x0))
+
+/*
+** abalb_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** uabalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svabalb_n_u32 (z0, z4, 11),
+ z0 = svabalb (z0, z4, 11))
+
+/*
+** abalb_11_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** uabalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_u32_untied, svuint32_t, svuint16_t,
+ z0 = svabalb_n_u32 (z1, z4, 11),
+ z0 = svabalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalb_u64_tied1:
+** uabalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (abalb_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svabalb_u64 (z0, z4, z5),
+ z0 = svabalb (z0, z4, z5))
+
+/*
+** abalb_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalb z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svabalb_u64 (z4, z0, z1),
+ z0_res = svabalb (z4, z0, z1))
+
+/*
+** abalb_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalb z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (abalb_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svabalb_u64 (z4, z1, z0),
+ z0_res = svabalb (z4, z1, z0))
+
+/*
+** abalb_u64_untied:
+** movprfx z0, z1
+** uabalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (abalb_u64_untied, svuint64_t, svuint32_t,
+ z0 = svabalb_u64 (z1, z4, z5),
+ z0 = svabalb (z1, z4, z5))
+
+/*
+** abalb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** uabalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0 = svabalb_n_u64 (z0, z4, x0),
+ z0 = svabalb (z0, z4, x0))
+
+/*
+** abalb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uabalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (abalb_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0 = svabalb_n_u64 (z1, z4, x0),
+ z0 = svabalb (z1, z4, x0))
+
+/*
+** abalb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** uabalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svabalb_n_u64 (z0, z4, 11),
+ z0 = svabalb (z0, z4, 11))
+
+/*
+** abalb_11_u64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** uabalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (abalb_11_u64_untied, svuint64_t, svuint32_t,
+ z0 = svabalb_n_u64 (z1, z4, 11),
+ z0 = svabalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalt_s16_tied1:
+** sabalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (abalt_s16_tied1, svint16_t, svint8_t,
+ z0 = svabalt_s16 (z0, z4, z5),
+ z0 = svabalt (z0, z4, z5))
+
+/*
+** abalt_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svabalt_s16 (z4, z0, z1),
+ z0_res = svabalt (z4, z0, z1))
+
+/*
+** abalt_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_s16_tied3, svint16_t, svint8_t,
+ z0_res = svabalt_s16 (z4, z1, z0),
+ z0_res = svabalt (z4, z1, z0))
+
+/*
+** abalt_s16_untied:
+** movprfx z0, z1
+** sabalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (abalt_s16_untied, svint16_t, svint8_t,
+ z0 = svabalt_s16 (z1, z4, z5),
+ z0 = svabalt (z1, z4, z5))
+
+/*
+** abalt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sabalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svabalt_n_s16 (z0, z4, x0),
+ z0 = svabalt (z0, z4, x0))
+
+/*
+** abalt_w0_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sabalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svabalt_n_s16 (z1, z4, x0),
+ z0 = svabalt (z1, z4, x0))
+
+/*
+** abalt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sabalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svabalt_n_s16 (z0, z4, 11),
+ z0 = svabalt (z0, z4, 11))
+
+/*
+** abalt_11_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sabalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_s16_untied, svint16_t, svint8_t,
+ z0 = svabalt_n_s16 (z1, z4, 11),
+ z0 = svabalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalt_s32_tied1:
+** sabalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (abalt_s32_tied1, svint32_t, svint16_t,
+ z0 = svabalt_s32 (z0, z4, z5),
+ z0 = svabalt (z0, z4, z5))
+
+/*
+** abalt_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svabalt_s32 (z4, z0, z1),
+ z0_res = svabalt (z4, z0, z1))
+
+/*
+** abalt_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_s32_tied3, svint32_t, svint16_t,
+ z0_res = svabalt_s32 (z4, z1, z0),
+ z0_res = svabalt (z4, z1, z0))
+
+/*
+** abalt_s32_untied:
+** movprfx z0, z1
+** sabalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (abalt_s32_untied, svint32_t, svint16_t,
+ z0 = svabalt_s32 (z1, z4, z5),
+ z0 = svabalt (z1, z4, z5))
+
+/*
+** abalt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sabalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svabalt_n_s32 (z0, z4, x0),
+ z0 = svabalt (z0, z4, x0))
+
+/*
+** abalt_w0_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sabalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svabalt_n_s32 (z1, z4, x0),
+ z0 = svabalt (z1, z4, x0))
+
+/*
+** abalt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sabalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svabalt_n_s32 (z0, z4, 11),
+ z0 = svabalt (z0, z4, 11))
+
+/*
+** abalt_11_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sabalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_s32_untied, svint32_t, svint16_t,
+ z0 = svabalt_n_s32 (z1, z4, 11),
+ z0 = svabalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalt_s64_tied1:
+** sabalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (abalt_s64_tied1, svint64_t, svint32_t,
+ z0 = svabalt_s64 (z0, z4, z5),
+ z0 = svabalt (z0, z4, z5))
+
+/*
+** abalt_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svabalt_s64 (z4, z0, z1),
+ z0_res = svabalt (z4, z0, z1))
+
+/*
+** abalt_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sabalt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_s64_tied3, svint64_t, svint32_t,
+ z0_res = svabalt_s64 (z4, z1, z0),
+ z0_res = svabalt (z4, z1, z0))
+
+/*
+** abalt_s64_untied:
+** movprfx z0, z1
+** sabalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (abalt_s64_untied, svint64_t, svint32_t,
+ z0 = svabalt_s64 (z1, z4, z5),
+ z0 = svabalt (z1, z4, z5))
+
+/*
+** abalt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sabalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svabalt_n_s64 (z0, z4, x0),
+ z0 = svabalt (z0, z4, x0))
+
+/*
+** abalt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sabalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svabalt_n_s64 (z1, z4, x0),
+ z0 = svabalt (z1, z4, x0))
+
+/*
+** abalt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sabalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svabalt_n_s64 (z0, z4, 11),
+ z0 = svabalt (z0, z4, 11))
+
+/*
+** abalt_11_s64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sabalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_s64_untied, svint64_t, svint32_t,
+ z0 = svabalt_n_s64 (z1, z4, 11),
+ z0 = svabalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalt_u16_tied1:
+** uabalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (abalt_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svabalt_u16 (z0, z4, z5),
+ z0 = svabalt (z0, z4, z5))
+
+/*
+** abalt_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svabalt_u16 (z4, z0, z1),
+ z0_res = svabalt (z4, z0, z1))
+
+/*
+** abalt_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_u16_tied3, svuint16_t, svuint8_t,
+ z0_res = svabalt_u16 (z4, z1, z0),
+ z0_res = svabalt (z4, z1, z0))
+
+/*
+** abalt_u16_untied:
+** movprfx z0, z1
+** uabalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (abalt_u16_untied, svuint16_t, svuint8_t,
+ z0 = svabalt_u16 (z1, z4, z5),
+ z0 = svabalt (z1, z4, z5))
+
+/*
+** abalt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** uabalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0 = svabalt_n_u16 (z0, z4, x0),
+ z0 = svabalt (z0, z4, x0))
+
+/*
+** abalt_w0_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uabalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0 = svabalt_n_u16 (z1, z4, x0),
+ z0 = svabalt (z1, z4, x0))
+
+/*
+** abalt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** uabalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svabalt_n_u16 (z0, z4, 11),
+ z0 = svabalt (z0, z4, 11))
+
+/*
+** abalt_11_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** uabalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_u16_untied, svuint16_t, svuint8_t,
+ z0 = svabalt_n_u16 (z1, z4, 11),
+ z0 = svabalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalt_u32_tied1:
+** uabalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (abalt_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svabalt_u32 (z0, z4, z5),
+ z0 = svabalt (z0, z4, z5))
+
+/*
+** abalt_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svabalt_u32 (z4, z0, z1),
+ z0_res = svabalt (z4, z0, z1))
+
+/*
+** abalt_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svabalt_u32 (z4, z1, z0),
+ z0_res = svabalt (z4, z1, z0))
+
+/*
+** abalt_u32_untied:
+** movprfx z0, z1
+** uabalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (abalt_u32_untied, svuint32_t, svuint16_t,
+ z0 = svabalt_u32 (z1, z4, z5),
+ z0 = svabalt (z1, z4, z5))
+
+/*
+** abalt_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** uabalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0 = svabalt_n_u32 (z0, z4, x0),
+ z0 = svabalt (z0, z4, x0))
+
+/*
+** abalt_w0_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uabalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0 = svabalt_n_u32 (z1, z4, x0),
+ z0 = svabalt (z1, z4, x0))
+
+/*
+** abalt_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** uabalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svabalt_n_u32 (z0, z4, 11),
+ z0 = svabalt (z0, z4, 11))
+
+/*
+** abalt_11_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** uabalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_u32_untied, svuint32_t, svuint16_t,
+ z0 = svabalt_n_u32 (z1, z4, 11),
+ z0 = svabalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abalt_u64_tied1:
+** uabalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (abalt_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svabalt_u64 (z0, z4, z5),
+ z0 = svabalt (z0, z4, z5))
+
+/*
+** abalt_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svabalt_u64 (z4, z0, z1),
+ z0_res = svabalt (z4, z0, z1))
+
+/*
+** abalt_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uabalt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (abalt_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svabalt_u64 (z4, z1, z0),
+ z0_res = svabalt (z4, z1, z0))
+
+/*
+** abalt_u64_untied:
+** movprfx z0, z1
+** uabalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (abalt_u64_untied, svuint64_t, svuint32_t,
+ z0 = svabalt_u64 (z1, z4, z5),
+ z0 = svabalt (z1, z4, z5))
+
+/*
+** abalt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** uabalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0 = svabalt_n_u64 (z0, z4, x0),
+ z0 = svabalt (z0, z4, x0))
+
+/*
+** abalt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uabalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (abalt_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0 = svabalt_n_u64 (z1, z4, x0),
+ z0 = svabalt (z1, z4, x0))
+
+/*
+** abalt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** uabalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svabalt_n_u64 (z0, z4, 11),
+ z0 = svabalt (z0, z4, 11))
+
+/*
+** abalt_11_u64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** uabalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (abalt_11_u64_untied, svuint64_t, svuint32_t,
+ z0 = svabalt_n_u64 (z1, z4, 11),
+ z0 = svabalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlb_s16_tied1:
+** sabdlb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_s16_tied1, svint16_t, svint8_t,
+ z0_res = svabdlb_s16 (z0, z1),
+ z0_res = svabdlb (z0, z1))
+
+/*
+** abdlb_s16_tied2:
+** sabdlb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svabdlb_s16 (z1, z0),
+ z0_res = svabdlb (z1, z0))
+
+/*
+** abdlb_s16_untied:
+** sabdlb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_s16_untied, svint16_t, svint8_t,
+ z0_res = svabdlb_s16 (z1, z2),
+ z0_res = svabdlb (z1, z2))
+
+/*
+** abdlb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sabdlb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svabdlb_n_s16 (z0, x0),
+ z0_res = svabdlb (z0, x0))
+
+/*
+** abdlb_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** sabdlb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svabdlb_n_s16 (z1, x0),
+ z0_res = svabdlb (z1, x0))
+
+/*
+** abdlb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sabdlb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svabdlb_n_s16 (z0, 11),
+ z0_res = svabdlb (z0, 11))
+
+/*
+** abdlb_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** sabdlb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svabdlb_n_s16 (z1, 11),
+ z0_res = svabdlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlb_s32_tied1:
+** sabdlb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_s32_tied1, svint32_t, svint16_t,
+ z0_res = svabdlb_s32 (z0, z1),
+ z0_res = svabdlb (z0, z1))
+
+/*
+** abdlb_s32_tied2:
+** sabdlb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svabdlb_s32 (z1, z0),
+ z0_res = svabdlb (z1, z0))
+
+/*
+** abdlb_s32_untied:
+** sabdlb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_s32_untied, svint32_t, svint16_t,
+ z0_res = svabdlb_s32 (z1, z2),
+ z0_res = svabdlb (z1, z2))
+
+/*
+** abdlb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sabdlb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svabdlb_n_s32 (z0, x0),
+ z0_res = svabdlb (z0, x0))
+
+/*
+** abdlb_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** sabdlb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svabdlb_n_s32 (z1, x0),
+ z0_res = svabdlb (z1, x0))
+
+/*
+** abdlb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sabdlb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svabdlb_n_s32 (z0, 11),
+ z0_res = svabdlb (z0, 11))
+
+/*
+** abdlb_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** sabdlb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svabdlb_n_s32 (z1, 11),
+ z0_res = svabdlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlb_s64_tied1:
+** sabdlb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_s64_tied1, svint64_t, svint32_t,
+ z0_res = svabdlb_s64 (z0, z1),
+ z0_res = svabdlb (z0, z1))
+
+/*
+** abdlb_s64_tied2:
+** sabdlb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svabdlb_s64 (z1, z0),
+ z0_res = svabdlb (z1, z0))
+
+/*
+** abdlb_s64_untied:
+** sabdlb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_s64_untied, svint64_t, svint32_t,
+ z0_res = svabdlb_s64 (z1, z2),
+ z0_res = svabdlb (z1, z2))
+
+/*
+** abdlb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sabdlb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svabdlb_n_s64 (z0, x0),
+ z0_res = svabdlb (z0, x0))
+
+/*
+** abdlb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** sabdlb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svabdlb_n_s64 (z1, x0),
+ z0_res = svabdlb (z1, x0))
+
+/*
+** abdlb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sabdlb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svabdlb_n_s64 (z0, 11),
+ z0_res = svabdlb (z0, 11))
+
+/*
+** abdlb_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** sabdlb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svabdlb_n_s64 (z1, 11),
+ z0_res = svabdlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlb_u16_tied1:
+** uabdlb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svabdlb_u16 (z0, z1),
+ z0_res = svabdlb (z0, z1))
+
+/*
+** abdlb_u16_tied2:
+** uabdlb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svabdlb_u16 (z1, z0),
+ z0_res = svabdlb (z1, z0))
+
+/*
+** abdlb_u16_untied:
+** uabdlb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svabdlb_u16 (z1, z2),
+ z0_res = svabdlb (z1, z2))
+
+/*
+** abdlb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** uabdlb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svabdlb_n_u16 (z0, x0),
+ z0_res = svabdlb (z0, x0))
+
+/*
+** abdlb_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** uabdlb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svabdlb_n_u16 (z1, x0),
+ z0_res = svabdlb (z1, x0))
+
+/*
+** abdlb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** uabdlb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svabdlb_n_u16 (z0, 11),
+ z0_res = svabdlb (z0, 11))
+
+/*
+** abdlb_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** uabdlb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svabdlb_n_u16 (z1, 11),
+ z0_res = svabdlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlb_u32_tied1:
+** uabdlb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svabdlb_u32 (z0, z1),
+ z0_res = svabdlb (z0, z1))
+
+/*
+** abdlb_u32_tied2:
+** uabdlb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svabdlb_u32 (z1, z0),
+ z0_res = svabdlb (z1, z0))
+
+/*
+** abdlb_u32_untied:
+** uabdlb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svabdlb_u32 (z1, z2),
+ z0_res = svabdlb (z1, z2))
+
+/*
+** abdlb_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** uabdlb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svabdlb_n_u32 (z0, x0),
+ z0_res = svabdlb (z0, x0))
+
+/*
+** abdlb_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** uabdlb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svabdlb_n_u32 (z1, x0),
+ z0_res = svabdlb (z1, x0))
+
+/*
+** abdlb_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** uabdlb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svabdlb_n_u32 (z0, 11),
+ z0_res = svabdlb (z0, 11))
+
+/*
+** abdlb_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** uabdlb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svabdlb_n_u32 (z1, 11),
+ z0_res = svabdlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlb_u64_tied1:
+** uabdlb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svabdlb_u64 (z0, z1),
+ z0_res = svabdlb (z0, z1))
+
+/*
+** abdlb_u64_tied2:
+** uabdlb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svabdlb_u64 (z1, z0),
+ z0_res = svabdlb (z1, z0))
+
+/*
+** abdlb_u64_untied:
+** uabdlb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svabdlb_u64 (z1, z2),
+ z0_res = svabdlb (z1, z2))
+
+/*
+** abdlb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** uabdlb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svabdlb_n_u64 (z0, x0),
+ z0_res = svabdlb (z0, x0))
+
+/*
+** abdlb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** uabdlb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlb_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svabdlb_n_u64 (z1, x0),
+ z0_res = svabdlb (z1, x0))
+
+/*
+** abdlb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** uabdlb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svabdlb_n_u64 (z0, 11),
+ z0_res = svabdlb (z0, 11))
+
+/*
+** abdlb_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** uabdlb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlb_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svabdlb_n_u64 (z1, 11),
+ z0_res = svabdlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlt_s16_tied1:
+** sabdlt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_s16_tied1, svint16_t, svint8_t,
+ z0_res = svabdlt_s16 (z0, z1),
+ z0_res = svabdlt (z0, z1))
+
+/*
+** abdlt_s16_tied2:
+** sabdlt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svabdlt_s16 (z1, z0),
+ z0_res = svabdlt (z1, z0))
+
+/*
+** abdlt_s16_untied:
+** sabdlt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_s16_untied, svint16_t, svint8_t,
+ z0_res = svabdlt_s16 (z1, z2),
+ z0_res = svabdlt (z1, z2))
+
+/*
+** abdlt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sabdlt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svabdlt_n_s16 (z0, x0),
+ z0_res = svabdlt (z0, x0))
+
+/*
+** abdlt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** sabdlt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svabdlt_n_s16 (z1, x0),
+ z0_res = svabdlt (z1, x0))
+
+/*
+** abdlt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sabdlt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svabdlt_n_s16 (z0, 11),
+ z0_res = svabdlt (z0, 11))
+
+/*
+** abdlt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** sabdlt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svabdlt_n_s16 (z1, 11),
+ z0_res = svabdlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlt_s32_tied1:
+** sabdlt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_s32_tied1, svint32_t, svint16_t,
+ z0_res = svabdlt_s32 (z0, z1),
+ z0_res = svabdlt (z0, z1))
+
+/*
+** abdlt_s32_tied2:
+** sabdlt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svabdlt_s32 (z1, z0),
+ z0_res = svabdlt (z1, z0))
+
+/*
+** abdlt_s32_untied:
+** sabdlt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_s32_untied, svint32_t, svint16_t,
+ z0_res = svabdlt_s32 (z1, z2),
+ z0_res = svabdlt (z1, z2))
+
+/*
+** abdlt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sabdlt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svabdlt_n_s32 (z0, x0),
+ z0_res = svabdlt (z0, x0))
+
+/*
+** abdlt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** sabdlt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svabdlt_n_s32 (z1, x0),
+ z0_res = svabdlt (z1, x0))
+
+/*
+** abdlt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sabdlt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svabdlt_n_s32 (z0, 11),
+ z0_res = svabdlt (z0, 11))
+
+/*
+** abdlt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** sabdlt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svabdlt_n_s32 (z1, 11),
+ z0_res = svabdlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlt_s64_tied1:
+** sabdlt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_s64_tied1, svint64_t, svint32_t,
+ z0_res = svabdlt_s64 (z0, z1),
+ z0_res = svabdlt (z0, z1))
+
+/*
+** abdlt_s64_tied2:
+** sabdlt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svabdlt_s64 (z1, z0),
+ z0_res = svabdlt (z1, z0))
+
+/*
+** abdlt_s64_untied:
+** sabdlt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_s64_untied, svint64_t, svint32_t,
+ z0_res = svabdlt_s64 (z1, z2),
+ z0_res = svabdlt (z1, z2))
+
+/*
+** abdlt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sabdlt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svabdlt_n_s64 (z0, x0),
+ z0_res = svabdlt (z0, x0))
+
+/*
+** abdlt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** sabdlt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svabdlt_n_s64 (z1, x0),
+ z0_res = svabdlt (z1, x0))
+
+/*
+** abdlt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sabdlt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svabdlt_n_s64 (z0, 11),
+ z0_res = svabdlt (z0, 11))
+
+/*
+** abdlt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** sabdlt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svabdlt_n_s64 (z1, 11),
+ z0_res = svabdlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlt_u16_tied1:
+** uabdlt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svabdlt_u16 (z0, z1),
+ z0_res = svabdlt (z0, z1))
+
+/*
+** abdlt_u16_tied2:
+** uabdlt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svabdlt_u16 (z1, z0),
+ z0_res = svabdlt (z1, z0))
+
+/*
+** abdlt_u16_untied:
+** uabdlt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svabdlt_u16 (z1, z2),
+ z0_res = svabdlt (z1, z2))
+
+/*
+** abdlt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** uabdlt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svabdlt_n_u16 (z0, x0),
+ z0_res = svabdlt (z0, x0))
+
+/*
+** abdlt_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** uabdlt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svabdlt_n_u16 (z1, x0),
+ z0_res = svabdlt (z1, x0))
+
+/*
+** abdlt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** uabdlt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svabdlt_n_u16 (z0, 11),
+ z0_res = svabdlt (z0, 11))
+
+/*
+** abdlt_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** uabdlt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svabdlt_n_u16 (z1, 11),
+ z0_res = svabdlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlt_u32_tied1:
+** uabdlt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svabdlt_u32 (z0, z1),
+ z0_res = svabdlt (z0, z1))
+
+/*
+** abdlt_u32_tied2:
+** uabdlt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svabdlt_u32 (z1, z0),
+ z0_res = svabdlt (z1, z0))
+
+/*
+** abdlt_u32_untied:
+** uabdlt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svabdlt_u32 (z1, z2),
+ z0_res = svabdlt (z1, z2))
+
+/*
+** abdlt_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** uabdlt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svabdlt_n_u32 (z0, x0),
+ z0_res = svabdlt (z0, x0))
+
+/*
+** abdlt_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** uabdlt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svabdlt_n_u32 (z1, x0),
+ z0_res = svabdlt (z1, x0))
+
+/*
+** abdlt_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** uabdlt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svabdlt_n_u32 (z0, 11),
+ z0_res = svabdlt (z0, 11))
+
+/*
+** abdlt_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** uabdlt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svabdlt_n_u32 (z1, 11),
+ z0_res = svabdlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** abdlt_u64_tied1:
+** uabdlt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svabdlt_u64 (z0, z1),
+ z0_res = svabdlt (z0, z1))
+
+/*
+** abdlt_u64_tied2:
+** uabdlt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svabdlt_u64 (z1, z0),
+ z0_res = svabdlt (z1, z0))
+
+/*
+** abdlt_u64_untied:
+** uabdlt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svabdlt_u64 (z1, z2),
+ z0_res = svabdlt (z1, z2))
+
+/*
+** abdlt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** uabdlt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svabdlt_n_u64 (z0, x0),
+ z0_res = svabdlt (z0, x0))
+
+/*
+** abdlt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** uabdlt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (abdlt_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svabdlt_n_u64 (z1, x0),
+ z0_res = svabdlt (z1, x0))
+
+/*
+** abdlt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** uabdlt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svabdlt_n_u64 (z0, 11),
+ z0_res = svabdlt (z0, 11))
+
+/*
+** abdlt_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** uabdlt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (abdlt_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svabdlt_n_u64 (z1, 11),
+ z0_res = svabdlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adalp_s16_m_tied1:
+** sadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_s16_m_tied1, svint16_t, svint8_t,
+ z0 = svadalp_s16_m (p0, z0, z4),
+ z0 = svadalp_m (p0, z0, z4))
+
+/*
+** adalp_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sadalp z0\.h, p0/m, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_s16_m_tied2, svint16_t, svint8_t,
+ z0_res = svadalp_s16_m (p0, z4, z0),
+ z0_res = svadalp_m (p0, z4, z0))
+
+/*
+** adalp_s16_m_untied:
+** movprfx z0, z1
+** sadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_s16_m_untied, svint16_t, svint8_t,
+ z0 = svadalp_s16_m (p0, z1, z4),
+ z0 = svadalp_m (p0, z1, z4))
+
+/*
+** adalp_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_s16_z_tied1, svint16_t, svint8_t,
+ z0 = svadalp_s16_z (p0, z0, z4),
+ z0 = svadalp_z (p0, z0, z4))
+
+/*
+** adalp_s16_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.h, p0/z, z4\.h
+** sadalp z0\.h, p0/m, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_s16_z_tied2, svint16_t, svint8_t,
+ z0_res = svadalp_s16_z (p0, z4, z0),
+ z0_res = svadalp_z (p0, z4, z0))
+
+/*
+** adalp_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** sadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_s16_z_untied, svint16_t, svint8_t,
+ z0 = svadalp_s16_z (p0, z1, z4),
+ z0 = svadalp_z (p0, z1, z4))
+
+/*
+** adalp_s16_x_tied1:
+** sadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_s16_x_tied1, svint16_t, svint8_t,
+ z0 = svadalp_s16_x (p0, z0, z4),
+ z0 = svadalp_x (p0, z0, z4))
+
+/*
+** adalp_s16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sadalp z0\.h, p0/m, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_s16_x_tied2, svint16_t, svint8_t,
+ z0_res = svadalp_s16_x (p0, z4, z0),
+ z0_res = svadalp_x (p0, z4, z0))
+
+/*
+** adalp_s16_x_untied:
+** movprfx z0, z1
+** sadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_s16_x_untied, svint16_t, svint8_t,
+ z0 = svadalp_s16_x (p0, z1, z4),
+ z0 = svadalp_x (p0, z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adalp_s32_m_tied1:
+** sadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_s32_m_tied1, svint32_t, svint16_t,
+ z0 = svadalp_s32_m (p0, z0, z4),
+ z0 = svadalp_m (p0, z0, z4))
+
+/*
+** adalp_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sadalp z0\.s, p0/m, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_s32_m_tied2, svint32_t, svint16_t,
+ z0_res = svadalp_s32_m (p0, z4, z0),
+ z0_res = svadalp_m (p0, z4, z0))
+
+/*
+** adalp_s32_m_untied:
+** movprfx z0, z1
+** sadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_s32_m_untied, svint32_t, svint16_t,
+ z0 = svadalp_s32_m (p0, z1, z4),
+ z0 = svadalp_m (p0, z1, z4))
+
+/*
+** adalp_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_s32_z_tied1, svint32_t, svint16_t,
+ z0 = svadalp_s32_z (p0, z0, z4),
+ z0 = svadalp_z (p0, z0, z4))
+
+/*
+** adalp_s32_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.s, p0/z, z4\.s
+** sadalp z0\.s, p0/m, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_s32_z_tied2, svint32_t, svint16_t,
+ z0_res = svadalp_s32_z (p0, z4, z0),
+ z0_res = svadalp_z (p0, z4, z0))
+
+/*
+** adalp_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** sadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_s32_z_untied, svint32_t, svint16_t,
+ z0 = svadalp_s32_z (p0, z1, z4),
+ z0 = svadalp_z (p0, z1, z4))
+
+/*
+** adalp_s32_x_tied1:
+** sadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_s32_x_tied1, svint32_t, svint16_t,
+ z0 = svadalp_s32_x (p0, z0, z4),
+ z0 = svadalp_x (p0, z0, z4))
+
+/*
+** adalp_s32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sadalp z0\.s, p0/m, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_s32_x_tied2, svint32_t, svint16_t,
+ z0_res = svadalp_s32_x (p0, z4, z0),
+ z0_res = svadalp_x (p0, z4, z0))
+
+/*
+** adalp_s32_x_untied:
+** movprfx z0, z1
+** sadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_s32_x_untied, svint32_t, svint16_t,
+ z0 = svadalp_s32_x (p0, z1, z4),
+ z0 = svadalp_x (p0, z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adalp_s64_m_tied1:
+** sadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_s64_m_tied1, svint64_t, svint32_t,
+ z0 = svadalp_s64_m (p0, z0, z4),
+ z0 = svadalp_m (p0, z0, z4))
+
+/*
+** adalp_s64_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sadalp z0\.d, p0/m, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_s64_m_tied2, svint64_t, svint32_t,
+ z0_res = svadalp_s64_m (p0, z4, z0),
+ z0_res = svadalp_m (p0, z4, z0))
+
+/*
+** adalp_s64_m_untied:
+** movprfx z0, z1
+** sadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_s64_m_untied, svint64_t, svint32_t,
+ z0 = svadalp_s64_m (p0, z1, z4),
+ z0 = svadalp_m (p0, z1, z4))
+
+/*
+** adalp_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_s64_z_tied1, svint64_t, svint32_t,
+ z0 = svadalp_s64_z (p0, z0, z4),
+ z0 = svadalp_z (p0, z0, z4))
+
+/*
+** adalp_s64_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.d, p0/z, z4\.d
+** sadalp z0\.d, p0/m, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_s64_z_tied2, svint64_t, svint32_t,
+ z0_res = svadalp_s64_z (p0, z4, z0),
+ z0_res = svadalp_z (p0, z4, z0))
+
+/*
+** adalp_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** sadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_s64_z_untied, svint64_t, svint32_t,
+ z0 = svadalp_s64_z (p0, z1, z4),
+ z0 = svadalp_z (p0, z1, z4))
+
+/*
+** adalp_s64_x_tied1:
+** sadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_s64_x_tied1, svint64_t, svint32_t,
+ z0 = svadalp_s64_x (p0, z0, z4),
+ z0 = svadalp_x (p0, z0, z4))
+
+/*
+** adalp_s64_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sadalp z0\.d, p0/m, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_s64_x_tied2, svint64_t, svint32_t,
+ z0_res = svadalp_s64_x (p0, z4, z0),
+ z0_res = svadalp_x (p0, z4, z0))
+
+/*
+** adalp_s64_x_untied:
+** movprfx z0, z1
+** sadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_s64_x_untied, svint64_t, svint32_t,
+ z0 = svadalp_s64_x (p0, z1, z4),
+ z0 = svadalp_x (p0, z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adalp_u16_m_tied1:
+** uadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_u16_m_tied1, svuint16_t, svuint8_t,
+ z0 = svadalp_u16_m (p0, z0, z4),
+ z0 = svadalp_m (p0, z0, z4))
+
+/*
+** adalp_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uadalp z0\.h, p0/m, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_u16_m_tied2, svuint16_t, svuint8_t,
+ z0_res = svadalp_u16_m (p0, z4, z0),
+ z0_res = svadalp_m (p0, z4, z0))
+
+/*
+** adalp_u16_m_untied:
+** movprfx z0, z1
+** uadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_u16_m_untied, svuint16_t, svuint8_t,
+ z0 = svadalp_u16_m (p0, z1, z4),
+ z0 = svadalp_m (p0, z1, z4))
+
+/*
+** adalp_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_u16_z_tied1, svuint16_t, svuint8_t,
+ z0 = svadalp_u16_z (p0, z0, z4),
+ z0 = svadalp_z (p0, z0, z4))
+
+/*
+** adalp_u16_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.h, p0/z, z4\.h
+** uadalp z0\.h, p0/m, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_u16_z_tied2, svuint16_t, svuint8_t,
+ z0_res = svadalp_u16_z (p0, z4, z0),
+ z0_res = svadalp_z (p0, z4, z0))
+
+/*
+** adalp_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** uadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_u16_z_untied, svuint16_t, svuint8_t,
+ z0 = svadalp_u16_z (p0, z1, z4),
+ z0 = svadalp_z (p0, z1, z4))
+
+/*
+** adalp_u16_x_tied1:
+** uadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_u16_x_tied1, svuint16_t, svuint8_t,
+ z0 = svadalp_u16_x (p0, z0, z4),
+ z0 = svadalp_x (p0, z0, z4))
+
+/*
+** adalp_u16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uadalp z0\.h, p0/m, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_u16_x_tied2, svuint16_t, svuint8_t,
+ z0_res = svadalp_u16_x (p0, z4, z0),
+ z0_res = svadalp_x (p0, z4, z0))
+
+/*
+** adalp_u16_x_untied:
+** movprfx z0, z1
+** uadalp z0\.h, p0/m, z4\.b
+** ret
+*/
+TEST_DUAL_Z (adalp_u16_x_untied, svuint16_t, svuint8_t,
+ z0 = svadalp_u16_x (p0, z1, z4),
+ z0 = svadalp_x (p0, z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adalp_u32_m_tied1:
+** uadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_u32_m_tied1, svuint32_t, svuint16_t,
+ z0 = svadalp_u32_m (p0, z0, z4),
+ z0 = svadalp_m (p0, z0, z4))
+
+/*
+** adalp_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uadalp z0\.s, p0/m, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_u32_m_tied2, svuint32_t, svuint16_t,
+ z0_res = svadalp_u32_m (p0, z4, z0),
+ z0_res = svadalp_m (p0, z4, z0))
+
+/*
+** adalp_u32_m_untied:
+** movprfx z0, z1
+** uadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_u32_m_untied, svuint32_t, svuint16_t,
+ z0 = svadalp_u32_m (p0, z1, z4),
+ z0 = svadalp_m (p0, z1, z4))
+
+/*
+** adalp_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_u32_z_tied1, svuint32_t, svuint16_t,
+ z0 = svadalp_u32_z (p0, z0, z4),
+ z0 = svadalp_z (p0, z0, z4))
+
+/*
+** adalp_u32_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.s, p0/z, z4\.s
+** uadalp z0\.s, p0/m, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_u32_z_tied2, svuint32_t, svuint16_t,
+ z0_res = svadalp_u32_z (p0, z4, z0),
+ z0_res = svadalp_z (p0, z4, z0))
+
+/*
+** adalp_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** uadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_u32_z_untied, svuint32_t, svuint16_t,
+ z0 = svadalp_u32_z (p0, z1, z4),
+ z0 = svadalp_z (p0, z1, z4))
+
+/*
+** adalp_u32_x_tied1:
+** uadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_u32_x_tied1, svuint32_t, svuint16_t,
+ z0 = svadalp_u32_x (p0, z0, z4),
+ z0 = svadalp_x (p0, z0, z4))
+
+/*
+** adalp_u32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uadalp z0\.s, p0/m, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_u32_x_tied2, svuint32_t, svuint16_t,
+ z0_res = svadalp_u32_x (p0, z4, z0),
+ z0_res = svadalp_x (p0, z4, z0))
+
+/*
+** adalp_u32_x_untied:
+** movprfx z0, z1
+** uadalp z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (adalp_u32_x_untied, svuint32_t, svuint16_t,
+ z0 = svadalp_u32_x (p0, z1, z4),
+ z0 = svadalp_x (p0, z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adalp_u64_m_tied1:
+** uadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_u64_m_tied1, svuint64_t, svuint32_t,
+ z0 = svadalp_u64_m (p0, z0, z4),
+ z0 = svadalp_m (p0, z0, z4))
+
+/*
+** adalp_u64_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uadalp z0\.d, p0/m, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_u64_m_tied2, svuint64_t, svuint32_t,
+ z0_res = svadalp_u64_m (p0, z4, z0),
+ z0_res = svadalp_m (p0, z4, z0))
+
+/*
+** adalp_u64_m_untied:
+** movprfx z0, z1
+** uadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_u64_m_untied, svuint64_t, svuint32_t,
+ z0 = svadalp_u64_m (p0, z1, z4),
+ z0 = svadalp_m (p0, z1, z4))
+
+/*
+** adalp_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_u64_z_tied1, svuint64_t, svuint32_t,
+ z0 = svadalp_u64_z (p0, z0, z4),
+ z0 = svadalp_z (p0, z0, z4))
+
+/*
+** adalp_u64_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.d, p0/z, z4\.d
+** uadalp z0\.d, p0/m, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_u64_z_tied2, svuint64_t, svuint32_t,
+ z0_res = svadalp_u64_z (p0, z4, z0),
+ z0_res = svadalp_z (p0, z4, z0))
+
+/*
+** adalp_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** uadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_u64_z_untied, svuint64_t, svuint32_t,
+ z0 = svadalp_u64_z (p0, z1, z4),
+ z0 = svadalp_z (p0, z1, z4))
+
+/*
+** adalp_u64_x_tied1:
+** uadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_u64_x_tied1, svuint64_t, svuint32_t,
+ z0 = svadalp_u64_x (p0, z0, z4),
+ z0 = svadalp_x (p0, z0, z4))
+
+/*
+** adalp_u64_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uadalp z0\.d, p0/m, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (adalp_u64_x_tied2, svuint64_t, svuint32_t,
+ z0_res = svadalp_u64_x (p0, z4, z0),
+ z0_res = svadalp_x (p0, z4, z0))
+
+/*
+** adalp_u64_x_untied:
+** movprfx z0, z1
+** uadalp z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (adalp_u64_x_untied, svuint64_t, svuint32_t,
+ z0 = svadalp_u64_x (p0, z1, z4),
+ z0 = svadalp_x (p0, z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adclb_u32_tied1:
+** adclb z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (adclb_u32_tied1, svuint32_t,
+ z0 = svadclb_u32 (z0, z1, z2),
+ z0 = svadclb (z0, z1, z2))
+
+/*
+** adclb_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** adclb z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (adclb_u32_tied2, svuint32_t,
+ z0 = svadclb_u32 (z1, z0, z2),
+ z0 = svadclb (z1, z0, z2))
+
+/*
+** adclb_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** adclb z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (adclb_u32_tied3, svuint32_t,
+ z0 = svadclb_u32 (z1, z2, z0),
+ z0 = svadclb (z1, z2, z0))
+
+/*
+** adclb_u32_untied:
+** movprfx z0, z1
+** adclb z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (adclb_u32_untied, svuint32_t,
+ z0 = svadclb_u32 (z1, z2, z3),
+ z0 = svadclb (z1, z2, z3))
+
+/*
+** adclb_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** adclb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclb_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svadclb_n_u32 (z0, z1, x0),
+ z0 = svadclb (z0, z1, x0))
+
+/*
+** adclb_w0_u32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** adclb z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclb_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svadclb_n_u32 (z1, z0, x0),
+ z0 = svadclb (z1, z0, x0))
+
+/*
+** adclb_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** adclb z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclb_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svadclb_n_u32 (z1, z2, x0),
+ z0 = svadclb (z1, z2, x0))
+
+/*
+** adclb_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** adclb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclb_11_u32_tied1, svuint32_t,
+ z0 = svadclb_n_u32 (z0, z1, 11),
+ z0 = svadclb (z0, z1, 11))
+
+/*
+** adclb_11_u32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** adclb z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclb_11_u32_tied2, svuint32_t,
+ z0 = svadclb_n_u32 (z1, z0, 11),
+ z0 = svadclb (z1, z0, 11))
+
+/*
+** adclb_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** adclb z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclb_11_u32_untied, svuint32_t,
+ z0 = svadclb_n_u32 (z1, z2, 11),
+ z0 = svadclb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adclb_u64_tied1:
+** adclb z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (adclb_u64_tied1, svuint64_t,
+ z0 = svadclb_u64 (z0, z1, z2),
+ z0 = svadclb (z0, z1, z2))
+
+/*
+** adclb_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** adclb z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (adclb_u64_tied2, svuint64_t,
+ z0 = svadclb_u64 (z1, z0, z2),
+ z0 = svadclb (z1, z0, z2))
+
+/*
+** adclb_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** adclb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclb_u64_tied3, svuint64_t,
+ z0 = svadclb_u64 (z1, z2, z0),
+ z0 = svadclb (z1, z2, z0))
+
+/*
+** adclb_u64_untied:
+** movprfx z0, z1
+** adclb z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (adclb_u64_untied, svuint64_t,
+ z0 = svadclb_u64 (z1, z2, z3),
+ z0 = svadclb (z1, z2, z3))
+
+/*
+** adclb_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** adclb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclb_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svadclb_n_u64 (z0, z1, x0),
+ z0 = svadclb (z0, z1, x0))
+
+/*
+** adclb_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** adclb z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclb_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svadclb_n_u64 (z1, z0, x0),
+ z0 = svadclb (z1, z0, x0))
+
+/*
+** adclb_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** adclb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclb_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svadclb_n_u64 (z1, z2, x0),
+ z0 = svadclb (z1, z2, x0))
+
+/*
+** adclb_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** adclb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclb_11_u64_tied1, svuint64_t,
+ z0 = svadclb_n_u64 (z0, z1, 11),
+ z0 = svadclb (z0, z1, 11))
+
+/*
+** adclb_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** adclb z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclb_11_u64_tied2, svuint64_t,
+ z0 = svadclb_n_u64 (z1, z0, 11),
+ z0 = svadclb (z1, z0, 11))
+
+/*
+** adclb_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** adclb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclb_11_u64_untied, svuint64_t,
+ z0 = svadclb_n_u64 (z1, z2, 11),
+ z0 = svadclb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adclt_u32_tied1:
+** adclt z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (adclt_u32_tied1, svuint32_t,
+ z0 = svadclt_u32 (z0, z1, z2),
+ z0 = svadclt (z0, z1, z2))
+
+/*
+** adclt_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** adclt z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (adclt_u32_tied2, svuint32_t,
+ z0 = svadclt_u32 (z1, z0, z2),
+ z0 = svadclt (z1, z0, z2))
+
+/*
+** adclt_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** adclt z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (adclt_u32_tied3, svuint32_t,
+ z0 = svadclt_u32 (z1, z2, z0),
+ z0 = svadclt (z1, z2, z0))
+
+/*
+** adclt_u32_untied:
+** movprfx z0, z1
+** adclt z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (adclt_u32_untied, svuint32_t,
+ z0 = svadclt_u32 (z1, z2, z3),
+ z0 = svadclt (z1, z2, z3))
+
+/*
+** adclt_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** adclt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclt_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svadclt_n_u32 (z0, z1, x0),
+ z0 = svadclt (z0, z1, x0))
+
+/*
+** adclt_w0_u32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** adclt z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclt_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svadclt_n_u32 (z1, z0, x0),
+ z0 = svadclt (z1, z0, x0))
+
+/*
+** adclt_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** adclt z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclt_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svadclt_n_u32 (z1, z2, x0),
+ z0 = svadclt (z1, z2, x0))
+
+/*
+** adclt_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** adclt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclt_11_u32_tied1, svuint32_t,
+ z0 = svadclt_n_u32 (z0, z1, 11),
+ z0 = svadclt (z0, z1, 11))
+
+/*
+** adclt_11_u32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** adclt z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclt_11_u32_tied2, svuint32_t,
+ z0 = svadclt_n_u32 (z1, z0, 11),
+ z0 = svadclt (z1, z0, 11))
+
+/*
+** adclt_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** adclt z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclt_11_u32_untied, svuint32_t,
+ z0 = svadclt_n_u32 (z1, z2, 11),
+ z0 = svadclt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** adclt_u64_tied1:
+** adclt z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (adclt_u64_tied1, svuint64_t,
+ z0 = svadclt_u64 (z0, z1, z2),
+ z0 = svadclt (z0, z1, z2))
+
+/*
+** adclt_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** adclt z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (adclt_u64_tied2, svuint64_t,
+ z0 = svadclt_u64 (z1, z0, z2),
+ z0 = svadclt (z1, z0, z2))
+
+/*
+** adclt_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** adclt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclt_u64_tied3, svuint64_t,
+ z0 = svadclt_u64 (z1, z2, z0),
+ z0 = svadclt (z1, z2, z0))
+
+/*
+** adclt_u64_untied:
+** movprfx z0, z1
+** adclt z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (adclt_u64_untied, svuint64_t,
+ z0 = svadclt_u64 (z1, z2, z3),
+ z0 = svadclt (z1, z2, z3))
+
+/*
+** adclt_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** adclt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclt_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svadclt_n_u64 (z0, z1, x0),
+ z0 = svadclt (z0, z1, x0))
+
+/*
+** adclt_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** adclt z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclt_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svadclt_n_u64 (z1, z0, x0),
+ z0 = svadclt (z1, z0, x0))
+
+/*
+** adclt_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** adclt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (adclt_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svadclt_n_u64 (z1, z2, x0),
+ z0 = svadclt (z1, z2, x0))
+
+/*
+** adclt_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** adclt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclt_11_u64_tied1, svuint64_t,
+ z0 = svadclt_n_u64 (z0, z1, 11),
+ z0 = svadclt (z0, z1, 11))
+
+/*
+** adclt_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** adclt z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclt_11_u64_tied2, svuint64_t,
+ z0 = svadclt_n_u64 (z1, z0, 11),
+ z0 = svadclt (z1, z0, 11))
+
+/*
+** adclt_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** adclt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (adclt_11_u64_untied, svuint64_t,
+ z0 = svadclt_n_u64 (z1, z2, 11),
+ z0 = svadclt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnb_s16_tied1:
+** addhnb z0\.b, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_s16_tied1, svint8_t, svint16_t,
+ z0_res = svaddhnb_s16 (z0, z1),
+ z0_res = svaddhnb (z0, z1))
+
+/*
+** addhnb_s16_tied2:
+** addhnb z0\.b, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_s16_tied2, svint8_t, svint16_t,
+ z0_res = svaddhnb_s16 (z1, z0),
+ z0_res = svaddhnb (z1, z0))
+
+/*
+** addhnb_s16_untied:
+** addhnb z0\.b, (z1\.h, z2\.h|z2\.h, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_s16_untied, svint8_t, svint16_t,
+ z0_res = svaddhnb_s16 (z1, z2),
+ z0_res = svaddhnb (z1, z2))
+
+/*
+** addhnb_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** addhnb z0\.b, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_w0_s16_tied1, svint8_t, svint16_t, int16_t,
+ z0_res = svaddhnb_n_s16 (z0, x0),
+ z0_res = svaddhnb (z0, x0))
+
+/*
+** addhnb_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** addhnb z0\.b, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_w0_s16_untied, svint8_t, svint16_t, int16_t,
+ z0_res = svaddhnb_n_s16 (z1, x0),
+ z0_res = svaddhnb (z1, x0))
+
+/*
+** addhnb_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** addhnb z0\.b, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_s16_tied1, svint8_t, svint16_t,
+ z0_res = svaddhnb_n_s16 (z0, 11),
+ z0_res = svaddhnb (z0, 11))
+
+/*
+** addhnb_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** addhnb z0\.b, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_s16_untied, svint8_t, svint16_t,
+ z0_res = svaddhnb_n_s16 (z1, 11),
+ z0_res = svaddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnb_s32_tied1:
+** addhnb z0\.h, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_s32_tied1, svint16_t, svint32_t,
+ z0_res = svaddhnb_s32 (z0, z1),
+ z0_res = svaddhnb (z0, z1))
+
+/*
+** addhnb_s32_tied2:
+** addhnb z0\.h, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_s32_tied2, svint16_t, svint32_t,
+ z0_res = svaddhnb_s32 (z1, z0),
+ z0_res = svaddhnb (z1, z0))
+
+/*
+** addhnb_s32_untied:
+** addhnb z0\.h, (z1\.s, z2\.s|z2\.s, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_s32_untied, svint16_t, svint32_t,
+ z0_res = svaddhnb_s32 (z1, z2),
+ z0_res = svaddhnb (z1, z2))
+
+/*
+** addhnb_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** addhnb z0\.h, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_w0_s32_tied1, svint16_t, svint32_t, int32_t,
+ z0_res = svaddhnb_n_s32 (z0, x0),
+ z0_res = svaddhnb (z0, x0))
+
+/*
+** addhnb_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** addhnb z0\.h, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_w0_s32_untied, svint16_t, svint32_t, int32_t,
+ z0_res = svaddhnb_n_s32 (z1, x0),
+ z0_res = svaddhnb (z1, x0))
+
+/*
+** addhnb_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** addhnb z0\.h, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_s32_tied1, svint16_t, svint32_t,
+ z0_res = svaddhnb_n_s32 (z0, 11),
+ z0_res = svaddhnb (z0, 11))
+
+/*
+** addhnb_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** addhnb z0\.h, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_s32_untied, svint16_t, svint32_t,
+ z0_res = svaddhnb_n_s32 (z1, 11),
+ z0_res = svaddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnb_s64_tied1:
+** addhnb z0\.s, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_s64_tied1, svint32_t, svint64_t,
+ z0_res = svaddhnb_s64 (z0, z1),
+ z0_res = svaddhnb (z0, z1))
+
+/*
+** addhnb_s64_tied2:
+** addhnb z0\.s, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_s64_tied2, svint32_t, svint64_t,
+ z0_res = svaddhnb_s64 (z1, z0),
+ z0_res = svaddhnb (z1, z0))
+
+/*
+** addhnb_s64_untied:
+** addhnb z0\.s, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_s64_untied, svint32_t, svint64_t,
+ z0_res = svaddhnb_s64 (z1, z2),
+ z0_res = svaddhnb (z1, z2))
+
+/*
+** addhnb_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** addhnb z0\.s, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_x0_s64_tied1, svint32_t, svint64_t, int64_t,
+ z0_res = svaddhnb_n_s64 (z0, x0),
+ z0_res = svaddhnb (z0, x0))
+
+/*
+** addhnb_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** addhnb z0\.s, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_x0_s64_untied, svint32_t, svint64_t, int64_t,
+ z0_res = svaddhnb_n_s64 (z1, x0),
+ z0_res = svaddhnb (z1, x0))
+
+/*
+** addhnb_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** addhnb z0\.s, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_s64_tied1, svint32_t, svint64_t,
+ z0_res = svaddhnb_n_s64 (z0, 11),
+ z0_res = svaddhnb (z0, 11))
+
+/*
+** addhnb_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** addhnb z0\.s, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_s64_untied, svint32_t, svint64_t,
+ z0_res = svaddhnb_n_s64 (z1, 11),
+ z0_res = svaddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnb_u16_tied1:
+** addhnb z0\.b, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svaddhnb_u16 (z0, z1),
+ z0_res = svaddhnb (z0, z1))
+
+/*
+** addhnb_u16_tied2:
+** addhnb z0\.b, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_u16_tied2, svuint8_t, svuint16_t,
+ z0_res = svaddhnb_u16 (z1, z0),
+ z0_res = svaddhnb (z1, z0))
+
+/*
+** addhnb_u16_untied:
+** addhnb z0\.b, (z1\.h, z2\.h|z2\.h, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svaddhnb_u16 (z1, z2),
+ z0_res = svaddhnb (z1, z2))
+
+/*
+** addhnb_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** addhnb z0\.b, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_w0_u16_tied1, svuint8_t, svuint16_t, uint16_t,
+ z0_res = svaddhnb_n_u16 (z0, x0),
+ z0_res = svaddhnb (z0, x0))
+
+/*
+** addhnb_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** addhnb z0\.b, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_w0_u16_untied, svuint8_t, svuint16_t, uint16_t,
+ z0_res = svaddhnb_n_u16 (z1, x0),
+ z0_res = svaddhnb (z1, x0))
+
+/*
+** addhnb_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** addhnb z0\.b, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svaddhnb_n_u16 (z0, 11),
+ z0_res = svaddhnb (z0, 11))
+
+/*
+** addhnb_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** addhnb z0\.b, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svaddhnb_n_u16 (z1, 11),
+ z0_res = svaddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnb_u32_tied1:
+** addhnb z0\.h, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svaddhnb_u32 (z0, z1),
+ z0_res = svaddhnb (z0, z1))
+
+/*
+** addhnb_u32_tied2:
+** addhnb z0\.h, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_u32_tied2, svuint16_t, svuint32_t,
+ z0_res = svaddhnb_u32 (z1, z0),
+ z0_res = svaddhnb (z1, z0))
+
+/*
+** addhnb_u32_untied:
+** addhnb z0\.h, (z1\.s, z2\.s|z2\.s, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svaddhnb_u32 (z1, z2),
+ z0_res = svaddhnb (z1, z2))
+
+/*
+** addhnb_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** addhnb z0\.h, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_w0_u32_tied1, svuint16_t, svuint32_t, uint32_t,
+ z0_res = svaddhnb_n_u32 (z0, x0),
+ z0_res = svaddhnb (z0, x0))
+
+/*
+** addhnb_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** addhnb z0\.h, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_w0_u32_untied, svuint16_t, svuint32_t, uint32_t,
+ z0_res = svaddhnb_n_u32 (z1, x0),
+ z0_res = svaddhnb (z1, x0))
+
+/*
+** addhnb_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** addhnb z0\.h, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svaddhnb_n_u32 (z0, 11),
+ z0_res = svaddhnb (z0, 11))
+
+/*
+** addhnb_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** addhnb z0\.h, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svaddhnb_n_u32 (z1, 11),
+ z0_res = svaddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnb_u64_tied1:
+** addhnb z0\.s, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svaddhnb_u64 (z0, z1),
+ z0_res = svaddhnb (z0, z1))
+
+/*
+** addhnb_u64_tied2:
+** addhnb z0\.s, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_u64_tied2, svuint32_t, svuint64_t,
+ z0_res = svaddhnb_u64 (z1, z0),
+ z0_res = svaddhnb (z1, z0))
+
+/*
+** addhnb_u64_untied:
+** addhnb z0\.s, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svaddhnb_u64 (z1, z2),
+ z0_res = svaddhnb (z1, z2))
+
+/*
+** addhnb_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** addhnb z0\.s, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_x0_u64_tied1, svuint32_t, svuint64_t, uint64_t,
+ z0_res = svaddhnb_n_u64 (z0, x0),
+ z0_res = svaddhnb (z0, x0))
+
+/*
+** addhnb_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** addhnb z0\.s, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addhnb_x0_u64_untied, svuint32_t, svuint64_t, uint64_t,
+ z0_res = svaddhnb_n_u64 (z1, x0),
+ z0_res = svaddhnb (z1, x0))
+
+/*
+** addhnb_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** addhnb z0\.s, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svaddhnb_n_u64 (z0, 11),
+ z0_res = svaddhnb (z0, 11))
+
+/*
+** addhnb_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** addhnb z0\.s, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addhnb_11_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svaddhnb_n_u64 (z1, 11),
+ z0_res = svaddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnt_s16_tied1:
+** addhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** ret
+*/
+TEST_DUAL_Z (addhnt_s16_tied1, svint8_t, svint16_t,
+ z0 = svaddhnt_s16 (z0, z4, z5),
+ z0 = svaddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_s16_tied2, svint8_t, svint16_t,
+ z0_res = svaddhnt_s16 (z4, z0, z1),
+ z0_res = svaddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_s16_tied3, svint8_t, svint16_t,
+ z0_res = svaddhnt_s16 (z4, z1, z0),
+ z0_res = svaddhnt (z4, z1, z0))
+
+/*
+** addhnt_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** |
+** addhnt z1\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_s16_untied, svint8_t, svint16_t,
+ z0 = svaddhnt_s16 (z1, z4, z5),
+ z0 = svaddhnt (z1, z4, z5))
+
+/*
+** addhnt_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** addhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** ret
+*/
+TEST_DUAL_ZX (addhnt_w0_s16_tied1, svint8_t, svint16_t, int16_t,
+ z0 = svaddhnt_n_s16 (z0, z4, x0),
+ z0 = svaddhnt (z0, z4, x0))
+
+/*
+** addhnt_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** |
+** addhnt z1\.b, (z4\.h, \1|\1, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (addhnt_w0_s16_untied, svint8_t, svint16_t, int16_t,
+ z0 = svaddhnt_n_s16 (z1, z4, x0),
+ z0 = svaddhnt (z1, z4, x0))
+
+/*
+** addhnt_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** addhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_s16_tied1, svint8_t, svint16_t,
+ z0 = svaddhnt_n_s16 (z0, z4, 11),
+ z0 = svaddhnt (z0, z4, 11))
+
+/*
+** addhnt_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** |
+** addhnt z1\.b, (z4\.h, \1|\1, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_s16_untied, svint8_t, svint16_t,
+ z0 = svaddhnt_n_s16 (z1, z4, 11),
+ z0 = svaddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnt_s32_tied1:
+** addhnt z0\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** ret
+*/
+TEST_DUAL_Z (addhnt_s32_tied1, svint16_t, svint32_t,
+ z0 = svaddhnt_s32 (z0, z4, z5),
+ z0 = svaddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_s32_tied2, svint16_t, svint32_t,
+ z0_res = svaddhnt_s32 (z4, z0, z1),
+ z0_res = svaddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_s32_tied3, svint16_t, svint32_t,
+ z0_res = svaddhnt_s32 (z4, z1, z0),
+ z0_res = svaddhnt (z4, z1, z0))
+
+/*
+** addhnt_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** |
+** addhnt z1\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_s32_untied, svint16_t, svint32_t,
+ z0 = svaddhnt_s32 (z1, z4, z5),
+ z0 = svaddhnt (z1, z4, z5))
+
+/*
+** addhnt_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** addhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** ret
+*/
+TEST_DUAL_ZX (addhnt_w0_s32_tied1, svint16_t, svint32_t, int32_t,
+ z0 = svaddhnt_n_s32 (z0, z4, x0),
+ z0 = svaddhnt (z0, z4, x0))
+
+/*
+** addhnt_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** |
+** addhnt z1\.h, (z4\.s, \1|\1, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (addhnt_w0_s32_untied, svint16_t, svint32_t, int32_t,
+ z0 = svaddhnt_n_s32 (z1, z4, x0),
+ z0 = svaddhnt (z1, z4, x0))
+
+/*
+** addhnt_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** addhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_s32_tied1, svint16_t, svint32_t,
+ z0 = svaddhnt_n_s32 (z0, z4, 11),
+ z0 = svaddhnt (z0, z4, 11))
+
+/*
+** addhnt_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** |
+** addhnt z1\.h, (z4\.s, \1|\1, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_s32_untied, svint16_t, svint32_t,
+ z0 = svaddhnt_n_s32 (z1, z4, 11),
+ z0 = svaddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnt_s64_tied1:
+** addhnt z0\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** ret
+*/
+TEST_DUAL_Z (addhnt_s64_tied1, svint32_t, svint64_t,
+ z0 = svaddhnt_s64 (z0, z4, z5),
+ z0 = svaddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_s64_tied2, svint32_t, svint64_t,
+ z0_res = svaddhnt_s64 (z4, z0, z1),
+ z0_res = svaddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_s64_tied3, svint32_t, svint64_t,
+ z0_res = svaddhnt_s64 (z4, z1, z0),
+ z0_res = svaddhnt (z4, z1, z0))
+
+/*
+** addhnt_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** |
+** addhnt z1\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_s64_untied, svint32_t, svint64_t,
+ z0 = svaddhnt_s64 (z1, z4, z5),
+ z0 = svaddhnt (z1, z4, z5))
+
+/*
+** addhnt_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** addhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** ret
+*/
+TEST_DUAL_ZX (addhnt_x0_s64_tied1, svint32_t, svint64_t, int64_t,
+ z0 = svaddhnt_n_s64 (z0, z4, x0),
+ z0 = svaddhnt (z0, z4, x0))
+
+/*
+** addhnt_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** |
+** addhnt z1\.s, (z4\.d, \1|\1, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (addhnt_x0_s64_untied, svint32_t, svint64_t, int64_t,
+ z0 = svaddhnt_n_s64 (z1, z4, x0),
+ z0 = svaddhnt (z1, z4, x0))
+
+/*
+** addhnt_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** addhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_s64_tied1, svint32_t, svint64_t,
+ z0 = svaddhnt_n_s64 (z0, z4, 11),
+ z0 = svaddhnt (z0, z4, 11))
+
+/*
+** addhnt_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** |
+** addhnt z1\.s, (z4\.d, \1|\1, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_s64_untied, svint32_t, svint64_t,
+ z0 = svaddhnt_n_s64 (z1, z4, 11),
+ z0 = svaddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnt_u16_tied1:
+** addhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** ret
+*/
+TEST_DUAL_Z (addhnt_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svaddhnt_u16 (z0, z4, z5),
+ z0 = svaddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_u16_tied2, svuint8_t, svuint16_t,
+ z0_res = svaddhnt_u16 (z4, z0, z1),
+ z0_res = svaddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_u16_tied3, svuint8_t, svuint16_t,
+ z0_res = svaddhnt_u16 (z4, z1, z0),
+ z0_res = svaddhnt (z4, z1, z0))
+
+/*
+** addhnt_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** |
+** addhnt z1\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_u16_untied, svuint8_t, svuint16_t,
+ z0 = svaddhnt_u16 (z1, z4, z5),
+ z0 = svaddhnt (z1, z4, z5))
+
+/*
+** addhnt_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** addhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** ret
+*/
+TEST_DUAL_ZX (addhnt_w0_u16_tied1, svuint8_t, svuint16_t, uint16_t,
+ z0 = svaddhnt_n_u16 (z0, z4, x0),
+ z0 = svaddhnt (z0, z4, x0))
+
+/*
+** addhnt_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** |
+** addhnt z1\.b, (z4\.h, \1|\1, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (addhnt_w0_u16_untied, svuint8_t, svuint16_t, uint16_t,
+ z0 = svaddhnt_n_u16 (z1, z4, x0),
+ z0 = svaddhnt (z1, z4, x0))
+
+/*
+** addhnt_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** addhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svaddhnt_n_u16 (z0, z4, 11),
+ z0 = svaddhnt (z0, z4, 11))
+
+/*
+** addhnt_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** |
+** addhnt z1\.b, (z4\.h, \1|\1, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_u16_untied, svuint8_t, svuint16_t,
+ z0 = svaddhnt_n_u16 (z1, z4, 11),
+ z0 = svaddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnt_u32_tied1:
+** addhnt z0\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** ret
+*/
+TEST_DUAL_Z (addhnt_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svaddhnt_u32 (z0, z4, z5),
+ z0 = svaddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_u32_tied2, svuint16_t, svuint32_t,
+ z0_res = svaddhnt_u32 (z4, z0, z1),
+ z0_res = svaddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_u32_tied3, svuint16_t, svuint32_t,
+ z0_res = svaddhnt_u32 (z4, z1, z0),
+ z0_res = svaddhnt (z4, z1, z0))
+
+/*
+** addhnt_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** |
+** addhnt z1\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_u32_untied, svuint16_t, svuint32_t,
+ z0 = svaddhnt_u32 (z1, z4, z5),
+ z0 = svaddhnt (z1, z4, z5))
+
+/*
+** addhnt_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** addhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** ret
+*/
+TEST_DUAL_ZX (addhnt_w0_u32_tied1, svuint16_t, svuint32_t, uint32_t,
+ z0 = svaddhnt_n_u32 (z0, z4, x0),
+ z0 = svaddhnt (z0, z4, x0))
+
+/*
+** addhnt_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** |
+** addhnt z1\.h, (z4\.s, \1|\1, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (addhnt_w0_u32_untied, svuint16_t, svuint32_t, uint32_t,
+ z0 = svaddhnt_n_u32 (z1, z4, x0),
+ z0 = svaddhnt (z1, z4, x0))
+
+/*
+** addhnt_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** addhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svaddhnt_n_u32 (z0, z4, 11),
+ z0 = svaddhnt (z0, z4, 11))
+
+/*
+** addhnt_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** |
+** addhnt z1\.h, (z4\.s, \1|\1, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_u32_untied, svuint16_t, svuint32_t,
+ z0 = svaddhnt_n_u32 (z1, z4, 11),
+ z0 = svaddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addhnt_u64_tied1:
+** addhnt z0\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** ret
+*/
+TEST_DUAL_Z (addhnt_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svaddhnt_u64 (z0, z4, z5),
+ z0 = svaddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_u64_tied2, svuint32_t, svuint64_t,
+ z0_res = svaddhnt_u64 (z4, z0, z1),
+ z0_res = svaddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (addhnt_u64_tied3, svuint32_t, svuint64_t,
+ z0_res = svaddhnt_u64 (z4, z1, z0),
+ z0_res = svaddhnt (z4, z1, z0))
+
+/*
+** addhnt_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** |
+** addhnt z1\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_u64_untied, svuint32_t, svuint64_t,
+ z0 = svaddhnt_u64 (z1, z4, z5),
+ z0 = svaddhnt (z1, z4, z5))
+
+/*
+** addhnt_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** addhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** ret
+*/
+TEST_DUAL_ZX (addhnt_x0_u64_tied1, svuint32_t, svuint64_t, uint64_t,
+ z0 = svaddhnt_n_u64 (z0, z4, x0),
+ z0 = svaddhnt (z0, z4, x0))
+
+/*
+** addhnt_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** |
+** addhnt z1\.s, (z4\.d, \1|\1, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (addhnt_x0_u64_untied, svuint32_t, svuint64_t, uint64_t,
+ z0 = svaddhnt_n_u64 (z1, z4, x0),
+ z0 = svaddhnt (z1, z4, x0))
+
+/*
+** addhnt_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** addhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svaddhnt_n_u64 (z0, z4, 11),
+ z0 = svaddhnt (z0, z4, 11))
+
+/*
+** addhnt_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** mov z0\.d, z1\.d
+** addhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** |
+** addhnt z1\.s, (z4\.d, \1|\1, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (addhnt_11_u64_untied, svuint32_t, svuint64_t,
+ z0 = svaddhnt_n_u64 (z1, z4, 11),
+ z0 = svaddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlb_s16_tied1:
+** saddlb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_s16_tied1, svint16_t, svint8_t,
+ z0_res = svaddlb_s16 (z0, z1),
+ z0_res = svaddlb (z0, z1))
+
+/*
+** addlb_s16_tied2:
+** saddlb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svaddlb_s16 (z1, z0),
+ z0_res = svaddlb (z1, z0))
+
+/*
+** addlb_s16_untied:
+** saddlb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_s16_untied, svint16_t, svint8_t,
+ z0_res = svaddlb_s16 (z1, z2),
+ z0_res = svaddlb (z1, z2))
+
+/*
+** addlb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** saddlb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svaddlb_n_s16 (z0, x0),
+ z0_res = svaddlb (z0, x0))
+
+/*
+** addlb_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** saddlb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svaddlb_n_s16 (z1, x0),
+ z0_res = svaddlb (z1, x0))
+
+/*
+** addlb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** saddlb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svaddlb_n_s16 (z0, 11),
+ z0_res = svaddlb (z0, 11))
+
+/*
+** addlb_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** saddlb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svaddlb_n_s16 (z1, 11),
+ z0_res = svaddlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlb_s32_tied1:
+** saddlb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_s32_tied1, svint32_t, svint16_t,
+ z0_res = svaddlb_s32 (z0, z1),
+ z0_res = svaddlb (z0, z1))
+
+/*
+** addlb_s32_tied2:
+** saddlb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svaddlb_s32 (z1, z0),
+ z0_res = svaddlb (z1, z0))
+
+/*
+** addlb_s32_untied:
+** saddlb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_s32_untied, svint32_t, svint16_t,
+ z0_res = svaddlb_s32 (z1, z2),
+ z0_res = svaddlb (z1, z2))
+
+/*
+** addlb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** saddlb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svaddlb_n_s32 (z0, x0),
+ z0_res = svaddlb (z0, x0))
+
+/*
+** addlb_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** saddlb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svaddlb_n_s32 (z1, x0),
+ z0_res = svaddlb (z1, x0))
+
+/*
+** addlb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** saddlb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svaddlb_n_s32 (z0, 11),
+ z0_res = svaddlb (z0, 11))
+
+/*
+** addlb_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** saddlb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svaddlb_n_s32 (z1, 11),
+ z0_res = svaddlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlb_s64_tied1:
+** saddlb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_s64_tied1, svint64_t, svint32_t,
+ z0_res = svaddlb_s64 (z0, z1),
+ z0_res = svaddlb (z0, z1))
+
+/*
+** addlb_s64_tied2:
+** saddlb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svaddlb_s64 (z1, z0),
+ z0_res = svaddlb (z1, z0))
+
+/*
+** addlb_s64_untied:
+** saddlb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_s64_untied, svint64_t, svint32_t,
+ z0_res = svaddlb_s64 (z1, z2),
+ z0_res = svaddlb (z1, z2))
+
+/*
+** addlb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** saddlb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svaddlb_n_s64 (z0, x0),
+ z0_res = svaddlb (z0, x0))
+
+/*
+** addlb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** saddlb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svaddlb_n_s64 (z1, x0),
+ z0_res = svaddlb (z1, x0))
+
+/*
+** addlb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** saddlb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svaddlb_n_s64 (z0, 11),
+ z0_res = svaddlb (z0, 11))
+
+/*
+** addlb_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** saddlb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svaddlb_n_s64 (z1, 11),
+ z0_res = svaddlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlb_u16_tied1:
+** uaddlb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svaddlb_u16 (z0, z1),
+ z0_res = svaddlb (z0, z1))
+
+/*
+** addlb_u16_tied2:
+** uaddlb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svaddlb_u16 (z1, z0),
+ z0_res = svaddlb (z1, z0))
+
+/*
+** addlb_u16_untied:
+** uaddlb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svaddlb_u16 (z1, z2),
+ z0_res = svaddlb (z1, z2))
+
+/*
+** addlb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** uaddlb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svaddlb_n_u16 (z0, x0),
+ z0_res = svaddlb (z0, x0))
+
+/*
+** addlb_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** uaddlb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svaddlb_n_u16 (z1, x0),
+ z0_res = svaddlb (z1, x0))
+
+/*
+** addlb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** uaddlb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svaddlb_n_u16 (z0, 11),
+ z0_res = svaddlb (z0, 11))
+
+/*
+** addlb_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** uaddlb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svaddlb_n_u16 (z1, 11),
+ z0_res = svaddlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlb_u32_tied1:
+** uaddlb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svaddlb_u32 (z0, z1),
+ z0_res = svaddlb (z0, z1))
+
+/*
+** addlb_u32_tied2:
+** uaddlb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svaddlb_u32 (z1, z0),
+ z0_res = svaddlb (z1, z0))
+
+/*
+** addlb_u32_untied:
+** uaddlb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svaddlb_u32 (z1, z2),
+ z0_res = svaddlb (z1, z2))
+
+/*
+** addlb_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** uaddlb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svaddlb_n_u32 (z0, x0),
+ z0_res = svaddlb (z0, x0))
+
+/*
+** addlb_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** uaddlb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svaddlb_n_u32 (z1, x0),
+ z0_res = svaddlb (z1, x0))
+
+/*
+** addlb_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** uaddlb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svaddlb_n_u32 (z0, 11),
+ z0_res = svaddlb (z0, 11))
+
+/*
+** addlb_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** uaddlb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svaddlb_n_u32 (z1, 11),
+ z0_res = svaddlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlb_u64_tied1:
+** uaddlb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svaddlb_u64 (z0, z1),
+ z0_res = svaddlb (z0, z1))
+
+/*
+** addlb_u64_tied2:
+** uaddlb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svaddlb_u64 (z1, z0),
+ z0_res = svaddlb (z1, z0))
+
+/*
+** addlb_u64_untied:
+** uaddlb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svaddlb_u64 (z1, z2),
+ z0_res = svaddlb (z1, z2))
+
+/*
+** addlb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** uaddlb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svaddlb_n_u64 (z0, x0),
+ z0_res = svaddlb (z0, x0))
+
+/*
+** addlb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** uaddlb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlb_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svaddlb_n_u64 (z1, x0),
+ z0_res = svaddlb (z1, x0))
+
+/*
+** addlb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** uaddlb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svaddlb_n_u64 (z0, 11),
+ z0_res = svaddlb (z0, 11))
+
+/*
+** addlb_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** uaddlb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlb_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svaddlb_n_u64 (z1, 11),
+ z0_res = svaddlb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlbt_s16_tied1:
+** saddlbt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_s16_tied1, svint16_t, svint8_t,
+ z0_res = svaddlbt_s16 (z0, z1),
+ z0_res = svaddlbt (z0, z1))
+
+/*
+** addlbt_s16_tied2:
+** saddlbt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svaddlbt_s16 (z1, z0),
+ z0_res = svaddlbt (z1, z0))
+
+/*
+** addlbt_s16_untied:
+** saddlbt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_s16_untied, svint16_t, svint8_t,
+ z0_res = svaddlbt_s16 (z1, z2),
+ z0_res = svaddlbt (z1, z2))
+
+/*
+** addlbt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** saddlbt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlbt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svaddlbt_n_s16 (z0, x0),
+ z0_res = svaddlbt (z0, x0))
+
+/*
+** addlbt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** saddlbt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlbt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svaddlbt_n_s16 (z1, x0),
+ z0_res = svaddlbt (z1, x0))
+
+/*
+** addlbt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** saddlbt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svaddlbt_n_s16 (z0, 11),
+ z0_res = svaddlbt (z0, 11))
+
+/*
+** addlbt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** saddlbt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svaddlbt_n_s16 (z1, 11),
+ z0_res = svaddlbt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlbt_s32_tied1:
+** saddlbt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_s32_tied1, svint32_t, svint16_t,
+ z0_res = svaddlbt_s32 (z0, z1),
+ z0_res = svaddlbt (z0, z1))
+
+/*
+** addlbt_s32_tied2:
+** saddlbt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svaddlbt_s32 (z1, z0),
+ z0_res = svaddlbt (z1, z0))
+
+/*
+** addlbt_s32_untied:
+** saddlbt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_s32_untied, svint32_t, svint16_t,
+ z0_res = svaddlbt_s32 (z1, z2),
+ z0_res = svaddlbt (z1, z2))
+
+/*
+** addlbt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** saddlbt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlbt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svaddlbt_n_s32 (z0, x0),
+ z0_res = svaddlbt (z0, x0))
+
+/*
+** addlbt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** saddlbt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlbt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svaddlbt_n_s32 (z1, x0),
+ z0_res = svaddlbt (z1, x0))
+
+/*
+** addlbt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** saddlbt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svaddlbt_n_s32 (z0, 11),
+ z0_res = svaddlbt (z0, 11))
+
+/*
+** addlbt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** saddlbt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svaddlbt_n_s32 (z1, 11),
+ z0_res = svaddlbt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlbt_s64_tied1:
+** saddlbt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_s64_tied1, svint64_t, svint32_t,
+ z0_res = svaddlbt_s64 (z0, z1),
+ z0_res = svaddlbt (z0, z1))
+
+/*
+** addlbt_s64_tied2:
+** saddlbt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svaddlbt_s64 (z1, z0),
+ z0_res = svaddlbt (z1, z0))
+
+/*
+** addlbt_s64_untied:
+** saddlbt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_s64_untied, svint64_t, svint32_t,
+ z0_res = svaddlbt_s64 (z1, z2),
+ z0_res = svaddlbt (z1, z2))
+
+/*
+** addlbt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** saddlbt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlbt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svaddlbt_n_s64 (z0, x0),
+ z0_res = svaddlbt (z0, x0))
+
+/*
+** addlbt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** saddlbt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlbt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svaddlbt_n_s64 (z1, x0),
+ z0_res = svaddlbt (z1, x0))
+
+/*
+** addlbt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** saddlbt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svaddlbt_n_s64 (z0, 11),
+ z0_res = svaddlbt (z0, 11))
+
+/*
+** addlbt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** saddlbt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlbt_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svaddlbt_n_s64 (z1, 11),
+ z0_res = svaddlbt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlt_s16_tied1:
+** saddlt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_s16_tied1, svint16_t, svint8_t,
+ z0_res = svaddlt_s16 (z0, z1),
+ z0_res = svaddlt (z0, z1))
+
+/*
+** addlt_s16_tied2:
+** saddlt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svaddlt_s16 (z1, z0),
+ z0_res = svaddlt (z1, z0))
+
+/*
+** addlt_s16_untied:
+** saddlt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_s16_untied, svint16_t, svint8_t,
+ z0_res = svaddlt_s16 (z1, z2),
+ z0_res = svaddlt (z1, z2))
+
+/*
+** addlt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** saddlt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svaddlt_n_s16 (z0, x0),
+ z0_res = svaddlt (z0, x0))
+
+/*
+** addlt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** saddlt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svaddlt_n_s16 (z1, x0),
+ z0_res = svaddlt (z1, x0))
+
+/*
+** addlt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** saddlt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svaddlt_n_s16 (z0, 11),
+ z0_res = svaddlt (z0, 11))
+
+/*
+** addlt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** saddlt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svaddlt_n_s16 (z1, 11),
+ z0_res = svaddlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlt_s32_tied1:
+** saddlt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_s32_tied1, svint32_t, svint16_t,
+ z0_res = svaddlt_s32 (z0, z1),
+ z0_res = svaddlt (z0, z1))
+
+/*
+** addlt_s32_tied2:
+** saddlt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svaddlt_s32 (z1, z0),
+ z0_res = svaddlt (z1, z0))
+
+/*
+** addlt_s32_untied:
+** saddlt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_s32_untied, svint32_t, svint16_t,
+ z0_res = svaddlt_s32 (z1, z2),
+ z0_res = svaddlt (z1, z2))
+
+/*
+** addlt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** saddlt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svaddlt_n_s32 (z0, x0),
+ z0_res = svaddlt (z0, x0))
+
+/*
+** addlt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** saddlt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svaddlt_n_s32 (z1, x0),
+ z0_res = svaddlt (z1, x0))
+
+/*
+** addlt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** saddlt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svaddlt_n_s32 (z0, 11),
+ z0_res = svaddlt (z0, 11))
+
+/*
+** addlt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** saddlt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svaddlt_n_s32 (z1, 11),
+ z0_res = svaddlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlt_s64_tied1:
+** saddlt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_s64_tied1, svint64_t, svint32_t,
+ z0_res = svaddlt_s64 (z0, z1),
+ z0_res = svaddlt (z0, z1))
+
+/*
+** addlt_s64_tied2:
+** saddlt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svaddlt_s64 (z1, z0),
+ z0_res = svaddlt (z1, z0))
+
+/*
+** addlt_s64_untied:
+** saddlt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_s64_untied, svint64_t, svint32_t,
+ z0_res = svaddlt_s64 (z1, z2),
+ z0_res = svaddlt (z1, z2))
+
+/*
+** addlt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** saddlt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svaddlt_n_s64 (z0, x0),
+ z0_res = svaddlt (z0, x0))
+
+/*
+** addlt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** saddlt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svaddlt_n_s64 (z1, x0),
+ z0_res = svaddlt (z1, x0))
+
+/*
+** addlt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** saddlt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svaddlt_n_s64 (z0, 11),
+ z0_res = svaddlt (z0, 11))
+
+/*
+** addlt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** saddlt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svaddlt_n_s64 (z1, 11),
+ z0_res = svaddlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlt_u16_tied1:
+** uaddlt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svaddlt_u16 (z0, z1),
+ z0_res = svaddlt (z0, z1))
+
+/*
+** addlt_u16_tied2:
+** uaddlt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svaddlt_u16 (z1, z0),
+ z0_res = svaddlt (z1, z0))
+
+/*
+** addlt_u16_untied:
+** uaddlt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svaddlt_u16 (z1, z2),
+ z0_res = svaddlt (z1, z2))
+
+/*
+** addlt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** uaddlt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svaddlt_n_u16 (z0, x0),
+ z0_res = svaddlt (z0, x0))
+
+/*
+** addlt_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** uaddlt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svaddlt_n_u16 (z1, x0),
+ z0_res = svaddlt (z1, x0))
+
+/*
+** addlt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** uaddlt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svaddlt_n_u16 (z0, 11),
+ z0_res = svaddlt (z0, 11))
+
+/*
+** addlt_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** uaddlt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svaddlt_n_u16 (z1, 11),
+ z0_res = svaddlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlt_u32_tied1:
+** uaddlt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svaddlt_u32 (z0, z1),
+ z0_res = svaddlt (z0, z1))
+
+/*
+** addlt_u32_tied2:
+** uaddlt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svaddlt_u32 (z1, z0),
+ z0_res = svaddlt (z1, z0))
+
+/*
+** addlt_u32_untied:
+** uaddlt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svaddlt_u32 (z1, z2),
+ z0_res = svaddlt (z1, z2))
+
+/*
+** addlt_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** uaddlt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svaddlt_n_u32 (z0, x0),
+ z0_res = svaddlt (z0, x0))
+
+/*
+** addlt_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** uaddlt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svaddlt_n_u32 (z1, x0),
+ z0_res = svaddlt (z1, x0))
+
+/*
+** addlt_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** uaddlt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svaddlt_n_u32 (z0, 11),
+ z0_res = svaddlt (z0, 11))
+
+/*
+** addlt_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** uaddlt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svaddlt_n_u32 (z1, 11),
+ z0_res = svaddlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addlt_u64_tied1:
+** uaddlt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svaddlt_u64 (z0, z1),
+ z0_res = svaddlt (z0, z1))
+
+/*
+** addlt_u64_tied2:
+** uaddlt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svaddlt_u64 (z1, z0),
+ z0_res = svaddlt (z1, z0))
+
+/*
+** addlt_u64_untied:
+** uaddlt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svaddlt_u64 (z1, z2),
+ z0_res = svaddlt (z1, z2))
+
+/*
+** addlt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** uaddlt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svaddlt_n_u64 (z0, x0),
+ z0_res = svaddlt (z0, x0))
+
+/*
+** addlt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** uaddlt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (addlt_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svaddlt_n_u64 (z1, x0),
+ z0_res = svaddlt (z1, x0))
+
+/*
+** addlt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** uaddlt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svaddlt_n_u64 (z0, 11),
+ z0_res = svaddlt (z0, 11))
+
+/*
+** addlt_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** uaddlt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (addlt_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svaddlt_n_u64 (z1, 11),
+ z0_res = svaddlt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_f16_m_tied1:
+** faddp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_f16_m_tied1, svfloat16_t,
+ z0 = svaddp_f16_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_f16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** faddp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_f16_m_tied2, svfloat16_t,
+ z0 = svaddp_f16_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_f16_m_untied:
+** movprfx z0, z1
+** faddp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_f16_m_untied, svfloat16_t,
+ z0 = svaddp_f16_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_f16_x_tied1:
+** faddp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_f16_x_tied1, svfloat16_t,
+ z0 = svaddp_f16_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_f16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** faddp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_f16_x_tied2, svfloat16_t,
+ z0 = svaddp_f16_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_f16_x_untied:
+** movprfx z0, z1
+** faddp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_f16_x_untied, svfloat16_t,
+ z0 = svaddp_f16_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
+
+/*
+** ptrue_addp_f16_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_addp_f16_x_tied1, svfloat16_t,
+ z0 = svaddp_f16_x (svptrue_b16 (), z0, z1),
+ z0 = svaddp_x (svptrue_b16 (), z0, z1))
+
+/*
+** ptrue_addp_f16_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_addp_f16_x_tied2, svfloat16_t,
+ z0 = svaddp_f16_x (svptrue_b16 (), z1, z0),
+ z0 = svaddp_x (svptrue_b16 (), z1, z0))
+
+/*
+** ptrue_addp_f16_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_addp_f16_x_untied, svfloat16_t,
+ z0 = svaddp_f16_x (svptrue_b16 (), z1, z2),
+ z0 = svaddp_x (svptrue_b16 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_f32_m_tied1:
+** faddp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_f32_m_tied1, svfloat32_t,
+ z0 = svaddp_f32_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_f32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** faddp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_f32_m_tied2, svfloat32_t,
+ z0 = svaddp_f32_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_f32_m_untied:
+** movprfx z0, z1
+** faddp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_f32_m_untied, svfloat32_t,
+ z0 = svaddp_f32_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_f32_x_tied1:
+** faddp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_f32_x_tied1, svfloat32_t,
+ z0 = svaddp_f32_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_f32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** faddp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_f32_x_tied2, svfloat32_t,
+ z0 = svaddp_f32_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_f32_x_untied:
+** movprfx z0, z1
+** faddp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_f32_x_untied, svfloat32_t,
+ z0 = svaddp_f32_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
+
+/*
+** ptrue_addp_f32_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_addp_f32_x_tied1, svfloat32_t,
+ z0 = svaddp_f32_x (svptrue_b32 (), z0, z1),
+ z0 = svaddp_x (svptrue_b32 (), z0, z1))
+
+/*
+** ptrue_addp_f32_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_addp_f32_x_tied2, svfloat32_t,
+ z0 = svaddp_f32_x (svptrue_b32 (), z1, z0),
+ z0 = svaddp_x (svptrue_b32 (), z1, z0))
+
+/*
+** ptrue_addp_f32_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_addp_f32_x_untied, svfloat32_t,
+ z0 = svaddp_f32_x (svptrue_b32 (), z1, z2),
+ z0 = svaddp_x (svptrue_b32 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_f64_m_tied1:
+** faddp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_f64_m_tied1, svfloat64_t,
+ z0 = svaddp_f64_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_f64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** faddp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addp_f64_m_tied2, svfloat64_t,
+ z0 = svaddp_f64_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_f64_m_untied:
+** movprfx z0, z1
+** faddp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_f64_m_untied, svfloat64_t,
+ z0 = svaddp_f64_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_f64_x_tied1:
+** faddp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_f64_x_tied1, svfloat64_t,
+ z0 = svaddp_f64_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_f64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** faddp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addp_f64_x_tied2, svfloat64_t,
+ z0 = svaddp_f64_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_f64_x_untied:
+** movprfx z0, z1
+** faddp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_f64_x_untied, svfloat64_t,
+ z0 = svaddp_f64_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
+
+/*
+** ptrue_addp_f64_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_addp_f64_x_tied1, svfloat64_t,
+ z0 = svaddp_f64_x (svptrue_b64 (), z0, z1),
+ z0 = svaddp_x (svptrue_b64 (), z0, z1))
+
+/*
+** ptrue_addp_f64_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_addp_f64_x_tied2, svfloat64_t,
+ z0 = svaddp_f64_x (svptrue_b64 (), z1, z0),
+ z0 = svaddp_x (svptrue_b64 (), z1, z0))
+
+/*
+** ptrue_addp_f64_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_addp_f64_x_untied, svfloat64_t,
+ z0 = svaddp_f64_x (svptrue_b64 (), z1, z2),
+ z0 = svaddp_x (svptrue_b64 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_s16_m_tied1:
+** addp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_s16_m_tied1, svint16_t,
+ z0 = svaddp_s16_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_s16_m_tied2, svint16_t,
+ z0 = svaddp_s16_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_s16_m_untied:
+** movprfx z0, z1
+** addp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_s16_m_untied, svint16_t,
+ z0 = svaddp_s16_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_s16_x_tied1:
+** addp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_s16_x_tied1, svint16_t,
+ z0 = svaddp_s16_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_s16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_s16_x_tied2, svint16_t,
+ z0 = svaddp_s16_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_s16_x_untied:
+** movprfx z0, z1
+** addp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_s16_x_untied, svint16_t,
+ z0 = svaddp_s16_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_s32_m_tied1:
+** addp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_s32_m_tied1, svint32_t,
+ z0 = svaddp_s32_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_s32_m_tied2, svint32_t,
+ z0 = svaddp_s32_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_s32_m_untied:
+** movprfx z0, z1
+** addp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_s32_m_untied, svint32_t,
+ z0 = svaddp_s32_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_s32_x_tied1:
+** addp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_s32_x_tied1, svint32_t,
+ z0 = svaddp_s32_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_s32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_s32_x_tied2, svint32_t,
+ z0 = svaddp_s32_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_s32_x_untied:
+** movprfx z0, z1
+** addp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_s32_x_untied, svint32_t,
+ z0 = svaddp_s32_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_s64_m_tied1:
+** addp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_s64_m_tied1, svint64_t,
+ z0 = svaddp_s64_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** addp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addp_s64_m_tied2, svint64_t,
+ z0 = svaddp_s64_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_s64_m_untied:
+** movprfx z0, z1
+** addp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_s64_m_untied, svint64_t,
+ z0 = svaddp_s64_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_s64_x_tied1:
+** addp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_s64_x_tied1, svint64_t,
+ z0 = svaddp_s64_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_s64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** addp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addp_s64_x_tied2, svint64_t,
+ z0 = svaddp_s64_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_s64_x_untied:
+** movprfx z0, z1
+** addp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_s64_x_untied, svint64_t,
+ z0 = svaddp_s64_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_s8_m_tied1:
+** addp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_s8_m_tied1, svint8_t,
+ z0 = svaddp_s8_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_s8_m_tied2, svint8_t,
+ z0 = svaddp_s8_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_s8_m_untied:
+** movprfx z0, z1
+** addp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_s8_m_untied, svint8_t,
+ z0 = svaddp_s8_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_s8_x_tied1:
+** addp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_s8_x_tied1, svint8_t,
+ z0 = svaddp_s8_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_s8_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_s8_x_tied2, svint8_t,
+ z0 = svaddp_s8_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_s8_x_untied:
+** movprfx z0, z1
+** addp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_s8_x_untied, svint8_t,
+ z0 = svaddp_s8_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_u16_m_tied1:
+** addp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_u16_m_tied1, svuint16_t,
+ z0 = svaddp_u16_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_u16_m_tied2, svuint16_t,
+ z0 = svaddp_u16_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_u16_m_untied:
+** movprfx z0, z1
+** addp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_u16_m_untied, svuint16_t,
+ z0 = svaddp_u16_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_u16_x_tied1:
+** addp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_u16_x_tied1, svuint16_t,
+ z0 = svaddp_u16_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_u16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_u16_x_tied2, svuint16_t,
+ z0 = svaddp_u16_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_u16_x_untied:
+** movprfx z0, z1
+** addp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (addp_u16_x_untied, svuint16_t,
+ z0 = svaddp_u16_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_u32_m_tied1:
+** addp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_u32_m_tied1, svuint32_t,
+ z0 = svaddp_u32_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_u32_m_tied2, svuint32_t,
+ z0 = svaddp_u32_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_u32_m_untied:
+** movprfx z0, z1
+** addp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_u32_m_untied, svuint32_t,
+ z0 = svaddp_u32_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_u32_x_tied1:
+** addp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_u32_x_tied1, svuint32_t,
+ z0 = svaddp_u32_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_u32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_u32_x_tied2, svuint32_t,
+ z0 = svaddp_u32_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_u32_x_untied:
+** movprfx z0, z1
+** addp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (addp_u32_x_untied, svuint32_t,
+ z0 = svaddp_u32_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_u64_m_tied1:
+** addp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_u64_m_tied1, svuint64_t,
+ z0 = svaddp_u64_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** addp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addp_u64_m_tied2, svuint64_t,
+ z0 = svaddp_u64_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_u64_m_untied:
+** movprfx z0, z1
+** addp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_u64_m_untied, svuint64_t,
+ z0 = svaddp_u64_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_u64_x_tied1:
+** addp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_u64_x_tied1, svuint64_t,
+ z0 = svaddp_u64_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_u64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** addp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addp_u64_x_tied2, svuint64_t,
+ z0 = svaddp_u64_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_u64_x_untied:
+** movprfx z0, z1
+** addp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (addp_u64_x_untied, svuint64_t,
+ z0 = svaddp_u64_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addp_u8_m_tied1:
+** addp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_u8_m_tied1, svuint8_t,
+ z0 = svaddp_u8_m (p0, z0, z1),
+ z0 = svaddp_m (p0, z0, z1))
+
+/*
+** addp_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_u8_m_tied2, svuint8_t,
+ z0 = svaddp_u8_m (p0, z1, z0),
+ z0 = svaddp_m (p0, z1, z0))
+
+/*
+** addp_u8_m_untied:
+** movprfx z0, z1
+** addp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_u8_m_untied, svuint8_t,
+ z0 = svaddp_u8_m (p0, z1, z2),
+ z0 = svaddp_m (p0, z1, z2))
+
+/*
+** addp_u8_x_tied1:
+** addp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_u8_x_tied1, svuint8_t,
+ z0 = svaddp_u8_x (p0, z0, z1),
+ z0 = svaddp_x (p0, z0, z1))
+
+/*
+** addp_u8_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** addp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_u8_x_tied2, svuint8_t,
+ z0 = svaddp_u8_x (p0, z1, z0),
+ z0 = svaddp_x (p0, z1, z0))
+
+/*
+** addp_u8_x_untied:
+** movprfx z0, z1
+** addp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (addp_u8_x_untied, svuint8_t,
+ z0 = svaddp_u8_x (p0, z1, z2),
+ z0 = svaddp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwb_s16_tied1:
+** saddwb z0\.h, z0\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (addwb_s16_tied1, svint16_t, svint8_t,
+ z0 = svaddwb_s16 (z0, z4),
+ z0 = svaddwb (z0, z4))
+
+/*
+** addwb_s16_tied2:
+** saddwb z0\.h, z4\.h, z0\.b
+** ret
+*/
+TEST_DUAL_Z_REV (addwb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svaddwb_s16 (z4, z0),
+ z0_res = svaddwb (z4, z0))
+
+/*
+** addwb_s16_untied:
+** saddwb z0\.h, z1\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (addwb_s16_untied, svint16_t, svint8_t,
+ z0 = svaddwb_s16 (z1, z4),
+ z0 = svaddwb (z1, z4))
+
+/*
+** addwb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** saddwb z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_s16_tied1, svint16_t, int8_t,
+ z0 = svaddwb_n_s16 (z0, x0),
+ z0 = svaddwb (z0, x0))
+
+/*
+** addwb_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** saddwb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_s16_untied, svint16_t, int8_t,
+ z0 = svaddwb_n_s16 (z1, x0),
+ z0 = svaddwb (z1, x0))
+
+/*
+** addwb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** saddwb z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_s16_tied1, svint16_t,
+ z0 = svaddwb_n_s16 (z0, 11),
+ z0 = svaddwb (z0, 11))
+
+/*
+** addwb_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** saddwb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_s16_untied, svint16_t,
+ z0 = svaddwb_n_s16 (z1, 11),
+ z0 = svaddwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwb_s32_tied1:
+** saddwb z0\.s, z0\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (addwb_s32_tied1, svint32_t, svint16_t,
+ z0 = svaddwb_s32 (z0, z4),
+ z0 = svaddwb (z0, z4))
+
+/*
+** addwb_s32_tied2:
+** saddwb z0\.s, z4\.s, z0\.h
+** ret
+*/
+TEST_DUAL_Z_REV (addwb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svaddwb_s32 (z4, z0),
+ z0_res = svaddwb (z4, z0))
+
+/*
+** addwb_s32_untied:
+** saddwb z0\.s, z1\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (addwb_s32_untied, svint32_t, svint16_t,
+ z0 = svaddwb_s32 (z1, z4),
+ z0 = svaddwb (z1, z4))
+
+/*
+** addwb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** saddwb z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_s32_tied1, svint32_t, int16_t,
+ z0 = svaddwb_n_s32 (z0, x0),
+ z0 = svaddwb (z0, x0))
+
+/*
+** addwb_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** saddwb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_s32_untied, svint32_t, int16_t,
+ z0 = svaddwb_n_s32 (z1, x0),
+ z0 = svaddwb (z1, x0))
+
+/*
+** addwb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** saddwb z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_s32_tied1, svint32_t,
+ z0 = svaddwb_n_s32 (z0, 11),
+ z0 = svaddwb (z0, 11))
+
+/*
+** addwb_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** saddwb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_s32_untied, svint32_t,
+ z0 = svaddwb_n_s32 (z1, 11),
+ z0 = svaddwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwb_s64_tied1:
+** saddwb z0\.d, z0\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (addwb_s64_tied1, svint64_t, svint32_t,
+ z0 = svaddwb_s64 (z0, z4),
+ z0 = svaddwb (z0, z4))
+
+/*
+** addwb_s64_tied2:
+** saddwb z0\.d, z4\.d, z0\.s
+** ret
+*/
+TEST_DUAL_Z_REV (addwb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svaddwb_s64 (z4, z0),
+ z0_res = svaddwb (z4, z0))
+
+/*
+** addwb_s64_untied:
+** saddwb z0\.d, z1\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (addwb_s64_untied, svint64_t, svint32_t,
+ z0 = svaddwb_s64 (z1, z4),
+ z0 = svaddwb (z1, z4))
+
+/*
+** addwb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** saddwb z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_s64_tied1, svint64_t, int32_t,
+ z0 = svaddwb_n_s64 (z0, x0),
+ z0 = svaddwb (z0, x0))
+
+/*
+** addwb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** saddwb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_s64_untied, svint64_t, int32_t,
+ z0 = svaddwb_n_s64 (z1, x0),
+ z0 = svaddwb (z1, x0))
+
+/*
+** addwb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** saddwb z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_s64_tied1, svint64_t,
+ z0 = svaddwb_n_s64 (z0, 11),
+ z0 = svaddwb (z0, 11))
+
+/*
+** addwb_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** saddwb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_s64_untied, svint64_t,
+ z0 = svaddwb_n_s64 (z1, 11),
+ z0 = svaddwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwb_u16_tied1:
+** uaddwb z0\.h, z0\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (addwb_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svaddwb_u16 (z0, z4),
+ z0 = svaddwb (z0, z4))
+
+/*
+** addwb_u16_tied2:
+** uaddwb z0\.h, z4\.h, z0\.b
+** ret
+*/
+TEST_DUAL_Z_REV (addwb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svaddwb_u16 (z4, z0),
+ z0_res = svaddwb (z4, z0))
+
+/*
+** addwb_u16_untied:
+** uaddwb z0\.h, z1\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (addwb_u16_untied, svuint16_t, svuint8_t,
+ z0 = svaddwb_u16 (z1, z4),
+ z0 = svaddwb (z1, z4))
+
+/*
+** addwb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** uaddwb z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_u16_tied1, svuint16_t, uint8_t,
+ z0 = svaddwb_n_u16 (z0, x0),
+ z0 = svaddwb (z0, x0))
+
+/*
+** addwb_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** uaddwb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_u16_untied, svuint16_t, uint8_t,
+ z0 = svaddwb_n_u16 (z1, x0),
+ z0 = svaddwb (z1, x0))
+
+/*
+** addwb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** uaddwb z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_u16_tied1, svuint16_t,
+ z0 = svaddwb_n_u16 (z0, 11),
+ z0 = svaddwb (z0, 11))
+
+/*
+** addwb_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** uaddwb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_u16_untied, svuint16_t,
+ z0 = svaddwb_n_u16 (z1, 11),
+ z0 = svaddwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwb_u32_tied1:
+** uaddwb z0\.s, z0\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (addwb_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svaddwb_u32 (z0, z4),
+ z0 = svaddwb (z0, z4))
+
+/*
+** addwb_u32_tied2:
+** uaddwb z0\.s, z4\.s, z0\.h
+** ret
+*/
+TEST_DUAL_Z_REV (addwb_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svaddwb_u32 (z4, z0),
+ z0_res = svaddwb (z4, z0))
+
+/*
+** addwb_u32_untied:
+** uaddwb z0\.s, z1\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (addwb_u32_untied, svuint32_t, svuint16_t,
+ z0 = svaddwb_u32 (z1, z4),
+ z0 = svaddwb (z1, z4))
+
+/*
+** addwb_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** uaddwb z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_u32_tied1, svuint32_t, uint16_t,
+ z0 = svaddwb_n_u32 (z0, x0),
+ z0 = svaddwb (z0, x0))
+
+/*
+** addwb_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** uaddwb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_u32_untied, svuint32_t, uint16_t,
+ z0 = svaddwb_n_u32 (z1, x0),
+ z0 = svaddwb (z1, x0))
+
+/*
+** addwb_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** uaddwb z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_u32_tied1, svuint32_t,
+ z0 = svaddwb_n_u32 (z0, 11),
+ z0 = svaddwb (z0, 11))
+
+/*
+** addwb_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** uaddwb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_u32_untied, svuint32_t,
+ z0 = svaddwb_n_u32 (z1, 11),
+ z0 = svaddwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwb_u64_tied1:
+** uaddwb z0\.d, z0\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (addwb_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svaddwb_u64 (z0, z4),
+ z0 = svaddwb (z0, z4))
+
+/*
+** addwb_u64_tied2:
+** uaddwb z0\.d, z4\.d, z0\.s
+** ret
+*/
+TEST_DUAL_Z_REV (addwb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svaddwb_u64 (z4, z0),
+ z0_res = svaddwb (z4, z0))
+
+/*
+** addwb_u64_untied:
+** uaddwb z0\.d, z1\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (addwb_u64_untied, svuint64_t, svuint32_t,
+ z0 = svaddwb_u64 (z1, z4),
+ z0 = svaddwb (z1, z4))
+
+/*
+** addwb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** uaddwb z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_u64_tied1, svuint64_t, uint32_t,
+ z0 = svaddwb_n_u64 (z0, x0),
+ z0 = svaddwb (z0, x0))
+
+/*
+** addwb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** uaddwb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwb_w0_u64_untied, svuint64_t, uint32_t,
+ z0 = svaddwb_n_u64 (z1, x0),
+ z0 = svaddwb (z1, x0))
+
+/*
+** addwb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** uaddwb z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_u64_tied1, svuint64_t,
+ z0 = svaddwb_n_u64 (z0, 11),
+ z0 = svaddwb (z0, 11))
+
+/*
+** addwb_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** uaddwb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwb_11_u64_untied, svuint64_t,
+ z0 = svaddwb_n_u64 (z1, 11),
+ z0 = svaddwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwt_s16_tied1:
+** saddwt z0\.h, z0\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (addwt_s16_tied1, svint16_t, svint8_t,
+ z0 = svaddwt_s16 (z0, z4),
+ z0 = svaddwt (z0, z4))
+
+/*
+** addwt_s16_tied2:
+** saddwt z0\.h, z4\.h, z0\.b
+** ret
+*/
+TEST_DUAL_Z_REV (addwt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svaddwt_s16 (z4, z0),
+ z0_res = svaddwt (z4, z0))
+
+/*
+** addwt_s16_untied:
+** saddwt z0\.h, z1\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (addwt_s16_untied, svint16_t, svint8_t,
+ z0 = svaddwt_s16 (z1, z4),
+ z0 = svaddwt (z1, z4))
+
+/*
+** addwt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** saddwt z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_s16_tied1, svint16_t, int8_t,
+ z0 = svaddwt_n_s16 (z0, x0),
+ z0 = svaddwt (z0, x0))
+
+/*
+** addwt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** saddwt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_s16_untied, svint16_t, int8_t,
+ z0 = svaddwt_n_s16 (z1, x0),
+ z0 = svaddwt (z1, x0))
+
+/*
+** addwt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** saddwt z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_s16_tied1, svint16_t,
+ z0 = svaddwt_n_s16 (z0, 11),
+ z0 = svaddwt (z0, 11))
+
+/*
+** addwt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** saddwt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_s16_untied, svint16_t,
+ z0 = svaddwt_n_s16 (z1, 11),
+ z0 = svaddwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwt_s32_tied1:
+** saddwt z0\.s, z0\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (addwt_s32_tied1, svint32_t, svint16_t,
+ z0 = svaddwt_s32 (z0, z4),
+ z0 = svaddwt (z0, z4))
+
+/*
+** addwt_s32_tied2:
+** saddwt z0\.s, z4\.s, z0\.h
+** ret
+*/
+TEST_DUAL_Z_REV (addwt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svaddwt_s32 (z4, z0),
+ z0_res = svaddwt (z4, z0))
+
+/*
+** addwt_s32_untied:
+** saddwt z0\.s, z1\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (addwt_s32_untied, svint32_t, svint16_t,
+ z0 = svaddwt_s32 (z1, z4),
+ z0 = svaddwt (z1, z4))
+
+/*
+** addwt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** saddwt z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_s32_tied1, svint32_t, int16_t,
+ z0 = svaddwt_n_s32 (z0, x0),
+ z0 = svaddwt (z0, x0))
+
+/*
+** addwt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** saddwt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_s32_untied, svint32_t, int16_t,
+ z0 = svaddwt_n_s32 (z1, x0),
+ z0 = svaddwt (z1, x0))
+
+/*
+** addwt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** saddwt z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_s32_tied1, svint32_t,
+ z0 = svaddwt_n_s32 (z0, 11),
+ z0 = svaddwt (z0, 11))
+
+/*
+** addwt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** saddwt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_s32_untied, svint32_t,
+ z0 = svaddwt_n_s32 (z1, 11),
+ z0 = svaddwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwt_s64_tied1:
+** saddwt z0\.d, z0\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (addwt_s64_tied1, svint64_t, svint32_t,
+ z0 = svaddwt_s64 (z0, z4),
+ z0 = svaddwt (z0, z4))
+
+/*
+** addwt_s64_tied2:
+** saddwt z0\.d, z4\.d, z0\.s
+** ret
+*/
+TEST_DUAL_Z_REV (addwt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svaddwt_s64 (z4, z0),
+ z0_res = svaddwt (z4, z0))
+
+/*
+** addwt_s64_untied:
+** saddwt z0\.d, z1\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (addwt_s64_untied, svint64_t, svint32_t,
+ z0 = svaddwt_s64 (z1, z4),
+ z0 = svaddwt (z1, z4))
+
+/*
+** addwt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** saddwt z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_s64_tied1, svint64_t, int32_t,
+ z0 = svaddwt_n_s64 (z0, x0),
+ z0 = svaddwt (z0, x0))
+
+/*
+** addwt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** saddwt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_s64_untied, svint64_t, int32_t,
+ z0 = svaddwt_n_s64 (z1, x0),
+ z0 = svaddwt (z1, x0))
+
+/*
+** addwt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** saddwt z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_s64_tied1, svint64_t,
+ z0 = svaddwt_n_s64 (z0, 11),
+ z0 = svaddwt (z0, 11))
+
+/*
+** addwt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** saddwt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_s64_untied, svint64_t,
+ z0 = svaddwt_n_s64 (z1, 11),
+ z0 = svaddwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwt_u16_tied1:
+** uaddwt z0\.h, z0\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (addwt_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svaddwt_u16 (z0, z4),
+ z0 = svaddwt (z0, z4))
+
+/*
+** addwt_u16_tied2:
+** uaddwt z0\.h, z4\.h, z0\.b
+** ret
+*/
+TEST_DUAL_Z_REV (addwt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svaddwt_u16 (z4, z0),
+ z0_res = svaddwt (z4, z0))
+
+/*
+** addwt_u16_untied:
+** uaddwt z0\.h, z1\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (addwt_u16_untied, svuint16_t, svuint8_t,
+ z0 = svaddwt_u16 (z1, z4),
+ z0 = svaddwt (z1, z4))
+
+/*
+** addwt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** uaddwt z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_u16_tied1, svuint16_t, uint8_t,
+ z0 = svaddwt_n_u16 (z0, x0),
+ z0 = svaddwt (z0, x0))
+
+/*
+** addwt_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** uaddwt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_u16_untied, svuint16_t, uint8_t,
+ z0 = svaddwt_n_u16 (z1, x0),
+ z0 = svaddwt (z1, x0))
+
+/*
+** addwt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** uaddwt z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_u16_tied1, svuint16_t,
+ z0 = svaddwt_n_u16 (z0, 11),
+ z0 = svaddwt (z0, 11))
+
+/*
+** addwt_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** uaddwt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_u16_untied, svuint16_t,
+ z0 = svaddwt_n_u16 (z1, 11),
+ z0 = svaddwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwt_u32_tied1:
+** uaddwt z0\.s, z0\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (addwt_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svaddwt_u32 (z0, z4),
+ z0 = svaddwt (z0, z4))
+
+/*
+** addwt_u32_tied2:
+** uaddwt z0\.s, z4\.s, z0\.h
+** ret
+*/
+TEST_DUAL_Z_REV (addwt_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svaddwt_u32 (z4, z0),
+ z0_res = svaddwt (z4, z0))
+
+/*
+** addwt_u32_untied:
+** uaddwt z0\.s, z1\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (addwt_u32_untied, svuint32_t, svuint16_t,
+ z0 = svaddwt_u32 (z1, z4),
+ z0 = svaddwt (z1, z4))
+
+/*
+** addwt_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** uaddwt z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_u32_tied1, svuint32_t, uint16_t,
+ z0 = svaddwt_n_u32 (z0, x0),
+ z0 = svaddwt (z0, x0))
+
+/*
+** addwt_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** uaddwt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_u32_untied, svuint32_t, uint16_t,
+ z0 = svaddwt_n_u32 (z1, x0),
+ z0 = svaddwt (z1, x0))
+
+/*
+** addwt_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** uaddwt z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_u32_tied1, svuint32_t,
+ z0 = svaddwt_n_u32 (z0, 11),
+ z0 = svaddwt (z0, 11))
+
+/*
+** addwt_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** uaddwt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_u32_untied, svuint32_t,
+ z0 = svaddwt_n_u32 (z1, 11),
+ z0 = svaddwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** addwt_u64_tied1:
+** uaddwt z0\.d, z0\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (addwt_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svaddwt_u64 (z0, z4),
+ z0 = svaddwt (z0, z4))
+
+/*
+** addwt_u64_tied2:
+** uaddwt z0\.d, z4\.d, z0\.s
+** ret
+*/
+TEST_DUAL_Z_REV (addwt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svaddwt_u64 (z4, z0),
+ z0_res = svaddwt (z4, z0))
+
+/*
+** addwt_u64_untied:
+** uaddwt z0\.d, z1\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (addwt_u64_untied, svuint64_t, svuint32_t,
+ z0 = svaddwt_u64 (z1, z4),
+ z0 = svaddwt (z1, z4))
+
+/*
+** addwt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** uaddwt z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_u64_tied1, svuint64_t, uint32_t,
+ z0 = svaddwt_n_u64 (z0, x0),
+ z0 = svaddwt (z0, x0))
+
+/*
+** addwt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** uaddwt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (addwt_w0_u64_untied, svuint64_t, uint32_t,
+ z0 = svaddwt_n_u64 (z1, x0),
+ z0 = svaddwt (z1, x0))
+
+/*
+** addwt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** uaddwt z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_u64_tied1, svuint64_t,
+ z0 = svaddwt_n_u64 (z0, 11),
+ z0 = svaddwt (z0, 11))
+
+/*
+** addwt_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** uaddwt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (addwt_11_u64_untied, svuint64_t,
+ z0 = svaddwt_n_u64 (z1, 11),
+ z0 = svaddwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-aes"
+
+/*
+** aesd_u8_tied1:
+** aesd z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (aesd_u8_tied1, svuint8_t,
+ z0 = svaesd_u8 (z0, z1),
+ z0 = svaesd (z0, z1))
+
+/*
+** aesd_u8_tied2:
+** aesd z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (aesd_u8_tied2, svuint8_t,
+ z0 = svaesd_u8 (z1, z0),
+ z0 = svaesd (z1, z0))
+
+/*
+** aesd_u8_untied:
+** (
+** mov z0\.d, z1\.d
+** aesd z0\.b, z0\.b, z2\.b
+** |
+** aesd z1\.b, z0\.b, z2\.b
+** mov z0\.d, z1\.d
+** |
+** mov z0\.d, z2\.d
+** aesd z0\.b, z0\.b, z1\.b
+** |
+** aesd z2\.b, z0\.b, z1\.b
+** mov z0\.d, z2\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (aesd_u8_untied, svuint8_t,
+ z0 = svaesd_u8 (z1, z2),
+ z0 = svaesd (z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-aes"
+
+/*
+** aese_u8_tied1:
+** aese z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (aese_u8_tied1, svuint8_t,
+ z0 = svaese_u8 (z0, z1),
+ z0 = svaese (z0, z1))
+
+/*
+** aese_u8_tied2:
+** aese z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (aese_u8_tied2, svuint8_t,
+ z0 = svaese_u8 (z1, z0),
+ z0 = svaese (z1, z0))
+
+/*
+** aese_u8_untied:
+** (
+** mov z0\.d, z1\.d
+** aese z0\.b, z0\.b, z2\.b
+** |
+** aese z1\.b, z0\.b, z2\.b
+** mov z0\.d, z1\.d
+** |
+** mov z0\.d, z2\.d
+** aese z0\.b, z0\.b, z1\.b
+** |
+** aese z2\.b, z0\.b, z1\.b
+** mov z0\.d, z2\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (aese_u8_untied, svuint8_t,
+ z0 = svaese_u8 (z1, z2),
+ z0 = svaese (z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-aes"
+
+/*
+** aesimc_u8_tied1:
+** aesimc z0\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (aesimc_u8_tied1, svuint8_t,
+ z0 = svaesimc_u8 (z0),
+ z0 = svaesimc (z0))
+
+/*
+** aesimc_u8_untied:
+** (
+** mov z0\.d, z1\.d
+** aesimc z0\.b, z0\.b
+** |
+** aesimc z1\.b, z0\.b
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (aesimc_u8_untied, svuint8_t,
+ z0 = svaesimc_u8 (z1),
+ z0 = svaesimc (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-aes"
+
+/*
+** aesmc_u8_tied1:
+** aesmc z0\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (aesmc_u8_tied1, svuint8_t,
+ z0 = svaesmc_u8 (z0),
+ z0 = svaesmc (z0))
+
+/*
+** aesmc_u8_untied:
+** (
+** mov z0\.d, z1\.d
+** aesmc z0\.b, z0\.b
+** |
+** aesmc z1\.b, z0\.b
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (aesmc_u8_untied, svuint8_t,
+ z0 = svaesmc_u8 (z1),
+ z0 = svaesmc (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bcax_s16_tied1:
+** bcax z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s16_tied1, svint16_t,
+ z0 = svbcax_s16 (z0, z1, z2),
+ z0 = svbcax (z0, z1, z2))
+
+/*
+** bcax_s16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s16_tied2, svint16_t,
+ z0 = svbcax_s16 (z1, z0, z2),
+ z0 = svbcax (z1, z0, z2))
+
+/*
+** bcax_s16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s16_tied3, svint16_t,
+ z0 = svbcax_s16 (z1, z2, z0),
+ z0 = svbcax (z1, z2, z0))
+
+/*
+** bcax_s16_untied:
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s16_untied, svint16_t,
+ z0 = svbcax_s16 (z1, z2, z3),
+ z0 = svbcax (z1, z2, z3))
+
+/*
+** bcax_w0_s16_tied1:
+** mov (z[0-9]+)\.h, w0
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svbcax_n_s16 (z0, z1, x0),
+ z0 = svbcax (z0, z1, x0))
+
+/*
+** bcax_w0_s16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_s16_tied2, svint16_t, int16_t,
+ z0 = svbcax_n_s16 (z1, z0, x0),
+ z0 = svbcax (z1, z0, x0))
+
+/*
+** bcax_w0_s16_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_s16_untied, svint16_t, int16_t,
+ z0 = svbcax_n_s16 (z1, z2, x0),
+ z0 = svbcax (z1, z2, x0))
+
+/*
+** bcax_11_s16_tied1:
+** mov (z[0-9]+)\.h, #11
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s16_tied1, svint16_t,
+ z0 = svbcax_n_s16 (z0, z1, 11),
+ z0 = svbcax (z0, z1, 11))
+
+/*
+** bcax_11_s16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s16_tied2, svint16_t,
+ z0 = svbcax_n_s16 (z1, z0, 11),
+ z0 = svbcax (z1, z0, 11))
+
+/*
+** bcax_11_s16_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s16_untied, svint16_t,
+ z0 = svbcax_n_s16 (z1, z2, 11),
+ z0 = svbcax (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bcax_s32_tied1:
+** bcax z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s32_tied1, svint32_t,
+ z0 = svbcax_s32 (z0, z1, z2),
+ z0 = svbcax (z0, z1, z2))
+
+/*
+** bcax_s32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s32_tied2, svint32_t,
+ z0 = svbcax_s32 (z1, z0, z2),
+ z0 = svbcax (z1, z0, z2))
+
+/*
+** bcax_s32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s32_tied3, svint32_t,
+ z0 = svbcax_s32 (z1, z2, z0),
+ z0 = svbcax (z1, z2, z0))
+
+/*
+** bcax_s32_untied:
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s32_untied, svint32_t,
+ z0 = svbcax_s32 (z1, z2, z3),
+ z0 = svbcax (z1, z2, z3))
+
+/*
+** bcax_w0_s32_tied1:
+** mov (z[0-9]+)\.s, w0
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svbcax_n_s32 (z0, z1, x0),
+ z0 = svbcax (z0, z1, x0))
+
+/*
+** bcax_w0_s32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_s32_tied2, svint32_t, int32_t,
+ z0 = svbcax_n_s32 (z1, z0, x0),
+ z0 = svbcax (z1, z0, x0))
+
+/*
+** bcax_w0_s32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_s32_untied, svint32_t, int32_t,
+ z0 = svbcax_n_s32 (z1, z2, x0),
+ z0 = svbcax (z1, z2, x0))
+
+/*
+** bcax_11_s32_tied1:
+** mov (z[0-9]+)\.s, #11
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s32_tied1, svint32_t,
+ z0 = svbcax_n_s32 (z0, z1, 11),
+ z0 = svbcax (z0, z1, 11))
+
+/*
+** bcax_11_s32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s32_tied2, svint32_t,
+ z0 = svbcax_n_s32 (z1, z0, 11),
+ z0 = svbcax (z1, z0, 11))
+
+/*
+** bcax_11_s32_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s32_untied, svint32_t,
+ z0 = svbcax_n_s32 (z1, z2, 11),
+ z0 = svbcax (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bcax_s64_tied1:
+** bcax z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s64_tied1, svint64_t,
+ z0 = svbcax_s64 (z0, z1, z2),
+ z0 = svbcax (z0, z1, z2))
+
+/*
+** bcax_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s64_tied2, svint64_t,
+ z0 = svbcax_s64 (z1, z0, z2),
+ z0 = svbcax (z1, z0, z2))
+
+/*
+** bcax_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s64_tied3, svint64_t,
+ z0 = svbcax_s64 (z1, z2, z0),
+ z0 = svbcax (z1, z2, z0))
+
+/*
+** bcax_s64_untied:
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s64_untied, svint64_t,
+ z0 = svbcax_s64 (z1, z2, z3),
+ z0 = svbcax (z1, z2, z3))
+
+/*
+** bcax_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** bcax z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svbcax_n_s64 (z0, z1, x0),
+ z0 = svbcax (z0, z1, x0))
+
+/*
+** bcax_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1, \2|\2, \1)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_x0_s64_tied2, svint64_t, int64_t,
+ z0 = svbcax_n_s64 (z1, z0, x0),
+ z0 = svbcax (z1, z0, x0))
+
+/*
+** bcax_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_x0_s64_untied, svint64_t, int64_t,
+ z0 = svbcax_n_s64 (z1, z2, x0),
+ z0 = svbcax (z1, z2, x0))
+
+/*
+** bcax_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** bcax z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s64_tied1, svint64_t,
+ z0 = svbcax_n_s64 (z0, z1, 11),
+ z0 = svbcax (z0, z1, 11))
+
+/*
+** bcax_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1, \2|\2, \1)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s64_tied2, svint64_t,
+ z0 = svbcax_n_s64 (z1, z0, 11),
+ z0 = svbcax (z1, z0, 11))
+
+/*
+** bcax_11_s64_untied: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s64_untied, svint64_t,
+ z0 = svbcax_n_s64 (z1, z2, 11),
+ z0 = svbcax (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bcax_s8_tied1:
+** bcax z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s8_tied1, svint8_t,
+ z0 = svbcax_s8 (z0, z1, z2),
+ z0 = svbcax (z0, z1, z2))
+
+/*
+** bcax_s8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s8_tied2, svint8_t,
+ z0 = svbcax_s8 (z1, z0, z2),
+ z0 = svbcax (z1, z0, z2))
+
+/*
+** bcax_s8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s8_tied3, svint8_t,
+ z0 = svbcax_s8 (z1, z2, z0),
+ z0 = svbcax (z1, z2, z0))
+
+/*
+** bcax_s8_untied:
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_s8_untied, svint8_t,
+ z0 = svbcax_s8 (z1, z2, z3),
+ z0 = svbcax (z1, z2, z3))
+
+/*
+** bcax_w0_s8_tied1:
+** mov (z[0-9]+)\.b, w0
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svbcax_n_s8 (z0, z1, x0),
+ z0 = svbcax (z0, z1, x0))
+
+/*
+** bcax_w0_s8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_s8_tied2, svint8_t, int8_t,
+ z0 = svbcax_n_s8 (z1, z0, x0),
+ z0 = svbcax (z1, z0, x0))
+
+/*
+** bcax_w0_s8_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_s8_untied, svint8_t, int8_t,
+ z0 = svbcax_n_s8 (z1, z2, x0),
+ z0 = svbcax (z1, z2, x0))
+
+/*
+** bcax_11_s8_tied1:
+** mov (z[0-9]+)\.b, #11
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s8_tied1, svint8_t,
+ z0 = svbcax_n_s8 (z0, z1, 11),
+ z0 = svbcax (z0, z1, 11))
+
+/*
+** bcax_11_s8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s8_tied2, svint8_t,
+ z0 = svbcax_n_s8 (z1, z0, 11),
+ z0 = svbcax (z1, z0, 11))
+
+/*
+** bcax_11_s8_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_s8_untied, svint8_t,
+ z0 = svbcax_n_s8 (z1, z2, 11),
+ z0 = svbcax (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bcax_u16_tied1:
+** bcax z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u16_tied1, svuint16_t,
+ z0 = svbcax_u16 (z0, z1, z2),
+ z0 = svbcax (z0, z1, z2))
+
+/*
+** bcax_u16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u16_tied2, svuint16_t,
+ z0 = svbcax_u16 (z1, z0, z2),
+ z0 = svbcax (z1, z0, z2))
+
+/*
+** bcax_u16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u16_tied3, svuint16_t,
+ z0 = svbcax_u16 (z1, z2, z0),
+ z0 = svbcax (z1, z2, z0))
+
+/*
+** bcax_u16_untied:
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u16_untied, svuint16_t,
+ z0 = svbcax_u16 (z1, z2, z3),
+ z0 = svbcax (z1, z2, z3))
+
+/*
+** bcax_w0_u16_tied1:
+** mov (z[0-9]+)\.h, w0
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svbcax_n_u16 (z0, z1, x0),
+ z0 = svbcax (z0, z1, x0))
+
+/*
+** bcax_w0_u16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_u16_tied2, svuint16_t, uint16_t,
+ z0 = svbcax_n_u16 (z1, z0, x0),
+ z0 = svbcax (z1, z0, x0))
+
+/*
+** bcax_w0_u16_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svbcax_n_u16 (z1, z2, x0),
+ z0 = svbcax (z1, z2, x0))
+
+/*
+** bcax_11_u16_tied1:
+** mov (z[0-9]+)\.h, #11
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u16_tied1, svuint16_t,
+ z0 = svbcax_n_u16 (z0, z1, 11),
+ z0 = svbcax (z0, z1, 11))
+
+/*
+** bcax_11_u16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u16_tied2, svuint16_t,
+ z0 = svbcax_n_u16 (z1, z0, 11),
+ z0 = svbcax (z1, z0, 11))
+
+/*
+** bcax_11_u16_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u16_untied, svuint16_t,
+ z0 = svbcax_n_u16 (z1, z2, 11),
+ z0 = svbcax (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bcax_u32_tied1:
+** bcax z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u32_tied1, svuint32_t,
+ z0 = svbcax_u32 (z0, z1, z2),
+ z0 = svbcax (z0, z1, z2))
+
+/*
+** bcax_u32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u32_tied2, svuint32_t,
+ z0 = svbcax_u32 (z1, z0, z2),
+ z0 = svbcax (z1, z0, z2))
+
+/*
+** bcax_u32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u32_tied3, svuint32_t,
+ z0 = svbcax_u32 (z1, z2, z0),
+ z0 = svbcax (z1, z2, z0))
+
+/*
+** bcax_u32_untied:
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u32_untied, svuint32_t,
+ z0 = svbcax_u32 (z1, z2, z3),
+ z0 = svbcax (z1, z2, z3))
+
+/*
+** bcax_w0_u32_tied1:
+** mov (z[0-9]+)\.s, w0
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svbcax_n_u32 (z0, z1, x0),
+ z0 = svbcax (z0, z1, x0))
+
+/*
+** bcax_w0_u32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svbcax_n_u32 (z1, z0, x0),
+ z0 = svbcax (z1, z0, x0))
+
+/*
+** bcax_w0_u32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svbcax_n_u32 (z1, z2, x0),
+ z0 = svbcax (z1, z2, x0))
+
+/*
+** bcax_11_u32_tied1:
+** mov (z[0-9]+)\.s, #11
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u32_tied1, svuint32_t,
+ z0 = svbcax_n_u32 (z0, z1, 11),
+ z0 = svbcax (z0, z1, 11))
+
+/*
+** bcax_11_u32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u32_tied2, svuint32_t,
+ z0 = svbcax_n_u32 (z1, z0, 11),
+ z0 = svbcax (z1, z0, 11))
+
+/*
+** bcax_11_u32_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u32_untied, svuint32_t,
+ z0 = svbcax_n_u32 (z1, z2, 11),
+ z0 = svbcax (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bcax_u64_tied1:
+** bcax z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u64_tied1, svuint64_t,
+ z0 = svbcax_u64 (z0, z1, z2),
+ z0 = svbcax (z0, z1, z2))
+
+/*
+** bcax_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u64_tied2, svuint64_t,
+ z0 = svbcax_u64 (z1, z0, z2),
+ z0 = svbcax (z1, z0, z2))
+
+/*
+** bcax_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u64_tied3, svuint64_t,
+ z0 = svbcax_u64 (z1, z2, z0),
+ z0 = svbcax (z1, z2, z0))
+
+/*
+** bcax_u64_untied:
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u64_untied, svuint64_t,
+ z0 = svbcax_u64 (z1, z2, z3),
+ z0 = svbcax (z1, z2, z3))
+
+/*
+** bcax_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** bcax z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svbcax_n_u64 (z0, z1, x0),
+ z0 = svbcax (z0, z1, x0))
+
+/*
+** bcax_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1, \2|\2, \1)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svbcax_n_u64 (z1, z0, x0),
+ z0 = svbcax (z1, z0, x0))
+
+/*
+** bcax_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svbcax_n_u64 (z1, z2, x0),
+ z0 = svbcax (z1, z2, x0))
+
+/*
+** bcax_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** bcax z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u64_tied1, svuint64_t,
+ z0 = svbcax_n_u64 (z0, z1, 11),
+ z0 = svbcax (z0, z1, 11))
+
+/*
+** bcax_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1, \2|\2, \1)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u64_tied2, svuint64_t,
+ z0 = svbcax_n_u64 (z1, z0, 11),
+ z0 = svbcax (z1, z0, 11))
+
+/*
+** bcax_11_u64_untied: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u64_untied, svuint64_t,
+ z0 = svbcax_n_u64 (z1, z2, 11),
+ z0 = svbcax (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bcax_u8_tied1:
+** bcax z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u8_tied1, svuint8_t,
+ z0 = svbcax_u8 (z0, z1, z2),
+ z0 = svbcax (z0, z1, z2))
+
+/*
+** bcax_u8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u8_tied2, svuint8_t,
+ z0 = svbcax_u8 (z1, z0, z2),
+ z0 = svbcax (z1, z0, z2))
+
+/*
+** bcax_u8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1|\1, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u8_tied3, svuint8_t,
+ z0 = svbcax_u8 (z1, z2, z0),
+ z0 = svbcax (z1, z2, z0))
+
+/*
+** bcax_u8_untied:
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_u8_untied, svuint8_t,
+ z0 = svbcax_u8 (z1, z2, z3),
+ z0 = svbcax (z1, z2, z3))
+
+/*
+** bcax_w0_u8_tied1:
+** mov (z[0-9]+)\.b, w0
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svbcax_n_u8 (z0, z1, x0),
+ z0 = svbcax (z0, z1, x0))
+
+/*
+** bcax_w0_u8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_u8_tied2, svuint8_t, uint8_t,
+ z0 = svbcax_n_u8 (z1, z0, x0),
+ z0 = svbcax (z1, z0, x0))
+
+/*
+** bcax_w0_u8_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (bcax_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svbcax_n_u8 (z1, z2, x0),
+ z0 = svbcax (z1, z2, x0))
+
+/*
+** bcax_11_u8_tied1:
+** mov (z[0-9]+)\.b, #11
+** bcax z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u8_tied1, svuint8_t,
+ z0 = svbcax_n_u8 (z0, z1, 11),
+ z0 = svbcax (z0, z1, 11))
+
+/*
+** bcax_11_u8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (\1\.d, \2|\2, \1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u8_tied2, svuint8_t,
+ z0 = svbcax_n_u8 (z1, z0, 11),
+ z0 = svbcax (z1, z0, 11))
+
+/*
+** bcax_11_u8_untied: { xfail *-*-*}
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** bcax z0\.d, z0\.d, (z2\.d, \1\.d|\1\.d, z2\.d)
+** ret
+*/
+TEST_UNIFORM_Z (bcax_11_u8_untied, svuint8_t,
+ z0 = svbcax_n_u8 (z1, z2, 11),
+ z0 = svbcax (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bdep_u16_tied1:
+** bdep z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u16_tied1, svuint16_t,
+ z0 = svbdep_u16 (z0, z1),
+ z0 = svbdep (z0, z1))
+
+/*
+** bdep_u16_tied2:
+** bdep z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u16_tied2, svuint16_t,
+ z0 = svbdep_u16 (z1, z0),
+ z0 = svbdep (z1, z0))
+
+/*
+** bdep_u16_untied:
+** bdep z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u16_untied, svuint16_t,
+ z0 = svbdep_u16 (z1, z2),
+ z0 = svbdep (z1, z2))
+
+/*
+** bdep_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** bdep z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bdep_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svbdep_n_u16 (z0, x0),
+ z0 = svbdep (z0, x0))
+
+/*
+** bdep_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** bdep z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bdep_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svbdep_n_u16 (z1, x0),
+ z0 = svbdep (z1, x0))
+
+/*
+** bdep_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** bdep z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (bdep_11_u16_tied1, svuint16_t,
+ z0 = svbdep_n_u16 (z0, 11),
+ z0 = svbdep (z0, 11))
+
+/*
+** bdep_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** bdep z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (bdep_11_u16_untied, svuint16_t,
+ z0 = svbdep_n_u16 (z1, 11),
+ z0 = svbdep (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bdep_u32_tied1:
+** bdep z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u32_tied1, svuint32_t,
+ z0 = svbdep_u32 (z0, z1),
+ z0 = svbdep (z0, z1))
+
+/*
+** bdep_u32_tied2:
+** bdep z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u32_tied2, svuint32_t,
+ z0 = svbdep_u32 (z1, z0),
+ z0 = svbdep (z1, z0))
+
+/*
+** bdep_u32_untied:
+** bdep z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u32_untied, svuint32_t,
+ z0 = svbdep_u32 (z1, z2),
+ z0 = svbdep (z1, z2))
+
+/*
+** bdep_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** bdep z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bdep_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svbdep_n_u32 (z0, x0),
+ z0 = svbdep (z0, x0))
+
+/*
+** bdep_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** bdep z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bdep_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svbdep_n_u32 (z1, x0),
+ z0 = svbdep (z1, x0))
+
+/*
+** bdep_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** bdep z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (bdep_11_u32_tied1, svuint32_t,
+ z0 = svbdep_n_u32 (z0, 11),
+ z0 = svbdep (z0, 11))
+
+/*
+** bdep_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** bdep z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (bdep_11_u32_untied, svuint32_t,
+ z0 = svbdep_n_u32 (z1, 11),
+ z0 = svbdep (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bdep_u64_tied1:
+** bdep z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u64_tied1, svuint64_t,
+ z0 = svbdep_u64 (z0, z1),
+ z0 = svbdep (z0, z1))
+
+/*
+** bdep_u64_tied2:
+** bdep z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u64_tied2, svuint64_t,
+ z0 = svbdep_u64 (z1, z0),
+ z0 = svbdep (z1, z0))
+
+/*
+** bdep_u64_untied:
+** bdep z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u64_untied, svuint64_t,
+ z0 = svbdep_u64 (z1, z2),
+ z0 = svbdep (z1, z2))
+
+/*
+** bdep_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** bdep z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bdep_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svbdep_n_u64 (z0, x0),
+ z0 = svbdep (z0, x0))
+
+/*
+** bdep_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** bdep z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bdep_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svbdep_n_u64 (z1, x0),
+ z0 = svbdep (z1, x0))
+
+/*
+** bdep_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** bdep z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bdep_11_u64_tied1, svuint64_t,
+ z0 = svbdep_n_u64 (z0, 11),
+ z0 = svbdep (z0, 11))
+
+/*
+** bdep_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** bdep z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bdep_11_u64_untied, svuint64_t,
+ z0 = svbdep_n_u64 (z1, 11),
+ z0 = svbdep (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bdep_u8_tied1:
+** bdep z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u8_tied1, svuint8_t,
+ z0 = svbdep_u8 (z0, z1),
+ z0 = svbdep (z0, z1))
+
+/*
+** bdep_u8_tied2:
+** bdep z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u8_tied2, svuint8_t,
+ z0 = svbdep_u8 (z1, z0),
+ z0 = svbdep (z1, z0))
+
+/*
+** bdep_u8_untied:
+** bdep z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (bdep_u8_untied, svuint8_t,
+ z0 = svbdep_u8 (z1, z2),
+ z0 = svbdep (z1, z2))
+
+/*
+** bdep_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** bdep z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bdep_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svbdep_n_u8 (z0, x0),
+ z0 = svbdep (z0, x0))
+
+/*
+** bdep_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** bdep z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bdep_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svbdep_n_u8 (z1, x0),
+ z0 = svbdep (z1, x0))
+
+/*
+** bdep_11_u8_tied1:
+** mov (z[0-9]+\.b), #11
+** bdep z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (bdep_11_u8_tied1, svuint8_t,
+ z0 = svbdep_n_u8 (z0, 11),
+ z0 = svbdep (z0, 11))
+
+/*
+** bdep_11_u8_untied:
+** mov (z[0-9]+\.b), #11
+** bdep z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (bdep_11_u8_untied, svuint8_t,
+ z0 = svbdep_n_u8 (z1, 11),
+ z0 = svbdep (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bext_u16_tied1:
+** bext z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (bext_u16_tied1, svuint16_t,
+ z0 = svbext_u16 (z0, z1),
+ z0 = svbext (z0, z1))
+
+/*
+** bext_u16_tied2:
+** bext z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (bext_u16_tied2, svuint16_t,
+ z0 = svbext_u16 (z1, z0),
+ z0 = svbext (z1, z0))
+
+/*
+** bext_u16_untied:
+** bext z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (bext_u16_untied, svuint16_t,
+ z0 = svbext_u16 (z1, z2),
+ z0 = svbext (z1, z2))
+
+/*
+** bext_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** bext z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bext_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svbext_n_u16 (z0, x0),
+ z0 = svbext (z0, x0))
+
+/*
+** bext_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** bext z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bext_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svbext_n_u16 (z1, x0),
+ z0 = svbext (z1, x0))
+
+/*
+** bext_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** bext z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (bext_11_u16_tied1, svuint16_t,
+ z0 = svbext_n_u16 (z0, 11),
+ z0 = svbext (z0, 11))
+
+/*
+** bext_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** bext z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (bext_11_u16_untied, svuint16_t,
+ z0 = svbext_n_u16 (z1, 11),
+ z0 = svbext (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bext_u32_tied1:
+** bext z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (bext_u32_tied1, svuint32_t,
+ z0 = svbext_u32 (z0, z1),
+ z0 = svbext (z0, z1))
+
+/*
+** bext_u32_tied2:
+** bext z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (bext_u32_tied2, svuint32_t,
+ z0 = svbext_u32 (z1, z0),
+ z0 = svbext (z1, z0))
+
+/*
+** bext_u32_untied:
+** bext z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (bext_u32_untied, svuint32_t,
+ z0 = svbext_u32 (z1, z2),
+ z0 = svbext (z1, z2))
+
+/*
+** bext_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** bext z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bext_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svbext_n_u32 (z0, x0),
+ z0 = svbext (z0, x0))
+
+/*
+** bext_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** bext z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bext_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svbext_n_u32 (z1, x0),
+ z0 = svbext (z1, x0))
+
+/*
+** bext_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** bext z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (bext_11_u32_tied1, svuint32_t,
+ z0 = svbext_n_u32 (z0, 11),
+ z0 = svbext (z0, 11))
+
+/*
+** bext_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** bext z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (bext_11_u32_untied, svuint32_t,
+ z0 = svbext_n_u32 (z1, 11),
+ z0 = svbext (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bext_u64_tied1:
+** bext z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bext_u64_tied1, svuint64_t,
+ z0 = svbext_u64 (z0, z1),
+ z0 = svbext (z0, z1))
+
+/*
+** bext_u64_tied2:
+** bext z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (bext_u64_tied2, svuint64_t,
+ z0 = svbext_u64 (z1, z0),
+ z0 = svbext (z1, z0))
+
+/*
+** bext_u64_untied:
+** bext z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bext_u64_untied, svuint64_t,
+ z0 = svbext_u64 (z1, z2),
+ z0 = svbext (z1, z2))
+
+/*
+** bext_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** bext z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bext_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svbext_n_u64 (z0, x0),
+ z0 = svbext (z0, x0))
+
+/*
+** bext_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** bext z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bext_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svbext_n_u64 (z1, x0),
+ z0 = svbext (z1, x0))
+
+/*
+** bext_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** bext z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bext_11_u64_tied1, svuint64_t,
+ z0 = svbext_n_u64 (z0, 11),
+ z0 = svbext (z0, 11))
+
+/*
+** bext_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** bext z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bext_11_u64_untied, svuint64_t,
+ z0 = svbext_n_u64 (z1, 11),
+ z0 = svbext (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bext_u8_tied1:
+** bext z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (bext_u8_tied1, svuint8_t,
+ z0 = svbext_u8 (z0, z1),
+ z0 = svbext (z0, z1))
+
+/*
+** bext_u8_tied2:
+** bext z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (bext_u8_tied2, svuint8_t,
+ z0 = svbext_u8 (z1, z0),
+ z0 = svbext (z1, z0))
+
+/*
+** bext_u8_untied:
+** bext z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (bext_u8_untied, svuint8_t,
+ z0 = svbext_u8 (z1, z2),
+ z0 = svbext (z1, z2))
+
+/*
+** bext_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** bext z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bext_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svbext_n_u8 (z0, x0),
+ z0 = svbext (z0, x0))
+
+/*
+** bext_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** bext z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bext_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svbext_n_u8 (z1, x0),
+ z0 = svbext (z1, x0))
+
+/*
+** bext_11_u8_tied1:
+** mov (z[0-9]+\.b), #11
+** bext z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (bext_11_u8_tied1, svuint8_t,
+ z0 = svbext_n_u8 (z0, 11),
+ z0 = svbext (z0, 11))
+
+/*
+** bext_11_u8_untied:
+** mov (z[0-9]+\.b), #11
+** bext z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (bext_11_u8_untied, svuint8_t,
+ z0 = svbext_n_u8 (z1, 11),
+ z0 = svbext (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bgrp_u16_tied1:
+** bgrp z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u16_tied1, svuint16_t,
+ z0 = svbgrp_u16 (z0, z1),
+ z0 = svbgrp (z0, z1))
+
+/*
+** bgrp_u16_tied2:
+** bgrp z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u16_tied2, svuint16_t,
+ z0 = svbgrp_u16 (z1, z0),
+ z0 = svbgrp (z1, z0))
+
+/*
+** bgrp_u16_untied:
+** bgrp z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u16_untied, svuint16_t,
+ z0 = svbgrp_u16 (z1, z2),
+ z0 = svbgrp (z1, z2))
+
+/*
+** bgrp_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** bgrp z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bgrp_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svbgrp_n_u16 (z0, x0),
+ z0 = svbgrp (z0, x0))
+
+/*
+** bgrp_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** bgrp z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bgrp_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svbgrp_n_u16 (z1, x0),
+ z0 = svbgrp (z1, x0))
+
+/*
+** bgrp_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** bgrp z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_11_u16_tied1, svuint16_t,
+ z0 = svbgrp_n_u16 (z0, 11),
+ z0 = svbgrp (z0, 11))
+
+/*
+** bgrp_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** bgrp z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_11_u16_untied, svuint16_t,
+ z0 = svbgrp_n_u16 (z1, 11),
+ z0 = svbgrp (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bgrp_u32_tied1:
+** bgrp z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u32_tied1, svuint32_t,
+ z0 = svbgrp_u32 (z0, z1),
+ z0 = svbgrp (z0, z1))
+
+/*
+** bgrp_u32_tied2:
+** bgrp z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u32_tied2, svuint32_t,
+ z0 = svbgrp_u32 (z1, z0),
+ z0 = svbgrp (z1, z0))
+
+/*
+** bgrp_u32_untied:
+** bgrp z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u32_untied, svuint32_t,
+ z0 = svbgrp_u32 (z1, z2),
+ z0 = svbgrp (z1, z2))
+
+/*
+** bgrp_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** bgrp z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bgrp_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svbgrp_n_u32 (z0, x0),
+ z0 = svbgrp (z0, x0))
+
+/*
+** bgrp_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** bgrp z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bgrp_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svbgrp_n_u32 (z1, x0),
+ z0 = svbgrp (z1, x0))
+
+/*
+** bgrp_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** bgrp z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_11_u32_tied1, svuint32_t,
+ z0 = svbgrp_n_u32 (z0, 11),
+ z0 = svbgrp (z0, 11))
+
+/*
+** bgrp_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** bgrp z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_11_u32_untied, svuint32_t,
+ z0 = svbgrp_n_u32 (z1, 11),
+ z0 = svbgrp (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bgrp_u64_tied1:
+** bgrp z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u64_tied1, svuint64_t,
+ z0 = svbgrp_u64 (z0, z1),
+ z0 = svbgrp (z0, z1))
+
+/*
+** bgrp_u64_tied2:
+** bgrp z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u64_tied2, svuint64_t,
+ z0 = svbgrp_u64 (z1, z0),
+ z0 = svbgrp (z1, z0))
+
+/*
+** bgrp_u64_untied:
+** bgrp z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u64_untied, svuint64_t,
+ z0 = svbgrp_u64 (z1, z2),
+ z0 = svbgrp (z1, z2))
+
+/*
+** bgrp_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** bgrp z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bgrp_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svbgrp_n_u64 (z0, x0),
+ z0 = svbgrp (z0, x0))
+
+/*
+** bgrp_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** bgrp z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bgrp_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svbgrp_n_u64 (z1, x0),
+ z0 = svbgrp (z1, x0))
+
+/*
+** bgrp_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** bgrp z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_11_u64_tied1, svuint64_t,
+ z0 = svbgrp_n_u64 (z0, 11),
+ z0 = svbgrp (z0, 11))
+
+/*
+** bgrp_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** bgrp z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_11_u64_untied, svuint64_t,
+ z0 = svbgrp_n_u64 (z1, 11),
+ z0 = svbgrp (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-bitperm"
+
+/*
+** bgrp_u8_tied1:
+** bgrp z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u8_tied1, svuint8_t,
+ z0 = svbgrp_u8 (z0, z1),
+ z0 = svbgrp (z0, z1))
+
+/*
+** bgrp_u8_tied2:
+** bgrp z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u8_tied2, svuint8_t,
+ z0 = svbgrp_u8 (z1, z0),
+ z0 = svbgrp (z1, z0))
+
+/*
+** bgrp_u8_untied:
+** bgrp z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_u8_untied, svuint8_t,
+ z0 = svbgrp_u8 (z1, z2),
+ z0 = svbgrp (z1, z2))
+
+/*
+** bgrp_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** bgrp z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bgrp_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svbgrp_n_u8 (z0, x0),
+ z0 = svbgrp (z0, x0))
+
+/*
+** bgrp_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** bgrp z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bgrp_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svbgrp_n_u8 (z1, x0),
+ z0 = svbgrp (z1, x0))
+
+/*
+** bgrp_11_u8_tied1:
+** mov (z[0-9]+\.b), #11
+** bgrp z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_11_u8_tied1, svuint8_t,
+ z0 = svbgrp_n_u8 (z0, 11),
+ z0 = svbgrp (z0, 11))
+
+/*
+** bgrp_11_u8_untied:
+** mov (z[0-9]+\.b), #11
+** bgrp z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (bgrp_11_u8_untied, svuint8_t,
+ z0 = svbgrp_n_u8 (z1, 11),
+ z0 = svbgrp (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl1n_s16_tied1:
+** bsl1n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s16_tied1, svint16_t,
+ z0 = svbsl1n_s16 (z0, z1, z2),
+ z0 = svbsl1n (z0, z1, z2))
+
+/*
+** bsl1n_s16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s16_tied2, svint16_t,
+ z0 = svbsl1n_s16 (z1, z0, z2),
+ z0 = svbsl1n (z1, z0, z2))
+
+/*
+** bsl1n_s16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s16_tied3, svint16_t,
+ z0 = svbsl1n_s16 (z1, z2, z0),
+ z0 = svbsl1n (z1, z2, z0))
+
+/*
+** bsl1n_s16_untied:
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s16_untied, svint16_t,
+ z0 = svbsl1n_s16 (z1, z2, z3),
+ z0 = svbsl1n (z1, z2, z3))
+
+/*
+** bsl1n_w0_s16_tied1:
+** mov (z[0-9]+)\.h, w0
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svbsl1n_n_s16 (z0, z1, x0),
+ z0 = svbsl1n (z0, z1, x0))
+
+/*
+** bsl1n_w0_s16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_s16_tied2, svint16_t, int16_t,
+ z0 = svbsl1n_n_s16 (z1, z0, x0),
+ z0 = svbsl1n (z1, z0, x0))
+
+/*
+** bsl1n_w0_s16_untied:
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_s16_untied, svint16_t, int16_t,
+ z0 = svbsl1n_n_s16 (z1, z2, x0),
+ z0 = svbsl1n (z1, z2, x0))
+
+/*
+** bsl1n_11_s16_tied1:
+** mov (z[0-9]+)\.h, #11
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s16_tied1, svint16_t,
+ z0 = svbsl1n_n_s16 (z0, z1, 11),
+ z0 = svbsl1n (z0, z1, 11))
+
+/*
+** bsl1n_11_s16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s16_tied2, svint16_t,
+ z0 = svbsl1n_n_s16 (z1, z0, 11),
+ z0 = svbsl1n (z1, z0, 11))
+
+/*
+** bsl1n_11_s16_untied:
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s16_untied, svint16_t,
+ z0 = svbsl1n_n_s16 (z1, z2, 11),
+ z0 = svbsl1n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl1n_s32_tied1:
+** bsl1n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s32_tied1, svint32_t,
+ z0 = svbsl1n_s32 (z0, z1, z2),
+ z0 = svbsl1n (z0, z1, z2))
+
+/*
+** bsl1n_s32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s32_tied2, svint32_t,
+ z0 = svbsl1n_s32 (z1, z0, z2),
+ z0 = svbsl1n (z1, z0, z2))
+
+/*
+** bsl1n_s32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s32_tied3, svint32_t,
+ z0 = svbsl1n_s32 (z1, z2, z0),
+ z0 = svbsl1n (z1, z2, z0))
+
+/*
+** bsl1n_s32_untied:
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s32_untied, svint32_t,
+ z0 = svbsl1n_s32 (z1, z2, z3),
+ z0 = svbsl1n (z1, z2, z3))
+
+/*
+** bsl1n_w0_s32_tied1:
+** mov (z[0-9]+)\.s, w0
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svbsl1n_n_s32 (z0, z1, x0),
+ z0 = svbsl1n (z0, z1, x0))
+
+/*
+** bsl1n_w0_s32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_s32_tied2, svint32_t, int32_t,
+ z0 = svbsl1n_n_s32 (z1, z0, x0),
+ z0 = svbsl1n (z1, z0, x0))
+
+/*
+** bsl1n_w0_s32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_s32_untied, svint32_t, int32_t,
+ z0 = svbsl1n_n_s32 (z1, z2, x0),
+ z0 = svbsl1n (z1, z2, x0))
+
+/*
+** bsl1n_11_s32_tied1:
+** mov (z[0-9]+)\.s, #11
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s32_tied1, svint32_t,
+ z0 = svbsl1n_n_s32 (z0, z1, 11),
+ z0 = svbsl1n (z0, z1, 11))
+
+/*
+** bsl1n_11_s32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s32_tied2, svint32_t,
+ z0 = svbsl1n_n_s32 (z1, z0, 11),
+ z0 = svbsl1n (z1, z0, 11))
+
+/*
+** bsl1n_11_s32_untied:
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s32_untied, svint32_t,
+ z0 = svbsl1n_n_s32 (z1, z2, 11),
+ z0 = svbsl1n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl1n_s64_tied1:
+** bsl1n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s64_tied1, svint64_t,
+ z0 = svbsl1n_s64 (z0, z1, z2),
+ z0 = svbsl1n (z0, z1, z2))
+
+/*
+** bsl1n_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s64_tied2, svint64_t,
+ z0 = svbsl1n_s64 (z1, z0, z2),
+ z0 = svbsl1n (z1, z0, z2))
+
+/*
+** bsl1n_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s64_tied3, svint64_t,
+ z0 = svbsl1n_s64 (z1, z2, z0),
+ z0 = svbsl1n (z1, z2, z0))
+
+/*
+** bsl1n_s64_untied:
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s64_untied, svint64_t,
+ z0 = svbsl1n_s64 (z1, z2, z3),
+ z0 = svbsl1n (z1, z2, z3))
+
+/*
+** bsl1n_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** bsl1n z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svbsl1n_n_s64 (z0, z1, x0),
+ z0 = svbsl1n (z0, z1, x0))
+
+/*
+** bsl1n_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_x0_s64_tied2, svint64_t, int64_t,
+ z0 = svbsl1n_n_s64 (z1, z0, x0),
+ z0 = svbsl1n (z1, z0, x0))
+
+/*
+** bsl1n_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_x0_s64_untied, svint64_t, int64_t,
+ z0 = svbsl1n_n_s64 (z1, z2, x0),
+ z0 = svbsl1n (z1, z2, x0))
+
+/*
+** bsl1n_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** bsl1n z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s64_tied1, svint64_t,
+ z0 = svbsl1n_n_s64 (z0, z1, 11),
+ z0 = svbsl1n (z0, z1, 11))
+
+/*
+** bsl1n_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s64_tied2, svint64_t,
+ z0 = svbsl1n_n_s64 (z1, z0, 11),
+ z0 = svbsl1n (z1, z0, 11))
+
+/*
+** bsl1n_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s64_untied, svint64_t,
+ z0 = svbsl1n_n_s64 (z1, z2, 11),
+ z0 = svbsl1n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl1n_s8_tied1:
+** bsl1n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s8_tied1, svint8_t,
+ z0 = svbsl1n_s8 (z0, z1, z2),
+ z0 = svbsl1n (z0, z1, z2))
+
+/*
+** bsl1n_s8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s8_tied2, svint8_t,
+ z0 = svbsl1n_s8 (z1, z0, z2),
+ z0 = svbsl1n (z1, z0, z2))
+
+/*
+** bsl1n_s8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s8_tied3, svint8_t,
+ z0 = svbsl1n_s8 (z1, z2, z0),
+ z0 = svbsl1n (z1, z2, z0))
+
+/*
+** bsl1n_s8_untied:
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_s8_untied, svint8_t,
+ z0 = svbsl1n_s8 (z1, z2, z3),
+ z0 = svbsl1n (z1, z2, z3))
+
+/*
+** bsl1n_w0_s8_tied1:
+** mov (z[0-9]+)\.b, w0
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svbsl1n_n_s8 (z0, z1, x0),
+ z0 = svbsl1n (z0, z1, x0))
+
+/*
+** bsl1n_w0_s8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_s8_tied2, svint8_t, int8_t,
+ z0 = svbsl1n_n_s8 (z1, z0, x0),
+ z0 = svbsl1n (z1, z0, x0))
+
+/*
+** bsl1n_w0_s8_untied:
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_s8_untied, svint8_t, int8_t,
+ z0 = svbsl1n_n_s8 (z1, z2, x0),
+ z0 = svbsl1n (z1, z2, x0))
+
+/*
+** bsl1n_11_s8_tied1:
+** mov (z[0-9]+)\.b, #11
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s8_tied1, svint8_t,
+ z0 = svbsl1n_n_s8 (z0, z1, 11),
+ z0 = svbsl1n (z0, z1, 11))
+
+/*
+** bsl1n_11_s8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s8_tied2, svint8_t,
+ z0 = svbsl1n_n_s8 (z1, z0, 11),
+ z0 = svbsl1n (z1, z0, 11))
+
+/*
+** bsl1n_11_s8_untied:
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_s8_untied, svint8_t,
+ z0 = svbsl1n_n_s8 (z1, z2, 11),
+ z0 = svbsl1n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl1n_u16_tied1:
+** bsl1n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u16_tied1, svuint16_t,
+ z0 = svbsl1n_u16 (z0, z1, z2),
+ z0 = svbsl1n (z0, z1, z2))
+
+/*
+** bsl1n_u16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u16_tied2, svuint16_t,
+ z0 = svbsl1n_u16 (z1, z0, z2),
+ z0 = svbsl1n (z1, z0, z2))
+
+/*
+** bsl1n_u16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u16_tied3, svuint16_t,
+ z0 = svbsl1n_u16 (z1, z2, z0),
+ z0 = svbsl1n (z1, z2, z0))
+
+/*
+** bsl1n_u16_untied:
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u16_untied, svuint16_t,
+ z0 = svbsl1n_u16 (z1, z2, z3),
+ z0 = svbsl1n (z1, z2, z3))
+
+/*
+** bsl1n_w0_u16_tied1:
+** mov (z[0-9]+)\.h, w0
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svbsl1n_n_u16 (z0, z1, x0),
+ z0 = svbsl1n (z0, z1, x0))
+
+/*
+** bsl1n_w0_u16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_u16_tied2, svuint16_t, uint16_t,
+ z0 = svbsl1n_n_u16 (z1, z0, x0),
+ z0 = svbsl1n (z1, z0, x0))
+
+/*
+** bsl1n_w0_u16_untied:
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svbsl1n_n_u16 (z1, z2, x0),
+ z0 = svbsl1n (z1, z2, x0))
+
+/*
+** bsl1n_11_u16_tied1:
+** mov (z[0-9]+)\.h, #11
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u16_tied1, svuint16_t,
+ z0 = svbsl1n_n_u16 (z0, z1, 11),
+ z0 = svbsl1n (z0, z1, 11))
+
+/*
+** bsl1n_11_u16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u16_tied2, svuint16_t,
+ z0 = svbsl1n_n_u16 (z1, z0, 11),
+ z0 = svbsl1n (z1, z0, 11))
+
+/*
+** bsl1n_11_u16_untied:
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u16_untied, svuint16_t,
+ z0 = svbsl1n_n_u16 (z1, z2, 11),
+ z0 = svbsl1n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl1n_u32_tied1:
+** bsl1n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u32_tied1, svuint32_t,
+ z0 = svbsl1n_u32 (z0, z1, z2),
+ z0 = svbsl1n (z0, z1, z2))
+
+/*
+** bsl1n_u32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u32_tied2, svuint32_t,
+ z0 = svbsl1n_u32 (z1, z0, z2),
+ z0 = svbsl1n (z1, z0, z2))
+
+/*
+** bsl1n_u32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u32_tied3, svuint32_t,
+ z0 = svbsl1n_u32 (z1, z2, z0),
+ z0 = svbsl1n (z1, z2, z0))
+
+/*
+** bsl1n_u32_untied:
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u32_untied, svuint32_t,
+ z0 = svbsl1n_u32 (z1, z2, z3),
+ z0 = svbsl1n (z1, z2, z3))
+
+/*
+** bsl1n_w0_u32_tied1:
+** mov (z[0-9]+)\.s, w0
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svbsl1n_n_u32 (z0, z1, x0),
+ z0 = svbsl1n (z0, z1, x0))
+
+/*
+** bsl1n_w0_u32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svbsl1n_n_u32 (z1, z0, x0),
+ z0 = svbsl1n (z1, z0, x0))
+
+/*
+** bsl1n_w0_u32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svbsl1n_n_u32 (z1, z2, x0),
+ z0 = svbsl1n (z1, z2, x0))
+
+/*
+** bsl1n_11_u32_tied1:
+** mov (z[0-9]+)\.s, #11
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u32_tied1, svuint32_t,
+ z0 = svbsl1n_n_u32 (z0, z1, 11),
+ z0 = svbsl1n (z0, z1, 11))
+
+/*
+** bsl1n_11_u32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u32_tied2, svuint32_t,
+ z0 = svbsl1n_n_u32 (z1, z0, 11),
+ z0 = svbsl1n (z1, z0, 11))
+
+/*
+** bsl1n_11_u32_untied:
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u32_untied, svuint32_t,
+ z0 = svbsl1n_n_u32 (z1, z2, 11),
+ z0 = svbsl1n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl1n_u64_tied1:
+** bsl1n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u64_tied1, svuint64_t,
+ z0 = svbsl1n_u64 (z0, z1, z2),
+ z0 = svbsl1n (z0, z1, z2))
+
+/*
+** bsl1n_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u64_tied2, svuint64_t,
+ z0 = svbsl1n_u64 (z1, z0, z2),
+ z0 = svbsl1n (z1, z0, z2))
+
+/*
+** bsl1n_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u64_tied3, svuint64_t,
+ z0 = svbsl1n_u64 (z1, z2, z0),
+ z0 = svbsl1n (z1, z2, z0))
+
+/*
+** bsl1n_u64_untied:
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u64_untied, svuint64_t,
+ z0 = svbsl1n_u64 (z1, z2, z3),
+ z0 = svbsl1n (z1, z2, z3))
+
+/*
+** bsl1n_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** bsl1n z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svbsl1n_n_u64 (z0, z1, x0),
+ z0 = svbsl1n (z0, z1, x0))
+
+/*
+** bsl1n_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svbsl1n_n_u64 (z1, z0, x0),
+ z0 = svbsl1n (z1, z0, x0))
+
+/*
+** bsl1n_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svbsl1n_n_u64 (z1, z2, x0),
+ z0 = svbsl1n (z1, z2, x0))
+
+/*
+** bsl1n_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** bsl1n z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u64_tied1, svuint64_t,
+ z0 = svbsl1n_n_u64 (z0, z1, 11),
+ z0 = svbsl1n (z0, z1, 11))
+
+/*
+** bsl1n_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u64_tied2, svuint64_t,
+ z0 = svbsl1n_n_u64 (z1, z0, 11),
+ z0 = svbsl1n (z1, z0, 11))
+
+/*
+** bsl1n_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u64_untied, svuint64_t,
+ z0 = svbsl1n_n_u64 (z1, z2, 11),
+ z0 = svbsl1n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl1n_u8_tied1:
+** bsl1n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u8_tied1, svuint8_t,
+ z0 = svbsl1n_u8 (z0, z1, z2),
+ z0 = svbsl1n (z0, z1, z2))
+
+/*
+** bsl1n_u8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u8_tied2, svuint8_t,
+ z0 = svbsl1n_u8 (z1, z0, z2),
+ z0 = svbsl1n (z1, z0, z2))
+
+/*
+** bsl1n_u8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u8_tied3, svuint8_t,
+ z0 = svbsl1n_u8 (z1, z2, z0),
+ z0 = svbsl1n (z1, z2, z0))
+
+/*
+** bsl1n_u8_untied:
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_u8_untied, svuint8_t,
+ z0 = svbsl1n_u8 (z1, z2, z3),
+ z0 = svbsl1n (z1, z2, z3))
+
+/*
+** bsl1n_w0_u8_tied1:
+** mov (z[0-9]+)\.b, w0
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svbsl1n_n_u8 (z0, z1, x0),
+ z0 = svbsl1n (z0, z1, x0))
+
+/*
+** bsl1n_w0_u8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_u8_tied2, svuint8_t, uint8_t,
+ z0 = svbsl1n_n_u8 (z1, z0, x0),
+ z0 = svbsl1n (z1, z0, x0))
+
+/*
+** bsl1n_w0_u8_untied:
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl1n_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svbsl1n_n_u8 (z1, z2, x0),
+ z0 = svbsl1n (z1, z2, x0))
+
+/*
+** bsl1n_11_u8_tied1:
+** mov (z[0-9]+)\.b, #11
+** bsl1n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u8_tied1, svuint8_t,
+ z0 = svbsl1n_n_u8 (z0, z1, 11),
+ z0 = svbsl1n (z0, z1, 11))
+
+/*
+** bsl1n_11_u8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u8_tied2, svuint8_t,
+ z0 = svbsl1n_n_u8 (z1, z0, 11),
+ z0 = svbsl1n (z1, z0, 11))
+
+/*
+** bsl1n_11_u8_untied:
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** bsl1n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl1n_11_u8_untied, svuint8_t,
+ z0 = svbsl1n_n_u8 (z1, z2, 11),
+ z0 = svbsl1n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl2n_s16_tied1:
+** bsl2n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s16_tied1, svint16_t,
+ z0 = svbsl2n_s16 (z0, z1, z2),
+ z0 = svbsl2n (z0, z1, z2))
+
+/*
+** bsl2n_s16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s16_tied2, svint16_t,
+ z0 = svbsl2n_s16 (z1, z0, z2),
+ z0 = svbsl2n (z1, z0, z2))
+
+/*
+** bsl2n_s16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s16_tied3, svint16_t,
+ z0 = svbsl2n_s16 (z1, z2, z0),
+ z0 = svbsl2n (z1, z2, z0))
+
+/*
+** bsl2n_s16_untied:
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s16_untied, svint16_t,
+ z0 = svbsl2n_s16 (z1, z2, z3),
+ z0 = svbsl2n (z1, z2, z3))
+
+/*
+** bsl2n_w0_s16_tied1:
+** mov (z[0-9]+)\.h, w0
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svbsl2n_n_s16 (z0, z1, x0),
+ z0 = svbsl2n (z0, z1, x0))
+
+/*
+** bsl2n_w0_s16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_s16_tied2, svint16_t, int16_t,
+ z0 = svbsl2n_n_s16 (z1, z0, x0),
+ z0 = svbsl2n (z1, z0, x0))
+
+/*
+** bsl2n_w0_s16_untied:
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_s16_untied, svint16_t, int16_t,
+ z0 = svbsl2n_n_s16 (z1, z2, x0),
+ z0 = svbsl2n (z1, z2, x0))
+
+/*
+** bsl2n_11_s16_tied1:
+** mov (z[0-9]+)\.h, #11
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s16_tied1, svint16_t,
+ z0 = svbsl2n_n_s16 (z0, z1, 11),
+ z0 = svbsl2n (z0, z1, 11))
+
+/*
+** bsl2n_11_s16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s16_tied2, svint16_t,
+ z0 = svbsl2n_n_s16 (z1, z0, 11),
+ z0 = svbsl2n (z1, z0, 11))
+
+/*
+** bsl2n_11_s16_untied:
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s16_untied, svint16_t,
+ z0 = svbsl2n_n_s16 (z1, z2, 11),
+ z0 = svbsl2n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl2n_s32_tied1:
+** bsl2n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s32_tied1, svint32_t,
+ z0 = svbsl2n_s32 (z0, z1, z2),
+ z0 = svbsl2n (z0, z1, z2))
+
+/*
+** bsl2n_s32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s32_tied2, svint32_t,
+ z0 = svbsl2n_s32 (z1, z0, z2),
+ z0 = svbsl2n (z1, z0, z2))
+
+/*
+** bsl2n_s32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s32_tied3, svint32_t,
+ z0 = svbsl2n_s32 (z1, z2, z0),
+ z0 = svbsl2n (z1, z2, z0))
+
+/*
+** bsl2n_s32_untied:
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s32_untied, svint32_t,
+ z0 = svbsl2n_s32 (z1, z2, z3),
+ z0 = svbsl2n (z1, z2, z3))
+
+/*
+** bsl2n_w0_s32_tied1:
+** mov (z[0-9]+)\.s, w0
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svbsl2n_n_s32 (z0, z1, x0),
+ z0 = svbsl2n (z0, z1, x0))
+
+/*
+** bsl2n_w0_s32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_s32_tied2, svint32_t, int32_t,
+ z0 = svbsl2n_n_s32 (z1, z0, x0),
+ z0 = svbsl2n (z1, z0, x0))
+
+/*
+** bsl2n_w0_s32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_s32_untied, svint32_t, int32_t,
+ z0 = svbsl2n_n_s32 (z1, z2, x0),
+ z0 = svbsl2n (z1, z2, x0))
+
+/*
+** bsl2n_11_s32_tied1:
+** mov (z[0-9]+)\.s, #11
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s32_tied1, svint32_t,
+ z0 = svbsl2n_n_s32 (z0, z1, 11),
+ z0 = svbsl2n (z0, z1, 11))
+
+/*
+** bsl2n_11_s32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s32_tied2, svint32_t,
+ z0 = svbsl2n_n_s32 (z1, z0, 11),
+ z0 = svbsl2n (z1, z0, 11))
+
+/*
+** bsl2n_11_s32_untied:
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s32_untied, svint32_t,
+ z0 = svbsl2n_n_s32 (z1, z2, 11),
+ z0 = svbsl2n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl2n_s64_tied1:
+** bsl2n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s64_tied1, svint64_t,
+ z0 = svbsl2n_s64 (z0, z1, z2),
+ z0 = svbsl2n (z0, z1, z2))
+
+/*
+** bsl2n_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s64_tied2, svint64_t,
+ z0 = svbsl2n_s64 (z1, z0, z2),
+ z0 = svbsl2n (z1, z0, z2))
+
+/*
+** bsl2n_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s64_tied3, svint64_t,
+ z0 = svbsl2n_s64 (z1, z2, z0),
+ z0 = svbsl2n (z1, z2, z0))
+
+/*
+** bsl2n_s64_untied:
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s64_untied, svint64_t,
+ z0 = svbsl2n_s64 (z1, z2, z3),
+ z0 = svbsl2n (z1, z2, z3))
+
+/*
+** bsl2n_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** bsl2n z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svbsl2n_n_s64 (z0, z1, x0),
+ z0 = svbsl2n (z0, z1, x0))
+
+/*
+** bsl2n_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_x0_s64_tied2, svint64_t, int64_t,
+ z0 = svbsl2n_n_s64 (z1, z0, x0),
+ z0 = svbsl2n (z1, z0, x0))
+
+/*
+** bsl2n_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_x0_s64_untied, svint64_t, int64_t,
+ z0 = svbsl2n_n_s64 (z1, z2, x0),
+ z0 = svbsl2n (z1, z2, x0))
+
+/*
+** bsl2n_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** bsl2n z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s64_tied1, svint64_t,
+ z0 = svbsl2n_n_s64 (z0, z1, 11),
+ z0 = svbsl2n (z0, z1, 11))
+
+/*
+** bsl2n_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s64_tied2, svint64_t,
+ z0 = svbsl2n_n_s64 (z1, z0, 11),
+ z0 = svbsl2n (z1, z0, 11))
+
+/*
+** bsl2n_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s64_untied, svint64_t,
+ z0 = svbsl2n_n_s64 (z1, z2, 11),
+ z0 = svbsl2n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl2n_s8_tied1:
+** bsl2n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s8_tied1, svint8_t,
+ z0 = svbsl2n_s8 (z0, z1, z2),
+ z0 = svbsl2n (z0, z1, z2))
+
+/*
+** bsl2n_s8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s8_tied2, svint8_t,
+ z0 = svbsl2n_s8 (z1, z0, z2),
+ z0 = svbsl2n (z1, z0, z2))
+
+/*
+** bsl2n_s8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s8_tied3, svint8_t,
+ z0 = svbsl2n_s8 (z1, z2, z0),
+ z0 = svbsl2n (z1, z2, z0))
+
+/*
+** bsl2n_s8_untied:
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_s8_untied, svint8_t,
+ z0 = svbsl2n_s8 (z1, z2, z3),
+ z0 = svbsl2n (z1, z2, z3))
+
+/*
+** bsl2n_w0_s8_tied1:
+** mov (z[0-9]+)\.b, w0
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svbsl2n_n_s8 (z0, z1, x0),
+ z0 = svbsl2n (z0, z1, x0))
+
+/*
+** bsl2n_w0_s8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_s8_tied2, svint8_t, int8_t,
+ z0 = svbsl2n_n_s8 (z1, z0, x0),
+ z0 = svbsl2n (z1, z0, x0))
+
+/*
+** bsl2n_w0_s8_untied:
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_s8_untied, svint8_t, int8_t,
+ z0 = svbsl2n_n_s8 (z1, z2, x0),
+ z0 = svbsl2n (z1, z2, x0))
+
+/*
+** bsl2n_11_s8_tied1:
+** mov (z[0-9]+)\.b, #11
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s8_tied1, svint8_t,
+ z0 = svbsl2n_n_s8 (z0, z1, 11),
+ z0 = svbsl2n (z0, z1, 11))
+
+/*
+** bsl2n_11_s8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s8_tied2, svint8_t,
+ z0 = svbsl2n_n_s8 (z1, z0, 11),
+ z0 = svbsl2n (z1, z0, 11))
+
+/*
+** bsl2n_11_s8_untied:
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_s8_untied, svint8_t,
+ z0 = svbsl2n_n_s8 (z1, z2, 11),
+ z0 = svbsl2n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl2n_u16_tied1:
+** bsl2n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u16_tied1, svuint16_t,
+ z0 = svbsl2n_u16 (z0, z1, z2),
+ z0 = svbsl2n (z0, z1, z2))
+
+/*
+** bsl2n_u16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u16_tied2, svuint16_t,
+ z0 = svbsl2n_u16 (z1, z0, z2),
+ z0 = svbsl2n (z1, z0, z2))
+
+/*
+** bsl2n_u16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u16_tied3, svuint16_t,
+ z0 = svbsl2n_u16 (z1, z2, z0),
+ z0 = svbsl2n (z1, z2, z0))
+
+/*
+** bsl2n_u16_untied:
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u16_untied, svuint16_t,
+ z0 = svbsl2n_u16 (z1, z2, z3),
+ z0 = svbsl2n (z1, z2, z3))
+
+/*
+** bsl2n_w0_u16_tied1:
+** mov (z[0-9]+)\.h, w0
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svbsl2n_n_u16 (z0, z1, x0),
+ z0 = svbsl2n (z0, z1, x0))
+
+/*
+** bsl2n_w0_u16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_u16_tied2, svuint16_t, uint16_t,
+ z0 = svbsl2n_n_u16 (z1, z0, x0),
+ z0 = svbsl2n (z1, z0, x0))
+
+/*
+** bsl2n_w0_u16_untied:
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svbsl2n_n_u16 (z1, z2, x0),
+ z0 = svbsl2n (z1, z2, x0))
+
+/*
+** bsl2n_11_u16_tied1:
+** mov (z[0-9]+)\.h, #11
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u16_tied1, svuint16_t,
+ z0 = svbsl2n_n_u16 (z0, z1, 11),
+ z0 = svbsl2n (z0, z1, 11))
+
+/*
+** bsl2n_11_u16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u16_tied2, svuint16_t,
+ z0 = svbsl2n_n_u16 (z1, z0, 11),
+ z0 = svbsl2n (z1, z0, 11))
+
+/*
+** bsl2n_11_u16_untied:
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u16_untied, svuint16_t,
+ z0 = svbsl2n_n_u16 (z1, z2, 11),
+ z0 = svbsl2n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl2n_u32_tied1:
+** bsl2n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u32_tied1, svuint32_t,
+ z0 = svbsl2n_u32 (z0, z1, z2),
+ z0 = svbsl2n (z0, z1, z2))
+
+/*
+** bsl2n_u32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u32_tied2, svuint32_t,
+ z0 = svbsl2n_u32 (z1, z0, z2),
+ z0 = svbsl2n (z1, z0, z2))
+
+/*
+** bsl2n_u32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u32_tied3, svuint32_t,
+ z0 = svbsl2n_u32 (z1, z2, z0),
+ z0 = svbsl2n (z1, z2, z0))
+
+/*
+** bsl2n_u32_untied:
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u32_untied, svuint32_t,
+ z0 = svbsl2n_u32 (z1, z2, z3),
+ z0 = svbsl2n (z1, z2, z3))
+
+/*
+** bsl2n_w0_u32_tied1:
+** mov (z[0-9]+)\.s, w0
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svbsl2n_n_u32 (z0, z1, x0),
+ z0 = svbsl2n (z0, z1, x0))
+
+/*
+** bsl2n_w0_u32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svbsl2n_n_u32 (z1, z0, x0),
+ z0 = svbsl2n (z1, z0, x0))
+
+/*
+** bsl2n_w0_u32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svbsl2n_n_u32 (z1, z2, x0),
+ z0 = svbsl2n (z1, z2, x0))
+
+/*
+** bsl2n_11_u32_tied1:
+** mov (z[0-9]+)\.s, #11
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u32_tied1, svuint32_t,
+ z0 = svbsl2n_n_u32 (z0, z1, 11),
+ z0 = svbsl2n (z0, z1, 11))
+
+/*
+** bsl2n_11_u32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u32_tied2, svuint32_t,
+ z0 = svbsl2n_n_u32 (z1, z0, 11),
+ z0 = svbsl2n (z1, z0, 11))
+
+/*
+** bsl2n_11_u32_untied:
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u32_untied, svuint32_t,
+ z0 = svbsl2n_n_u32 (z1, z2, 11),
+ z0 = svbsl2n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl2n_u64_tied1:
+** bsl2n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u64_tied1, svuint64_t,
+ z0 = svbsl2n_u64 (z0, z1, z2),
+ z0 = svbsl2n (z0, z1, z2))
+
+/*
+** bsl2n_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u64_tied2, svuint64_t,
+ z0 = svbsl2n_u64 (z1, z0, z2),
+ z0 = svbsl2n (z1, z0, z2))
+
+/*
+** bsl2n_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u64_tied3, svuint64_t,
+ z0 = svbsl2n_u64 (z1, z2, z0),
+ z0 = svbsl2n (z1, z2, z0))
+
+/*
+** bsl2n_u64_untied:
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u64_untied, svuint64_t,
+ z0 = svbsl2n_u64 (z1, z2, z3),
+ z0 = svbsl2n (z1, z2, z3))
+
+/*
+** bsl2n_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** bsl2n z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svbsl2n_n_u64 (z0, z1, x0),
+ z0 = svbsl2n (z0, z1, x0))
+
+/*
+** bsl2n_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svbsl2n_n_u64 (z1, z0, x0),
+ z0 = svbsl2n (z1, z0, x0))
+
+/*
+** bsl2n_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svbsl2n_n_u64 (z1, z2, x0),
+ z0 = svbsl2n (z1, z2, x0))
+
+/*
+** bsl2n_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** bsl2n z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u64_tied1, svuint64_t,
+ z0 = svbsl2n_n_u64 (z0, z1, 11),
+ z0 = svbsl2n (z0, z1, 11))
+
+/*
+** bsl2n_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u64_tied2, svuint64_t,
+ z0 = svbsl2n_n_u64 (z1, z0, 11),
+ z0 = svbsl2n (z1, z0, 11))
+
+/*
+** bsl2n_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u64_untied, svuint64_t,
+ z0 = svbsl2n_n_u64 (z1, z2, 11),
+ z0 = svbsl2n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl2n_u8_tied1:
+** bsl2n z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u8_tied1, svuint8_t,
+ z0 = svbsl2n_u8 (z0, z1, z2),
+ z0 = svbsl2n (z0, z1, z2))
+
+/*
+** bsl2n_u8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u8_tied2, svuint8_t,
+ z0 = svbsl2n_u8 (z1, z0, z2),
+ z0 = svbsl2n (z1, z0, z2))
+
+/*
+** bsl2n_u8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u8_tied3, svuint8_t,
+ z0 = svbsl2n_u8 (z1, z2, z0),
+ z0 = svbsl2n (z1, z2, z0))
+
+/*
+** bsl2n_u8_untied:
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_u8_untied, svuint8_t,
+ z0 = svbsl2n_u8 (z1, z2, z3),
+ z0 = svbsl2n (z1, z2, z3))
+
+/*
+** bsl2n_w0_u8_tied1:
+** mov (z[0-9]+)\.b, w0
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svbsl2n_n_u8 (z0, z1, x0),
+ z0 = svbsl2n (z0, z1, x0))
+
+/*
+** bsl2n_w0_u8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_u8_tied2, svuint8_t, uint8_t,
+ z0 = svbsl2n_n_u8 (z1, z0, x0),
+ z0 = svbsl2n (z1, z0, x0))
+
+/*
+** bsl2n_w0_u8_untied:
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl2n_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svbsl2n_n_u8 (z1, z2, x0),
+ z0 = svbsl2n (z1, z2, x0))
+
+/*
+** bsl2n_11_u8_tied1:
+** mov (z[0-9]+)\.b, #11
+** bsl2n z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u8_tied1, svuint8_t,
+ z0 = svbsl2n_n_u8 (z0, z1, 11),
+ z0 = svbsl2n (z0, z1, 11))
+
+/*
+** bsl2n_11_u8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u8_tied2, svuint8_t,
+ z0 = svbsl2n_n_u8 (z1, z0, 11),
+ z0 = svbsl2n (z1, z0, 11))
+
+/*
+** bsl2n_11_u8_untied:
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** bsl2n z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl2n_11_u8_untied, svuint8_t,
+ z0 = svbsl2n_n_u8 (z1, z2, 11),
+ z0 = svbsl2n (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl_s16_tied1:
+** bsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s16_tied1, svint16_t,
+ z0 = svbsl_s16 (z0, z1, z2),
+ z0 = svbsl (z0, z1, z2))
+
+/*
+** bsl_s16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s16_tied2, svint16_t,
+ z0 = svbsl_s16 (z1, z0, z2),
+ z0 = svbsl (z1, z0, z2))
+
+/*
+** bsl_s16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s16_tied3, svint16_t,
+ z0 = svbsl_s16 (z1, z2, z0),
+ z0 = svbsl (z1, z2, z0))
+
+/*
+** bsl_s16_untied:
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s16_untied, svint16_t,
+ z0 = svbsl_s16 (z1, z2, z3),
+ z0 = svbsl (z1, z2, z3))
+
+/*
+** bsl_w0_s16_tied1:
+** mov (z[0-9]+)\.h, w0
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svbsl_n_s16 (z0, z1, x0),
+ z0 = svbsl (z0, z1, x0))
+
+/*
+** bsl_w0_s16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_s16_tied2, svint16_t, int16_t,
+ z0 = svbsl_n_s16 (z1, z0, x0),
+ z0 = svbsl (z1, z0, x0))
+
+/*
+** bsl_w0_s16_untied:
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_s16_untied, svint16_t, int16_t,
+ z0 = svbsl_n_s16 (z1, z2, x0),
+ z0 = svbsl (z1, z2, x0))
+
+/*
+** bsl_11_s16_tied1:
+** mov (z[0-9]+)\.h, #11
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s16_tied1, svint16_t,
+ z0 = svbsl_n_s16 (z0, z1, 11),
+ z0 = svbsl (z0, z1, 11))
+
+/*
+** bsl_11_s16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s16_tied2, svint16_t,
+ z0 = svbsl_n_s16 (z1, z0, 11),
+ z0 = svbsl (z1, z0, 11))
+
+/*
+** bsl_11_s16_untied:
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s16_untied, svint16_t,
+ z0 = svbsl_n_s16 (z1, z2, 11),
+ z0 = svbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl_s32_tied1:
+** bsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s32_tied1, svint32_t,
+ z0 = svbsl_s32 (z0, z1, z2),
+ z0 = svbsl (z0, z1, z2))
+
+/*
+** bsl_s32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s32_tied2, svint32_t,
+ z0 = svbsl_s32 (z1, z0, z2),
+ z0 = svbsl (z1, z0, z2))
+
+/*
+** bsl_s32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s32_tied3, svint32_t,
+ z0 = svbsl_s32 (z1, z2, z0),
+ z0 = svbsl (z1, z2, z0))
+
+/*
+** bsl_s32_untied:
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s32_untied, svint32_t,
+ z0 = svbsl_s32 (z1, z2, z3),
+ z0 = svbsl (z1, z2, z3))
+
+/*
+** bsl_w0_s32_tied1:
+** mov (z[0-9]+)\.s, w0
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svbsl_n_s32 (z0, z1, x0),
+ z0 = svbsl (z0, z1, x0))
+
+/*
+** bsl_w0_s32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_s32_tied2, svint32_t, int32_t,
+ z0 = svbsl_n_s32 (z1, z0, x0),
+ z0 = svbsl (z1, z0, x0))
+
+/*
+** bsl_w0_s32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_s32_untied, svint32_t, int32_t,
+ z0 = svbsl_n_s32 (z1, z2, x0),
+ z0 = svbsl (z1, z2, x0))
+
+/*
+** bsl_11_s32_tied1:
+** mov (z[0-9]+)\.s, #11
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s32_tied1, svint32_t,
+ z0 = svbsl_n_s32 (z0, z1, 11),
+ z0 = svbsl (z0, z1, 11))
+
+/*
+** bsl_11_s32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s32_tied2, svint32_t,
+ z0 = svbsl_n_s32 (z1, z0, 11),
+ z0 = svbsl (z1, z0, 11))
+
+/*
+** bsl_11_s32_untied:
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s32_untied, svint32_t,
+ z0 = svbsl_n_s32 (z1, z2, 11),
+ z0 = svbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl_s64_tied1:
+** bsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s64_tied1, svint64_t,
+ z0 = svbsl_s64 (z0, z1, z2),
+ z0 = svbsl (z0, z1, z2))
+
+/*
+** bsl_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s64_tied2, svint64_t,
+ z0 = svbsl_s64 (z1, z0, z2),
+ z0 = svbsl (z1, z0, z2))
+
+/*
+** bsl_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s64_tied3, svint64_t,
+ z0 = svbsl_s64 (z1, z2, z0),
+ z0 = svbsl (z1, z2, z0))
+
+/*
+** bsl_s64_untied:
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s64_untied, svint64_t,
+ z0 = svbsl_s64 (z1, z2, z3),
+ z0 = svbsl (z1, z2, z3))
+
+/*
+** bsl_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** bsl z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svbsl_n_s64 (z0, z1, x0),
+ z0 = svbsl (z0, z1, x0))
+
+/*
+** bsl_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_x0_s64_tied2, svint64_t, int64_t,
+ z0 = svbsl_n_s64 (z1, z0, x0),
+ z0 = svbsl (z1, z0, x0))
+
+/*
+** bsl_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_x0_s64_untied, svint64_t, int64_t,
+ z0 = svbsl_n_s64 (z1, z2, x0),
+ z0 = svbsl (z1, z2, x0))
+
+/*
+** bsl_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** bsl z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s64_tied1, svint64_t,
+ z0 = svbsl_n_s64 (z0, z1, 11),
+ z0 = svbsl (z0, z1, 11))
+
+/*
+** bsl_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s64_tied2, svint64_t,
+ z0 = svbsl_n_s64 (z1, z0, 11),
+ z0 = svbsl (z1, z0, 11))
+
+/*
+** bsl_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s64_untied, svint64_t,
+ z0 = svbsl_n_s64 (z1, z2, 11),
+ z0 = svbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl_s8_tied1:
+** bsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s8_tied1, svint8_t,
+ z0 = svbsl_s8 (z0, z1, z2),
+ z0 = svbsl (z0, z1, z2))
+
+/*
+** bsl_s8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s8_tied2, svint8_t,
+ z0 = svbsl_s8 (z1, z0, z2),
+ z0 = svbsl (z1, z0, z2))
+
+/*
+** bsl_s8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s8_tied3, svint8_t,
+ z0 = svbsl_s8 (z1, z2, z0),
+ z0 = svbsl (z1, z2, z0))
+
+/*
+** bsl_s8_untied:
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_s8_untied, svint8_t,
+ z0 = svbsl_s8 (z1, z2, z3),
+ z0 = svbsl (z1, z2, z3))
+
+/*
+** bsl_w0_s8_tied1:
+** mov (z[0-9]+)\.b, w0
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svbsl_n_s8 (z0, z1, x0),
+ z0 = svbsl (z0, z1, x0))
+
+/*
+** bsl_w0_s8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_s8_tied2, svint8_t, int8_t,
+ z0 = svbsl_n_s8 (z1, z0, x0),
+ z0 = svbsl (z1, z0, x0))
+
+/*
+** bsl_w0_s8_untied:
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_s8_untied, svint8_t, int8_t,
+ z0 = svbsl_n_s8 (z1, z2, x0),
+ z0 = svbsl (z1, z2, x0))
+
+/*
+** bsl_11_s8_tied1:
+** mov (z[0-9]+)\.b, #11
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s8_tied1, svint8_t,
+ z0 = svbsl_n_s8 (z0, z1, 11),
+ z0 = svbsl (z0, z1, 11))
+
+/*
+** bsl_11_s8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s8_tied2, svint8_t,
+ z0 = svbsl_n_s8 (z1, z0, 11),
+ z0 = svbsl (z1, z0, 11))
+
+/*
+** bsl_11_s8_untied:
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_s8_untied, svint8_t,
+ z0 = svbsl_n_s8 (z1, z2, 11),
+ z0 = svbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl_u16_tied1:
+** bsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u16_tied1, svuint16_t,
+ z0 = svbsl_u16 (z0, z1, z2),
+ z0 = svbsl (z0, z1, z2))
+
+/*
+** bsl_u16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u16_tied2, svuint16_t,
+ z0 = svbsl_u16 (z1, z0, z2),
+ z0 = svbsl (z1, z0, z2))
+
+/*
+** bsl_u16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u16_tied3, svuint16_t,
+ z0 = svbsl_u16 (z1, z2, z0),
+ z0 = svbsl (z1, z2, z0))
+
+/*
+** bsl_u16_untied:
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u16_untied, svuint16_t,
+ z0 = svbsl_u16 (z1, z2, z3),
+ z0 = svbsl (z1, z2, z3))
+
+/*
+** bsl_w0_u16_tied1:
+** mov (z[0-9]+)\.h, w0
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svbsl_n_u16 (z0, z1, x0),
+ z0 = svbsl (z0, z1, x0))
+
+/*
+** bsl_w0_u16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_u16_tied2, svuint16_t, uint16_t,
+ z0 = svbsl_n_u16 (z1, z0, x0),
+ z0 = svbsl (z1, z0, x0))
+
+/*
+** bsl_w0_u16_untied:
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svbsl_n_u16 (z1, z2, x0),
+ z0 = svbsl (z1, z2, x0))
+
+/*
+** bsl_11_u16_tied1:
+** mov (z[0-9]+)\.h, #11
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u16_tied1, svuint16_t,
+ z0 = svbsl_n_u16 (z0, z1, 11),
+ z0 = svbsl (z0, z1, 11))
+
+/*
+** bsl_11_u16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u16_tied2, svuint16_t,
+ z0 = svbsl_n_u16 (z1, z0, 11),
+ z0 = svbsl (z1, z0, 11))
+
+/*
+** bsl_11_u16_untied:
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u16_untied, svuint16_t,
+ z0 = svbsl_n_u16 (z1, z2, 11),
+ z0 = svbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl_u32_tied1:
+** bsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u32_tied1, svuint32_t,
+ z0 = svbsl_u32 (z0, z1, z2),
+ z0 = svbsl (z0, z1, z2))
+
+/*
+** bsl_u32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u32_tied2, svuint32_t,
+ z0 = svbsl_u32 (z1, z0, z2),
+ z0 = svbsl (z1, z0, z2))
+
+/*
+** bsl_u32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u32_tied3, svuint32_t,
+ z0 = svbsl_u32 (z1, z2, z0),
+ z0 = svbsl (z1, z2, z0))
+
+/*
+** bsl_u32_untied:
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u32_untied, svuint32_t,
+ z0 = svbsl_u32 (z1, z2, z3),
+ z0 = svbsl (z1, z2, z3))
+
+/*
+** bsl_w0_u32_tied1:
+** mov (z[0-9]+)\.s, w0
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svbsl_n_u32 (z0, z1, x0),
+ z0 = svbsl (z0, z1, x0))
+
+/*
+** bsl_w0_u32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svbsl_n_u32 (z1, z0, x0),
+ z0 = svbsl (z1, z0, x0))
+
+/*
+** bsl_w0_u32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svbsl_n_u32 (z1, z2, x0),
+ z0 = svbsl (z1, z2, x0))
+
+/*
+** bsl_11_u32_tied1:
+** mov (z[0-9]+)\.s, #11
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u32_tied1, svuint32_t,
+ z0 = svbsl_n_u32 (z0, z1, 11),
+ z0 = svbsl (z0, z1, 11))
+
+/*
+** bsl_11_u32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u32_tied2, svuint32_t,
+ z0 = svbsl_n_u32 (z1, z0, 11),
+ z0 = svbsl (z1, z0, 11))
+
+/*
+** bsl_11_u32_untied:
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u32_untied, svuint32_t,
+ z0 = svbsl_n_u32 (z1, z2, 11),
+ z0 = svbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl_u64_tied1:
+** bsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u64_tied1, svuint64_t,
+ z0 = svbsl_u64 (z0, z1, z2),
+ z0 = svbsl (z0, z1, z2))
+
+/*
+** bsl_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u64_tied2, svuint64_t,
+ z0 = svbsl_u64 (z1, z0, z2),
+ z0 = svbsl (z1, z0, z2))
+
+/*
+** bsl_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u64_tied3, svuint64_t,
+ z0 = svbsl_u64 (z1, z2, z0),
+ z0 = svbsl (z1, z2, z0))
+
+/*
+** bsl_u64_untied:
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u64_untied, svuint64_t,
+ z0 = svbsl_u64 (z1, z2, z3),
+ z0 = svbsl (z1, z2, z3))
+
+/*
+** bsl_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** bsl z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svbsl_n_u64 (z0, z1, x0),
+ z0 = svbsl (z0, z1, x0))
+
+/*
+** bsl_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svbsl_n_u64 (z1, z0, x0),
+ z0 = svbsl (z1, z0, x0))
+
+/*
+** bsl_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svbsl_n_u64 (z1, z2, x0),
+ z0 = svbsl (z1, z2, x0))
+
+/*
+** bsl_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** bsl z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u64_tied1, svuint64_t,
+ z0 = svbsl_n_u64 (z0, z1, 11),
+ z0 = svbsl (z0, z1, 11))
+
+/*
+** bsl_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u64_tied2, svuint64_t,
+ z0 = svbsl_n_u64 (z1, z0, 11),
+ z0 = svbsl (z1, z0, 11))
+
+/*
+** bsl_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u64_untied, svuint64_t,
+ z0 = svbsl_n_u64 (z1, z2, 11),
+ z0 = svbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** bsl_u8_tied1:
+** bsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u8_tied1, svuint8_t,
+ z0 = svbsl_u8 (z0, z1, z2),
+ z0 = svbsl (z0, z1, z2))
+
+/*
+** bsl_u8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u8_tied2, svuint8_t,
+ z0 = svbsl_u8 (z1, z0, z2),
+ z0 = svbsl (z1, z0, z2))
+
+/*
+** bsl_u8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u8_tied3, svuint8_t,
+ z0 = svbsl_u8 (z1, z2, z0),
+ z0 = svbsl (z1, z2, z0))
+
+/*
+** bsl_u8_untied:
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_u8_untied, svuint8_t,
+ z0 = svbsl_u8 (z1, z2, z3),
+ z0 = svbsl (z1, z2, z3))
+
+/*
+** bsl_w0_u8_tied1:
+** mov (z[0-9]+)\.b, w0
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svbsl_n_u8 (z0, z1, x0),
+ z0 = svbsl (z0, z1, x0))
+
+/*
+** bsl_w0_u8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_u8_tied2, svuint8_t, uint8_t,
+ z0 = svbsl_n_u8 (z1, z0, x0),
+ z0 = svbsl (z1, z0, x0))
+
+/*
+** bsl_w0_u8_untied:
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (bsl_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svbsl_n_u8 (z1, z2, x0),
+ z0 = svbsl (z1, z2, x0))
+
+/*
+** bsl_11_u8_tied1:
+** mov (z[0-9]+)\.b, #11
+** bsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u8_tied1, svuint8_t,
+ z0 = svbsl_n_u8 (z0, z1, 11),
+ z0 = svbsl (z0, z1, 11))
+
+/*
+** bsl_11_u8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u8_tied2, svuint8_t,
+ z0 = svbsl_n_u8 (z1, z0, 11),
+ z0 = svbsl (z1, z0, 11))
+
+/*
+** bsl_11_u8_untied:
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** bsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (bsl_11_u8_untied, svuint8_t,
+ z0 = svbsl_n_u8 (z1, z2, 11),
+ z0 = svbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cadd_90_s16_tied1:
+** cadd z0\.h, z0\.h, z1\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s16_tied1, svint16_t,
+ z0 = svcadd_s16 (z0, z1, 90),
+ z0 = svcadd (z0, z1, 90))
+
+/*
+** cadd_90_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.h, z0\.h, \1\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s16_tied2, svint16_t,
+ z0 = svcadd_s16 (z1, z0, 90),
+ z0 = svcadd (z1, z0, 90))
+
+/*
+** cadd_90_s16_untied:
+** movprfx z0, z1
+** cadd z0\.h, z0\.h, z2\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s16_untied, svint16_t,
+ z0 = svcadd_s16 (z1, z2, 90),
+ z0 = svcadd (z1, z2, 90))
+
+/*
+** cadd_270_s16_tied1:
+** cadd z0\.h, z0\.h, z1\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s16_tied1, svint16_t,
+ z0 = svcadd_s16 (z0, z1, 270),
+ z0 = svcadd (z0, z1, 270))
+
+/*
+** cadd_270_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.h, z0\.h, \1\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s16_tied2, svint16_t,
+ z0 = svcadd_s16 (z1, z0, 270),
+ z0 = svcadd (z1, z0, 270))
+
+/*
+** cadd_270_s16_untied:
+** movprfx z0, z1
+** cadd z0\.h, z0\.h, z2\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s16_untied, svint16_t,
+ z0 = svcadd_s16 (z1, z2, 270),
+ z0 = svcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cadd_90_s32_tied1:
+** cadd z0\.s, z0\.s, z1\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s32_tied1, svint32_t,
+ z0 = svcadd_s32 (z0, z1, 90),
+ z0 = svcadd (z0, z1, 90))
+
+/*
+** cadd_90_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.s, z0\.s, \1\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s32_tied2, svint32_t,
+ z0 = svcadd_s32 (z1, z0, 90),
+ z0 = svcadd (z1, z0, 90))
+
+/*
+** cadd_90_s32_untied:
+** movprfx z0, z1
+** cadd z0\.s, z0\.s, z2\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s32_untied, svint32_t,
+ z0 = svcadd_s32 (z1, z2, 90),
+ z0 = svcadd (z1, z2, 90))
+
+/*
+** cadd_270_s32_tied1:
+** cadd z0\.s, z0\.s, z1\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s32_tied1, svint32_t,
+ z0 = svcadd_s32 (z0, z1, 270),
+ z0 = svcadd (z0, z1, 270))
+
+/*
+** cadd_270_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.s, z0\.s, \1\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s32_tied2, svint32_t,
+ z0 = svcadd_s32 (z1, z0, 270),
+ z0 = svcadd (z1, z0, 270))
+
+/*
+** cadd_270_s32_untied:
+** movprfx z0, z1
+** cadd z0\.s, z0\.s, z2\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s32_untied, svint32_t,
+ z0 = svcadd_s32 (z1, z2, 270),
+ z0 = svcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cadd_90_s64_tied1:
+** cadd z0\.d, z0\.d, z1\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s64_tied1, svint64_t,
+ z0 = svcadd_s64 (z0, z1, 90),
+ z0 = svcadd (z0, z1, 90))
+
+/*
+** cadd_90_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cadd z0\.d, z0\.d, \1, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s64_tied2, svint64_t,
+ z0 = svcadd_s64 (z1, z0, 90),
+ z0 = svcadd (z1, z0, 90))
+
+/*
+** cadd_90_s64_untied:
+** movprfx z0, z1
+** cadd z0\.d, z0\.d, z2\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s64_untied, svint64_t,
+ z0 = svcadd_s64 (z1, z2, 90),
+ z0 = svcadd (z1, z2, 90))
+
+/*
+** cadd_270_s64_tied1:
+** cadd z0\.d, z0\.d, z1\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s64_tied1, svint64_t,
+ z0 = svcadd_s64 (z0, z1, 270),
+ z0 = svcadd (z0, z1, 270))
+
+/*
+** cadd_270_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cadd z0\.d, z0\.d, \1, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s64_tied2, svint64_t,
+ z0 = svcadd_s64 (z1, z0, 270),
+ z0 = svcadd (z1, z0, 270))
+
+/*
+** cadd_270_s64_untied:
+** movprfx z0, z1
+** cadd z0\.d, z0\.d, z2\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s64_untied, svint64_t,
+ z0 = svcadd_s64 (z1, z2, 270),
+ z0 = svcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cadd_90_s8_tied1:
+** cadd z0\.b, z0\.b, z1\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s8_tied1, svint8_t,
+ z0 = svcadd_s8 (z0, z1, 90),
+ z0 = svcadd (z0, z1, 90))
+
+/*
+** cadd_90_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.b, z0\.b, \1\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s8_tied2, svint8_t,
+ z0 = svcadd_s8 (z1, z0, 90),
+ z0 = svcadd (z1, z0, 90))
+
+/*
+** cadd_90_s8_untied:
+** movprfx z0, z1
+** cadd z0\.b, z0\.b, z2\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_s8_untied, svint8_t,
+ z0 = svcadd_s8 (z1, z2, 90),
+ z0 = svcadd (z1, z2, 90))
+
+/*
+** cadd_270_s8_tied1:
+** cadd z0\.b, z0\.b, z1\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s8_tied1, svint8_t,
+ z0 = svcadd_s8 (z0, z1, 270),
+ z0 = svcadd (z0, z1, 270))
+
+/*
+** cadd_270_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.b, z0\.b, \1\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s8_tied2, svint8_t,
+ z0 = svcadd_s8 (z1, z0, 270),
+ z0 = svcadd (z1, z0, 270))
+
+/*
+** cadd_270_s8_untied:
+** movprfx z0, z1
+** cadd z0\.b, z0\.b, z2\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_s8_untied, svint8_t,
+ z0 = svcadd_s8 (z1, z2, 270),
+ z0 = svcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cadd_90_u16_tied1:
+** cadd z0\.h, z0\.h, z1\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u16_tied1, svuint16_t,
+ z0 = svcadd_u16 (z0, z1, 90),
+ z0 = svcadd (z0, z1, 90))
+
+/*
+** cadd_90_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.h, z0\.h, \1\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u16_tied2, svuint16_t,
+ z0 = svcadd_u16 (z1, z0, 90),
+ z0 = svcadd (z1, z0, 90))
+
+/*
+** cadd_90_u16_untied:
+** movprfx z0, z1
+** cadd z0\.h, z0\.h, z2\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u16_untied, svuint16_t,
+ z0 = svcadd_u16 (z1, z2, 90),
+ z0 = svcadd (z1, z2, 90))
+
+/*
+** cadd_270_u16_tied1:
+** cadd z0\.h, z0\.h, z1\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u16_tied1, svuint16_t,
+ z0 = svcadd_u16 (z0, z1, 270),
+ z0 = svcadd (z0, z1, 270))
+
+/*
+** cadd_270_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.h, z0\.h, \1\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u16_tied2, svuint16_t,
+ z0 = svcadd_u16 (z1, z0, 270),
+ z0 = svcadd (z1, z0, 270))
+
+/*
+** cadd_270_u16_untied:
+** movprfx z0, z1
+** cadd z0\.h, z0\.h, z2\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u16_untied, svuint16_t,
+ z0 = svcadd_u16 (z1, z2, 270),
+ z0 = svcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cadd_90_u32_tied1:
+** cadd z0\.s, z0\.s, z1\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u32_tied1, svuint32_t,
+ z0 = svcadd_u32 (z0, z1, 90),
+ z0 = svcadd (z0, z1, 90))
+
+/*
+** cadd_90_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.s, z0\.s, \1\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u32_tied2, svuint32_t,
+ z0 = svcadd_u32 (z1, z0, 90),
+ z0 = svcadd (z1, z0, 90))
+
+/*
+** cadd_90_u32_untied:
+** movprfx z0, z1
+** cadd z0\.s, z0\.s, z2\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u32_untied, svuint32_t,
+ z0 = svcadd_u32 (z1, z2, 90),
+ z0 = svcadd (z1, z2, 90))
+
+/*
+** cadd_270_u32_tied1:
+** cadd z0\.s, z0\.s, z1\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u32_tied1, svuint32_t,
+ z0 = svcadd_u32 (z0, z1, 270),
+ z0 = svcadd (z0, z1, 270))
+
+/*
+** cadd_270_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.s, z0\.s, \1\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u32_tied2, svuint32_t,
+ z0 = svcadd_u32 (z1, z0, 270),
+ z0 = svcadd (z1, z0, 270))
+
+/*
+** cadd_270_u32_untied:
+** movprfx z0, z1
+** cadd z0\.s, z0\.s, z2\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u32_untied, svuint32_t,
+ z0 = svcadd_u32 (z1, z2, 270),
+ z0 = svcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cadd_90_u64_tied1:
+** cadd z0\.d, z0\.d, z1\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u64_tied1, svuint64_t,
+ z0 = svcadd_u64 (z0, z1, 90),
+ z0 = svcadd (z0, z1, 90))
+
+/*
+** cadd_90_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cadd z0\.d, z0\.d, \1, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u64_tied2, svuint64_t,
+ z0 = svcadd_u64 (z1, z0, 90),
+ z0 = svcadd (z1, z0, 90))
+
+/*
+** cadd_90_u64_untied:
+** movprfx z0, z1
+** cadd z0\.d, z0\.d, z2\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u64_untied, svuint64_t,
+ z0 = svcadd_u64 (z1, z2, 90),
+ z0 = svcadd (z1, z2, 90))
+
+/*
+** cadd_270_u64_tied1:
+** cadd z0\.d, z0\.d, z1\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u64_tied1, svuint64_t,
+ z0 = svcadd_u64 (z0, z1, 270),
+ z0 = svcadd (z0, z1, 270))
+
+/*
+** cadd_270_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cadd z0\.d, z0\.d, \1, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u64_tied2, svuint64_t,
+ z0 = svcadd_u64 (z1, z0, 270),
+ z0 = svcadd (z1, z0, 270))
+
+/*
+** cadd_270_u64_untied:
+** movprfx z0, z1
+** cadd z0\.d, z0\.d, z2\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u64_untied, svuint64_t,
+ z0 = svcadd_u64 (z1, z2, 270),
+ z0 = svcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cadd_90_u8_tied1:
+** cadd z0\.b, z0\.b, z1\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u8_tied1, svuint8_t,
+ z0 = svcadd_u8 (z0, z1, 90),
+ z0 = svcadd (z0, z1, 90))
+
+/*
+** cadd_90_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.b, z0\.b, \1\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u8_tied2, svuint8_t,
+ z0 = svcadd_u8 (z1, z0, 90),
+ z0 = svcadd (z1, z0, 90))
+
+/*
+** cadd_90_u8_untied:
+** movprfx z0, z1
+** cadd z0\.b, z0\.b, z2\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cadd_90_u8_untied, svuint8_t,
+ z0 = svcadd_u8 (z1, z2, 90),
+ z0 = svcadd (z1, z2, 90))
+
+/*
+** cadd_270_u8_tied1:
+** cadd z0\.b, z0\.b, z1\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u8_tied1, svuint8_t,
+ z0 = svcadd_u8 (z0, z1, 270),
+ z0 = svcadd (z0, z1, 270))
+
+/*
+** cadd_270_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cadd z0\.b, z0\.b, \1\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u8_tied2, svuint8_t,
+ z0 = svcadd_u8 (z1, z0, 270),
+ z0 = svcadd (z1, z0, 270))
+
+/*
+** cadd_270_u8_untied:
+** movprfx z0, z1
+** cadd z0\.b, z0\.b, z2\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cadd_270_u8_untied, svuint8_t,
+ z0 = svcadd_u8 (z1, z2, 270),
+ z0 = svcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cdot_lane_0_0_s32_tied1:
+** cdot z0\.s, z4\.b, z5\.b\[0\], #0
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_0_s32_tied1, svint32_t, svint8_t,
+ z0 = svcdot_lane_s32 (z0, z4, z5, 0, 0),
+ z0 = svcdot_lane (z0, z4, z5, 0, 0))
+
+/*
+** cdot_lane_0_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, \1\.b, z1\.b\[0\], #0
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_0_s32_tied2, svint32_t, svint8_t,
+ z0_res = svcdot_lane_s32 (z4, z0, z1, 0, 0),
+ z0_res = svcdot_lane (z4, z0, z1, 0, 0))
+
+/*
+** cdot_lane_0_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, z1\.b, \1\.b\[0\], #0
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_0_s32_tied3, svint32_t, svint8_t,
+ z0_res = svcdot_lane_s32 (z4, z1, z0, 0, 0),
+ z0_res = svcdot_lane (z4, z1, z0, 0, 0))
+
+/*
+** cdot_lane_0_0_s32_untied:
+** movprfx z0, z1
+** cdot z0\.s, z4\.b, z5\.b\[0\], #0
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_0_s32_untied, svint32_t, svint8_t,
+ z0 = svcdot_lane_s32 (z1, z4, z5, 0, 0),
+ z0 = svcdot_lane (z1, z4, z5, 0, 0))
+
+/*
+** cdot_lane_0_90_s32_tied1:
+** cdot z0\.s, z4\.b, z5\.b\[0\], #90
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_90_s32_tied1, svint32_t, svint8_t,
+ z0 = svcdot_lane_s32 (z0, z4, z5, 0, 90),
+ z0 = svcdot_lane (z0, z4, z5, 0, 90))
+
+/*
+** cdot_lane_0_90_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, \1\.b, z1\.b\[0\], #90
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_90_s32_tied2, svint32_t, svint8_t,
+ z0_res = svcdot_lane_s32 (z4, z0, z1, 0, 90),
+ z0_res = svcdot_lane (z4, z0, z1, 0, 90))
+
+/*
+** cdot_lane_0_90_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, z1\.b, \1\.b\[0\], #90
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_90_s32_tied3, svint32_t, svint8_t,
+ z0_res = svcdot_lane_s32 (z4, z1, z0, 0, 90),
+ z0_res = svcdot_lane (z4, z1, z0, 0, 90))
+
+/*
+** cdot_lane_0_90_s32_untied:
+** movprfx z0, z1
+** cdot z0\.s, z4\.b, z5\.b\[0\], #90
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_90_s32_untied, svint32_t, svint8_t,
+ z0 = svcdot_lane_s32 (z1, z4, z5, 0, 90),
+ z0 = svcdot_lane (z1, z4, z5, 0, 90))
+
+/*
+** cdot_lane_0_180_s32_tied1:
+** cdot z0\.s, z4\.b, z5\.b\[0\], #180
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_180_s32_tied1, svint32_t, svint8_t,
+ z0 = svcdot_lane_s32 (z0, z4, z5, 0, 180),
+ z0 = svcdot_lane (z0, z4, z5, 0, 180))
+
+/*
+** cdot_lane_0_180_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, \1\.b, z1\.b\[0\], #180
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_180_s32_tied2, svint32_t, svint8_t,
+ z0_res = svcdot_lane_s32 (z4, z0, z1, 0, 180),
+ z0_res = svcdot_lane (z4, z0, z1, 0, 180))
+
+/*
+** cdot_lane_0_180_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, z1\.b, \1\.b\[0\], #180
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_180_s32_tied3, svint32_t, svint8_t,
+ z0_res = svcdot_lane_s32 (z4, z1, z0, 0, 180),
+ z0_res = svcdot_lane (z4, z1, z0, 0, 180))
+
+/*
+** cdot_lane_0_180_s32_untied:
+** movprfx z0, z1
+** cdot z0\.s, z4\.b, z5\.b\[0\], #180
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_180_s32_untied, svint32_t, svint8_t,
+ z0 = svcdot_lane_s32 (z1, z4, z5, 0, 180),
+ z0 = svcdot_lane (z1, z4, z5, 0, 180))
+
+/*
+** cdot_lane_0_270_s32_tied1:
+** cdot z0\.s, z4\.b, z5\.b\[0\], #270
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_270_s32_tied1, svint32_t, svint8_t,
+ z0 = svcdot_lane_s32 (z0, z4, z5, 0, 270),
+ z0 = svcdot_lane (z0, z4, z5, 0, 270))
+
+/*
+** cdot_lane_0_270_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, \1\.b, z1\.b\[0\], #270
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_270_s32_tied2, svint32_t, svint8_t,
+ z0_res = svcdot_lane_s32 (z4, z0, z1, 0, 270),
+ z0_res = svcdot_lane (z4, z0, z1, 0, 270))
+
+/*
+** cdot_lane_0_270_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, z1\.b, \1\.b\[0\], #270
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_270_s32_tied3, svint32_t, svint8_t,
+ z0_res = svcdot_lane_s32 (z4, z1, z0, 0, 270),
+ z0_res = svcdot_lane (z4, z1, z0, 0, 270))
+
+/*
+** cdot_lane_0_270_s32_untied:
+** movprfx z0, z1
+** cdot z0\.s, z4\.b, z5\.b\[0\], #270
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_270_s32_untied, svint32_t, svint8_t,
+ z0 = svcdot_lane_s32 (z1, z4, z5, 0, 270),
+ z0 = svcdot_lane (z1, z4, z5, 0, 270))
+
+/*
+** cdot_lane_1_s32:
+** cdot z0\.s, z4\.b, z5\.b\[1\], #0
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_1_s32, svint32_t, svint8_t,
+ z0 = svcdot_lane_s32 (z0, z4, z5, 1, 0),
+ z0 = svcdot_lane (z0, z4, z5, 1, 0))
+
+/*
+** cdot_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** cdot z0\.s, z1\.b, \1\.b\[1\], #0
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (cdot_lane_z8_s32, svint32_t, svint8_t, z8,
+ z0 = svcdot_lane_s32 (z0, z1, z8, 1, 0),
+ z0 = svcdot_lane (z0, z1, z8, 1, 0))
+
+/*
+** cdot_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** cdot z0\.s, z1\.b, \1\.b\[1\], #0
+** ret
+*/
+TEST_DUAL_LANE_REG (cdot_lane_z16_s32, svint32_t, svint8_t, z16,
+ z0 = svcdot_lane_s32 (z0, z1, z16, 1, 0),
+ z0 = svcdot_lane (z0, z1, z16, 1, 0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cdot_lane_0_0_s64_tied1:
+** cdot z0\.d, z4\.h, z5\.h\[0\], #0
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_0_s64_tied1, svint64_t, svint16_t,
+ z0 = svcdot_lane_s64 (z0, z4, z5, 0, 0),
+ z0 = svcdot_lane (z0, z4, z5, 0, 0))
+
+/*
+** cdot_lane_0_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, \1\.h, z1\.h\[0\], #0
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_0_s64_tied2, svint64_t, svint16_t,
+ z0_res = svcdot_lane_s64 (z4, z0, z1, 0, 0),
+ z0_res = svcdot_lane (z4, z0, z1, 0, 0))
+
+/*
+** cdot_lane_0_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, z1\.h, \1\.h\[0\], #0
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_0_s64_tied3, svint64_t, svint16_t,
+ z0_res = svcdot_lane_s64 (z4, z1, z0, 0, 0),
+ z0_res = svcdot_lane (z4, z1, z0, 0, 0))
+
+/*
+** cdot_lane_0_0_s64_untied:
+** movprfx z0, z1
+** cdot z0\.d, z4\.h, z5\.h\[0\], #0
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_0_s64_untied, svint64_t, svint16_t,
+ z0 = svcdot_lane_s64 (z1, z4, z5, 0, 0),
+ z0 = svcdot_lane (z1, z4, z5, 0, 0))
+
+/*
+** cdot_lane_0_90_s64_tied1:
+** cdot z0\.d, z4\.h, z5\.h\[0\], #90
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_90_s64_tied1, svint64_t, svint16_t,
+ z0 = svcdot_lane_s64 (z0, z4, z5, 0, 90),
+ z0 = svcdot_lane (z0, z4, z5, 0, 90))
+
+/*
+** cdot_lane_0_90_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, \1\.h, z1\.h\[0\], #90
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_90_s64_tied2, svint64_t, svint16_t,
+ z0_res = svcdot_lane_s64 (z4, z0, z1, 0, 90),
+ z0_res = svcdot_lane (z4, z0, z1, 0, 90))
+
+/*
+** cdot_lane_0_90_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, z1\.h, \1\.h\[0\], #90
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_90_s64_tied3, svint64_t, svint16_t,
+ z0_res = svcdot_lane_s64 (z4, z1, z0, 0, 90),
+ z0_res = svcdot_lane (z4, z1, z0, 0, 90))
+
+/*
+** cdot_lane_0_90_s64_untied:
+** movprfx z0, z1
+** cdot z0\.d, z4\.h, z5\.h\[0\], #90
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_90_s64_untied, svint64_t, svint16_t,
+ z0 = svcdot_lane_s64 (z1, z4, z5, 0, 90),
+ z0 = svcdot_lane (z1, z4, z5, 0, 90))
+
+/*
+** cdot_lane_0_180_s64_tied1:
+** cdot z0\.d, z4\.h, z5\.h\[0\], #180
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_180_s64_tied1, svint64_t, svint16_t,
+ z0 = svcdot_lane_s64 (z0, z4, z5, 0, 180),
+ z0 = svcdot_lane (z0, z4, z5, 0, 180))
+
+/*
+** cdot_lane_0_180_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, \1\.h, z1\.h\[0\], #180
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_180_s64_tied2, svint64_t, svint16_t,
+ z0_res = svcdot_lane_s64 (z4, z0, z1, 0, 180),
+ z0_res = svcdot_lane (z4, z0, z1, 0, 180))
+
+/*
+** cdot_lane_0_180_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, z1\.h, \1\.h\[0\], #180
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_180_s64_tied3, svint64_t, svint16_t,
+ z0_res = svcdot_lane_s64 (z4, z1, z0, 0, 180),
+ z0_res = svcdot_lane (z4, z1, z0, 0, 180))
+
+/*
+** cdot_lane_0_180_s64_untied:
+** movprfx z0, z1
+** cdot z0\.d, z4\.h, z5\.h\[0\], #180
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_180_s64_untied, svint64_t, svint16_t,
+ z0 = svcdot_lane_s64 (z1, z4, z5, 0, 180),
+ z0 = svcdot_lane (z1, z4, z5, 0, 180))
+
+/*
+** cdot_lane_0_270_s64_tied1:
+** cdot z0\.d, z4\.h, z5\.h\[0\], #270
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_270_s64_tied1, svint64_t, svint16_t,
+ z0 = svcdot_lane_s64 (z0, z4, z5, 0, 270),
+ z0 = svcdot_lane (z0, z4, z5, 0, 270))
+
+/*
+** cdot_lane_0_270_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, \1\.h, z1\.h\[0\], #270
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_270_s64_tied2, svint64_t, svint16_t,
+ z0_res = svcdot_lane_s64 (z4, z0, z1, 0, 270),
+ z0_res = svcdot_lane (z4, z0, z1, 0, 270))
+
+/*
+** cdot_lane_0_270_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, z1\.h, \1\.h\[0\], #270
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_lane_0_270_s64_tied3, svint64_t, svint16_t,
+ z0_res = svcdot_lane_s64 (z4, z1, z0, 0, 270),
+ z0_res = svcdot_lane (z4, z1, z0, 0, 270))
+
+/*
+** cdot_lane_0_270_s64_untied:
+** movprfx z0, z1
+** cdot z0\.d, z4\.h, z5\.h\[0\], #270
+** ret
+*/
+TEST_DUAL_Z (cdot_lane_0_270_s64_untied, svint64_t, svint16_t,
+ z0 = svcdot_lane_s64 (z1, z4, z5, 0, 270),
+ z0 = svcdot_lane (z1, z4, z5, 0, 270))
+
+/*
+** cdot_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** cdot z0\.d, z1\.h, z15\.h\[1\], #0
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (cdot_lane_z15_s64, svint64_t, svint16_t, z15,
+ z0 = svcdot_lane_s64 (z0, z1, z15, 1, 0),
+ z0 = svcdot_lane (z0, z1, z15, 1, 0))
+
+/*
+** cdot_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** cdot z0\.d, z1\.h, \1\.h\[1\], #0
+** ret
+*/
+TEST_DUAL_LANE_REG (cdot_lane_z16_s64, svint64_t, svint16_t, z16,
+ z0 = svcdot_lane_s64 (z0, z1, z16, 1, 0),
+ z0 = svcdot_lane (z0, z1, z16, 1, 0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cdot_0_s32_tied1:
+** cdot z0\.s, z4\.b, z5\.b, #0
+** ret
+*/
+TEST_DUAL_Z (cdot_0_s32_tied1, svint32_t, svint8_t,
+ z0 = svcdot_s32 (z0, z4, z5, 0),
+ z0 = svcdot (z0, z4, z5, 0))
+
+/*
+** cdot_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, \1\.b, z1\.b, #0
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_0_s32_tied2, svint32_t, svint8_t,
+ z0_res = svcdot_s32 (z4, z0, z1, 0),
+ z0_res = svcdot (z4, z0, z1, 0))
+
+/*
+** cdot_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, z1\.b, \1\.b, #0
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_0_s32_tied3, svint32_t, svint8_t,
+ z0_res = svcdot_s32 (z4, z1, z0, 0),
+ z0_res = svcdot (z4, z1, z0, 0))
+
+/*
+** cdot_0_s32_untied:
+** movprfx z0, z1
+** cdot z0\.s, z4\.b, z5\.b, #0
+** ret
+*/
+TEST_DUAL_Z (cdot_0_s32_untied, svint32_t, svint8_t,
+ z0 = svcdot_s32 (z1, z4, z5, 0),
+ z0 = svcdot (z1, z4, z5, 0))
+
+/*
+** cdot_90_s32_tied1:
+** cdot z0\.s, z4\.b, z5\.b, #90
+** ret
+*/
+TEST_DUAL_Z (cdot_90_s32_tied1, svint32_t, svint8_t,
+ z0 = svcdot_s32 (z0, z4, z5, 90),
+ z0 = svcdot (z0, z4, z5, 90))
+
+/*
+** cdot_90_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, \1\.b, z1\.b, #90
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_90_s32_tied2, svint32_t, svint8_t,
+ z0_res = svcdot_s32 (z4, z0, z1, 90),
+ z0_res = svcdot (z4, z0, z1, 90))
+
+/*
+** cdot_90_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, z1\.b, \1\.b, #90
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_90_s32_tied3, svint32_t, svint8_t,
+ z0_res = svcdot_s32 (z4, z1, z0, 90),
+ z0_res = svcdot (z4, z1, z0, 90))
+
+/*
+** cdot_90_s32_untied:
+** movprfx z0, z1
+** cdot z0\.s, z4\.b, z5\.b, #90
+** ret
+*/
+TEST_DUAL_Z (cdot_90_s32_untied, svint32_t, svint8_t,
+ z0 = svcdot_s32 (z1, z4, z5, 90),
+ z0 = svcdot (z1, z4, z5, 90))
+
+/*
+** cdot_180_s32_tied1:
+** cdot z0\.s, z4\.b, z5\.b, #180
+** ret
+*/
+TEST_DUAL_Z (cdot_180_s32_tied1, svint32_t, svint8_t,
+ z0 = svcdot_s32 (z0, z4, z5, 180),
+ z0 = svcdot (z0, z4, z5, 180))
+
+/*
+** cdot_180_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, \1\.b, z1\.b, #180
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_180_s32_tied2, svint32_t, svint8_t,
+ z0_res = svcdot_s32 (z4, z0, z1, 180),
+ z0_res = svcdot (z4, z0, z1, 180))
+
+/*
+** cdot_180_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, z1\.b, \1\.b, #180
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_180_s32_tied3, svint32_t, svint8_t,
+ z0_res = svcdot_s32 (z4, z1, z0, 180),
+ z0_res = svcdot (z4, z1, z0, 180))
+
+/*
+** cdot_180_s32_untied:
+** movprfx z0, z1
+** cdot z0\.s, z4\.b, z5\.b, #180
+** ret
+*/
+TEST_DUAL_Z (cdot_180_s32_untied, svint32_t, svint8_t,
+ z0 = svcdot_s32 (z1, z4, z5, 180),
+ z0 = svcdot (z1, z4, z5, 180))
+
+/*
+** cdot_270_s32_tied1:
+** cdot z0\.s, z4\.b, z5\.b, #270
+** ret
+*/
+TEST_DUAL_Z (cdot_270_s32_tied1, svint32_t, svint8_t,
+ z0 = svcdot_s32 (z0, z4, z5, 270),
+ z0 = svcdot (z0, z4, z5, 270))
+
+/*
+** cdot_270_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, \1\.b, z1\.b, #270
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_270_s32_tied2, svint32_t, svint8_t,
+ z0_res = svcdot_s32 (z4, z0, z1, 270),
+ z0_res = svcdot (z4, z0, z1, 270))
+
+/*
+** cdot_270_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.s, z1\.b, \1\.b, #270
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_270_s32_tied3, svint32_t, svint8_t,
+ z0_res = svcdot_s32 (z4, z1, z0, 270),
+ z0_res = svcdot (z4, z1, z0, 270))
+
+/*
+** cdot_270_s32_untied:
+** movprfx z0, z1
+** cdot z0\.s, z4\.b, z5\.b, #270
+** ret
+*/
+TEST_DUAL_Z (cdot_270_s32_untied, svint32_t, svint8_t,
+ z0 = svcdot_s32 (z1, z4, z5, 270),
+ z0 = svcdot (z1, z4, z5, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cdot_0_s64_tied1:
+** cdot z0\.d, z4\.h, z5\.h, #0
+** ret
+*/
+TEST_DUAL_Z (cdot_0_s64_tied1, svint64_t, svint16_t,
+ z0 = svcdot_s64 (z0, z4, z5, 0),
+ z0 = svcdot (z0, z4, z5, 0))
+
+/*
+** cdot_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, \1\.h, z1\.h, #0
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_0_s64_tied2, svint64_t, svint16_t,
+ z0_res = svcdot_s64 (z4, z0, z1, 0),
+ z0_res = svcdot (z4, z0, z1, 0))
+
+/*
+** cdot_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, z1\.h, \1\.h, #0
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_0_s64_tied3, svint64_t, svint16_t,
+ z0_res = svcdot_s64 (z4, z1, z0, 0),
+ z0_res = svcdot (z4, z1, z0, 0))
+
+/*
+** cdot_0_s64_untied:
+** movprfx z0, z1
+** cdot z0\.d, z4\.h, z5\.h, #0
+** ret
+*/
+TEST_DUAL_Z (cdot_0_s64_untied, svint64_t, svint16_t,
+ z0 = svcdot_s64 (z1, z4, z5, 0),
+ z0 = svcdot (z1, z4, z5, 0))
+
+/*
+** cdot_90_s64_tied1:
+** cdot z0\.d, z4\.h, z5\.h, #90
+** ret
+*/
+TEST_DUAL_Z (cdot_90_s64_tied1, svint64_t, svint16_t,
+ z0 = svcdot_s64 (z0, z4, z5, 90),
+ z0 = svcdot (z0, z4, z5, 90))
+
+/*
+** cdot_90_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, \1\.h, z1\.h, #90
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_90_s64_tied2, svint64_t, svint16_t,
+ z0_res = svcdot_s64 (z4, z0, z1, 90),
+ z0_res = svcdot (z4, z0, z1, 90))
+
+/*
+** cdot_90_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, z1\.h, \1\.h, #90
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_90_s64_tied3, svint64_t, svint16_t,
+ z0_res = svcdot_s64 (z4, z1, z0, 90),
+ z0_res = svcdot (z4, z1, z0, 90))
+
+/*
+** cdot_90_s64_untied:
+** movprfx z0, z1
+** cdot z0\.d, z4\.h, z5\.h, #90
+** ret
+*/
+TEST_DUAL_Z (cdot_90_s64_untied, svint64_t, svint16_t,
+ z0 = svcdot_s64 (z1, z4, z5, 90),
+ z0 = svcdot (z1, z4, z5, 90))
+
+/*
+** cdot_180_s64_tied1:
+** cdot z0\.d, z4\.h, z5\.h, #180
+** ret
+*/
+TEST_DUAL_Z (cdot_180_s64_tied1, svint64_t, svint16_t,
+ z0 = svcdot_s64 (z0, z4, z5, 180),
+ z0 = svcdot (z0, z4, z5, 180))
+
+/*
+** cdot_180_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, \1\.h, z1\.h, #180
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_180_s64_tied2, svint64_t, svint16_t,
+ z0_res = svcdot_s64 (z4, z0, z1, 180),
+ z0_res = svcdot (z4, z0, z1, 180))
+
+/*
+** cdot_180_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, z1\.h, \1\.h, #180
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_180_s64_tied3, svint64_t, svint16_t,
+ z0_res = svcdot_s64 (z4, z1, z0, 180),
+ z0_res = svcdot (z4, z1, z0, 180))
+
+/*
+** cdot_180_s64_untied:
+** movprfx z0, z1
+** cdot z0\.d, z4\.h, z5\.h, #180
+** ret
+*/
+TEST_DUAL_Z (cdot_180_s64_untied, svint64_t, svint16_t,
+ z0 = svcdot_s64 (z1, z4, z5, 180),
+ z0 = svcdot (z1, z4, z5, 180))
+
+/*
+** cdot_270_s64_tied1:
+** cdot z0\.d, z4\.h, z5\.h, #270
+** ret
+*/
+TEST_DUAL_Z (cdot_270_s64_tied1, svint64_t, svint16_t,
+ z0 = svcdot_s64 (z0, z4, z5, 270),
+ z0 = svcdot (z0, z4, z5, 270))
+
+/*
+** cdot_270_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, \1\.h, z1\.h, #270
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_270_s64_tied2, svint64_t, svint16_t,
+ z0_res = svcdot_s64 (z4, z0, z1, 270),
+ z0_res = svcdot (z4, z0, z1, 270))
+
+/*
+** cdot_270_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** cdot z0\.d, z1\.h, \1\.h, #270
+** ret
+*/
+TEST_DUAL_Z_REV (cdot_270_s64_tied3, svint64_t, svint16_t,
+ z0_res = svcdot_s64 (z4, z1, z0, 270),
+ z0_res = svcdot (z4, z1, z0, 270))
+
+/*
+** cdot_270_s64_untied:
+** movprfx z0, z1
+** cdot z0\.d, z4\.h, z5\.h, #270
+** ret
+*/
+TEST_DUAL_Z (cdot_270_s64_untied, svint64_t, svint16_t,
+ z0 = svcdot_s64 (z1, z4, z5, 270),
+ z0 = svcdot (z1, z4, z5, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_lane_0_0_s16_tied1:
+** cmla z0\.h, z1\.h, z2\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_s16_tied1, svint16_t,
+ z0 = svcmla_lane_s16 (z0, z1, z2, 0, 0),
+ z0 = svcmla_lane (z0, z1, z2, 0, 0))
+
+/*
+** cmla_lane_0_0_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_s16_tied2, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z0, z2, 0, 0),
+ z0 = svcmla_lane (z1, z0, z2, 0, 0))
+
+/*
+** cmla_lane_0_0_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_s16_tied3, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z2, z0, 0, 0),
+ z0 = svcmla_lane (z1, z2, z0, 0, 0))
+
+/*
+** cmla_lane_0_0_s16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_s16_untied, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z2, z3, 0, 0),
+ z0 = svcmla_lane (z1, z2, z3, 0, 0))
+
+/*
+** cmla_lane_0_90_s16_tied1:
+** cmla z0\.h, z1\.h, z2\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_s16_tied1, svint16_t,
+ z0 = svcmla_lane_s16 (z0, z1, z2, 0, 90),
+ z0 = svcmla_lane (z0, z1, z2, 0, 90))
+
+/*
+** cmla_lane_0_90_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_s16_tied2, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z0, z2, 0, 90),
+ z0 = svcmla_lane (z1, z0, z2, 0, 90))
+
+/*
+** cmla_lane_0_90_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_s16_tied3, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z2, z0, 0, 90),
+ z0 = svcmla_lane (z1, z2, z0, 0, 90))
+
+/*
+** cmla_lane_0_90_s16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_s16_untied, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z2, z3, 0, 90),
+ z0 = svcmla_lane (z1, z2, z3, 0, 90))
+
+/*
+** cmla_lane_0_180_s16_tied1:
+** cmla z0\.h, z1\.h, z2\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_s16_tied1, svint16_t,
+ z0 = svcmla_lane_s16 (z0, z1, z2, 0, 180),
+ z0 = svcmla_lane (z0, z1, z2, 0, 180))
+
+/*
+** cmla_lane_0_180_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_s16_tied2, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z0, z2, 0, 180),
+ z0 = svcmla_lane (z1, z0, z2, 0, 180))
+
+/*
+** cmla_lane_0_180_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_s16_tied3, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z2, z0, 0, 180),
+ z0 = svcmla_lane (z1, z2, z0, 0, 180))
+
+/*
+** cmla_lane_0_180_s16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_s16_untied, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z2, z3, 0, 180),
+ z0 = svcmla_lane (z1, z2, z3, 0, 180))
+
+/*
+** cmla_lane_0_270_s16_tied1:
+** cmla z0\.h, z1\.h, z2\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_s16_tied1, svint16_t,
+ z0 = svcmla_lane_s16 (z0, z1, z2, 0, 270),
+ z0 = svcmla_lane (z0, z1, z2, 0, 270))
+
+/*
+** cmla_lane_0_270_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_s16_tied2, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z0, z2, 0, 270),
+ z0 = svcmla_lane (z1, z0, z2, 0, 270))
+
+/*
+** cmla_lane_0_270_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_s16_tied3, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z2, z0, 0, 270),
+ z0 = svcmla_lane (z1, z2, z0, 0, 270))
+
+/*
+** cmla_lane_0_270_s16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_s16_untied, svint16_t,
+ z0 = svcmla_lane_s16 (z1, z2, z3, 0, 270),
+ z0 = svcmla_lane (z1, z2, z3, 0, 270))
+
+/*
+** cmla_lane_1_s16:
+** cmla z0\.h, z1\.h, z2\.h\[1\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_1_s16, svint16_t,
+ z0 = svcmla_lane_s16 (z0, z1, z2, 1, 0),
+ z0 = svcmla_lane (z0, z1, z2, 1, 0))
+
+/*
+** cmla_lane_2_s16:
+** cmla z0\.h, z1\.h, z2\.h\[2\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_2_s16, svint16_t,
+ z0 = svcmla_lane_s16 (z0, z1, z2, 2, 0),
+ z0 = svcmla_lane (z0, z1, z2, 2, 0))
+
+/*
+** cmla_lane_3_s16:
+** cmla z0\.h, z1\.h, z2\.h\[3\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_3_s16, svint16_t,
+ z0 = svcmla_lane_s16 (z0, z1, z2, 3, 0),
+ z0 = svcmla_lane (z0, z1, z2, 3, 0))
+
+/*
+** cmla_lane_z8_s16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** cmla z0\.h, z1\.h, \1\.h\[1\], #0
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (cmla_lane_z8_s16, svint16_t, svint16_t, z8,
+ z0 = svcmla_lane_s16 (z0, z1, z8, 1, 0),
+ z0 = svcmla_lane (z0, z1, z8, 1, 0))
+
+/*
+** cmla_lane_z16_s16:
+** mov (z[0-7])\.d, z16\.d
+** cmla z0\.h, z1\.h, \1\.h\[1\], #0
+** ret
+*/
+TEST_DUAL_LANE_REG (cmla_lane_z16_s16, svint16_t, svint16_t, z16,
+ z0 = svcmla_lane_s16 (z0, z1, z16, 1, 0),
+ z0 = svcmla_lane (z0, z1, z16, 1, 0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_lane_0_0_s32_tied1:
+** cmla z0\.s, z1\.s, z2\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_s32_tied1, svint32_t,
+ z0 = svcmla_lane_s32 (z0, z1, z2, 0, 0),
+ z0 = svcmla_lane (z0, z1, z2, 0, 0))
+
+/*
+** cmla_lane_0_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_s32_tied2, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z0, z2, 0, 0),
+ z0 = svcmla_lane (z1, z0, z2, 0, 0))
+
+/*
+** cmla_lane_0_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_s32_tied3, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z2, z0, 0, 0),
+ z0 = svcmla_lane (z1, z2, z0, 0, 0))
+
+/*
+** cmla_lane_0_0_s32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_s32_untied, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z2, z3, 0, 0),
+ z0 = svcmla_lane (z1, z2, z3, 0, 0))
+
+/*
+** cmla_lane_0_90_s32_tied1:
+** cmla z0\.s, z1\.s, z2\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_s32_tied1, svint32_t,
+ z0 = svcmla_lane_s32 (z0, z1, z2, 0, 90),
+ z0 = svcmla_lane (z0, z1, z2, 0, 90))
+
+/*
+** cmla_lane_0_90_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_s32_tied2, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z0, z2, 0, 90),
+ z0 = svcmla_lane (z1, z0, z2, 0, 90))
+
+/*
+** cmla_lane_0_90_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_s32_tied3, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z2, z0, 0, 90),
+ z0 = svcmla_lane (z1, z2, z0, 0, 90))
+
+/*
+** cmla_lane_0_90_s32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_s32_untied, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z2, z3, 0, 90),
+ z0 = svcmla_lane (z1, z2, z3, 0, 90))
+
+/*
+** cmla_lane_0_180_s32_tied1:
+** cmla z0\.s, z1\.s, z2\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_s32_tied1, svint32_t,
+ z0 = svcmla_lane_s32 (z0, z1, z2, 0, 180),
+ z0 = svcmla_lane (z0, z1, z2, 0, 180))
+
+/*
+** cmla_lane_0_180_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_s32_tied2, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z0, z2, 0, 180),
+ z0 = svcmla_lane (z1, z0, z2, 0, 180))
+
+/*
+** cmla_lane_0_180_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_s32_tied3, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z2, z0, 0, 180),
+ z0 = svcmla_lane (z1, z2, z0, 0, 180))
+
+/*
+** cmla_lane_0_180_s32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_s32_untied, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z2, z3, 0, 180),
+ z0 = svcmla_lane (z1, z2, z3, 0, 180))
+
+/*
+** cmla_lane_0_270_s32_tied1:
+** cmla z0\.s, z1\.s, z2\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_s32_tied1, svint32_t,
+ z0 = svcmla_lane_s32 (z0, z1, z2, 0, 270),
+ z0 = svcmla_lane (z0, z1, z2, 0, 270))
+
+/*
+** cmla_lane_0_270_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_s32_tied2, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z0, z2, 0, 270),
+ z0 = svcmla_lane (z1, z0, z2, 0, 270))
+
+/*
+** cmla_lane_0_270_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_s32_tied3, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z2, z0, 0, 270),
+ z0 = svcmla_lane (z1, z2, z0, 0, 270))
+
+/*
+** cmla_lane_0_270_s32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_s32_untied, svint32_t,
+ z0 = svcmla_lane_s32 (z1, z2, z3, 0, 270),
+ z0 = svcmla_lane (z1, z2, z3, 0, 270))
+
+/*
+** cmla_lane_1_s32:
+** cmla z0\.s, z1\.s, z2\.s\[1\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_1_s32, svint32_t,
+ z0 = svcmla_lane_s32 (z0, z1, z2, 1, 0),
+ z0 = svcmla_lane (z0, z1, z2, 1, 0))
+
+/*
+** cmla_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** cmla z0\.s, z1\.s, \1\.s\[1\], #0
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (cmla_lane_z8_s32, svint32_t, svint32_t, z8,
+ z0 = svcmla_lane_s32 (z0, z1, z8, 1, 0),
+ z0 = svcmla_lane (z0, z1, z8, 1, 0))
+
+/*
+** cmla_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** cmla z0\.s, z1\.s, \1\.s\[1\], #0
+** ret
+*/
+TEST_DUAL_LANE_REG (cmla_lane_z16_s32, svint32_t, svint32_t, z16,
+ z0 = svcmla_lane_s32 (z0, z1, z16, 1, 0),
+ z0 = svcmla_lane (z0, z1, z16, 1, 0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_lane_0_0_u16_tied1:
+** cmla z0\.h, z1\.h, z2\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_u16_tied1, svuint16_t,
+ z0 = svcmla_lane_u16 (z0, z1, z2, 0, 0),
+ z0 = svcmla_lane (z0, z1, z2, 0, 0))
+
+/*
+** cmla_lane_0_0_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_u16_tied2, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z0, z2, 0, 0),
+ z0 = svcmla_lane (z1, z0, z2, 0, 0))
+
+/*
+** cmla_lane_0_0_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_u16_tied3, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z2, z0, 0, 0),
+ z0 = svcmla_lane (z1, z2, z0, 0, 0))
+
+/*
+** cmla_lane_0_0_u16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_u16_untied, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z2, z3, 0, 0),
+ z0 = svcmla_lane (z1, z2, z3, 0, 0))
+
+/*
+** cmla_lane_0_90_u16_tied1:
+** cmla z0\.h, z1\.h, z2\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_u16_tied1, svuint16_t,
+ z0 = svcmla_lane_u16 (z0, z1, z2, 0, 90),
+ z0 = svcmla_lane (z0, z1, z2, 0, 90))
+
+/*
+** cmla_lane_0_90_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_u16_tied2, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z0, z2, 0, 90),
+ z0 = svcmla_lane (z1, z0, z2, 0, 90))
+
+/*
+** cmla_lane_0_90_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_u16_tied3, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z2, z0, 0, 90),
+ z0 = svcmla_lane (z1, z2, z0, 0, 90))
+
+/*
+** cmla_lane_0_90_u16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_u16_untied, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z2, z3, 0, 90),
+ z0 = svcmla_lane (z1, z2, z3, 0, 90))
+
+/*
+** cmla_lane_0_180_u16_tied1:
+** cmla z0\.h, z1\.h, z2\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_u16_tied1, svuint16_t,
+ z0 = svcmla_lane_u16 (z0, z1, z2, 0, 180),
+ z0 = svcmla_lane (z0, z1, z2, 0, 180))
+
+/*
+** cmla_lane_0_180_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_u16_tied2, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z0, z2, 0, 180),
+ z0 = svcmla_lane (z1, z0, z2, 0, 180))
+
+/*
+** cmla_lane_0_180_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_u16_tied3, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z2, z0, 0, 180),
+ z0 = svcmla_lane (z1, z2, z0, 0, 180))
+
+/*
+** cmla_lane_0_180_u16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_u16_untied, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z2, z3, 0, 180),
+ z0 = svcmla_lane (z1, z2, z3, 0, 180))
+
+/*
+** cmla_lane_0_270_u16_tied1:
+** cmla z0\.h, z1\.h, z2\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_u16_tied1, svuint16_t,
+ z0 = svcmla_lane_u16 (z0, z1, z2, 0, 270),
+ z0 = svcmla_lane (z0, z1, z2, 0, 270))
+
+/*
+** cmla_lane_0_270_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_u16_tied2, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z0, z2, 0, 270),
+ z0 = svcmla_lane (z1, z0, z2, 0, 270))
+
+/*
+** cmla_lane_0_270_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_u16_tied3, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z2, z0, 0, 270),
+ z0 = svcmla_lane (z1, z2, z0, 0, 270))
+
+/*
+** cmla_lane_0_270_u16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_u16_untied, svuint16_t,
+ z0 = svcmla_lane_u16 (z1, z2, z3, 0, 270),
+ z0 = svcmla_lane (z1, z2, z3, 0, 270))
+
+/*
+** cmla_lane_1_u16:
+** cmla z0\.h, z1\.h, z2\.h\[1\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_1_u16, svuint16_t,
+ z0 = svcmla_lane_u16 (z0, z1, z2, 1, 0),
+ z0 = svcmla_lane (z0, z1, z2, 1, 0))
+
+/*
+** cmla_lane_2_u16:
+** cmla z0\.h, z1\.h, z2\.h\[2\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_2_u16, svuint16_t,
+ z0 = svcmla_lane_u16 (z0, z1, z2, 2, 0),
+ z0 = svcmla_lane (z0, z1, z2, 2, 0))
+
+/*
+** cmla_lane_3_u16:
+** cmla z0\.h, z1\.h, z2\.h\[3\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_3_u16, svuint16_t,
+ z0 = svcmla_lane_u16 (z0, z1, z2, 3, 0),
+ z0 = svcmla_lane (z0, z1, z2, 3, 0))
+
+/*
+** cmla_lane_z8_u16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** cmla z0\.h, z1\.h, \1\.h\[1\], #0
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (cmla_lane_z8_u16, svuint16_t, svuint16_t, z8,
+ z0 = svcmla_lane_u16 (z0, z1, z8, 1, 0),
+ z0 = svcmla_lane (z0, z1, z8, 1, 0))
+
+/*
+** cmla_lane_z16_u16:
+** mov (z[0-7])\.d, z16\.d
+** cmla z0\.h, z1\.h, \1\.h\[1\], #0
+** ret
+*/
+TEST_DUAL_LANE_REG (cmla_lane_z16_u16, svuint16_t, svuint16_t, z16,
+ z0 = svcmla_lane_u16 (z0, z1, z16, 1, 0),
+ z0 = svcmla_lane (z0, z1, z16, 1, 0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_lane_0_0_u32_tied1:
+** cmla z0\.s, z1\.s, z2\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_u32_tied1, svuint32_t,
+ z0 = svcmla_lane_u32 (z0, z1, z2, 0, 0),
+ z0 = svcmla_lane (z0, z1, z2, 0, 0))
+
+/*
+** cmla_lane_0_0_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_u32_tied2, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z0, z2, 0, 0),
+ z0 = svcmla_lane (z1, z0, z2, 0, 0))
+
+/*
+** cmla_lane_0_0_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_u32_tied3, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z2, z0, 0, 0),
+ z0 = svcmla_lane (z1, z2, z0, 0, 0))
+
+/*
+** cmla_lane_0_0_u32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_0_u32_untied, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z2, z3, 0, 0),
+ z0 = svcmla_lane (z1, z2, z3, 0, 0))
+
+/*
+** cmla_lane_0_90_u32_tied1:
+** cmla z0\.s, z1\.s, z2\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_u32_tied1, svuint32_t,
+ z0 = svcmla_lane_u32 (z0, z1, z2, 0, 90),
+ z0 = svcmla_lane (z0, z1, z2, 0, 90))
+
+/*
+** cmla_lane_0_90_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_u32_tied2, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z0, z2, 0, 90),
+ z0 = svcmla_lane (z1, z0, z2, 0, 90))
+
+/*
+** cmla_lane_0_90_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_u32_tied3, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z2, z0, 0, 90),
+ z0 = svcmla_lane (z1, z2, z0, 0, 90))
+
+/*
+** cmla_lane_0_90_u32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_90_u32_untied, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z2, z3, 0, 90),
+ z0 = svcmla_lane (z1, z2, z3, 0, 90))
+
+/*
+** cmla_lane_0_180_u32_tied1:
+** cmla z0\.s, z1\.s, z2\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_u32_tied1, svuint32_t,
+ z0 = svcmla_lane_u32 (z0, z1, z2, 0, 180),
+ z0 = svcmla_lane (z0, z1, z2, 0, 180))
+
+/*
+** cmla_lane_0_180_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_u32_tied2, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z0, z2, 0, 180),
+ z0 = svcmla_lane (z1, z0, z2, 0, 180))
+
+/*
+** cmla_lane_0_180_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_u32_tied3, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z2, z0, 0, 180),
+ z0 = svcmla_lane (z1, z2, z0, 0, 180))
+
+/*
+** cmla_lane_0_180_u32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_180_u32_untied, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z2, z3, 0, 180),
+ z0 = svcmla_lane (z1, z2, z3, 0, 180))
+
+/*
+** cmla_lane_0_270_u32_tied1:
+** cmla z0\.s, z1\.s, z2\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_u32_tied1, svuint32_t,
+ z0 = svcmla_lane_u32 (z0, z1, z2, 0, 270),
+ z0 = svcmla_lane (z0, z1, z2, 0, 270))
+
+/*
+** cmla_lane_0_270_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_u32_tied2, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z0, z2, 0, 270),
+ z0 = svcmla_lane (z1, z0, z2, 0, 270))
+
+/*
+** cmla_lane_0_270_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_u32_tied3, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z2, z0, 0, 270),
+ z0 = svcmla_lane (z1, z2, z0, 0, 270))
+
+/*
+** cmla_lane_0_270_u32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_0_270_u32_untied, svuint32_t,
+ z0 = svcmla_lane_u32 (z1, z2, z3, 0, 270),
+ z0 = svcmla_lane (z1, z2, z3, 0, 270))
+
+/*
+** cmla_lane_1_u32:
+** cmla z0\.s, z1\.s, z2\.s\[1\], #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_lane_1_u32, svuint32_t,
+ z0 = svcmla_lane_u32 (z0, z1, z2, 1, 0),
+ z0 = svcmla_lane (z0, z1, z2, 1, 0))
+
+/*
+** cmla_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** cmla z0\.s, z1\.s, \1\.s\[1\], #0
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (cmla_lane_z8_u32, svuint32_t, svuint32_t, z8,
+ z0 = svcmla_lane_u32 (z0, z1, z8, 1, 0),
+ z0 = svcmla_lane (z0, z1, z8, 1, 0))
+
+/*
+** cmla_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** cmla z0\.s, z1\.s, \1\.s\[1\], #0
+** ret
+*/
+TEST_DUAL_LANE_REG (cmla_lane_z16_u32, svuint32_t, svuint32_t, z16,
+ z0 = svcmla_lane_u32 (z0, z1, z16, 1, 0),
+ z0 = svcmla_lane (z0, z1, z16, 1, 0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_0_s16_tied1:
+** cmla z0\.h, z1\.h, z2\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s16_tied1, svint16_t,
+ z0 = svcmla_s16 (z0, z1, z2, 0),
+ z0 = svcmla (z0, z1, z2, 0))
+
+/*
+** cmla_0_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s16_tied2, svint16_t,
+ z0 = svcmla_s16 (z1, z0, z2, 0),
+ z0 = svcmla (z1, z0, z2, 0))
+
+/*
+** cmla_0_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s16_tied3, svint16_t,
+ z0 = svcmla_s16 (z1, z2, z0, 0),
+ z0 = svcmla (z1, z2, z0, 0))
+
+/*
+** cmla_0_s16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s16_untied, svint16_t,
+ z0 = svcmla_s16 (z1, z2, z3, 0),
+ z0 = svcmla (z1, z2, z3, 0))
+
+/*
+** cmla_90_s16_tied1:
+** cmla z0\.h, z1\.h, z2\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s16_tied1, svint16_t,
+ z0 = svcmla_s16 (z0, z1, z2, 90),
+ z0 = svcmla (z0, z1, z2, 90))
+
+/*
+** cmla_90_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s16_tied2, svint16_t,
+ z0 = svcmla_s16 (z1, z0, z2, 90),
+ z0 = svcmla (z1, z0, z2, 90))
+
+/*
+** cmla_90_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s16_tied3, svint16_t,
+ z0 = svcmla_s16 (z1, z2, z0, 90),
+ z0 = svcmla (z1, z2, z0, 90))
+
+/*
+** cmla_90_s16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s16_untied, svint16_t,
+ z0 = svcmla_s16 (z1, z2, z3, 90),
+ z0 = svcmla (z1, z2, z3, 90))
+
+/*
+** cmla_180_s16_tied1:
+** cmla z0\.h, z1\.h, z2\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s16_tied1, svint16_t,
+ z0 = svcmla_s16 (z0, z1, z2, 180),
+ z0 = svcmla (z0, z1, z2, 180))
+
+/*
+** cmla_180_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s16_tied2, svint16_t,
+ z0 = svcmla_s16 (z1, z0, z2, 180),
+ z0 = svcmla (z1, z0, z2, 180))
+
+/*
+** cmla_180_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s16_tied3, svint16_t,
+ z0 = svcmla_s16 (z1, z2, z0, 180),
+ z0 = svcmla (z1, z2, z0, 180))
+
+/*
+** cmla_180_s16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s16_untied, svint16_t,
+ z0 = svcmla_s16 (z1, z2, z3, 180),
+ z0 = svcmla (z1, z2, z3, 180))
+
+/*
+** cmla_270_s16_tied1:
+** cmla z0\.h, z1\.h, z2\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s16_tied1, svint16_t,
+ z0 = svcmla_s16 (z0, z1, z2, 270),
+ z0 = svcmla (z0, z1, z2, 270))
+
+/*
+** cmla_270_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s16_tied2, svint16_t,
+ z0 = svcmla_s16 (z1, z0, z2, 270),
+ z0 = svcmla (z1, z0, z2, 270))
+
+/*
+** cmla_270_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s16_tied3, svint16_t,
+ z0 = svcmla_s16 (z1, z2, z0, 270),
+ z0 = svcmla (z1, z2, z0, 270))
+
+/*
+** cmla_270_s16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s16_untied, svint16_t,
+ z0 = svcmla_s16 (z1, z2, z3, 270),
+ z0 = svcmla (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_0_s32_tied1:
+** cmla z0\.s, z1\.s, z2\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s32_tied1, svint32_t,
+ z0 = svcmla_s32 (z0, z1, z2, 0),
+ z0 = svcmla (z0, z1, z2, 0))
+
+/*
+** cmla_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s32_tied2, svint32_t,
+ z0 = svcmla_s32 (z1, z0, z2, 0),
+ z0 = svcmla (z1, z0, z2, 0))
+
+/*
+** cmla_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s32_tied3, svint32_t,
+ z0 = svcmla_s32 (z1, z2, z0, 0),
+ z0 = svcmla (z1, z2, z0, 0))
+
+/*
+** cmla_0_s32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s32_untied, svint32_t,
+ z0 = svcmla_s32 (z1, z2, z3, 0),
+ z0 = svcmla (z1, z2, z3, 0))
+
+/*
+** cmla_90_s32_tied1:
+** cmla z0\.s, z1\.s, z2\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s32_tied1, svint32_t,
+ z0 = svcmla_s32 (z0, z1, z2, 90),
+ z0 = svcmla (z0, z1, z2, 90))
+
+/*
+** cmla_90_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s32_tied2, svint32_t,
+ z0 = svcmla_s32 (z1, z0, z2, 90),
+ z0 = svcmla (z1, z0, z2, 90))
+
+/*
+** cmla_90_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s32_tied3, svint32_t,
+ z0 = svcmla_s32 (z1, z2, z0, 90),
+ z0 = svcmla (z1, z2, z0, 90))
+
+/*
+** cmla_90_s32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s32_untied, svint32_t,
+ z0 = svcmla_s32 (z1, z2, z3, 90),
+ z0 = svcmla (z1, z2, z3, 90))
+
+/*
+** cmla_180_s32_tied1:
+** cmla z0\.s, z1\.s, z2\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s32_tied1, svint32_t,
+ z0 = svcmla_s32 (z0, z1, z2, 180),
+ z0 = svcmla (z0, z1, z2, 180))
+
+/*
+** cmla_180_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s32_tied2, svint32_t,
+ z0 = svcmla_s32 (z1, z0, z2, 180),
+ z0 = svcmla (z1, z0, z2, 180))
+
+/*
+** cmla_180_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s32_tied3, svint32_t,
+ z0 = svcmla_s32 (z1, z2, z0, 180),
+ z0 = svcmla (z1, z2, z0, 180))
+
+/*
+** cmla_180_s32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s32_untied, svint32_t,
+ z0 = svcmla_s32 (z1, z2, z3, 180),
+ z0 = svcmla (z1, z2, z3, 180))
+
+/*
+** cmla_270_s32_tied1:
+** cmla z0\.s, z1\.s, z2\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s32_tied1, svint32_t,
+ z0 = svcmla_s32 (z0, z1, z2, 270),
+ z0 = svcmla (z0, z1, z2, 270))
+
+/*
+** cmla_270_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s32_tied2, svint32_t,
+ z0 = svcmla_s32 (z1, z0, z2, 270),
+ z0 = svcmla (z1, z0, z2, 270))
+
+/*
+** cmla_270_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s32_tied3, svint32_t,
+ z0 = svcmla_s32 (z1, z2, z0, 270),
+ z0 = svcmla (z1, z2, z0, 270))
+
+/*
+** cmla_270_s32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s32_untied, svint32_t,
+ z0 = svcmla_s32 (z1, z2, z3, 270),
+ z0 = svcmla (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_0_s64_tied1:
+** cmla z0\.d, z1\.d, z2\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s64_tied1, svint64_t,
+ z0 = svcmla_s64 (z0, z1, z2, 0),
+ z0 = svcmla (z0, z1, z2, 0))
+
+/*
+** cmla_0_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, \1, z2\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s64_tied2, svint64_t,
+ z0 = svcmla_s64 (z1, z0, z2, 0),
+ z0 = svcmla (z1, z0, z2, 0))
+
+/*
+** cmla_0_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, \1, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s64_tied3, svint64_t,
+ z0 = svcmla_s64 (z1, z2, z0, 0),
+ z0 = svcmla (z1, z2, z0, 0))
+
+/*
+** cmla_0_s64_untied:
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, z3\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s64_untied, svint64_t,
+ z0 = svcmla_s64 (z1, z2, z3, 0),
+ z0 = svcmla (z1, z2, z3, 0))
+
+/*
+** cmla_90_s64_tied1:
+** cmla z0\.d, z1\.d, z2\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s64_tied1, svint64_t,
+ z0 = svcmla_s64 (z0, z1, z2, 90),
+ z0 = svcmla (z0, z1, z2, 90))
+
+/*
+** cmla_90_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, \1, z2\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s64_tied2, svint64_t,
+ z0 = svcmla_s64 (z1, z0, z2, 90),
+ z0 = svcmla (z1, z0, z2, 90))
+
+/*
+** cmla_90_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, \1, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s64_tied3, svint64_t,
+ z0 = svcmla_s64 (z1, z2, z0, 90),
+ z0 = svcmla (z1, z2, z0, 90))
+
+/*
+** cmla_90_s64_untied:
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, z3\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s64_untied, svint64_t,
+ z0 = svcmla_s64 (z1, z2, z3, 90),
+ z0 = svcmla (z1, z2, z3, 90))
+
+/*
+** cmla_180_s64_tied1:
+** cmla z0\.d, z1\.d, z2\.d, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s64_tied1, svint64_t,
+ z0 = svcmla_s64 (z0, z1, z2, 180),
+ z0 = svcmla (z0, z1, z2, 180))
+
+/*
+** cmla_180_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, \1, z2\.d, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s64_tied2, svint64_t,
+ z0 = svcmla_s64 (z1, z0, z2, 180),
+ z0 = svcmla (z1, z0, z2, 180))
+
+/*
+** cmla_180_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, \1, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s64_tied3, svint64_t,
+ z0 = svcmla_s64 (z1, z2, z0, 180),
+ z0 = svcmla (z1, z2, z0, 180))
+
+/*
+** cmla_180_s64_untied:
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, z3\.d, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s64_untied, svint64_t,
+ z0 = svcmla_s64 (z1, z2, z3, 180),
+ z0 = svcmla (z1, z2, z3, 180))
+
+/*
+** cmla_270_s64_tied1:
+** cmla z0\.d, z1\.d, z2\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s64_tied1, svint64_t,
+ z0 = svcmla_s64 (z0, z1, z2, 270),
+ z0 = svcmla (z0, z1, z2, 270))
+
+/*
+** cmla_270_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, \1, z2\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s64_tied2, svint64_t,
+ z0 = svcmla_s64 (z1, z0, z2, 270),
+ z0 = svcmla (z1, z0, z2, 270))
+
+/*
+** cmla_270_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, \1, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s64_tied3, svint64_t,
+ z0 = svcmla_s64 (z1, z2, z0, 270),
+ z0 = svcmla (z1, z2, z0, 270))
+
+/*
+** cmla_270_s64_untied:
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, z3\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s64_untied, svint64_t,
+ z0 = svcmla_s64 (z1, z2, z3, 270),
+ z0 = svcmla (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_0_s8_tied1:
+** cmla z0\.b, z1\.b, z2\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s8_tied1, svint8_t,
+ z0 = svcmla_s8 (z0, z1, z2, 0),
+ z0 = svcmla (z0, z1, z2, 0))
+
+/*
+** cmla_0_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, \1\.b, z2\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s8_tied2, svint8_t,
+ z0 = svcmla_s8 (z1, z0, z2, 0),
+ z0 = svcmla (z1, z0, z2, 0))
+
+/*
+** cmla_0_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, \1\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s8_tied3, svint8_t,
+ z0 = svcmla_s8 (z1, z2, z0, 0),
+ z0 = svcmla (z1, z2, z0, 0))
+
+/*
+** cmla_0_s8_untied:
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, z3\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_s8_untied, svint8_t,
+ z0 = svcmla_s8 (z1, z2, z3, 0),
+ z0 = svcmla (z1, z2, z3, 0))
+
+/*
+** cmla_90_s8_tied1:
+** cmla z0\.b, z1\.b, z2\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s8_tied1, svint8_t,
+ z0 = svcmla_s8 (z0, z1, z2, 90),
+ z0 = svcmla (z0, z1, z2, 90))
+
+/*
+** cmla_90_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, \1\.b, z2\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s8_tied2, svint8_t,
+ z0 = svcmla_s8 (z1, z0, z2, 90),
+ z0 = svcmla (z1, z0, z2, 90))
+
+/*
+** cmla_90_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, \1\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s8_tied3, svint8_t,
+ z0 = svcmla_s8 (z1, z2, z0, 90),
+ z0 = svcmla (z1, z2, z0, 90))
+
+/*
+** cmla_90_s8_untied:
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, z3\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_s8_untied, svint8_t,
+ z0 = svcmla_s8 (z1, z2, z3, 90),
+ z0 = svcmla (z1, z2, z3, 90))
+
+/*
+** cmla_180_s8_tied1:
+** cmla z0\.b, z1\.b, z2\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s8_tied1, svint8_t,
+ z0 = svcmla_s8 (z0, z1, z2, 180),
+ z0 = svcmla (z0, z1, z2, 180))
+
+/*
+** cmla_180_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, \1\.b, z2\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s8_tied2, svint8_t,
+ z0 = svcmla_s8 (z1, z0, z2, 180),
+ z0 = svcmla (z1, z0, z2, 180))
+
+/*
+** cmla_180_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, \1\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s8_tied3, svint8_t,
+ z0 = svcmla_s8 (z1, z2, z0, 180),
+ z0 = svcmla (z1, z2, z0, 180))
+
+/*
+** cmla_180_s8_untied:
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, z3\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_s8_untied, svint8_t,
+ z0 = svcmla_s8 (z1, z2, z3, 180),
+ z0 = svcmla (z1, z2, z3, 180))
+
+/*
+** cmla_270_s8_tied1:
+** cmla z0\.b, z1\.b, z2\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s8_tied1, svint8_t,
+ z0 = svcmla_s8 (z0, z1, z2, 270),
+ z0 = svcmla (z0, z1, z2, 270))
+
+/*
+** cmla_270_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, \1\.b, z2\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s8_tied2, svint8_t,
+ z0 = svcmla_s8 (z1, z0, z2, 270),
+ z0 = svcmla (z1, z0, z2, 270))
+
+/*
+** cmla_270_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, \1\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s8_tied3, svint8_t,
+ z0 = svcmla_s8 (z1, z2, z0, 270),
+ z0 = svcmla (z1, z2, z0, 270))
+
+/*
+** cmla_270_s8_untied:
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, z3\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_s8_untied, svint8_t,
+ z0 = svcmla_s8 (z1, z2, z3, 270),
+ z0 = svcmla (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_0_u16_tied1:
+** cmla z0\.h, z1\.h, z2\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u16_tied1, svuint16_t,
+ z0 = svcmla_u16 (z0, z1, z2, 0),
+ z0 = svcmla (z0, z1, z2, 0))
+
+/*
+** cmla_0_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u16_tied2, svuint16_t,
+ z0 = svcmla_u16 (z1, z0, z2, 0),
+ z0 = svcmla (z1, z0, z2, 0))
+
+/*
+** cmla_0_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u16_tied3, svuint16_t,
+ z0 = svcmla_u16 (z1, z2, z0, 0),
+ z0 = svcmla (z1, z2, z0, 0))
+
+/*
+** cmla_0_u16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u16_untied, svuint16_t,
+ z0 = svcmla_u16 (z1, z2, z3, 0),
+ z0 = svcmla (z1, z2, z3, 0))
+
+/*
+** cmla_90_u16_tied1:
+** cmla z0\.h, z1\.h, z2\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u16_tied1, svuint16_t,
+ z0 = svcmla_u16 (z0, z1, z2, 90),
+ z0 = svcmla (z0, z1, z2, 90))
+
+/*
+** cmla_90_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u16_tied2, svuint16_t,
+ z0 = svcmla_u16 (z1, z0, z2, 90),
+ z0 = svcmla (z1, z0, z2, 90))
+
+/*
+** cmla_90_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u16_tied3, svuint16_t,
+ z0 = svcmla_u16 (z1, z2, z0, 90),
+ z0 = svcmla (z1, z2, z0, 90))
+
+/*
+** cmla_90_u16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u16_untied, svuint16_t,
+ z0 = svcmla_u16 (z1, z2, z3, 90),
+ z0 = svcmla (z1, z2, z3, 90))
+
+/*
+** cmla_180_u16_tied1:
+** cmla z0\.h, z1\.h, z2\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u16_tied1, svuint16_t,
+ z0 = svcmla_u16 (z0, z1, z2, 180),
+ z0 = svcmla (z0, z1, z2, 180))
+
+/*
+** cmla_180_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u16_tied2, svuint16_t,
+ z0 = svcmla_u16 (z1, z0, z2, 180),
+ z0 = svcmla (z1, z0, z2, 180))
+
+/*
+** cmla_180_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u16_tied3, svuint16_t,
+ z0 = svcmla_u16 (z1, z2, z0, 180),
+ z0 = svcmla (z1, z2, z0, 180))
+
+/*
+** cmla_180_u16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u16_untied, svuint16_t,
+ z0 = svcmla_u16 (z1, z2, z3, 180),
+ z0 = svcmla (z1, z2, z3, 180))
+
+/*
+** cmla_270_u16_tied1:
+** cmla z0\.h, z1\.h, z2\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u16_tied1, svuint16_t,
+ z0 = svcmla_u16 (z0, z1, z2, 270),
+ z0 = svcmla (z0, z1, z2, 270))
+
+/*
+** cmla_270_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, \1\.h, z2\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u16_tied2, svuint16_t,
+ z0 = svcmla_u16 (z1, z0, z2, 270),
+ z0 = svcmla (z1, z0, z2, 270))
+
+/*
+** cmla_270_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, \1\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u16_tied3, svuint16_t,
+ z0 = svcmla_u16 (z1, z2, z0, 270),
+ z0 = svcmla (z1, z2, z0, 270))
+
+/*
+** cmla_270_u16_untied:
+** movprfx z0, z1
+** cmla z0\.h, z2\.h, z3\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u16_untied, svuint16_t,
+ z0 = svcmla_u16 (z1, z2, z3, 270),
+ z0 = svcmla (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_0_u32_tied1:
+** cmla z0\.s, z1\.s, z2\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u32_tied1, svuint32_t,
+ z0 = svcmla_u32 (z0, z1, z2, 0),
+ z0 = svcmla (z0, z1, z2, 0))
+
+/*
+** cmla_0_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u32_tied2, svuint32_t,
+ z0 = svcmla_u32 (z1, z0, z2, 0),
+ z0 = svcmla (z1, z0, z2, 0))
+
+/*
+** cmla_0_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u32_tied3, svuint32_t,
+ z0 = svcmla_u32 (z1, z2, z0, 0),
+ z0 = svcmla (z1, z2, z0, 0))
+
+/*
+** cmla_0_u32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u32_untied, svuint32_t,
+ z0 = svcmla_u32 (z1, z2, z3, 0),
+ z0 = svcmla (z1, z2, z3, 0))
+
+/*
+** cmla_90_u32_tied1:
+** cmla z0\.s, z1\.s, z2\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u32_tied1, svuint32_t,
+ z0 = svcmla_u32 (z0, z1, z2, 90),
+ z0 = svcmla (z0, z1, z2, 90))
+
+/*
+** cmla_90_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u32_tied2, svuint32_t,
+ z0 = svcmla_u32 (z1, z0, z2, 90),
+ z0 = svcmla (z1, z0, z2, 90))
+
+/*
+** cmla_90_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u32_tied3, svuint32_t,
+ z0 = svcmla_u32 (z1, z2, z0, 90),
+ z0 = svcmla (z1, z2, z0, 90))
+
+/*
+** cmla_90_u32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u32_untied, svuint32_t,
+ z0 = svcmla_u32 (z1, z2, z3, 90),
+ z0 = svcmla (z1, z2, z3, 90))
+
+/*
+** cmla_180_u32_tied1:
+** cmla z0\.s, z1\.s, z2\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u32_tied1, svuint32_t,
+ z0 = svcmla_u32 (z0, z1, z2, 180),
+ z0 = svcmla (z0, z1, z2, 180))
+
+/*
+** cmla_180_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u32_tied2, svuint32_t,
+ z0 = svcmla_u32 (z1, z0, z2, 180),
+ z0 = svcmla (z1, z0, z2, 180))
+
+/*
+** cmla_180_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u32_tied3, svuint32_t,
+ z0 = svcmla_u32 (z1, z2, z0, 180),
+ z0 = svcmla (z1, z2, z0, 180))
+
+/*
+** cmla_180_u32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u32_untied, svuint32_t,
+ z0 = svcmla_u32 (z1, z2, z3, 180),
+ z0 = svcmla (z1, z2, z3, 180))
+
+/*
+** cmla_270_u32_tied1:
+** cmla z0\.s, z1\.s, z2\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u32_tied1, svuint32_t,
+ z0 = svcmla_u32 (z0, z1, z2, 270),
+ z0 = svcmla (z0, z1, z2, 270))
+
+/*
+** cmla_270_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, \1\.s, z2\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u32_tied2, svuint32_t,
+ z0 = svcmla_u32 (z1, z0, z2, 270),
+ z0 = svcmla (z1, z0, z2, 270))
+
+/*
+** cmla_270_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, \1\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u32_tied3, svuint32_t,
+ z0 = svcmla_u32 (z1, z2, z0, 270),
+ z0 = svcmla (z1, z2, z0, 270))
+
+/*
+** cmla_270_u32_untied:
+** movprfx z0, z1
+** cmla z0\.s, z2\.s, z3\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u32_untied, svuint32_t,
+ z0 = svcmla_u32 (z1, z2, z3, 270),
+ z0 = svcmla (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_0_u64_tied1:
+** cmla z0\.d, z1\.d, z2\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u64_tied1, svuint64_t,
+ z0 = svcmla_u64 (z0, z1, z2, 0),
+ z0 = svcmla (z0, z1, z2, 0))
+
+/*
+** cmla_0_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, \1, z2\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u64_tied2, svuint64_t,
+ z0 = svcmla_u64 (z1, z0, z2, 0),
+ z0 = svcmla (z1, z0, z2, 0))
+
+/*
+** cmla_0_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, \1, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u64_tied3, svuint64_t,
+ z0 = svcmla_u64 (z1, z2, z0, 0),
+ z0 = svcmla (z1, z2, z0, 0))
+
+/*
+** cmla_0_u64_untied:
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, z3\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u64_untied, svuint64_t,
+ z0 = svcmla_u64 (z1, z2, z3, 0),
+ z0 = svcmla (z1, z2, z3, 0))
+
+/*
+** cmla_90_u64_tied1:
+** cmla z0\.d, z1\.d, z2\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u64_tied1, svuint64_t,
+ z0 = svcmla_u64 (z0, z1, z2, 90),
+ z0 = svcmla (z0, z1, z2, 90))
+
+/*
+** cmla_90_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, \1, z2\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u64_tied2, svuint64_t,
+ z0 = svcmla_u64 (z1, z0, z2, 90),
+ z0 = svcmla (z1, z0, z2, 90))
+
+/*
+** cmla_90_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, \1, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u64_tied3, svuint64_t,
+ z0 = svcmla_u64 (z1, z2, z0, 90),
+ z0 = svcmla (z1, z2, z0, 90))
+
+/*
+** cmla_90_u64_untied:
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, z3\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u64_untied, svuint64_t,
+ z0 = svcmla_u64 (z1, z2, z3, 90),
+ z0 = svcmla (z1, z2, z3, 90))
+
+/*
+** cmla_180_u64_tied1:
+** cmla z0\.d, z1\.d, z2\.d, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u64_tied1, svuint64_t,
+ z0 = svcmla_u64 (z0, z1, z2, 180),
+ z0 = svcmla (z0, z1, z2, 180))
+
+/*
+** cmla_180_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, \1, z2\.d, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u64_tied2, svuint64_t,
+ z0 = svcmla_u64 (z1, z0, z2, 180),
+ z0 = svcmla (z1, z0, z2, 180))
+
+/*
+** cmla_180_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, \1, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u64_tied3, svuint64_t,
+ z0 = svcmla_u64 (z1, z2, z0, 180),
+ z0 = svcmla (z1, z2, z0, 180))
+
+/*
+** cmla_180_u64_untied:
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, z3\.d, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u64_untied, svuint64_t,
+ z0 = svcmla_u64 (z1, z2, z3, 180),
+ z0 = svcmla (z1, z2, z3, 180))
+
+/*
+** cmla_270_u64_tied1:
+** cmla z0\.d, z1\.d, z2\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u64_tied1, svuint64_t,
+ z0 = svcmla_u64 (z0, z1, z2, 270),
+ z0 = svcmla (z0, z1, z2, 270))
+
+/*
+** cmla_270_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, \1, z2\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u64_tied2, svuint64_t,
+ z0 = svcmla_u64 (z1, z0, z2, 270),
+ z0 = svcmla (z1, z0, z2, 270))
+
+/*
+** cmla_270_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, \1, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u64_tied3, svuint64_t,
+ z0 = svcmla_u64 (z1, z2, z0, 270),
+ z0 = svcmla (z1, z2, z0, 270))
+
+/*
+** cmla_270_u64_untied:
+** movprfx z0, z1
+** cmla z0\.d, z2\.d, z3\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u64_untied, svuint64_t,
+ z0 = svcmla_u64 (z1, z2, z3, 270),
+ z0 = svcmla (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cmla_0_u8_tied1:
+** cmla z0\.b, z1\.b, z2\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u8_tied1, svuint8_t,
+ z0 = svcmla_u8 (z0, z1, z2, 0),
+ z0 = svcmla (z0, z1, z2, 0))
+
+/*
+** cmla_0_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, \1\.b, z2\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u8_tied2, svuint8_t,
+ z0 = svcmla_u8 (z1, z0, z2, 0),
+ z0 = svcmla (z1, z0, z2, 0))
+
+/*
+** cmla_0_u8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, \1\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u8_tied3, svuint8_t,
+ z0 = svcmla_u8 (z1, z2, z0, 0),
+ z0 = svcmla (z1, z2, z0, 0))
+
+/*
+** cmla_0_u8_untied:
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, z3\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (cmla_0_u8_untied, svuint8_t,
+ z0 = svcmla_u8 (z1, z2, z3, 0),
+ z0 = svcmla (z1, z2, z3, 0))
+
+/*
+** cmla_90_u8_tied1:
+** cmla z0\.b, z1\.b, z2\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u8_tied1, svuint8_t,
+ z0 = svcmla_u8 (z0, z1, z2, 90),
+ z0 = svcmla (z0, z1, z2, 90))
+
+/*
+** cmla_90_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, \1\.b, z2\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u8_tied2, svuint8_t,
+ z0 = svcmla_u8 (z1, z0, z2, 90),
+ z0 = svcmla (z1, z0, z2, 90))
+
+/*
+** cmla_90_u8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, \1\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u8_tied3, svuint8_t,
+ z0 = svcmla_u8 (z1, z2, z0, 90),
+ z0 = svcmla (z1, z2, z0, 90))
+
+/*
+** cmla_90_u8_untied:
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, z3\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (cmla_90_u8_untied, svuint8_t,
+ z0 = svcmla_u8 (z1, z2, z3, 90),
+ z0 = svcmla (z1, z2, z3, 90))
+
+/*
+** cmla_180_u8_tied1:
+** cmla z0\.b, z1\.b, z2\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u8_tied1, svuint8_t,
+ z0 = svcmla_u8 (z0, z1, z2, 180),
+ z0 = svcmla (z0, z1, z2, 180))
+
+/*
+** cmla_180_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, \1\.b, z2\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u8_tied2, svuint8_t,
+ z0 = svcmla_u8 (z1, z0, z2, 180),
+ z0 = svcmla (z1, z0, z2, 180))
+
+/*
+** cmla_180_u8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, \1\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u8_tied3, svuint8_t,
+ z0 = svcmla_u8 (z1, z2, z0, 180),
+ z0 = svcmla (z1, z2, z0, 180))
+
+/*
+** cmla_180_u8_untied:
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, z3\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (cmla_180_u8_untied, svuint8_t,
+ z0 = svcmla_u8 (z1, z2, z3, 180),
+ z0 = svcmla (z1, z2, z3, 180))
+
+/*
+** cmla_270_u8_tied1:
+** cmla z0\.b, z1\.b, z2\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u8_tied1, svuint8_t,
+ z0 = svcmla_u8 (z0, z1, z2, 270),
+ z0 = svcmla (z0, z1, z2, 270))
+
+/*
+** cmla_270_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, \1\.b, z2\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u8_tied2, svuint8_t,
+ z0 = svcmla_u8 (z1, z0, z2, 270),
+ z0 = svcmla (z1, z0, z2, 270))
+
+/*
+** cmla_270_u8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, \1\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u8_tied3, svuint8_t,
+ z0 = svcmla_u8 (z1, z2, z0, 270),
+ z0 = svcmla (z1, z2, z0, 270))
+
+/*
+** cmla_270_u8_untied:
+** movprfx z0, z1
+** cmla z0\.b, z2\.b, z3\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (cmla_270_u8_untied, svuint8_t,
+ z0 = svcmla_u8 (z1, z2, z3, 270),
+ z0 = svcmla (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cvtlt_f32_f16_m_tied1:
+** fcvtlt z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (cvtlt_f32_f16_m_tied1, svfloat32_t, svfloat16_t,
+ z0 = svcvtlt_f32_f16_m (z0, p0, z4),
+ z0 = svcvtlt_f32_m (z0, p0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (cvtlt_f32_f16_m_tied2, svfloat32_t, svfloat16_t,
+ z0_res = svcvtlt_f32_f16_m (z4, p0, z0),
+ z0_res = svcvtlt_f32_m (z4, p0, z0))
+
+/*
+** cvtlt_f32_f16_m_untied:
+** (
+** mov z0\.d, z1\.d
+** fcvtlt z0\.s, p0/m, z4\.h
+** |
+** fcvtlt z1\.s, p0/m, z4\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (cvtlt_f32_f16_m_untied, svfloat32_t, svfloat16_t,
+ z0 = svcvtlt_f32_f16_m (z1, p0, z4),
+ z0 = svcvtlt_f32_m (z1, p0, z4))
+
+/*
+** cvtlt_f32_f16_x_tied1:
+** fcvtlt z0\.s, p0/m, z0\.h
+** ret
+*/
+TEST_DUAL_Z_REV (cvtlt_f32_f16_x_tied1, svfloat32_t, svfloat16_t,
+ z0_res = svcvtlt_f32_f16_x (p0, z0),
+ z0_res = svcvtlt_f32_x (p0, z0))
+
+/*
+** cvtlt_f32_f16_x_untied:
+** fcvtlt z0\.s, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (cvtlt_f32_f16_x_untied, svfloat32_t, svfloat16_t,
+ z0 = svcvtlt_f32_f16_x (p0, z4),
+ z0 = svcvtlt_f32_x (p0, z4))
+
+/*
+** ptrue_cvtlt_f32_f16_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z_REV (ptrue_cvtlt_f32_f16_x_tied1, svfloat32_t, svfloat16_t,
+ z0_res = svcvtlt_f32_f16_x (svptrue_b32 (), z0),
+ z0_res = svcvtlt_f32_x (svptrue_b32 (), z0))
+
+/*
+** ptrue_cvtlt_f32_f16_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_cvtlt_f32_f16_x_untied, svfloat32_t, svfloat16_t,
+ z0 = svcvtlt_f32_f16_x (svptrue_b32 (), z4),
+ z0 = svcvtlt_f32_x (svptrue_b32 (), z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cvtlt_f64_f32_m_tied1:
+** fcvtlt z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (cvtlt_f64_f32_m_tied1, svfloat64_t, svfloat32_t,
+ z0 = svcvtlt_f64_f32_m (z0, p0, z4),
+ z0 = svcvtlt_f64_m (z0, p0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (cvtlt_f64_f32_m_tied2, svfloat64_t, svfloat32_t,
+ z0_res = svcvtlt_f64_f32_m (z4, p0, z0),
+ z0_res = svcvtlt_f64_m (z4, p0, z0))
+
+/*
+** cvtlt_f64_f32_m_untied:
+** (
+** mov z0\.d, z1\.d
+** fcvtlt z0\.d, p0/m, z4\.s
+** |
+** fcvtlt z1\.d, p0/m, z4\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (cvtlt_f64_f32_m_untied, svfloat64_t, svfloat32_t,
+ z0 = svcvtlt_f64_f32_m (z1, p0, z4),
+ z0 = svcvtlt_f64_m (z1, p0, z4))
+
+/*
+** cvtlt_f64_f32_x_tied1:
+** fcvtlt z0\.d, p0/m, z0\.s
+** ret
+*/
+TEST_DUAL_Z_REV (cvtlt_f64_f32_x_tied1, svfloat64_t, svfloat32_t,
+ z0_res = svcvtlt_f64_f32_x (p0, z0),
+ z0_res = svcvtlt_f64_x (p0, z0))
+
+/*
+** cvtlt_f64_f32_x_untied:
+** fcvtlt z0\.d, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (cvtlt_f64_f32_x_untied, svfloat64_t, svfloat32_t,
+ z0 = svcvtlt_f64_f32_x (p0, z4),
+ z0 = svcvtlt_f64_x (p0, z4))
+
+/*
+** ptrue_cvtlt_f64_f32_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z_REV (ptrue_cvtlt_f64_f32_x_tied1, svfloat64_t, svfloat32_t,
+ z0_res = svcvtlt_f64_f32_x (svptrue_b64 (), z0),
+ z0_res = svcvtlt_f64_x (svptrue_b64 (), z0))
+
+/*
+** ptrue_cvtlt_f64_f32_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_cvtlt_f64_f32_x_untied, svfloat64_t, svfloat32_t,
+ z0 = svcvtlt_f64_f32_x (svptrue_b64 (), z4),
+ z0 = svcvtlt_f64_x (svptrue_b64 (), z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cvtnt_f16_f32_m_tied1:
+** fcvtnt z0\.h, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (cvtnt_f16_f32_m_tied1, svfloat16_t, svfloat32_t,
+ z0 = svcvtnt_f16_f32_m (z0, p0, z4),
+ z0 = svcvtnt_f16_m (z0, p0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (cvtnt_f16_f32_m_tied2, svfloat16_t, svfloat32_t,
+ z0_res = svcvtnt_f16_f32_m (z4, p0, z0),
+ z0_res = svcvtnt_f16_m (z4, p0, z0))
+
+/*
+** cvtnt_f16_f32_m_untied:
+** (
+** mov z0\.d, z1\.d
+** fcvtnt z0\.h, p0/m, z4\.s
+** |
+** fcvtnt z1\.h, p0/m, z4\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (cvtnt_f16_f32_m_untied, svfloat16_t, svfloat32_t,
+ z0 = svcvtnt_f16_f32_m (z1, p0, z4),
+ z0 = svcvtnt_f16_m (z1, p0, z4))
+
+/*
+** cvtnt_f16_f32_x_tied1:
+** fcvtnt z0\.h, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (cvtnt_f16_f32_x_tied1, svfloat16_t, svfloat32_t,
+ z0 = svcvtnt_f16_f32_x (z0, p0, z4),
+ z0 = svcvtnt_f16_x (z0, p0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (cvtnt_f16_f32_x_tied2, svfloat16_t, svfloat32_t,
+ z0_res = svcvtnt_f16_f32_x (z4, p0, z0),
+ z0_res = svcvtnt_f16_x (z4, p0, z0))
+
+/*
+** cvtnt_f16_f32_x_untied:
+** (
+** mov z0\.d, z1\.d
+** fcvtnt z0\.h, p0/m, z4\.s
+** |
+** fcvtnt z1\.h, p0/m, z4\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (cvtnt_f16_f32_x_untied, svfloat16_t, svfloat32_t,
+ z0 = svcvtnt_f16_f32_x (z1, p0, z4),
+ z0 = svcvtnt_f16_x (z1, p0, z4))
+
+/*
+** ptrue_cvtnt_f16_f32_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_cvtnt_f16_f32_x_tied1, svfloat16_t, svfloat32_t,
+ z0 = svcvtnt_f16_f32_x (z0, svptrue_b32 (), z4),
+ z0 = svcvtnt_f16_x (z0, svptrue_b32 (), z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (ptrue_cvtnt_f16_f32_x_tied2, svfloat16_t, svfloat32_t,
+ z0_res = svcvtnt_f16_f32_x (z4, svptrue_b32 (), z0),
+ z0_res = svcvtnt_f16_x (z4, svptrue_b32 (), z0))
+
+/*
+** ptrue_cvtnt_f16_f32_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_cvtnt_f16_f32_x_untied, svfloat16_t, svfloat32_t,
+ z0 = svcvtnt_f16_f32_x (z1, svptrue_b32 (), z4),
+ z0 = svcvtnt_f16_x (z1, svptrue_b32 (), z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cvtnt_f32_f64_m_tied1:
+** fcvtnt z0\.s, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (cvtnt_f32_f64_m_tied1, svfloat32_t, svfloat64_t,
+ z0 = svcvtnt_f32_f64_m (z0, p0, z4),
+ z0 = svcvtnt_f32_m (z0, p0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (cvtnt_f32_f64_m_tied2, svfloat32_t, svfloat64_t,
+ z0_res = svcvtnt_f32_f64_m (z4, p0, z0),
+ z0_res = svcvtnt_f32_m (z4, p0, z0))
+
+/*
+** cvtnt_f32_f64_m_untied:
+** (
+** mov z0\.d, z1\.d
+** fcvtnt z0\.s, p0/m, z4\.d
+** |
+** fcvtnt z1\.s, p0/m, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (cvtnt_f32_f64_m_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtnt_f32_f64_m (z1, p0, z4),
+ z0 = svcvtnt_f32_m (z1, p0, z4))
+
+/*
+** cvtnt_f32_f64_x_tied1:
+** fcvtnt z0\.s, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (cvtnt_f32_f64_x_tied1, svfloat32_t, svfloat64_t,
+ z0 = svcvtnt_f32_f64_x (z0, p0, z4),
+ z0 = svcvtnt_f32_x (z0, p0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (cvtnt_f32_f64_x_tied2, svfloat32_t, svfloat64_t,
+ z0_res = svcvtnt_f32_f64_x (z4, p0, z0),
+ z0_res = svcvtnt_f32_x (z4, p0, z0))
+
+/*
+** cvtnt_f32_f64_x_untied:
+** (
+** mov z0\.d, z1\.d
+** fcvtnt z0\.s, p0/m, z4\.d
+** |
+** fcvtnt z1\.s, p0/m, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (cvtnt_f32_f64_x_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtnt_f32_f64_x (z1, p0, z4),
+ z0 = svcvtnt_f32_x (z1, p0, z4))
+
+/*
+** ptrue_cvtnt_f32_f64_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_cvtnt_f32_f64_x_tied1, svfloat32_t, svfloat64_t,
+ z0 = svcvtnt_f32_f64_x (z0, svptrue_b64 (), z4),
+ z0 = svcvtnt_f32_x (z0, svptrue_b64 (), z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (ptrue_cvtnt_f32_f64_x_tied2, svfloat32_t, svfloat64_t,
+ z0_res = svcvtnt_f32_f64_x (z4, svptrue_b64 (), z0),
+ z0_res = svcvtnt_f32_x (z4, svptrue_b64 (), z0))
+
+/*
+** ptrue_cvtnt_f32_f64_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_cvtnt_f32_f64_x_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtnt_f32_f64_x (z1, svptrue_b64 (), z4),
+ z0 = svcvtnt_f32_x (z1, svptrue_b64 (), z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cvtx_f32_f64_m_tied1:
+** fcvtx z0\.s, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (cvtx_f32_f64_m_tied1, svfloat32_t, svfloat64_t,
+ z0 = svcvtx_f32_f64_m (z0, p0, z4),
+ z0 = svcvtx_f32_m (z0, p0, z4))
+
+/*
+** cvtx_f32_f64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** fcvtx z0\.s, p0/m, \1
+** ret
+*/
+TEST_DUAL_Z_REV (cvtx_f32_f64_m_tied2, svfloat32_t, svfloat64_t,
+ z0_res = svcvtx_f32_f64_m (z4, p0, z0),
+ z0_res = svcvtx_f32_m (z4, p0, z0))
+
+/*
+** cvtx_f32_f64_m_untied:
+** movprfx z0, z1
+** fcvtx z0\.s, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (cvtx_f32_f64_m_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtx_f32_f64_m (z1, p0, z4),
+ z0 = svcvtx_f32_m (z1, p0, z4))
+
+/*
+** cvtx_f32_f64_z_tied1:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0\.d, p0/z, \1
+** fcvtx z0\.s, p0/m, \1
+** ret
+*/
+TEST_DUAL_Z_REV (cvtx_f32_f64_z_tied1, svfloat32_t, svfloat64_t,
+ z0_res = svcvtx_f32_f64_z (p0, z0),
+ z0_res = svcvtx_f32_z (p0, z0))
+
+/*
+** cvtx_f32_f64_z_untied:
+** movprfx z0\.d, p0/z, z4\.d
+** fcvtx z0\.s, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (cvtx_f32_f64_z_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtx_f32_f64_z (p0, z4),
+ z0 = svcvtx_f32_z (p0, z4))
+
+/*
+** cvtx_f32_f64_x_tied1:
+** fcvtx z0\.s, p0/m, z0\.d
+** ret
+*/
+TEST_DUAL_Z_REV (cvtx_f32_f64_x_tied1, svfloat32_t, svfloat64_t,
+ z0_res = svcvtx_f32_f64_x (p0, z0),
+ z0_res = svcvtx_f32_x (p0, z0))
+
+/*
+** cvtx_f32_f64_x_untied:
+** fcvtx z0\.s, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (cvtx_f32_f64_x_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtx_f32_f64_x (p0, z4),
+ z0 = svcvtx_f32_x (p0, z4))
+
+/*
+** ptrue_cvtx_f32_f64_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z_REV (ptrue_cvtx_f32_f64_x_tied1, svfloat32_t, svfloat64_t,
+ z0_res = svcvtx_f32_f64_x (svptrue_b64 (), z0),
+ z0_res = svcvtx_f32_x (svptrue_b64 (), z0))
+
+/*
+** ptrue_cvtx_f32_f64_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_cvtx_f32_f64_x_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtx_f32_f64_x (svptrue_b64 (), z4),
+ z0 = svcvtx_f32_x (svptrue_b64 (), z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** cvtxnt_f32_f64_m_tied1:
+** fcvtxnt z0\.s, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (cvtxnt_f32_f64_m_tied1, svfloat32_t, svfloat64_t,
+ z0 = svcvtxnt_f32_f64_m (z0, p0, z4),
+ z0 = svcvtxnt_f32_m (z0, p0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (cvtxnt_f32_f64_m_tied2, svfloat32_t, svfloat64_t,
+ z0_res = svcvtxnt_f32_f64_m (z4, p0, z0),
+ z0_res = svcvtxnt_f32_m (z4, p0, z0))
+
+/*
+** cvtxnt_f32_f64_m_untied:
+** (
+** mov z0\.d, z1\.d
+** fcvtxnt z0\.s, p0/m, z4\.d
+** |
+** fcvtxnt z1\.s, p0/m, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (cvtxnt_f32_f64_m_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtxnt_f32_f64_m (z1, p0, z4),
+ z0 = svcvtxnt_f32_m (z1, p0, z4))
+
+/*
+** cvtxnt_f32_f64_x_tied1:
+** fcvtxnt z0\.s, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (cvtxnt_f32_f64_x_tied1, svfloat32_t, svfloat64_t,
+ z0 = svcvtxnt_f32_f64_x (z0, p0, z4),
+ z0 = svcvtxnt_f32_x (z0, p0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (cvtxnt_f32_f64_x_tied2, svfloat32_t, svfloat64_t,
+ z0_res = svcvtxnt_f32_f64_x (z4, p0, z0),
+ z0_res = svcvtxnt_f32_x (z4, p0, z0))
+
+/*
+** cvtxnt_f32_f64_x_untied:
+** (
+** mov z0\.d, z1\.d
+** fcvtxnt z0\.s, p0/m, z4\.d
+** |
+** fcvtxnt z1\.s, p0/m, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (cvtxnt_f32_f64_x_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtxnt_f32_f64_x (z1, p0, z4),
+ z0 = svcvtxnt_f32_x (z1, p0, z4))
+
+/*
+** ptrue_cvtxnt_f32_f64_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_cvtxnt_f32_f64_x_tied1, svfloat32_t, svfloat64_t,
+ z0 = svcvtxnt_f32_f64_x (z0, svptrue_b64 (), z4),
+ z0 = svcvtxnt_f32_x (z0, svptrue_b64 (), z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (ptrue_cvtxnt_f32_f64_x_tied2, svfloat32_t, svfloat64_t,
+ z0_res = svcvtxnt_f32_f64_x (z4, svptrue_b64 (), z0),
+ z0_res = svcvtxnt_f32_x (z4, svptrue_b64 (), z0))
+
+/*
+** ptrue_cvtxnt_f32_f64_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_cvtxnt_f32_f64_x_untied, svfloat32_t, svfloat64_t,
+ z0 = svcvtxnt_f32_f64_x (z1, svptrue_b64 (), z4),
+ z0 = svcvtxnt_f32_x (z1, svptrue_b64 (), z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eor3_s16_tied1:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s16_tied1, svint16_t,
+ z0 = sveor3_s16 (z0, z1, z2),
+ z0 = sveor3 (z0, z1, z2))
+
+/*
+** eor3_s16_tied2:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s16_tied2, svint16_t,
+ z0 = sveor3_s16 (z1, z0, z2),
+ z0 = sveor3 (z1, z0, z2))
+
+/*
+** eor3_s16_tied3:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s16_tied3, svint16_t,
+ z0 = sveor3_s16 (z1, z2, z0),
+ z0 = sveor3 (z1, z2, z0))
+
+/*
+** eor3_s16_untied:
+** (
+** movprfx z0, z1
+** eor3 z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** |
+** movprfx z0, z2
+** eor3 z0\.d, z0\.d, (z1\.d, z3\.d|z3\.d, z1\.d)
+** |
+** movprfx z0, z3
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** )
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s16_untied, svint16_t,
+ z0 = sveor3_s16 (z1, z2, z3),
+ z0 = sveor3 (z1, z2, z3))
+
+/*
+** eor3_w0_s16_tied1:
+** mov (z[0-9]+)\.h, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_s16_tied1, svint16_t, int16_t,
+ z0 = sveor3_n_s16 (z0, z1, x0),
+ z0 = sveor3 (z0, z1, x0))
+
+/*
+** eor3_w0_s16_tied2:
+** mov (z[0-9]+)\.h, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_s16_tied2, svint16_t, int16_t,
+ z0 = sveor3_n_s16 (z1, z0, x0),
+ z0 = sveor3 (z1, z0, x0))
+
+/*
+** eor3_w0_s16_untied:
+** mov z0\.h, w0
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_s16_untied, svint16_t, int16_t,
+ z0 = sveor3_n_s16 (z1, z2, x0),
+ z0 = sveor3 (z1, z2, x0))
+
+/*
+** eor3_11_s16_tied1:
+** mov (z[0-9]+)\.h, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s16_tied1, svint16_t,
+ z0 = sveor3_n_s16 (z0, z1, 11),
+ z0 = sveor3 (z0, z1, 11))
+
+/*
+** eor3_11_s16_tied2:
+** mov (z[0-9]+)\.h, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s16_tied2, svint16_t,
+ z0 = sveor3_n_s16 (z1, z0, 11),
+ z0 = sveor3 (z1, z0, 11))
+
+/*
+** eor3_11_s16_untied:
+** mov z0\.h, #11
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s16_untied, svint16_t,
+ z0 = sveor3_n_s16 (z1, z2, 11),
+ z0 = sveor3 (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eor3_s32_tied1:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s32_tied1, svint32_t,
+ z0 = sveor3_s32 (z0, z1, z2),
+ z0 = sveor3 (z0, z1, z2))
+
+/*
+** eor3_s32_tied2:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s32_tied2, svint32_t,
+ z0 = sveor3_s32 (z1, z0, z2),
+ z0 = sveor3 (z1, z0, z2))
+
+/*
+** eor3_s32_tied3:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s32_tied3, svint32_t,
+ z0 = sveor3_s32 (z1, z2, z0),
+ z0 = sveor3 (z1, z2, z0))
+
+/*
+** eor3_s32_untied:
+** (
+** movprfx z0, z1
+** eor3 z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** |
+** movprfx z0, z2
+** eor3 z0\.d, z0\.d, (z1\.d, z3\.d|z3\.d, z1\.d)
+** |
+** movprfx z0, z3
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** )
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s32_untied, svint32_t,
+ z0 = sveor3_s32 (z1, z2, z3),
+ z0 = sveor3 (z1, z2, z3))
+
+/*
+** eor3_w0_s32_tied1:
+** mov (z[0-9]+)\.s, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_s32_tied1, svint32_t, int32_t,
+ z0 = sveor3_n_s32 (z0, z1, x0),
+ z0 = sveor3 (z0, z1, x0))
+
+/*
+** eor3_w0_s32_tied2:
+** mov (z[0-9]+)\.s, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_s32_tied2, svint32_t, int32_t,
+ z0 = sveor3_n_s32 (z1, z0, x0),
+ z0 = sveor3 (z1, z0, x0))
+
+/*
+** eor3_w0_s32_untied:
+** mov z0\.s, w0
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_s32_untied, svint32_t, int32_t,
+ z0 = sveor3_n_s32 (z1, z2, x0),
+ z0 = sveor3 (z1, z2, x0))
+
+/*
+** eor3_11_s32_tied1:
+** mov (z[0-9]+)\.s, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s32_tied1, svint32_t,
+ z0 = sveor3_n_s32 (z0, z1, 11),
+ z0 = sveor3 (z0, z1, 11))
+
+/*
+** eor3_11_s32_tied2:
+** mov (z[0-9]+)\.s, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s32_tied2, svint32_t,
+ z0 = sveor3_n_s32 (z1, z0, 11),
+ z0 = sveor3 (z1, z0, 11))
+
+/*
+** eor3_11_s32_untied:
+** mov z0\.s, #11
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s32_untied, svint32_t,
+ z0 = sveor3_n_s32 (z1, z2, 11),
+ z0 = sveor3 (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eor3_s64_tied1:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s64_tied1, svint64_t,
+ z0 = sveor3_s64 (z0, z1, z2),
+ z0 = sveor3 (z0, z1, z2))
+
+/*
+** eor3_s64_tied2:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s64_tied2, svint64_t,
+ z0 = sveor3_s64 (z1, z0, z2),
+ z0 = sveor3 (z1, z0, z2))
+
+/*
+** eor3_s64_tied3:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s64_tied3, svint64_t,
+ z0 = sveor3_s64 (z1, z2, z0),
+ z0 = sveor3 (z1, z2, z0))
+
+/*
+** eor3_s64_untied:
+** (
+** movprfx z0, z1
+** eor3 z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** |
+** movprfx z0, z2
+** eor3 z0\.d, z0\.d, (z1\.d, z3\.d|z3\.d, z1\.d)
+** |
+** movprfx z0, z3
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** )
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s64_untied, svint64_t,
+ z0 = sveor3_s64 (z1, z2, z3),
+ z0 = sveor3 (z1, z2, z3))
+
+/*
+** eor3_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** eor3 z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_x0_s64_tied1, svint64_t, int64_t,
+ z0 = sveor3_n_s64 (z0, z1, x0),
+ z0 = sveor3 (z0, z1, x0))
+
+/*
+** eor3_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** eor3 z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_x0_s64_tied2, svint64_t, int64_t,
+ z0 = sveor3_n_s64 (z1, z0, x0),
+ z0 = sveor3 (z1, z0, x0))
+
+/*
+** eor3_x0_s64_untied:
+** mov z0\.d, x0
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_x0_s64_untied, svint64_t, int64_t,
+ z0 = sveor3_n_s64 (z1, z2, x0),
+ z0 = sveor3 (z1, z2, x0))
+
+/*
+** eor3_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s64_tied1, svint64_t,
+ z0 = sveor3_n_s64 (z0, z1, 11),
+ z0 = sveor3 (z0, z1, 11))
+
+/*
+** eor3_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s64_tied2, svint64_t,
+ z0 = sveor3_n_s64 (z1, z0, 11),
+ z0 = sveor3 (z1, z0, 11))
+
+/*
+** eor3_11_s64_untied:
+** mov z0\.d, #11
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s64_untied, svint64_t,
+ z0 = sveor3_n_s64 (z1, z2, 11),
+ z0 = sveor3 (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eor3_s8_tied1:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s8_tied1, svint8_t,
+ z0 = sveor3_s8 (z0, z1, z2),
+ z0 = sveor3 (z0, z1, z2))
+
+/*
+** eor3_s8_tied2:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s8_tied2, svint8_t,
+ z0 = sveor3_s8 (z1, z0, z2),
+ z0 = sveor3 (z1, z0, z2))
+
+/*
+** eor3_s8_tied3:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s8_tied3, svint8_t,
+ z0 = sveor3_s8 (z1, z2, z0),
+ z0 = sveor3 (z1, z2, z0))
+
+/*
+** eor3_s8_untied:
+** (
+** movprfx z0, z1
+** eor3 z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** |
+** movprfx z0, z2
+** eor3 z0\.d, z0\.d, (z1\.d, z3\.d|z3\.d, z1\.d)
+** |
+** movprfx z0, z3
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** )
+** ret
+*/
+TEST_UNIFORM_Z (eor3_s8_untied, svint8_t,
+ z0 = sveor3_s8 (z1, z2, z3),
+ z0 = sveor3 (z1, z2, z3))
+
+/*
+** eor3_w0_s8_tied1:
+** mov (z[0-9]+)\.b, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_s8_tied1, svint8_t, int8_t,
+ z0 = sveor3_n_s8 (z0, z1, x0),
+ z0 = sveor3 (z0, z1, x0))
+
+/*
+** eor3_w0_s8_tied2:
+** mov (z[0-9]+)\.b, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_s8_tied2, svint8_t, int8_t,
+ z0 = sveor3_n_s8 (z1, z0, x0),
+ z0 = sveor3 (z1, z0, x0))
+
+/*
+** eor3_w0_s8_untied:
+** mov z0\.b, w0
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_s8_untied, svint8_t, int8_t,
+ z0 = sveor3_n_s8 (z1, z2, x0),
+ z0 = sveor3 (z1, z2, x0))
+
+/*
+** eor3_11_s8_tied1:
+** mov (z[0-9]+)\.b, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s8_tied1, svint8_t,
+ z0 = sveor3_n_s8 (z0, z1, 11),
+ z0 = sveor3 (z0, z1, 11))
+
+/*
+** eor3_11_s8_tied2:
+** mov (z[0-9]+)\.b, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s8_tied2, svint8_t,
+ z0 = sveor3_n_s8 (z1, z0, 11),
+ z0 = sveor3 (z1, z0, 11))
+
+/*
+** eor3_11_s8_untied:
+** mov z0\.b, #11
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_s8_untied, svint8_t,
+ z0 = sveor3_n_s8 (z1, z2, 11),
+ z0 = sveor3 (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eor3_u16_tied1:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u16_tied1, svuint16_t,
+ z0 = sveor3_u16 (z0, z1, z2),
+ z0 = sveor3 (z0, z1, z2))
+
+/*
+** eor3_u16_tied2:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u16_tied2, svuint16_t,
+ z0 = sveor3_u16 (z1, z0, z2),
+ z0 = sveor3 (z1, z0, z2))
+
+/*
+** eor3_u16_tied3:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u16_tied3, svuint16_t,
+ z0 = sveor3_u16 (z1, z2, z0),
+ z0 = sveor3 (z1, z2, z0))
+
+/*
+** eor3_u16_untied:
+** (
+** movprfx z0, z1
+** eor3 z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** |
+** movprfx z0, z2
+** eor3 z0\.d, z0\.d, (z1\.d, z3\.d|z3\.d, z1\.d)
+** |
+** movprfx z0, z3
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** )
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u16_untied, svuint16_t,
+ z0 = sveor3_u16 (z1, z2, z3),
+ z0 = sveor3 (z1, z2, z3))
+
+/*
+** eor3_w0_u16_tied1:
+** mov (z[0-9]+)\.h, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = sveor3_n_u16 (z0, z1, x0),
+ z0 = sveor3 (z0, z1, x0))
+
+/*
+** eor3_w0_u16_tied2:
+** mov (z[0-9]+)\.h, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_u16_tied2, svuint16_t, uint16_t,
+ z0 = sveor3_n_u16 (z1, z0, x0),
+ z0 = sveor3 (z1, z0, x0))
+
+/*
+** eor3_w0_u16_untied:
+** mov z0\.h, w0
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = sveor3_n_u16 (z1, z2, x0),
+ z0 = sveor3 (z1, z2, x0))
+
+/*
+** eor3_11_u16_tied1:
+** mov (z[0-9]+)\.h, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u16_tied1, svuint16_t,
+ z0 = sveor3_n_u16 (z0, z1, 11),
+ z0 = sveor3 (z0, z1, 11))
+
+/*
+** eor3_11_u16_tied2:
+** mov (z[0-9]+)\.h, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u16_tied2, svuint16_t,
+ z0 = sveor3_n_u16 (z1, z0, 11),
+ z0 = sveor3 (z1, z0, 11))
+
+/*
+** eor3_11_u16_untied:
+** mov z0\.h, #11
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u16_untied, svuint16_t,
+ z0 = sveor3_n_u16 (z1, z2, 11),
+ z0 = sveor3 (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eor3_u32_tied1:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u32_tied1, svuint32_t,
+ z0 = sveor3_u32 (z0, z1, z2),
+ z0 = sveor3 (z0, z1, z2))
+
+/*
+** eor3_u32_tied2:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u32_tied2, svuint32_t,
+ z0 = sveor3_u32 (z1, z0, z2),
+ z0 = sveor3 (z1, z0, z2))
+
+/*
+** eor3_u32_tied3:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u32_tied3, svuint32_t,
+ z0 = sveor3_u32 (z1, z2, z0),
+ z0 = sveor3 (z1, z2, z0))
+
+/*
+** eor3_u32_untied:
+** (
+** movprfx z0, z1
+** eor3 z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** |
+** movprfx z0, z2
+** eor3 z0\.d, z0\.d, (z1\.d, z3\.d|z3\.d, z1\.d)
+** |
+** movprfx z0, z3
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** )
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u32_untied, svuint32_t,
+ z0 = sveor3_u32 (z1, z2, z3),
+ z0 = sveor3 (z1, z2, z3))
+
+/*
+** eor3_w0_u32_tied1:
+** mov (z[0-9]+)\.s, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = sveor3_n_u32 (z0, z1, x0),
+ z0 = sveor3 (z0, z1, x0))
+
+/*
+** eor3_w0_u32_tied2:
+** mov (z[0-9]+)\.s, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = sveor3_n_u32 (z1, z0, x0),
+ z0 = sveor3 (z1, z0, x0))
+
+/*
+** eor3_w0_u32_untied:
+** mov z0\.s, w0
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = sveor3_n_u32 (z1, z2, x0),
+ z0 = sveor3 (z1, z2, x0))
+
+/*
+** eor3_11_u32_tied1:
+** mov (z[0-9]+)\.s, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u32_tied1, svuint32_t,
+ z0 = sveor3_n_u32 (z0, z1, 11),
+ z0 = sveor3 (z0, z1, 11))
+
+/*
+** eor3_11_u32_tied2:
+** mov (z[0-9]+)\.s, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u32_tied2, svuint32_t,
+ z0 = sveor3_n_u32 (z1, z0, 11),
+ z0 = sveor3 (z1, z0, 11))
+
+/*
+** eor3_11_u32_untied:
+** mov z0\.s, #11
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u32_untied, svuint32_t,
+ z0 = sveor3_n_u32 (z1, z2, 11),
+ z0 = sveor3 (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eor3_u64_tied1:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u64_tied1, svuint64_t,
+ z0 = sveor3_u64 (z0, z1, z2),
+ z0 = sveor3 (z0, z1, z2))
+
+/*
+** eor3_u64_tied2:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u64_tied2, svuint64_t,
+ z0 = sveor3_u64 (z1, z0, z2),
+ z0 = sveor3 (z1, z0, z2))
+
+/*
+** eor3_u64_tied3:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u64_tied3, svuint64_t,
+ z0 = sveor3_u64 (z1, z2, z0),
+ z0 = sveor3 (z1, z2, z0))
+
+/*
+** eor3_u64_untied:
+** (
+** movprfx z0, z1
+** eor3 z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** |
+** movprfx z0, z2
+** eor3 z0\.d, z0\.d, (z1\.d, z3\.d|z3\.d, z1\.d)
+** |
+** movprfx z0, z3
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** )
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u64_untied, svuint64_t,
+ z0 = sveor3_u64 (z1, z2, z3),
+ z0 = sveor3 (z1, z2, z3))
+
+/*
+** eor3_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** eor3 z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = sveor3_n_u64 (z0, z1, x0),
+ z0 = sveor3 (z0, z1, x0))
+
+/*
+** eor3_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** eor3 z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = sveor3_n_u64 (z1, z0, x0),
+ z0 = sveor3 (z1, z0, x0))
+
+/*
+** eor3_x0_u64_untied:
+** mov z0\.d, x0
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = sveor3_n_u64 (z1, z2, x0),
+ z0 = sveor3 (z1, z2, x0))
+
+/*
+** eor3_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u64_tied1, svuint64_t,
+ z0 = sveor3_n_u64 (z0, z1, 11),
+ z0 = sveor3 (z0, z1, 11))
+
+/*
+** eor3_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u64_tied2, svuint64_t,
+ z0 = sveor3_n_u64 (z1, z0, 11),
+ z0 = sveor3 (z1, z0, 11))
+
+/*
+** eor3_11_u64_untied:
+** mov z0\.d, #11
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u64_untied, svuint64_t,
+ z0 = sveor3_n_u64 (z1, z2, 11),
+ z0 = sveor3 (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eor3_u8_tied1:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u8_tied1, svuint8_t,
+ z0 = sveor3_u8 (z0, z1, z2),
+ z0 = sveor3 (z0, z1, z2))
+
+/*
+** eor3_u8_tied2:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u8_tied2, svuint8_t,
+ z0 = sveor3_u8 (z1, z0, z2),
+ z0 = sveor3 (z1, z0, z2))
+
+/*
+** eor3_u8_tied3:
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u8_tied3, svuint8_t,
+ z0 = sveor3_u8 (z1, z2, z0),
+ z0 = sveor3 (z1, z2, z0))
+
+/*
+** eor3_u8_untied:
+** (
+** movprfx z0, z1
+** eor3 z0\.d, z0\.d, (z2\.d, z3\.d|z3\.d, z2\.d)
+** |
+** movprfx z0, z2
+** eor3 z0\.d, z0\.d, (z1\.d, z3\.d|z3\.d, z1\.d)
+** |
+** movprfx z0, z3
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** )
+** ret
+*/
+TEST_UNIFORM_Z (eor3_u8_untied, svuint8_t,
+ z0 = sveor3_u8 (z1, z2, z3),
+ z0 = sveor3 (z1, z2, z3))
+
+/*
+** eor3_w0_u8_tied1:
+** mov (z[0-9]+)\.b, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = sveor3_n_u8 (z0, z1, x0),
+ z0 = sveor3 (z0, z1, x0))
+
+/*
+** eor3_w0_u8_tied2:
+** mov (z[0-9]+)\.b, w0
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_u8_tied2, svuint8_t, uint8_t,
+ z0 = sveor3_n_u8 (z1, z0, x0),
+ z0 = sveor3 (z1, z0, x0))
+
+/*
+** eor3_w0_u8_untied:
+** mov z0\.b, w0
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (eor3_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = sveor3_n_u8 (z1, z2, x0),
+ z0 = sveor3 (z1, z2, x0))
+
+/*
+** eor3_11_u8_tied1:
+** mov (z[0-9]+)\.b, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u8_tied1, svuint8_t,
+ z0 = sveor3_n_u8 (z0, z1, 11),
+ z0 = sveor3 (z0, z1, 11))
+
+/*
+** eor3_11_u8_tied2:
+** mov (z[0-9]+)\.b, #11
+** eor3 z0\.d, z0\.d, (z1\.d, \1\.d|\1\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u8_tied2, svuint8_t,
+ z0 = sveor3_n_u8 (z1, z0, 11),
+ z0 = sveor3 (z1, z0, 11))
+
+/*
+** eor3_11_u8_untied:
+** mov z0\.b, #11
+** eor3 z0\.d, z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (eor3_11_u8_untied, svuint8_t,
+ z0 = sveor3_n_u8 (z1, z2, 11),
+ z0 = sveor3 (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eorbt_s16_tied1:
+** eorbt z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s16_tied1, svint16_t,
+ z0 = sveorbt_s16 (z0, z1, z2),
+ z0 = sveorbt (z0, z1, z2))
+
+/*
+** eorbt_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.h, \1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s16_tied2, svint16_t,
+ z0 = sveorbt_s16 (z1, z0, z2),
+ z0 = sveorbt (z1, z0, z2))
+
+/*
+** eorbt_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.h, z2\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s16_tied3, svint16_t,
+ z0 = sveorbt_s16 (z1, z2, z0),
+ z0 = sveorbt (z1, z2, z0))
+
+/*
+** eorbt_s16_untied:
+** movprfx z0, z1
+** eorbt z0\.h, z2\.h, z3\.h
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s16_untied, svint16_t,
+ z0 = sveorbt_s16 (z1, z2, z3),
+ z0 = sveorbt (z1, z2, z3))
+
+/*
+** eorbt_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** eorbt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_s16_tied1, svint16_t, int16_t,
+ z0 = sveorbt_n_s16 (z0, z1, x0),
+ z0 = sveorbt (z0, z1, x0))
+
+/*
+** eorbt_w0_s16_tied2:
+** mov (z[0-9]+\.h), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_s16_tied2, svint16_t, int16_t,
+ z0 = sveorbt_n_s16 (z1, z0, x0),
+ z0 = sveorbt (z1, z0, x0))
+
+/*
+** eorbt_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** eorbt z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_s16_untied, svint16_t, int16_t,
+ z0 = sveorbt_n_s16 (z1, z2, x0),
+ z0 = sveorbt (z1, z2, x0))
+
+/*
+** eorbt_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** eorbt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s16_tied1, svint16_t,
+ z0 = sveorbt_n_s16 (z0, z1, 11),
+ z0 = sveorbt (z0, z1, 11))
+
+/*
+** eorbt_11_s16_tied2:
+** mov (z[0-9]+\.h), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s16_tied2, svint16_t,
+ z0 = sveorbt_n_s16 (z1, z0, 11),
+ z0 = sveorbt (z1, z0, 11))
+
+/*
+** eorbt_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** eorbt z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s16_untied, svint16_t,
+ z0 = sveorbt_n_s16 (z1, z2, 11),
+ z0 = sveorbt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eorbt_s32_tied1:
+** eorbt z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s32_tied1, svint32_t,
+ z0 = sveorbt_s32 (z0, z1, z2),
+ z0 = sveorbt (z0, z1, z2))
+
+/*
+** eorbt_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s32_tied2, svint32_t,
+ z0 = sveorbt_s32 (z1, z0, z2),
+ z0 = sveorbt (z1, z0, z2))
+
+/*
+** eorbt_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s32_tied3, svint32_t,
+ z0 = sveorbt_s32 (z1, z2, z0),
+ z0 = sveorbt (z1, z2, z0))
+
+/*
+** eorbt_s32_untied:
+** movprfx z0, z1
+** eorbt z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s32_untied, svint32_t,
+ z0 = sveorbt_s32 (z1, z2, z3),
+ z0 = sveorbt (z1, z2, z3))
+
+/*
+** eorbt_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** eorbt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_s32_tied1, svint32_t, int32_t,
+ z0 = sveorbt_n_s32 (z0, z1, x0),
+ z0 = sveorbt (z0, z1, x0))
+
+/*
+** eorbt_w0_s32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_s32_tied2, svint32_t, int32_t,
+ z0 = sveorbt_n_s32 (z1, z0, x0),
+ z0 = sveorbt (z1, z0, x0))
+
+/*
+** eorbt_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** eorbt z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_s32_untied, svint32_t, int32_t,
+ z0 = sveorbt_n_s32 (z1, z2, x0),
+ z0 = sveorbt (z1, z2, x0))
+
+/*
+** eorbt_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** eorbt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s32_tied1, svint32_t,
+ z0 = sveorbt_n_s32 (z0, z1, 11),
+ z0 = sveorbt (z0, z1, 11))
+
+/*
+** eorbt_11_s32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s32_tied2, svint32_t,
+ z0 = sveorbt_n_s32 (z1, z0, 11),
+ z0 = sveorbt (z1, z0, 11))
+
+/*
+** eorbt_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** eorbt z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s32_untied, svint32_t,
+ z0 = sveorbt_n_s32 (z1, z2, 11),
+ z0 = sveorbt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eorbt_s64_tied1:
+** eorbt z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s64_tied1, svint64_t,
+ z0 = sveorbt_s64 (z0, z1, z2),
+ z0 = sveorbt (z0, z1, z2))
+
+/*
+** eorbt_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eorbt z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s64_tied2, svint64_t,
+ z0 = sveorbt_s64 (z1, z0, z2),
+ z0 = sveorbt (z1, z0, z2))
+
+/*
+** eorbt_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eorbt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s64_tied3, svint64_t,
+ z0 = sveorbt_s64 (z1, z2, z0),
+ z0 = sveorbt (z1, z2, z0))
+
+/*
+** eorbt_s64_untied:
+** movprfx z0, z1
+** eorbt z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s64_untied, svint64_t,
+ z0 = sveorbt_s64 (z1, z2, z3),
+ z0 = sveorbt (z1, z2, z3))
+
+/*
+** eorbt_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** eorbt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_x0_s64_tied1, svint64_t, int64_t,
+ z0 = sveorbt_n_s64 (z0, z1, x0),
+ z0 = sveorbt (z0, z1, x0))
+
+/*
+** eorbt_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eorbt z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_x0_s64_tied2, svint64_t, int64_t,
+ z0 = sveorbt_n_s64 (z1, z0, x0),
+ z0 = sveorbt (z1, z0, x0))
+
+/*
+** eorbt_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** eorbt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_x0_s64_untied, svint64_t, int64_t,
+ z0 = sveorbt_n_s64 (z1, z2, x0),
+ z0 = sveorbt (z1, z2, x0))
+
+/*
+** eorbt_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** eorbt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s64_tied1, svint64_t,
+ z0 = sveorbt_n_s64 (z0, z1, 11),
+ z0 = sveorbt (z0, z1, 11))
+
+/*
+** eorbt_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eorbt z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s64_tied2, svint64_t,
+ z0 = sveorbt_n_s64 (z1, z0, 11),
+ z0 = sveorbt (z1, z0, 11))
+
+/*
+** eorbt_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** eorbt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s64_untied, svint64_t,
+ z0 = sveorbt_n_s64 (z1, z2, 11),
+ z0 = sveorbt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eorbt_s8_tied1:
+** eorbt z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s8_tied1, svint8_t,
+ z0 = sveorbt_s8 (z0, z1, z2),
+ z0 = sveorbt (z0, z1, z2))
+
+/*
+** eorbt_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.b, \1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s8_tied2, svint8_t,
+ z0 = sveorbt_s8 (z1, z0, z2),
+ z0 = sveorbt (z1, z0, z2))
+
+/*
+** eorbt_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.b, z2\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s8_tied3, svint8_t,
+ z0 = sveorbt_s8 (z1, z2, z0),
+ z0 = sveorbt (z1, z2, z0))
+
+/*
+** eorbt_s8_untied:
+** movprfx z0, z1
+** eorbt z0\.b, z2\.b, z3\.b
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_s8_untied, svint8_t,
+ z0 = sveorbt_s8 (z1, z2, z3),
+ z0 = sveorbt (z1, z2, z3))
+
+/*
+** eorbt_w0_s8_tied1:
+** mov (z[0-9]+\.b), w0
+** eorbt z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_s8_tied1, svint8_t, int8_t,
+ z0 = sveorbt_n_s8 (z0, z1, x0),
+ z0 = sveorbt (z0, z1, x0))
+
+/*
+** eorbt_w0_s8_tied2:
+** mov (z[0-9]+\.b), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_s8_tied2, svint8_t, int8_t,
+ z0 = sveorbt_n_s8 (z1, z0, x0),
+ z0 = sveorbt (z1, z0, x0))
+
+/*
+** eorbt_w0_s8_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** eorbt z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_s8_untied, svint8_t, int8_t,
+ z0 = sveorbt_n_s8 (z1, z2, x0),
+ z0 = sveorbt (z1, z2, x0))
+
+/*
+** eorbt_11_s8_tied1:
+** mov (z[0-9]+\.b), #11
+** eorbt z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s8_tied1, svint8_t,
+ z0 = sveorbt_n_s8 (z0, z1, 11),
+ z0 = sveorbt (z0, z1, 11))
+
+/*
+** eorbt_11_s8_tied2:
+** mov (z[0-9]+\.b), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s8_tied2, svint8_t,
+ z0 = sveorbt_n_s8 (z1, z0, 11),
+ z0 = sveorbt (z1, z0, 11))
+
+/*
+** eorbt_11_s8_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** eorbt z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_s8_untied, svint8_t,
+ z0 = sveorbt_n_s8 (z1, z2, 11),
+ z0 = sveorbt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eorbt_u16_tied1:
+** eorbt z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u16_tied1, svuint16_t,
+ z0 = sveorbt_u16 (z0, z1, z2),
+ z0 = sveorbt (z0, z1, z2))
+
+/*
+** eorbt_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.h, \1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u16_tied2, svuint16_t,
+ z0 = sveorbt_u16 (z1, z0, z2),
+ z0 = sveorbt (z1, z0, z2))
+
+/*
+** eorbt_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.h, z2\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u16_tied3, svuint16_t,
+ z0 = sveorbt_u16 (z1, z2, z0),
+ z0 = sveorbt (z1, z2, z0))
+
+/*
+** eorbt_u16_untied:
+** movprfx z0, z1
+** eorbt z0\.h, z2\.h, z3\.h
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u16_untied, svuint16_t,
+ z0 = sveorbt_u16 (z1, z2, z3),
+ z0 = sveorbt (z1, z2, z3))
+
+/*
+** eorbt_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** eorbt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = sveorbt_n_u16 (z0, z1, x0),
+ z0 = sveorbt (z0, z1, x0))
+
+/*
+** eorbt_w0_u16_tied2:
+** mov (z[0-9]+\.h), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_u16_tied2, svuint16_t, uint16_t,
+ z0 = sveorbt_n_u16 (z1, z0, x0),
+ z0 = sveorbt (z1, z0, x0))
+
+/*
+** eorbt_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** eorbt z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = sveorbt_n_u16 (z1, z2, x0),
+ z0 = sveorbt (z1, z2, x0))
+
+/*
+** eorbt_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** eorbt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u16_tied1, svuint16_t,
+ z0 = sveorbt_n_u16 (z0, z1, 11),
+ z0 = sveorbt (z0, z1, 11))
+
+/*
+** eorbt_11_u16_tied2:
+** mov (z[0-9]+\.h), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u16_tied2, svuint16_t,
+ z0 = sveorbt_n_u16 (z1, z0, 11),
+ z0 = sveorbt (z1, z0, 11))
+
+/*
+** eorbt_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** eorbt z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u16_untied, svuint16_t,
+ z0 = sveorbt_n_u16 (z1, z2, 11),
+ z0 = sveorbt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eorbt_u32_tied1:
+** eorbt z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u32_tied1, svuint32_t,
+ z0 = sveorbt_u32 (z0, z1, z2),
+ z0 = sveorbt (z0, z1, z2))
+
+/*
+** eorbt_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u32_tied2, svuint32_t,
+ z0 = sveorbt_u32 (z1, z0, z2),
+ z0 = sveorbt (z1, z0, z2))
+
+/*
+** eorbt_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u32_tied3, svuint32_t,
+ z0 = sveorbt_u32 (z1, z2, z0),
+ z0 = sveorbt (z1, z2, z0))
+
+/*
+** eorbt_u32_untied:
+** movprfx z0, z1
+** eorbt z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u32_untied, svuint32_t,
+ z0 = sveorbt_u32 (z1, z2, z3),
+ z0 = sveorbt (z1, z2, z3))
+
+/*
+** eorbt_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** eorbt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = sveorbt_n_u32 (z0, z1, x0),
+ z0 = sveorbt (z0, z1, x0))
+
+/*
+** eorbt_w0_u32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = sveorbt_n_u32 (z1, z0, x0),
+ z0 = sveorbt (z1, z0, x0))
+
+/*
+** eorbt_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** eorbt z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = sveorbt_n_u32 (z1, z2, x0),
+ z0 = sveorbt (z1, z2, x0))
+
+/*
+** eorbt_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** eorbt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u32_tied1, svuint32_t,
+ z0 = sveorbt_n_u32 (z0, z1, 11),
+ z0 = sveorbt (z0, z1, 11))
+
+/*
+** eorbt_11_u32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u32_tied2, svuint32_t,
+ z0 = sveorbt_n_u32 (z1, z0, 11),
+ z0 = sveorbt (z1, z0, 11))
+
+/*
+** eorbt_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** eorbt z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u32_untied, svuint32_t,
+ z0 = sveorbt_n_u32 (z1, z2, 11),
+ z0 = sveorbt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eorbt_u64_tied1:
+** eorbt z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u64_tied1, svuint64_t,
+ z0 = sveorbt_u64 (z0, z1, z2),
+ z0 = sveorbt (z0, z1, z2))
+
+/*
+** eorbt_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eorbt z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u64_tied2, svuint64_t,
+ z0 = sveorbt_u64 (z1, z0, z2),
+ z0 = sveorbt (z1, z0, z2))
+
+/*
+** eorbt_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eorbt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u64_tied3, svuint64_t,
+ z0 = sveorbt_u64 (z1, z2, z0),
+ z0 = sveorbt (z1, z2, z0))
+
+/*
+** eorbt_u64_untied:
+** movprfx z0, z1
+** eorbt z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u64_untied, svuint64_t,
+ z0 = sveorbt_u64 (z1, z2, z3),
+ z0 = sveorbt (z1, z2, z3))
+
+/*
+** eorbt_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** eorbt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = sveorbt_n_u64 (z0, z1, x0),
+ z0 = sveorbt (z0, z1, x0))
+
+/*
+** eorbt_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eorbt z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = sveorbt_n_u64 (z1, z0, x0),
+ z0 = sveorbt (z1, z0, x0))
+
+/*
+** eorbt_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** eorbt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = sveorbt_n_u64 (z1, z2, x0),
+ z0 = sveorbt (z1, z2, x0))
+
+/*
+** eorbt_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** eorbt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u64_tied1, svuint64_t,
+ z0 = sveorbt_n_u64 (z0, z1, 11),
+ z0 = sveorbt (z0, z1, 11))
+
+/*
+** eorbt_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eorbt z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u64_tied2, svuint64_t,
+ z0 = sveorbt_n_u64 (z1, z0, 11),
+ z0 = sveorbt (z1, z0, 11))
+
+/*
+** eorbt_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** eorbt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u64_untied, svuint64_t,
+ z0 = sveorbt_n_u64 (z1, z2, 11),
+ z0 = sveorbt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eorbt_u8_tied1:
+** eorbt z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u8_tied1, svuint8_t,
+ z0 = sveorbt_u8 (z0, z1, z2),
+ z0 = sveorbt (z0, z1, z2))
+
+/*
+** eorbt_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.b, \1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u8_tied2, svuint8_t,
+ z0 = sveorbt_u8 (z1, z0, z2),
+ z0 = sveorbt (z1, z0, z2))
+
+/*
+** eorbt_u8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.b, z2\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u8_tied3, svuint8_t,
+ z0 = sveorbt_u8 (z1, z2, z0),
+ z0 = sveorbt (z1, z2, z0))
+
+/*
+** eorbt_u8_untied:
+** movprfx z0, z1
+** eorbt z0\.b, z2\.b, z3\.b
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_u8_untied, svuint8_t,
+ z0 = sveorbt_u8 (z1, z2, z3),
+ z0 = sveorbt (z1, z2, z3))
+
+/*
+** eorbt_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** eorbt z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = sveorbt_n_u8 (z0, z1, x0),
+ z0 = sveorbt (z0, z1, x0))
+
+/*
+** eorbt_w0_u8_tied2:
+** mov (z[0-9]+\.b), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_u8_tied2, svuint8_t, uint8_t,
+ z0 = sveorbt_n_u8 (z1, z0, x0),
+ z0 = sveorbt (z1, z0, x0))
+
+/*
+** eorbt_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** eorbt z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eorbt_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = sveorbt_n_u8 (z1, z2, x0),
+ z0 = sveorbt (z1, z2, x0))
+
+/*
+** eorbt_11_u8_tied1:
+** mov (z[0-9]+\.b), #11
+** eorbt z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u8_tied1, svuint8_t,
+ z0 = sveorbt_n_u8 (z0, z1, 11),
+ z0 = sveorbt (z0, z1, 11))
+
+/*
+** eorbt_11_u8_tied2:
+** mov (z[0-9]+\.b), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eorbt z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u8_tied2, svuint8_t,
+ z0 = sveorbt_n_u8 (z1, z0, 11),
+ z0 = sveorbt (z1, z0, 11))
+
+/*
+** eorbt_11_u8_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** eorbt z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eorbt_11_u8_untied, svuint8_t,
+ z0 = sveorbt_n_u8 (z1, z2, 11),
+ z0 = sveorbt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eortb_s16_tied1:
+** eortb z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s16_tied1, svint16_t,
+ z0 = sveortb_s16 (z0, z1, z2),
+ z0 = sveortb (z0, z1, z2))
+
+/*
+** eortb_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.h, \1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s16_tied2, svint16_t,
+ z0 = sveortb_s16 (z1, z0, z2),
+ z0 = sveortb (z1, z0, z2))
+
+/*
+** eortb_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.h, z2\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s16_tied3, svint16_t,
+ z0 = sveortb_s16 (z1, z2, z0),
+ z0 = sveortb (z1, z2, z0))
+
+/*
+** eortb_s16_untied:
+** movprfx z0, z1
+** eortb z0\.h, z2\.h, z3\.h
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s16_untied, svint16_t,
+ z0 = sveortb_s16 (z1, z2, z3),
+ z0 = sveortb (z1, z2, z3))
+
+/*
+** eortb_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** eortb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_s16_tied1, svint16_t, int16_t,
+ z0 = sveortb_n_s16 (z0, z1, x0),
+ z0 = sveortb (z0, z1, x0))
+
+/*
+** eortb_w0_s16_tied2:
+** mov (z[0-9]+\.h), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_s16_tied2, svint16_t, int16_t,
+ z0 = sveortb_n_s16 (z1, z0, x0),
+ z0 = sveortb (z1, z0, x0))
+
+/*
+** eortb_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** eortb z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_s16_untied, svint16_t, int16_t,
+ z0 = sveortb_n_s16 (z1, z2, x0),
+ z0 = sveortb (z1, z2, x0))
+
+/*
+** eortb_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** eortb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s16_tied1, svint16_t,
+ z0 = sveortb_n_s16 (z0, z1, 11),
+ z0 = sveortb (z0, z1, 11))
+
+/*
+** eortb_11_s16_tied2:
+** mov (z[0-9]+\.h), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s16_tied2, svint16_t,
+ z0 = sveortb_n_s16 (z1, z0, 11),
+ z0 = sveortb (z1, z0, 11))
+
+/*
+** eortb_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** eortb z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s16_untied, svint16_t,
+ z0 = sveortb_n_s16 (z1, z2, 11),
+ z0 = sveortb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eortb_s32_tied1:
+** eortb z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s32_tied1, svint32_t,
+ z0 = sveortb_s32 (z0, z1, z2),
+ z0 = sveortb (z0, z1, z2))
+
+/*
+** eortb_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s32_tied2, svint32_t,
+ z0 = sveortb_s32 (z1, z0, z2),
+ z0 = sveortb (z1, z0, z2))
+
+/*
+** eortb_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s32_tied3, svint32_t,
+ z0 = sveortb_s32 (z1, z2, z0),
+ z0 = sveortb (z1, z2, z0))
+
+/*
+** eortb_s32_untied:
+** movprfx z0, z1
+** eortb z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s32_untied, svint32_t,
+ z0 = sveortb_s32 (z1, z2, z3),
+ z0 = sveortb (z1, z2, z3))
+
+/*
+** eortb_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** eortb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_s32_tied1, svint32_t, int32_t,
+ z0 = sveortb_n_s32 (z0, z1, x0),
+ z0 = sveortb (z0, z1, x0))
+
+/*
+** eortb_w0_s32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_s32_tied2, svint32_t, int32_t,
+ z0 = sveortb_n_s32 (z1, z0, x0),
+ z0 = sveortb (z1, z0, x0))
+
+/*
+** eortb_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** eortb z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_s32_untied, svint32_t, int32_t,
+ z0 = sveortb_n_s32 (z1, z2, x0),
+ z0 = sveortb (z1, z2, x0))
+
+/*
+** eortb_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** eortb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s32_tied1, svint32_t,
+ z0 = sveortb_n_s32 (z0, z1, 11),
+ z0 = sveortb (z0, z1, 11))
+
+/*
+** eortb_11_s32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s32_tied2, svint32_t,
+ z0 = sveortb_n_s32 (z1, z0, 11),
+ z0 = sveortb (z1, z0, 11))
+
+/*
+** eortb_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** eortb z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s32_untied, svint32_t,
+ z0 = sveortb_n_s32 (z1, z2, 11),
+ z0 = sveortb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eortb_s64_tied1:
+** eortb z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s64_tied1, svint64_t,
+ z0 = sveortb_s64 (z0, z1, z2),
+ z0 = sveortb (z0, z1, z2))
+
+/*
+** eortb_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eortb z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s64_tied2, svint64_t,
+ z0 = sveortb_s64 (z1, z0, z2),
+ z0 = sveortb (z1, z0, z2))
+
+/*
+** eortb_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eortb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s64_tied3, svint64_t,
+ z0 = sveortb_s64 (z1, z2, z0),
+ z0 = sveortb (z1, z2, z0))
+
+/*
+** eortb_s64_untied:
+** movprfx z0, z1
+** eortb z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s64_untied, svint64_t,
+ z0 = sveortb_s64 (z1, z2, z3),
+ z0 = sveortb (z1, z2, z3))
+
+/*
+** eortb_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** eortb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_x0_s64_tied1, svint64_t, int64_t,
+ z0 = sveortb_n_s64 (z0, z1, x0),
+ z0 = sveortb (z0, z1, x0))
+
+/*
+** eortb_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eortb z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_x0_s64_tied2, svint64_t, int64_t,
+ z0 = sveortb_n_s64 (z1, z0, x0),
+ z0 = sveortb (z1, z0, x0))
+
+/*
+** eortb_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** eortb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_x0_s64_untied, svint64_t, int64_t,
+ z0 = sveortb_n_s64 (z1, z2, x0),
+ z0 = sveortb (z1, z2, x0))
+
+/*
+** eortb_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** eortb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s64_tied1, svint64_t,
+ z0 = sveortb_n_s64 (z0, z1, 11),
+ z0 = sveortb (z0, z1, 11))
+
+/*
+** eortb_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eortb z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s64_tied2, svint64_t,
+ z0 = sveortb_n_s64 (z1, z0, 11),
+ z0 = sveortb (z1, z0, 11))
+
+/*
+** eortb_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** eortb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s64_untied, svint64_t,
+ z0 = sveortb_n_s64 (z1, z2, 11),
+ z0 = sveortb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eortb_s8_tied1:
+** eortb z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s8_tied1, svint8_t,
+ z0 = sveortb_s8 (z0, z1, z2),
+ z0 = sveortb (z0, z1, z2))
+
+/*
+** eortb_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.b, \1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s8_tied2, svint8_t,
+ z0 = sveortb_s8 (z1, z0, z2),
+ z0 = sveortb (z1, z0, z2))
+
+/*
+** eortb_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.b, z2\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s8_tied3, svint8_t,
+ z0 = sveortb_s8 (z1, z2, z0),
+ z0 = sveortb (z1, z2, z0))
+
+/*
+** eortb_s8_untied:
+** movprfx z0, z1
+** eortb z0\.b, z2\.b, z3\.b
+** ret
+*/
+TEST_UNIFORM_Z (eortb_s8_untied, svint8_t,
+ z0 = sveortb_s8 (z1, z2, z3),
+ z0 = sveortb (z1, z2, z3))
+
+/*
+** eortb_w0_s8_tied1:
+** mov (z[0-9]+\.b), w0
+** eortb z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_s8_tied1, svint8_t, int8_t,
+ z0 = sveortb_n_s8 (z0, z1, x0),
+ z0 = sveortb (z0, z1, x0))
+
+/*
+** eortb_w0_s8_tied2:
+** mov (z[0-9]+\.b), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_s8_tied2, svint8_t, int8_t,
+ z0 = sveortb_n_s8 (z1, z0, x0),
+ z0 = sveortb (z1, z0, x0))
+
+/*
+** eortb_w0_s8_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** eortb z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_s8_untied, svint8_t, int8_t,
+ z0 = sveortb_n_s8 (z1, z2, x0),
+ z0 = sveortb (z1, z2, x0))
+
+/*
+** eortb_11_s8_tied1:
+** mov (z[0-9]+\.b), #11
+** eortb z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s8_tied1, svint8_t,
+ z0 = sveortb_n_s8 (z0, z1, 11),
+ z0 = sveortb (z0, z1, 11))
+
+/*
+** eortb_11_s8_tied2:
+** mov (z[0-9]+\.b), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s8_tied2, svint8_t,
+ z0 = sveortb_n_s8 (z1, z0, 11),
+ z0 = sveortb (z1, z0, 11))
+
+/*
+** eortb_11_s8_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** eortb z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_s8_untied, svint8_t,
+ z0 = sveortb_n_s8 (z1, z2, 11),
+ z0 = sveortb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eortb_u16_tied1:
+** eortb z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u16_tied1, svuint16_t,
+ z0 = sveortb_u16 (z0, z1, z2),
+ z0 = sveortb (z0, z1, z2))
+
+/*
+** eortb_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.h, \1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u16_tied2, svuint16_t,
+ z0 = sveortb_u16 (z1, z0, z2),
+ z0 = sveortb (z1, z0, z2))
+
+/*
+** eortb_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.h, z2\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u16_tied3, svuint16_t,
+ z0 = sveortb_u16 (z1, z2, z0),
+ z0 = sveortb (z1, z2, z0))
+
+/*
+** eortb_u16_untied:
+** movprfx z0, z1
+** eortb z0\.h, z2\.h, z3\.h
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u16_untied, svuint16_t,
+ z0 = sveortb_u16 (z1, z2, z3),
+ z0 = sveortb (z1, z2, z3))
+
+/*
+** eortb_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** eortb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = sveortb_n_u16 (z0, z1, x0),
+ z0 = sveortb (z0, z1, x0))
+
+/*
+** eortb_w0_u16_tied2:
+** mov (z[0-9]+\.h), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_u16_tied2, svuint16_t, uint16_t,
+ z0 = sveortb_n_u16 (z1, z0, x0),
+ z0 = sveortb (z1, z0, x0))
+
+/*
+** eortb_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** eortb z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = sveortb_n_u16 (z1, z2, x0),
+ z0 = sveortb (z1, z2, x0))
+
+/*
+** eortb_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** eortb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u16_tied1, svuint16_t,
+ z0 = sveortb_n_u16 (z0, z1, 11),
+ z0 = sveortb (z0, z1, 11))
+
+/*
+** eortb_11_u16_tied2:
+** mov (z[0-9]+\.h), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u16_tied2, svuint16_t,
+ z0 = sveortb_n_u16 (z1, z0, 11),
+ z0 = sveortb (z1, z0, 11))
+
+/*
+** eortb_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** eortb z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u16_untied, svuint16_t,
+ z0 = sveortb_n_u16 (z1, z2, 11),
+ z0 = sveortb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eortb_u32_tied1:
+** eortb z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u32_tied1, svuint32_t,
+ z0 = sveortb_u32 (z0, z1, z2),
+ z0 = sveortb (z0, z1, z2))
+
+/*
+** eortb_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u32_tied2, svuint32_t,
+ z0 = sveortb_u32 (z1, z0, z2),
+ z0 = sveortb (z1, z0, z2))
+
+/*
+** eortb_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u32_tied3, svuint32_t,
+ z0 = sveortb_u32 (z1, z2, z0),
+ z0 = sveortb (z1, z2, z0))
+
+/*
+** eortb_u32_untied:
+** movprfx z0, z1
+** eortb z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u32_untied, svuint32_t,
+ z0 = sveortb_u32 (z1, z2, z3),
+ z0 = sveortb (z1, z2, z3))
+
+/*
+** eortb_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** eortb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = sveortb_n_u32 (z0, z1, x0),
+ z0 = sveortb (z0, z1, x0))
+
+/*
+** eortb_w0_u32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = sveortb_n_u32 (z1, z0, x0),
+ z0 = sveortb (z1, z0, x0))
+
+/*
+** eortb_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** eortb z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = sveortb_n_u32 (z1, z2, x0),
+ z0 = sveortb (z1, z2, x0))
+
+/*
+** eortb_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** eortb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u32_tied1, svuint32_t,
+ z0 = sveortb_n_u32 (z0, z1, 11),
+ z0 = sveortb (z0, z1, 11))
+
+/*
+** eortb_11_u32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u32_tied2, svuint32_t,
+ z0 = sveortb_n_u32 (z1, z0, 11),
+ z0 = sveortb (z1, z0, 11))
+
+/*
+** eortb_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** eortb z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u32_untied, svuint32_t,
+ z0 = sveortb_n_u32 (z1, z2, 11),
+ z0 = sveortb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eortb_u64_tied1:
+** eortb z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u64_tied1, svuint64_t,
+ z0 = sveortb_u64 (z0, z1, z2),
+ z0 = sveortb (z0, z1, z2))
+
+/*
+** eortb_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eortb z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u64_tied2, svuint64_t,
+ z0 = sveortb_u64 (z1, z0, z2),
+ z0 = sveortb (z1, z0, z2))
+
+/*
+** eortb_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eortb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u64_tied3, svuint64_t,
+ z0 = sveortb_u64 (z1, z2, z0),
+ z0 = sveortb (z1, z2, z0))
+
+/*
+** eortb_u64_untied:
+** movprfx z0, z1
+** eortb z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u64_untied, svuint64_t,
+ z0 = sveortb_u64 (z1, z2, z3),
+ z0 = sveortb (z1, z2, z3))
+
+/*
+** eortb_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** eortb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = sveortb_n_u64 (z0, z1, x0),
+ z0 = sveortb (z0, z1, x0))
+
+/*
+** eortb_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eortb z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = sveortb_n_u64 (z1, z0, x0),
+ z0 = sveortb (z1, z0, x0))
+
+/*
+** eortb_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** eortb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = sveortb_n_u64 (z1, z2, x0),
+ z0 = sveortb (z1, z2, x0))
+
+/*
+** eortb_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** eortb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u64_tied1, svuint64_t,
+ z0 = sveortb_n_u64 (z0, z1, 11),
+ z0 = sveortb (z0, z1, 11))
+
+/*
+** eortb_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** eortb z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u64_tied2, svuint64_t,
+ z0 = sveortb_n_u64 (z1, z0, 11),
+ z0 = sveortb (z1, z0, 11))
+
+/*
+** eortb_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** eortb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u64_untied, svuint64_t,
+ z0 = sveortb_n_u64 (z1, z2, 11),
+ z0 = sveortb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** eortb_u8_tied1:
+** eortb z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u8_tied1, svuint8_t,
+ z0 = sveortb_u8 (z0, z1, z2),
+ z0 = sveortb (z0, z1, z2))
+
+/*
+** eortb_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.b, \1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u8_tied2, svuint8_t,
+ z0 = sveortb_u8 (z1, z0, z2),
+ z0 = sveortb (z1, z0, z2))
+
+/*
+** eortb_u8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.b, z2\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u8_tied3, svuint8_t,
+ z0 = sveortb_u8 (z1, z2, z0),
+ z0 = sveortb (z1, z2, z0))
+
+/*
+** eortb_u8_untied:
+** movprfx z0, z1
+** eortb z0\.b, z2\.b, z3\.b
+** ret
+*/
+TEST_UNIFORM_Z (eortb_u8_untied, svuint8_t,
+ z0 = sveortb_u8 (z1, z2, z3),
+ z0 = sveortb (z1, z2, z3))
+
+/*
+** eortb_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** eortb z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = sveortb_n_u8 (z0, z1, x0),
+ z0 = sveortb (z0, z1, x0))
+
+/*
+** eortb_w0_u8_tied2:
+** mov (z[0-9]+\.b), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_u8_tied2, svuint8_t, uint8_t,
+ z0 = sveortb_n_u8 (z1, z0, x0),
+ z0 = sveortb (z1, z0, x0))
+
+/*
+** eortb_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** eortb z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (eortb_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = sveortb_n_u8 (z1, z2, x0),
+ z0 = sveortb (z1, z2, x0))
+
+/*
+** eortb_11_u8_tied1:
+** mov (z[0-9]+\.b), #11
+** eortb z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u8_tied1, svuint8_t,
+ z0 = sveortb_n_u8 (z0, z1, 11),
+ z0 = sveortb (z0, z1, 11))
+
+/*
+** eortb_11_u8_tied2:
+** mov (z[0-9]+\.b), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** eortb z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u8_tied2, svuint8_t,
+ z0 = sveortb_n_u8 (z1, z0, 11),
+ z0 = sveortb (z1, z0, 11))
+
+/*
+** eortb_11_u8_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** eortb z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (eortb_11_u8_untied, svuint8_t,
+ z0 = sveortb_n_u8 (z1, z2, 11),
+ z0 = sveortb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hadd_s16_m_tied1:
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s16_m_tied1, svint16_t,
+ z0 = svhadd_s16_m (p0, z0, z1),
+ z0 = svhadd_m (p0, z0, z1))
+
+/*
+** hadd_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** shadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s16_m_tied2, svint16_t,
+ z0 = svhadd_s16_m (p0, z1, z0),
+ z0 = svhadd_m (p0, z1, z0))
+
+/*
+** hadd_s16_m_untied:
+** movprfx z0, z1
+** shadd z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s16_m_untied, svint16_t,
+ z0 = svhadd_s16_m (p0, z1, z2),
+ z0 = svhadd_m (p0, z1, z2))
+
+/*
+** hadd_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** shadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svhadd_n_s16_m (p0, z0, x0),
+ z0 = svhadd_m (p0, z0, x0))
+
+/*
+** hadd_w0_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** shadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svhadd_n_s16_m (p0, z1, x0),
+ z0 = svhadd_m (p0, z1, x0))
+
+/*
+** hadd_11_s16_m_tied1:
+** mov (z[0-9]+\.h), #11
+** shadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s16_m_tied1, svint16_t,
+ z0 = svhadd_n_s16_m (p0, z0, 11),
+ z0 = svhadd_m (p0, z0, 11))
+
+/*
+** hadd_11_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** shadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s16_m_untied, svint16_t,
+ z0 = svhadd_n_s16_m (p0, z1, 11),
+ z0 = svhadd_m (p0, z1, 11))
+
+/*
+** hadd_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s16_z_tied1, svint16_t,
+ z0 = svhadd_s16_z (p0, z0, z1),
+ z0 = svhadd_z (p0, z0, z1))
+
+/*
+** hadd_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s16_z_tied2, svint16_t,
+ z0 = svhadd_s16_z (p0, z1, z0),
+ z0 = svhadd_z (p0, z1, z0))
+
+/*
+** hadd_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** shadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s16_z_untied, svint16_t,
+ z0 = svhadd_s16_z (p0, z1, z2),
+ z0 = svhadd_z (p0, z1, z2))
+
+/*
+** hadd_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** shadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svhadd_n_s16_z (p0, z0, x0),
+ z0 = svhadd_z (p0, z0, x0))
+
+/*
+** hadd_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** shadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svhadd_n_s16_z (p0, z1, x0),
+ z0 = svhadd_z (p0, z1, x0))
+
+/*
+** hadd_11_s16_z_tied1:
+** mov (z[0-9]+\.h), #11
+** movprfx z0\.h, p0/z, z0\.h
+** shadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s16_z_tied1, svint16_t,
+ z0 = svhadd_n_s16_z (p0, z0, 11),
+ z0 = svhadd_z (p0, z0, 11))
+
+/*
+** hadd_11_s16_z_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** shadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s16_z_untied, svint16_t,
+ z0 = svhadd_n_s16_z (p0, z1, 11),
+ z0 = svhadd_z (p0, z1, 11))
+
+/*
+** hadd_s16_x_tied1:
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s16_x_tied1, svint16_t,
+ z0 = svhadd_s16_x (p0, z0, z1),
+ z0 = svhadd_x (p0, z0, z1))
+
+/*
+** hadd_s16_x_tied2:
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s16_x_tied2, svint16_t,
+ z0 = svhadd_s16_x (p0, z1, z0),
+ z0 = svhadd_x (p0, z1, z0))
+
+/*
+** hadd_s16_x_untied:
+** (
+** movprfx z0, z1
+** shadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0, z2
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s16_x_untied, svint16_t,
+ z0 = svhadd_s16_x (p0, z1, z2),
+ z0 = svhadd_x (p0, z1, z2))
+
+/*
+** hadd_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** shadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svhadd_n_s16_x (p0, z0, x0),
+ z0 = svhadd_x (p0, z0, x0))
+
+/*
+** hadd_w0_s16_x_untied:
+** mov z0\.h, w0
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svhadd_n_s16_x (p0, z1, x0),
+ z0 = svhadd_x (p0, z1, x0))
+
+/*
+** hadd_11_s16_x_tied1:
+** mov (z[0-9]+\.h), #11
+** shadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s16_x_tied1, svint16_t,
+ z0 = svhadd_n_s16_x (p0, z0, 11),
+ z0 = svhadd_x (p0, z0, 11))
+
+/*
+** hadd_11_s16_x_untied:
+** mov z0\.h, #11
+** shadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s16_x_untied, svint16_t,
+ z0 = svhadd_n_s16_x (p0, z1, 11),
+ z0 = svhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hadd_s32_m_tied1:
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s32_m_tied1, svint32_t,
+ z0 = svhadd_s32_m (p0, z0, z1),
+ z0 = svhadd_m (p0, z0, z1))
+
+/*
+** hadd_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** shadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s32_m_tied2, svint32_t,
+ z0 = svhadd_s32_m (p0, z1, z0),
+ z0 = svhadd_m (p0, z1, z0))
+
+/*
+** hadd_s32_m_untied:
+** movprfx z0, z1
+** shadd z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s32_m_untied, svint32_t,
+ z0 = svhadd_s32_m (p0, z1, z2),
+ z0 = svhadd_m (p0, z1, z2))
+
+/*
+** hadd_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** shadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svhadd_n_s32_m (p0, z0, x0),
+ z0 = svhadd_m (p0, z0, x0))
+
+/*
+** hadd_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** shadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svhadd_n_s32_m (p0, z1, x0),
+ z0 = svhadd_m (p0, z1, x0))
+
+/*
+** hadd_11_s32_m_tied1:
+** mov (z[0-9]+\.s), #11
+** shadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s32_m_tied1, svint32_t,
+ z0 = svhadd_n_s32_m (p0, z0, 11),
+ z0 = svhadd_m (p0, z0, 11))
+
+/*
+** hadd_11_s32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** shadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s32_m_untied, svint32_t,
+ z0 = svhadd_n_s32_m (p0, z1, 11),
+ z0 = svhadd_m (p0, z1, 11))
+
+/*
+** hadd_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s32_z_tied1, svint32_t,
+ z0 = svhadd_s32_z (p0, z0, z1),
+ z0 = svhadd_z (p0, z0, z1))
+
+/*
+** hadd_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s32_z_tied2, svint32_t,
+ z0 = svhadd_s32_z (p0, z1, z0),
+ z0 = svhadd_z (p0, z1, z0))
+
+/*
+** hadd_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** shadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s32_z_untied, svint32_t,
+ z0 = svhadd_s32_z (p0, z1, z2),
+ z0 = svhadd_z (p0, z1, z2))
+
+/*
+** hadd_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** shadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svhadd_n_s32_z (p0, z0, x0),
+ z0 = svhadd_z (p0, z0, x0))
+
+/*
+** hadd_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** shadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svhadd_n_s32_z (p0, z1, x0),
+ z0 = svhadd_z (p0, z1, x0))
+
+/*
+** hadd_11_s32_z_tied1:
+** mov (z[0-9]+\.s), #11
+** movprfx z0\.s, p0/z, z0\.s
+** shadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s32_z_tied1, svint32_t,
+ z0 = svhadd_n_s32_z (p0, z0, 11),
+ z0 = svhadd_z (p0, z0, 11))
+
+/*
+** hadd_11_s32_z_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** shadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s32_z_untied, svint32_t,
+ z0 = svhadd_n_s32_z (p0, z1, 11),
+ z0 = svhadd_z (p0, z1, 11))
+
+/*
+** hadd_s32_x_tied1:
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s32_x_tied1, svint32_t,
+ z0 = svhadd_s32_x (p0, z0, z1),
+ z0 = svhadd_x (p0, z0, z1))
+
+/*
+** hadd_s32_x_tied2:
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s32_x_tied2, svint32_t,
+ z0 = svhadd_s32_x (p0, z1, z0),
+ z0 = svhadd_x (p0, z1, z0))
+
+/*
+** hadd_s32_x_untied:
+** (
+** movprfx z0, z1
+** shadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0, z2
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s32_x_untied, svint32_t,
+ z0 = svhadd_s32_x (p0, z1, z2),
+ z0 = svhadd_x (p0, z1, z2))
+
+/*
+** hadd_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** shadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svhadd_n_s32_x (p0, z0, x0),
+ z0 = svhadd_x (p0, z0, x0))
+
+/*
+** hadd_w0_s32_x_untied:
+** mov z0\.s, w0
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svhadd_n_s32_x (p0, z1, x0),
+ z0 = svhadd_x (p0, z1, x0))
+
+/*
+** hadd_11_s32_x_tied1:
+** mov (z[0-9]+\.s), #11
+** shadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s32_x_tied1, svint32_t,
+ z0 = svhadd_n_s32_x (p0, z0, 11),
+ z0 = svhadd_x (p0, z0, 11))
+
+/*
+** hadd_11_s32_x_untied:
+** mov z0\.s, #11
+** shadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s32_x_untied, svint32_t,
+ z0 = svhadd_n_s32_x (p0, z1, 11),
+ z0 = svhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hadd_s64_m_tied1:
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s64_m_tied1, svint64_t,
+ z0 = svhadd_s64_m (p0, z0, z1),
+ z0 = svhadd_m (p0, z0, z1))
+
+/*
+** hadd_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** shadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s64_m_tied2, svint64_t,
+ z0 = svhadd_s64_m (p0, z1, z0),
+ z0 = svhadd_m (p0, z1, z0))
+
+/*
+** hadd_s64_m_untied:
+** movprfx z0, z1
+** shadd z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s64_m_untied, svint64_t,
+ z0 = svhadd_s64_m (p0, z1, z2),
+ z0 = svhadd_m (p0, z1, z2))
+
+/*
+** hadd_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** shadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svhadd_n_s64_m (p0, z0, x0),
+ z0 = svhadd_m (p0, z0, x0))
+
+/*
+** hadd_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** shadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svhadd_n_s64_m (p0, z1, x0),
+ z0 = svhadd_m (p0, z1, x0))
+
+/*
+** hadd_11_s64_m_tied1:
+** mov (z[0-9]+\.d), #11
+** shadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s64_m_tied1, svint64_t,
+ z0 = svhadd_n_s64_m (p0, z0, 11),
+ z0 = svhadd_m (p0, z0, 11))
+
+/*
+** hadd_11_s64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** shadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s64_m_untied, svint64_t,
+ z0 = svhadd_n_s64_m (p0, z1, 11),
+ z0 = svhadd_m (p0, z1, 11))
+
+/*
+** hadd_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s64_z_tied1, svint64_t,
+ z0 = svhadd_s64_z (p0, z0, z1),
+ z0 = svhadd_z (p0, z0, z1))
+
+/*
+** hadd_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s64_z_tied2, svint64_t,
+ z0 = svhadd_s64_z (p0, z1, z0),
+ z0 = svhadd_z (p0, z1, z0))
+
+/*
+** hadd_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** shadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s64_z_untied, svint64_t,
+ z0 = svhadd_s64_z (p0, z1, z2),
+ z0 = svhadd_z (p0, z1, z2))
+
+/*
+** hadd_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** shadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svhadd_n_s64_z (p0, z0, x0),
+ z0 = svhadd_z (p0, z0, x0))
+
+/*
+** hadd_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** shadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svhadd_n_s64_z (p0, z1, x0),
+ z0 = svhadd_z (p0, z1, x0))
+
+/*
+** hadd_11_s64_z_tied1:
+** mov (z[0-9]+\.d), #11
+** movprfx z0\.d, p0/z, z0\.d
+** shadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s64_z_tied1, svint64_t,
+ z0 = svhadd_n_s64_z (p0, z0, 11),
+ z0 = svhadd_z (p0, z0, 11))
+
+/*
+** hadd_11_s64_z_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** shadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s64_z_untied, svint64_t,
+ z0 = svhadd_n_s64_z (p0, z1, 11),
+ z0 = svhadd_z (p0, z1, 11))
+
+/*
+** hadd_s64_x_tied1:
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s64_x_tied1, svint64_t,
+ z0 = svhadd_s64_x (p0, z0, z1),
+ z0 = svhadd_x (p0, z0, z1))
+
+/*
+** hadd_s64_x_tied2:
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s64_x_tied2, svint64_t,
+ z0 = svhadd_s64_x (p0, z1, z0),
+ z0 = svhadd_x (p0, z1, z0))
+
+/*
+** hadd_s64_x_untied:
+** (
+** movprfx z0, z1
+** shadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0, z2
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s64_x_untied, svint64_t,
+ z0 = svhadd_s64_x (p0, z1, z2),
+ z0 = svhadd_x (p0, z1, z2))
+
+/*
+** hadd_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** shadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svhadd_n_s64_x (p0, z0, x0),
+ z0 = svhadd_x (p0, z0, x0))
+
+/*
+** hadd_x0_s64_x_untied:
+** mov z0\.d, x0
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svhadd_n_s64_x (p0, z1, x0),
+ z0 = svhadd_x (p0, z1, x0))
+
+/*
+** hadd_11_s64_x_tied1:
+** mov (z[0-9]+\.d), #11
+** shadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s64_x_tied1, svint64_t,
+ z0 = svhadd_n_s64_x (p0, z0, 11),
+ z0 = svhadd_x (p0, z0, 11))
+
+/*
+** hadd_11_s64_x_untied:
+** mov z0\.d, #11
+** shadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s64_x_untied, svint64_t,
+ z0 = svhadd_n_s64_x (p0, z1, 11),
+ z0 = svhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hadd_s8_m_tied1:
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s8_m_tied1, svint8_t,
+ z0 = svhadd_s8_m (p0, z0, z1),
+ z0 = svhadd_m (p0, z0, z1))
+
+/*
+** hadd_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** shadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s8_m_tied2, svint8_t,
+ z0 = svhadd_s8_m (p0, z1, z0),
+ z0 = svhadd_m (p0, z1, z0))
+
+/*
+** hadd_s8_m_untied:
+** movprfx z0, z1
+** shadd z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s8_m_untied, svint8_t,
+ z0 = svhadd_s8_m (p0, z1, z2),
+ z0 = svhadd_m (p0, z1, z2))
+
+/*
+** hadd_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** shadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svhadd_n_s8_m (p0, z0, x0),
+ z0 = svhadd_m (p0, z0, x0))
+
+/*
+** hadd_w0_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** shadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svhadd_n_s8_m (p0, z1, x0),
+ z0 = svhadd_m (p0, z1, x0))
+
+/*
+** hadd_11_s8_m_tied1:
+** mov (z[0-9]+\.b), #11
+** shadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s8_m_tied1, svint8_t,
+ z0 = svhadd_n_s8_m (p0, z0, 11),
+ z0 = svhadd_m (p0, z0, 11))
+
+/*
+** hadd_11_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** shadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s8_m_untied, svint8_t,
+ z0 = svhadd_n_s8_m (p0, z1, 11),
+ z0 = svhadd_m (p0, z1, 11))
+
+/*
+** hadd_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s8_z_tied1, svint8_t,
+ z0 = svhadd_s8_z (p0, z0, z1),
+ z0 = svhadd_z (p0, z0, z1))
+
+/*
+** hadd_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s8_z_tied2, svint8_t,
+ z0 = svhadd_s8_z (p0, z1, z0),
+ z0 = svhadd_z (p0, z1, z0))
+
+/*
+** hadd_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** shadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s8_z_untied, svint8_t,
+ z0 = svhadd_s8_z (p0, z1, z2),
+ z0 = svhadd_z (p0, z1, z2))
+
+/*
+** hadd_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** shadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svhadd_n_s8_z (p0, z0, x0),
+ z0 = svhadd_z (p0, z0, x0))
+
+/*
+** hadd_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** shadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svhadd_n_s8_z (p0, z1, x0),
+ z0 = svhadd_z (p0, z1, x0))
+
+/*
+** hadd_11_s8_z_tied1:
+** mov (z[0-9]+\.b), #11
+** movprfx z0\.b, p0/z, z0\.b
+** shadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s8_z_tied1, svint8_t,
+ z0 = svhadd_n_s8_z (p0, z0, 11),
+ z0 = svhadd_z (p0, z0, 11))
+
+/*
+** hadd_11_s8_z_untied:
+** mov (z[0-9]+\.b), #11
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** shadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s8_z_untied, svint8_t,
+ z0 = svhadd_n_s8_z (p0, z1, 11),
+ z0 = svhadd_z (p0, z1, 11))
+
+/*
+** hadd_s8_x_tied1:
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s8_x_tied1, svint8_t,
+ z0 = svhadd_s8_x (p0, z0, z1),
+ z0 = svhadd_x (p0, z0, z1))
+
+/*
+** hadd_s8_x_tied2:
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s8_x_tied2, svint8_t,
+ z0 = svhadd_s8_x (p0, z1, z0),
+ z0 = svhadd_x (p0, z1, z0))
+
+/*
+** hadd_s8_x_untied:
+** (
+** movprfx z0, z1
+** shadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0, z2
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_s8_x_untied, svint8_t,
+ z0 = svhadd_s8_x (p0, z1, z2),
+ z0 = svhadd_x (p0, z1, z2))
+
+/*
+** hadd_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** shadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svhadd_n_s8_x (p0, z0, x0),
+ z0 = svhadd_x (p0, z0, x0))
+
+/*
+** hadd_w0_s8_x_untied:
+** mov z0\.b, w0
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svhadd_n_s8_x (p0, z1, x0),
+ z0 = svhadd_x (p0, z1, x0))
+
+/*
+** hadd_11_s8_x_tied1:
+** mov (z[0-9]+\.b), #11
+** shadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s8_x_tied1, svint8_t,
+ z0 = svhadd_n_s8_x (p0, z0, 11),
+ z0 = svhadd_x (p0, z0, 11))
+
+/*
+** hadd_11_s8_x_untied:
+** mov z0\.b, #11
+** shadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_s8_x_untied, svint8_t,
+ z0 = svhadd_n_s8_x (p0, z1, 11),
+ z0 = svhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hadd_u16_m_tied1:
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u16_m_tied1, svuint16_t,
+ z0 = svhadd_u16_m (p0, z0, z1),
+ z0 = svhadd_m (p0, z0, z1))
+
+/*
+** hadd_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uhadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u16_m_tied2, svuint16_t,
+ z0 = svhadd_u16_m (p0, z1, z0),
+ z0 = svhadd_m (p0, z1, z0))
+
+/*
+** hadd_u16_m_untied:
+** movprfx z0, z1
+** uhadd z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u16_m_untied, svuint16_t,
+ z0 = svhadd_u16_m (p0, z1, z2),
+ z0 = svhadd_m (p0, z1, z2))
+
+/*
+** hadd_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** uhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u16_m_tied1, svuint16_t, uint16_t,
+ z0 = svhadd_n_u16_m (p0, z0, x0),
+ z0 = svhadd_m (p0, z0, x0))
+
+/*
+** hadd_w0_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u16_m_untied, svuint16_t, uint16_t,
+ z0 = svhadd_n_u16_m (p0, z1, x0),
+ z0 = svhadd_m (p0, z1, x0))
+
+/*
+** hadd_11_u16_m_tied1:
+** mov (z[0-9]+\.h), #11
+** uhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u16_m_tied1, svuint16_t,
+ z0 = svhadd_n_u16_m (p0, z0, 11),
+ z0 = svhadd_m (p0, z0, 11))
+
+/*
+** hadd_11_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** uhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u16_m_untied, svuint16_t,
+ z0 = svhadd_n_u16_m (p0, z1, 11),
+ z0 = svhadd_m (p0, z1, 11))
+
+/*
+** hadd_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u16_z_tied1, svuint16_t,
+ z0 = svhadd_u16_z (p0, z0, z1),
+ z0 = svhadd_z (p0, z0, z1))
+
+/*
+** hadd_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u16_z_tied2, svuint16_t,
+ z0 = svhadd_u16_z (p0, z1, z0),
+ z0 = svhadd_z (p0, z1, z0))
+
+/*
+** hadd_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uhadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u16_z_untied, svuint16_t,
+ z0 = svhadd_u16_z (p0, z1, z2),
+ z0 = svhadd_z (p0, z1, z2))
+
+/*
+** hadd_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** uhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u16_z_tied1, svuint16_t, uint16_t,
+ z0 = svhadd_n_u16_z (p0, z0, x0),
+ z0 = svhadd_z (p0, z0, x0))
+
+/*
+** hadd_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uhadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u16_z_untied, svuint16_t, uint16_t,
+ z0 = svhadd_n_u16_z (p0, z1, x0),
+ z0 = svhadd_z (p0, z1, x0))
+
+/*
+** hadd_11_u16_z_tied1:
+** mov (z[0-9]+\.h), #11
+** movprfx z0\.h, p0/z, z0\.h
+** uhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u16_z_tied1, svuint16_t,
+ z0 = svhadd_n_u16_z (p0, z0, 11),
+ z0 = svhadd_z (p0, z0, 11))
+
+/*
+** hadd_11_u16_z_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uhadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u16_z_untied, svuint16_t,
+ z0 = svhadd_n_u16_z (p0, z1, 11),
+ z0 = svhadd_z (p0, z1, 11))
+
+/*
+** hadd_u16_x_tied1:
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u16_x_tied1, svuint16_t,
+ z0 = svhadd_u16_x (p0, z0, z1),
+ z0 = svhadd_x (p0, z0, z1))
+
+/*
+** hadd_u16_x_tied2:
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u16_x_tied2, svuint16_t,
+ z0 = svhadd_u16_x (p0, z1, z0),
+ z0 = svhadd_x (p0, z1, z0))
+
+/*
+** hadd_u16_x_untied:
+** (
+** movprfx z0, z1
+** uhadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0, z2
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u16_x_untied, svuint16_t,
+ z0 = svhadd_u16_x (p0, z1, z2),
+ z0 = svhadd_x (p0, z1, z2))
+
+/*
+** hadd_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** uhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u16_x_tied1, svuint16_t, uint16_t,
+ z0 = svhadd_n_u16_x (p0, z0, x0),
+ z0 = svhadd_x (p0, z0, x0))
+
+/*
+** hadd_w0_u16_x_untied:
+** mov z0\.h, w0
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u16_x_untied, svuint16_t, uint16_t,
+ z0 = svhadd_n_u16_x (p0, z1, x0),
+ z0 = svhadd_x (p0, z1, x0))
+
+/*
+** hadd_11_u16_x_tied1:
+** mov (z[0-9]+\.h), #11
+** uhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u16_x_tied1, svuint16_t,
+ z0 = svhadd_n_u16_x (p0, z0, 11),
+ z0 = svhadd_x (p0, z0, 11))
+
+/*
+** hadd_11_u16_x_untied:
+** mov z0\.h, #11
+** uhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u16_x_untied, svuint16_t,
+ z0 = svhadd_n_u16_x (p0, z1, 11),
+ z0 = svhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hadd_u32_m_tied1:
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u32_m_tied1, svuint32_t,
+ z0 = svhadd_u32_m (p0, z0, z1),
+ z0 = svhadd_m (p0, z0, z1))
+
+/*
+** hadd_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uhadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u32_m_tied2, svuint32_t,
+ z0 = svhadd_u32_m (p0, z1, z0),
+ z0 = svhadd_m (p0, z1, z0))
+
+/*
+** hadd_u32_m_untied:
+** movprfx z0, z1
+** uhadd z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u32_m_untied, svuint32_t,
+ z0 = svhadd_u32_m (p0, z1, z2),
+ z0 = svhadd_m (p0, z1, z2))
+
+/*
+** hadd_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** uhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u32_m_tied1, svuint32_t, uint32_t,
+ z0 = svhadd_n_u32_m (p0, z0, x0),
+ z0 = svhadd_m (p0, z0, x0))
+
+/*
+** hadd_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u32_m_untied, svuint32_t, uint32_t,
+ z0 = svhadd_n_u32_m (p0, z1, x0),
+ z0 = svhadd_m (p0, z1, x0))
+
+/*
+** hadd_11_u32_m_tied1:
+** mov (z[0-9]+\.s), #11
+** uhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u32_m_tied1, svuint32_t,
+ z0 = svhadd_n_u32_m (p0, z0, 11),
+ z0 = svhadd_m (p0, z0, 11))
+
+/*
+** hadd_11_u32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** uhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u32_m_untied, svuint32_t,
+ z0 = svhadd_n_u32_m (p0, z1, 11),
+ z0 = svhadd_m (p0, z1, 11))
+
+/*
+** hadd_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u32_z_tied1, svuint32_t,
+ z0 = svhadd_u32_z (p0, z0, z1),
+ z0 = svhadd_z (p0, z0, z1))
+
+/*
+** hadd_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u32_z_tied2, svuint32_t,
+ z0 = svhadd_u32_z (p0, z1, z0),
+ z0 = svhadd_z (p0, z1, z0))
+
+/*
+** hadd_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uhadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u32_z_untied, svuint32_t,
+ z0 = svhadd_u32_z (p0, z1, z2),
+ z0 = svhadd_z (p0, z1, z2))
+
+/*
+** hadd_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** uhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u32_z_tied1, svuint32_t, uint32_t,
+ z0 = svhadd_n_u32_z (p0, z0, x0),
+ z0 = svhadd_z (p0, z0, x0))
+
+/*
+** hadd_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uhadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u32_z_untied, svuint32_t, uint32_t,
+ z0 = svhadd_n_u32_z (p0, z1, x0),
+ z0 = svhadd_z (p0, z1, x0))
+
+/*
+** hadd_11_u32_z_tied1:
+** mov (z[0-9]+\.s), #11
+** movprfx z0\.s, p0/z, z0\.s
+** uhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u32_z_tied1, svuint32_t,
+ z0 = svhadd_n_u32_z (p0, z0, 11),
+ z0 = svhadd_z (p0, z0, 11))
+
+/*
+** hadd_11_u32_z_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uhadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u32_z_untied, svuint32_t,
+ z0 = svhadd_n_u32_z (p0, z1, 11),
+ z0 = svhadd_z (p0, z1, 11))
+
+/*
+** hadd_u32_x_tied1:
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u32_x_tied1, svuint32_t,
+ z0 = svhadd_u32_x (p0, z0, z1),
+ z0 = svhadd_x (p0, z0, z1))
+
+/*
+** hadd_u32_x_tied2:
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u32_x_tied2, svuint32_t,
+ z0 = svhadd_u32_x (p0, z1, z0),
+ z0 = svhadd_x (p0, z1, z0))
+
+/*
+** hadd_u32_x_untied:
+** (
+** movprfx z0, z1
+** uhadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0, z2
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u32_x_untied, svuint32_t,
+ z0 = svhadd_u32_x (p0, z1, z2),
+ z0 = svhadd_x (p0, z1, z2))
+
+/*
+** hadd_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** uhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u32_x_tied1, svuint32_t, uint32_t,
+ z0 = svhadd_n_u32_x (p0, z0, x0),
+ z0 = svhadd_x (p0, z0, x0))
+
+/*
+** hadd_w0_u32_x_untied:
+** mov z0\.s, w0
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u32_x_untied, svuint32_t, uint32_t,
+ z0 = svhadd_n_u32_x (p0, z1, x0),
+ z0 = svhadd_x (p0, z1, x0))
+
+/*
+** hadd_11_u32_x_tied1:
+** mov (z[0-9]+\.s), #11
+** uhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u32_x_tied1, svuint32_t,
+ z0 = svhadd_n_u32_x (p0, z0, 11),
+ z0 = svhadd_x (p0, z0, 11))
+
+/*
+** hadd_11_u32_x_untied:
+** mov z0\.s, #11
+** uhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u32_x_untied, svuint32_t,
+ z0 = svhadd_n_u32_x (p0, z1, 11),
+ z0 = svhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hadd_u64_m_tied1:
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u64_m_tied1, svuint64_t,
+ z0 = svhadd_u64_m (p0, z0, z1),
+ z0 = svhadd_m (p0, z0, z1))
+
+/*
+** hadd_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u64_m_tied2, svuint64_t,
+ z0 = svhadd_u64_m (p0, z1, z0),
+ z0 = svhadd_m (p0, z1, z0))
+
+/*
+** hadd_u64_m_untied:
+** movprfx z0, z1
+** uhadd z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u64_m_untied, svuint64_t,
+ z0 = svhadd_u64_m (p0, z1, z2),
+ z0 = svhadd_m (p0, z1, z2))
+
+/*
+** hadd_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** uhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_u64_m_tied1, svuint64_t, uint64_t,
+ z0 = svhadd_n_u64_m (p0, z0, x0),
+ z0 = svhadd_m (p0, z0, x0))
+
+/*
+** hadd_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** uhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_u64_m_untied, svuint64_t, uint64_t,
+ z0 = svhadd_n_u64_m (p0, z1, x0),
+ z0 = svhadd_m (p0, z1, x0))
+
+/*
+** hadd_11_u64_m_tied1:
+** mov (z[0-9]+\.d), #11
+** uhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u64_m_tied1, svuint64_t,
+ z0 = svhadd_n_u64_m (p0, z0, 11),
+ z0 = svhadd_m (p0, z0, 11))
+
+/*
+** hadd_11_u64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** uhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u64_m_untied, svuint64_t,
+ z0 = svhadd_n_u64_m (p0, z1, 11),
+ z0 = svhadd_m (p0, z1, 11))
+
+/*
+** hadd_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u64_z_tied1, svuint64_t,
+ z0 = svhadd_u64_z (p0, z0, z1),
+ z0 = svhadd_z (p0, z0, z1))
+
+/*
+** hadd_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u64_z_tied2, svuint64_t,
+ z0 = svhadd_u64_z (p0, z1, z0),
+ z0 = svhadd_z (p0, z1, z0))
+
+/*
+** hadd_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uhadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u64_z_untied, svuint64_t,
+ z0 = svhadd_u64_z (p0, z1, z2),
+ z0 = svhadd_z (p0, z1, z2))
+
+/*
+** hadd_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** uhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_u64_z_tied1, svuint64_t, uint64_t,
+ z0 = svhadd_n_u64_z (p0, z0, x0),
+ z0 = svhadd_z (p0, z0, x0))
+
+/*
+** hadd_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uhadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_u64_z_untied, svuint64_t, uint64_t,
+ z0 = svhadd_n_u64_z (p0, z1, x0),
+ z0 = svhadd_z (p0, z1, x0))
+
+/*
+** hadd_11_u64_z_tied1:
+** mov (z[0-9]+\.d), #11
+** movprfx z0\.d, p0/z, z0\.d
+** uhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u64_z_tied1, svuint64_t,
+ z0 = svhadd_n_u64_z (p0, z0, 11),
+ z0 = svhadd_z (p0, z0, 11))
+
+/*
+** hadd_11_u64_z_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uhadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u64_z_untied, svuint64_t,
+ z0 = svhadd_n_u64_z (p0, z1, 11),
+ z0 = svhadd_z (p0, z1, 11))
+
+/*
+** hadd_u64_x_tied1:
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u64_x_tied1, svuint64_t,
+ z0 = svhadd_u64_x (p0, z0, z1),
+ z0 = svhadd_x (p0, z0, z1))
+
+/*
+** hadd_u64_x_tied2:
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u64_x_tied2, svuint64_t,
+ z0 = svhadd_u64_x (p0, z1, z0),
+ z0 = svhadd_x (p0, z1, z0))
+
+/*
+** hadd_u64_x_untied:
+** (
+** movprfx z0, z1
+** uhadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0, z2
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u64_x_untied, svuint64_t,
+ z0 = svhadd_u64_x (p0, z1, z2),
+ z0 = svhadd_x (p0, z1, z2))
+
+/*
+** hadd_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** uhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_u64_x_tied1, svuint64_t, uint64_t,
+ z0 = svhadd_n_u64_x (p0, z0, x0),
+ z0 = svhadd_x (p0, z0, x0))
+
+/*
+** hadd_x0_u64_x_untied:
+** mov z0\.d, x0
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_x0_u64_x_untied, svuint64_t, uint64_t,
+ z0 = svhadd_n_u64_x (p0, z1, x0),
+ z0 = svhadd_x (p0, z1, x0))
+
+/*
+** hadd_11_u64_x_tied1:
+** mov (z[0-9]+\.d), #11
+** uhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u64_x_tied1, svuint64_t,
+ z0 = svhadd_n_u64_x (p0, z0, 11),
+ z0 = svhadd_x (p0, z0, 11))
+
+/*
+** hadd_11_u64_x_untied:
+** mov z0\.d, #11
+** uhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u64_x_untied, svuint64_t,
+ z0 = svhadd_n_u64_x (p0, z1, 11),
+ z0 = svhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hadd_u8_m_tied1:
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u8_m_tied1, svuint8_t,
+ z0 = svhadd_u8_m (p0, z0, z1),
+ z0 = svhadd_m (p0, z0, z1))
+
+/*
+** hadd_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uhadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u8_m_tied2, svuint8_t,
+ z0 = svhadd_u8_m (p0, z1, z0),
+ z0 = svhadd_m (p0, z1, z0))
+
+/*
+** hadd_u8_m_untied:
+** movprfx z0, z1
+** uhadd z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u8_m_untied, svuint8_t,
+ z0 = svhadd_u8_m (p0, z1, z2),
+ z0 = svhadd_m (p0, z1, z2))
+
+/*
+** hadd_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** uhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u8_m_tied1, svuint8_t, uint8_t,
+ z0 = svhadd_n_u8_m (p0, z0, x0),
+ z0 = svhadd_m (p0, z0, x0))
+
+/*
+** hadd_w0_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u8_m_untied, svuint8_t, uint8_t,
+ z0 = svhadd_n_u8_m (p0, z1, x0),
+ z0 = svhadd_m (p0, z1, x0))
+
+/*
+** hadd_11_u8_m_tied1:
+** mov (z[0-9]+\.b), #11
+** uhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u8_m_tied1, svuint8_t,
+ z0 = svhadd_n_u8_m (p0, z0, 11),
+ z0 = svhadd_m (p0, z0, 11))
+
+/*
+** hadd_11_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** uhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u8_m_untied, svuint8_t,
+ z0 = svhadd_n_u8_m (p0, z1, 11),
+ z0 = svhadd_m (p0, z1, 11))
+
+/*
+** hadd_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u8_z_tied1, svuint8_t,
+ z0 = svhadd_u8_z (p0, z0, z1),
+ z0 = svhadd_z (p0, z0, z1))
+
+/*
+** hadd_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u8_z_tied2, svuint8_t,
+ z0 = svhadd_u8_z (p0, z1, z0),
+ z0 = svhadd_z (p0, z1, z0))
+
+/*
+** hadd_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uhadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u8_z_untied, svuint8_t,
+ z0 = svhadd_u8_z (p0, z1, z2),
+ z0 = svhadd_z (p0, z1, z2))
+
+/*
+** hadd_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** uhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u8_z_tied1, svuint8_t, uint8_t,
+ z0 = svhadd_n_u8_z (p0, z0, x0),
+ z0 = svhadd_z (p0, z0, x0))
+
+/*
+** hadd_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uhadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u8_z_untied, svuint8_t, uint8_t,
+ z0 = svhadd_n_u8_z (p0, z1, x0),
+ z0 = svhadd_z (p0, z1, x0))
+
+/*
+** hadd_11_u8_z_tied1:
+** mov (z[0-9]+\.b), #11
+** movprfx z0\.b, p0/z, z0\.b
+** uhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u8_z_tied1, svuint8_t,
+ z0 = svhadd_n_u8_z (p0, z0, 11),
+ z0 = svhadd_z (p0, z0, 11))
+
+/*
+** hadd_11_u8_z_untied:
+** mov (z[0-9]+\.b), #11
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uhadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u8_z_untied, svuint8_t,
+ z0 = svhadd_n_u8_z (p0, z1, 11),
+ z0 = svhadd_z (p0, z1, 11))
+
+/*
+** hadd_u8_x_tied1:
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u8_x_tied1, svuint8_t,
+ z0 = svhadd_u8_x (p0, z0, z1),
+ z0 = svhadd_x (p0, z0, z1))
+
+/*
+** hadd_u8_x_tied2:
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u8_x_tied2, svuint8_t,
+ z0 = svhadd_u8_x (p0, z1, z0),
+ z0 = svhadd_x (p0, z1, z0))
+
+/*
+** hadd_u8_x_untied:
+** (
+** movprfx z0, z1
+** uhadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0, z2
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hadd_u8_x_untied, svuint8_t,
+ z0 = svhadd_u8_x (p0, z1, z2),
+ z0 = svhadd_x (p0, z1, z2))
+
+/*
+** hadd_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** uhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u8_x_tied1, svuint8_t, uint8_t,
+ z0 = svhadd_n_u8_x (p0, z0, x0),
+ z0 = svhadd_x (p0, z0, x0))
+
+/*
+** hadd_w0_u8_x_untied:
+** mov z0\.b, w0
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (hadd_w0_u8_x_untied, svuint8_t, uint8_t,
+ z0 = svhadd_n_u8_x (p0, z1, x0),
+ z0 = svhadd_x (p0, z1, x0))
+
+/*
+** hadd_11_u8_x_tied1:
+** mov (z[0-9]+\.b), #11
+** uhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u8_x_tied1, svuint8_t,
+ z0 = svhadd_n_u8_x (p0, z0, 11),
+ z0 = svhadd_x (p0, z0, 11))
+
+/*
+** hadd_11_u8_x_untied:
+** mov z0\.b, #11
+** uhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hadd_11_u8_x_untied, svuint8_t,
+ z0 = svhadd_n_u8_x (p0, z1, 11),
+ z0 = svhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** histcnt_s32_z_tied1:
+** histcnt z0\.s, p0/z, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_s32_z_tied1, svuint32_t, svint32_t,
+ z0_res = svhistcnt_s32_z (p0, z0, z1),
+ z0_res = svhistcnt_z (p0, z0, z1))
+
+/*
+** histcnt_s32_z_tied2:
+** histcnt z0\.s, p0/z, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_s32_z_tied2, svuint32_t, svint32_t,
+ z0_res = svhistcnt_s32_z (p0, z1, z0),
+ z0_res = svhistcnt_z (p0, z1, z0))
+
+/*
+** histcnt_s32_z_untied:
+** histcnt z0\.s, p0/z, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_s32_z_untied, svuint32_t, svint32_t,
+ z0_res = svhistcnt_s32_z (p0, z1, z2),
+ z0_res = svhistcnt_z (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** histcnt_s64_z_tied1:
+** histcnt z0\.d, p0/z, z0\.d, z1\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_s64_z_tied1, svuint64_t, svint64_t,
+ z0_res = svhistcnt_s64_z (p0, z0, z1),
+ z0_res = svhistcnt_z (p0, z0, z1))
+
+/*
+** histcnt_s64_z_tied2:
+** histcnt z0\.d, p0/z, z1\.d, z0\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_s64_z_tied2, svuint64_t, svint64_t,
+ z0_res = svhistcnt_s64_z (p0, z1, z0),
+ z0_res = svhistcnt_z (p0, z1, z0))
+
+/*
+** histcnt_s64_z_untied:
+** histcnt z0\.d, p0/z, z1\.d, z2\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_s64_z_untied, svuint64_t, svint64_t,
+ z0_res = svhistcnt_s64_z (p0, z1, z2),
+ z0_res = svhistcnt_z (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** histcnt_u32_z_tied1:
+** histcnt z0\.s, p0/z, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_u32_z_tied1, svuint32_t, svuint32_t,
+ z0_res = svhistcnt_u32_z (p0, z0, z1),
+ z0_res = svhistcnt_z (p0, z0, z1))
+
+/*
+** histcnt_u32_z_tied2:
+** histcnt z0\.s, p0/z, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_u32_z_tied2, svuint32_t, svuint32_t,
+ z0_res = svhistcnt_u32_z (p0, z1, z0),
+ z0_res = svhistcnt_z (p0, z1, z0))
+
+/*
+** histcnt_u32_z_untied:
+** histcnt z0\.s, p0/z, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_u32_z_untied, svuint32_t, svuint32_t,
+ z0_res = svhistcnt_u32_z (p0, z1, z2),
+ z0_res = svhistcnt_z (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** histcnt_u64_z_tied1:
+** histcnt z0\.d, p0/z, z0\.d, z1\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_u64_z_tied1, svuint64_t, svuint64_t,
+ z0_res = svhistcnt_u64_z (p0, z0, z1),
+ z0_res = svhistcnt_z (p0, z0, z1))
+
+/*
+** histcnt_u64_z_tied2:
+** histcnt z0\.d, p0/z, z1\.d, z0\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_u64_z_tied2, svuint64_t, svuint64_t,
+ z0_res = svhistcnt_u64_z (p0, z1, z0),
+ z0_res = svhistcnt_z (p0, z1, z0))
+
+/*
+** histcnt_u64_z_untied:
+** histcnt z0\.d, p0/z, z1\.d, z2\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histcnt_u64_z_untied, svuint64_t, svuint64_t,
+ z0_res = svhistcnt_u64_z (p0, z1, z2),
+ z0_res = svhistcnt_z (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** histseg_s8_tied1:
+** histseg z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histseg_s8_tied1, svuint8_t, svint8_t,
+ z0_res = svhistseg_s8 (z0, z1),
+ z0_res = svhistseg (z0, z1))
+
+/*
+** histseg_s8_tied2:
+** histseg z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histseg_s8_tied2, svuint8_t, svint8_t,
+ z0_res = svhistseg_s8 (z1, z0),
+ z0_res = svhistseg (z1, z0))
+
+/*
+** histseg_s8_untied:
+** histseg z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histseg_s8_untied, svuint8_t, svint8_t,
+ z0_res = svhistseg_s8 (z1, z2),
+ z0_res = svhistseg (z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** histseg_u8_tied1:
+** histseg z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histseg_u8_tied1, svuint8_t, svuint8_t,
+ z0_res = svhistseg_u8 (z0, z1),
+ z0_res = svhistseg (z0, z1))
+
+/*
+** histseg_u8_tied2:
+** histseg z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histseg_u8_tied2, svuint8_t, svuint8_t,
+ z0_res = svhistseg_u8 (z1, z0),
+ z0_res = svhistseg (z1, z0))
+
+/*
+** histseg_u8_untied:
+** histseg z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (histseg_u8_untied, svuint8_t, svuint8_t,
+ z0_res = svhistseg_u8 (z1, z2),
+ z0_res = svhistseg (z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsub_s16_m_tied1:
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s16_m_tied1, svint16_t,
+ z0 = svhsub_s16_m (p0, z0, z1),
+ z0 = svhsub_m (p0, z0, z1))
+
+/*
+** hsub_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** shsub z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s16_m_tied2, svint16_t,
+ z0 = svhsub_s16_m (p0, z1, z0),
+ z0 = svhsub_m (p0, z1, z0))
+
+/*
+** hsub_s16_m_untied:
+** movprfx z0, z1
+** shsub z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s16_m_untied, svint16_t,
+ z0 = svhsub_s16_m (p0, z1, z2),
+ z0 = svhsub_m (p0, z1, z2))
+
+/*
+** hsub_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** shsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svhsub_n_s16_m (p0, z0, x0),
+ z0 = svhsub_m (p0, z0, x0))
+
+/*
+** hsub_w0_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** shsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svhsub_n_s16_m (p0, z1, x0),
+ z0 = svhsub_m (p0, z1, x0))
+
+/*
+** hsub_11_s16_m_tied1:
+** mov (z[0-9]+\.h), #11
+** shsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s16_m_tied1, svint16_t,
+ z0 = svhsub_n_s16_m (p0, z0, 11),
+ z0 = svhsub_m (p0, z0, 11))
+
+/*
+** hsub_11_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** shsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s16_m_untied, svint16_t,
+ z0 = svhsub_n_s16_m (p0, z1, 11),
+ z0 = svhsub_m (p0, z1, 11))
+
+/*
+** hsub_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s16_z_tied1, svint16_t,
+ z0 = svhsub_s16_z (p0, z0, z1),
+ z0 = svhsub_z (p0, z0, z1))
+
+/*
+** hsub_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s16_z_tied2, svint16_t,
+ z0 = svhsub_s16_z (p0, z1, z0),
+ z0 = svhsub_z (p0, z1, z0))
+
+/*
+** hsub_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** shsub z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s16_z_untied, svint16_t,
+ z0 = svhsub_s16_z (p0, z1, z2),
+ z0 = svhsub_z (p0, z1, z2))
+
+/*
+** hsub_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** shsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svhsub_n_s16_z (p0, z0, x0),
+ z0 = svhsub_z (p0, z0, x0))
+
+/*
+** hsub_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** shsub z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svhsub_n_s16_z (p0, z1, x0),
+ z0 = svhsub_z (p0, z1, x0))
+
+/*
+** hsub_11_s16_z_tied1:
+** mov (z[0-9]+\.h), #11
+** movprfx z0\.h, p0/z, z0\.h
+** shsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s16_z_tied1, svint16_t,
+ z0 = svhsub_n_s16_z (p0, z0, 11),
+ z0 = svhsub_z (p0, z0, 11))
+
+/*
+** hsub_11_s16_z_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** shsub z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s16_z_untied, svint16_t,
+ z0 = svhsub_n_s16_z (p0, z1, 11),
+ z0 = svhsub_z (p0, z1, 11))
+
+/*
+** hsub_s16_x_tied1:
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s16_x_tied1, svint16_t,
+ z0 = svhsub_s16_x (p0, z0, z1),
+ z0 = svhsub_x (p0, z0, z1))
+
+/*
+** hsub_s16_x_tied2:
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s16_x_tied2, svint16_t,
+ z0 = svhsub_s16_x (p0, z1, z0),
+ z0 = svhsub_x (p0, z1, z0))
+
+/*
+** hsub_s16_x_untied:
+** (
+** movprfx z0, z1
+** shsub z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0, z2
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s16_x_untied, svint16_t,
+ z0 = svhsub_s16_x (p0, z1, z2),
+ z0 = svhsub_x (p0, z1, z2))
+
+/*
+** hsub_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** shsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svhsub_n_s16_x (p0, z0, x0),
+ z0 = svhsub_x (p0, z0, x0))
+
+/*
+** hsub_w0_s16_x_untied:
+** mov z0\.h, w0
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svhsub_n_s16_x (p0, z1, x0),
+ z0 = svhsub_x (p0, z1, x0))
+
+/*
+** hsub_11_s16_x_tied1:
+** mov (z[0-9]+\.h), #11
+** shsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s16_x_tied1, svint16_t,
+ z0 = svhsub_n_s16_x (p0, z0, 11),
+ z0 = svhsub_x (p0, z0, 11))
+
+/*
+** hsub_11_s16_x_untied:
+** mov z0\.h, #11
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s16_x_untied, svint16_t,
+ z0 = svhsub_n_s16_x (p0, z1, 11),
+ z0 = svhsub_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsub_s32_m_tied1:
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s32_m_tied1, svint32_t,
+ z0 = svhsub_s32_m (p0, z0, z1),
+ z0 = svhsub_m (p0, z0, z1))
+
+/*
+** hsub_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** shsub z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s32_m_tied2, svint32_t,
+ z0 = svhsub_s32_m (p0, z1, z0),
+ z0 = svhsub_m (p0, z1, z0))
+
+/*
+** hsub_s32_m_untied:
+** movprfx z0, z1
+** shsub z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s32_m_untied, svint32_t,
+ z0 = svhsub_s32_m (p0, z1, z2),
+ z0 = svhsub_m (p0, z1, z2))
+
+/*
+** hsub_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** shsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svhsub_n_s32_m (p0, z0, x0),
+ z0 = svhsub_m (p0, z0, x0))
+
+/*
+** hsub_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** shsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svhsub_n_s32_m (p0, z1, x0),
+ z0 = svhsub_m (p0, z1, x0))
+
+/*
+** hsub_11_s32_m_tied1:
+** mov (z[0-9]+\.s), #11
+** shsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s32_m_tied1, svint32_t,
+ z0 = svhsub_n_s32_m (p0, z0, 11),
+ z0 = svhsub_m (p0, z0, 11))
+
+/*
+** hsub_11_s32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** shsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s32_m_untied, svint32_t,
+ z0 = svhsub_n_s32_m (p0, z1, 11),
+ z0 = svhsub_m (p0, z1, 11))
+
+/*
+** hsub_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s32_z_tied1, svint32_t,
+ z0 = svhsub_s32_z (p0, z0, z1),
+ z0 = svhsub_z (p0, z0, z1))
+
+/*
+** hsub_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s32_z_tied2, svint32_t,
+ z0 = svhsub_s32_z (p0, z1, z0),
+ z0 = svhsub_z (p0, z1, z0))
+
+/*
+** hsub_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** shsub z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s32_z_untied, svint32_t,
+ z0 = svhsub_s32_z (p0, z1, z2),
+ z0 = svhsub_z (p0, z1, z2))
+
+/*
+** hsub_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** shsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svhsub_n_s32_z (p0, z0, x0),
+ z0 = svhsub_z (p0, z0, x0))
+
+/*
+** hsub_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** shsub z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svhsub_n_s32_z (p0, z1, x0),
+ z0 = svhsub_z (p0, z1, x0))
+
+/*
+** hsub_11_s32_z_tied1:
+** mov (z[0-9]+\.s), #11
+** movprfx z0\.s, p0/z, z0\.s
+** shsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s32_z_tied1, svint32_t,
+ z0 = svhsub_n_s32_z (p0, z0, 11),
+ z0 = svhsub_z (p0, z0, 11))
+
+/*
+** hsub_11_s32_z_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** shsub z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s32_z_untied, svint32_t,
+ z0 = svhsub_n_s32_z (p0, z1, 11),
+ z0 = svhsub_z (p0, z1, 11))
+
+/*
+** hsub_s32_x_tied1:
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s32_x_tied1, svint32_t,
+ z0 = svhsub_s32_x (p0, z0, z1),
+ z0 = svhsub_x (p0, z0, z1))
+
+/*
+** hsub_s32_x_tied2:
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s32_x_tied2, svint32_t,
+ z0 = svhsub_s32_x (p0, z1, z0),
+ z0 = svhsub_x (p0, z1, z0))
+
+/*
+** hsub_s32_x_untied:
+** (
+** movprfx z0, z1
+** shsub z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0, z2
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s32_x_untied, svint32_t,
+ z0 = svhsub_s32_x (p0, z1, z2),
+ z0 = svhsub_x (p0, z1, z2))
+
+/*
+** hsub_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** shsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svhsub_n_s32_x (p0, z0, x0),
+ z0 = svhsub_x (p0, z0, x0))
+
+/*
+** hsub_w0_s32_x_untied:
+** mov z0\.s, w0
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svhsub_n_s32_x (p0, z1, x0),
+ z0 = svhsub_x (p0, z1, x0))
+
+/*
+** hsub_11_s32_x_tied1:
+** mov (z[0-9]+\.s), #11
+** shsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s32_x_tied1, svint32_t,
+ z0 = svhsub_n_s32_x (p0, z0, 11),
+ z0 = svhsub_x (p0, z0, 11))
+
+/*
+** hsub_11_s32_x_untied:
+** mov z0\.s, #11
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s32_x_untied, svint32_t,
+ z0 = svhsub_n_s32_x (p0, z1, 11),
+ z0 = svhsub_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsub_s64_m_tied1:
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s64_m_tied1, svint64_t,
+ z0 = svhsub_s64_m (p0, z0, z1),
+ z0 = svhsub_m (p0, z0, z1))
+
+/*
+** hsub_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** shsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s64_m_tied2, svint64_t,
+ z0 = svhsub_s64_m (p0, z1, z0),
+ z0 = svhsub_m (p0, z1, z0))
+
+/*
+** hsub_s64_m_untied:
+** movprfx z0, z1
+** shsub z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s64_m_untied, svint64_t,
+ z0 = svhsub_s64_m (p0, z1, z2),
+ z0 = svhsub_m (p0, z1, z2))
+
+/*
+** hsub_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** shsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svhsub_n_s64_m (p0, z0, x0),
+ z0 = svhsub_m (p0, z0, x0))
+
+/*
+** hsub_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** shsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svhsub_n_s64_m (p0, z1, x0),
+ z0 = svhsub_m (p0, z1, x0))
+
+/*
+** hsub_11_s64_m_tied1:
+** mov (z[0-9]+\.d), #11
+** shsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s64_m_tied1, svint64_t,
+ z0 = svhsub_n_s64_m (p0, z0, 11),
+ z0 = svhsub_m (p0, z0, 11))
+
+/*
+** hsub_11_s64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** shsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s64_m_untied, svint64_t,
+ z0 = svhsub_n_s64_m (p0, z1, 11),
+ z0 = svhsub_m (p0, z1, 11))
+
+/*
+** hsub_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s64_z_tied1, svint64_t,
+ z0 = svhsub_s64_z (p0, z0, z1),
+ z0 = svhsub_z (p0, z0, z1))
+
+/*
+** hsub_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s64_z_tied2, svint64_t,
+ z0 = svhsub_s64_z (p0, z1, z0),
+ z0 = svhsub_z (p0, z1, z0))
+
+/*
+** hsub_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** shsub z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s64_z_untied, svint64_t,
+ z0 = svhsub_s64_z (p0, z1, z2),
+ z0 = svhsub_z (p0, z1, z2))
+
+/*
+** hsub_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** shsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svhsub_n_s64_z (p0, z0, x0),
+ z0 = svhsub_z (p0, z0, x0))
+
+/*
+** hsub_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** shsub z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svhsub_n_s64_z (p0, z1, x0),
+ z0 = svhsub_z (p0, z1, x0))
+
+/*
+** hsub_11_s64_z_tied1:
+** mov (z[0-9]+\.d), #11
+** movprfx z0\.d, p0/z, z0\.d
+** shsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s64_z_tied1, svint64_t,
+ z0 = svhsub_n_s64_z (p0, z0, 11),
+ z0 = svhsub_z (p0, z0, 11))
+
+/*
+** hsub_11_s64_z_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** shsub z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s64_z_untied, svint64_t,
+ z0 = svhsub_n_s64_z (p0, z1, 11),
+ z0 = svhsub_z (p0, z1, 11))
+
+/*
+** hsub_s64_x_tied1:
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s64_x_tied1, svint64_t,
+ z0 = svhsub_s64_x (p0, z0, z1),
+ z0 = svhsub_x (p0, z0, z1))
+
+/*
+** hsub_s64_x_tied2:
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s64_x_tied2, svint64_t,
+ z0 = svhsub_s64_x (p0, z1, z0),
+ z0 = svhsub_x (p0, z1, z0))
+
+/*
+** hsub_s64_x_untied:
+** (
+** movprfx z0, z1
+** shsub z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0, z2
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s64_x_untied, svint64_t,
+ z0 = svhsub_s64_x (p0, z1, z2),
+ z0 = svhsub_x (p0, z1, z2))
+
+/*
+** hsub_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** shsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svhsub_n_s64_x (p0, z0, x0),
+ z0 = svhsub_x (p0, z0, x0))
+
+/*
+** hsub_x0_s64_x_untied:
+** mov z0\.d, x0
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svhsub_n_s64_x (p0, z1, x0),
+ z0 = svhsub_x (p0, z1, x0))
+
+/*
+** hsub_11_s64_x_tied1:
+** mov (z[0-9]+\.d), #11
+** shsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s64_x_tied1, svint64_t,
+ z0 = svhsub_n_s64_x (p0, z0, 11),
+ z0 = svhsub_x (p0, z0, 11))
+
+/*
+** hsub_11_s64_x_untied:
+** mov z0\.d, #11
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s64_x_untied, svint64_t,
+ z0 = svhsub_n_s64_x (p0, z1, 11),
+ z0 = svhsub_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsub_s8_m_tied1:
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s8_m_tied1, svint8_t,
+ z0 = svhsub_s8_m (p0, z0, z1),
+ z0 = svhsub_m (p0, z0, z1))
+
+/*
+** hsub_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** shsub z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s8_m_tied2, svint8_t,
+ z0 = svhsub_s8_m (p0, z1, z0),
+ z0 = svhsub_m (p0, z1, z0))
+
+/*
+** hsub_s8_m_untied:
+** movprfx z0, z1
+** shsub z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s8_m_untied, svint8_t,
+ z0 = svhsub_s8_m (p0, z1, z2),
+ z0 = svhsub_m (p0, z1, z2))
+
+/*
+** hsub_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** shsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svhsub_n_s8_m (p0, z0, x0),
+ z0 = svhsub_m (p0, z0, x0))
+
+/*
+** hsub_w0_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** shsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svhsub_n_s8_m (p0, z1, x0),
+ z0 = svhsub_m (p0, z1, x0))
+
+/*
+** hsub_11_s8_m_tied1:
+** mov (z[0-9]+\.b), #11
+** shsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s8_m_tied1, svint8_t,
+ z0 = svhsub_n_s8_m (p0, z0, 11),
+ z0 = svhsub_m (p0, z0, 11))
+
+/*
+** hsub_11_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** shsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s8_m_untied, svint8_t,
+ z0 = svhsub_n_s8_m (p0, z1, 11),
+ z0 = svhsub_m (p0, z1, 11))
+
+/*
+** hsub_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s8_z_tied1, svint8_t,
+ z0 = svhsub_s8_z (p0, z0, z1),
+ z0 = svhsub_z (p0, z0, z1))
+
+/*
+** hsub_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s8_z_tied2, svint8_t,
+ z0 = svhsub_s8_z (p0, z1, z0),
+ z0 = svhsub_z (p0, z1, z0))
+
+/*
+** hsub_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** shsub z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s8_z_untied, svint8_t,
+ z0 = svhsub_s8_z (p0, z1, z2),
+ z0 = svhsub_z (p0, z1, z2))
+
+/*
+** hsub_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** shsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svhsub_n_s8_z (p0, z0, x0),
+ z0 = svhsub_z (p0, z0, x0))
+
+/*
+** hsub_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** shsub z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svhsub_n_s8_z (p0, z1, x0),
+ z0 = svhsub_z (p0, z1, x0))
+
+/*
+** hsub_11_s8_z_tied1:
+** mov (z[0-9]+\.b), #11
+** movprfx z0\.b, p0/z, z0\.b
+** shsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s8_z_tied1, svint8_t,
+ z0 = svhsub_n_s8_z (p0, z0, 11),
+ z0 = svhsub_z (p0, z0, 11))
+
+/*
+** hsub_11_s8_z_untied:
+** mov (z[0-9]+\.b), #11
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** shsub z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s8_z_untied, svint8_t,
+ z0 = svhsub_n_s8_z (p0, z1, 11),
+ z0 = svhsub_z (p0, z1, 11))
+
+/*
+** hsub_s8_x_tied1:
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s8_x_tied1, svint8_t,
+ z0 = svhsub_s8_x (p0, z0, z1),
+ z0 = svhsub_x (p0, z0, z1))
+
+/*
+** hsub_s8_x_tied2:
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s8_x_tied2, svint8_t,
+ z0 = svhsub_s8_x (p0, z1, z0),
+ z0 = svhsub_x (p0, z1, z0))
+
+/*
+** hsub_s8_x_untied:
+** (
+** movprfx z0, z1
+** shsub z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0, z2
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_s8_x_untied, svint8_t,
+ z0 = svhsub_s8_x (p0, z1, z2),
+ z0 = svhsub_x (p0, z1, z2))
+
+/*
+** hsub_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** shsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svhsub_n_s8_x (p0, z0, x0),
+ z0 = svhsub_x (p0, z0, x0))
+
+/*
+** hsub_w0_s8_x_untied:
+** mov z0\.b, w0
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svhsub_n_s8_x (p0, z1, x0),
+ z0 = svhsub_x (p0, z1, x0))
+
+/*
+** hsub_11_s8_x_tied1:
+** mov (z[0-9]+\.b), #11
+** shsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s8_x_tied1, svint8_t,
+ z0 = svhsub_n_s8_x (p0, z0, 11),
+ z0 = svhsub_x (p0, z0, 11))
+
+/*
+** hsub_11_s8_x_untied:
+** mov z0\.b, #11
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_s8_x_untied, svint8_t,
+ z0 = svhsub_n_s8_x (p0, z1, 11),
+ z0 = svhsub_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsub_u16_m_tied1:
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u16_m_tied1, svuint16_t,
+ z0 = svhsub_u16_m (p0, z0, z1),
+ z0 = svhsub_m (p0, z0, z1))
+
+/*
+** hsub_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uhsub z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u16_m_tied2, svuint16_t,
+ z0 = svhsub_u16_m (p0, z1, z0),
+ z0 = svhsub_m (p0, z1, z0))
+
+/*
+** hsub_u16_m_untied:
+** movprfx z0, z1
+** uhsub z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u16_m_untied, svuint16_t,
+ z0 = svhsub_u16_m (p0, z1, z2),
+ z0 = svhsub_m (p0, z1, z2))
+
+/*
+** hsub_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** uhsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u16_m_tied1, svuint16_t, uint16_t,
+ z0 = svhsub_n_u16_m (p0, z0, x0),
+ z0 = svhsub_m (p0, z0, x0))
+
+/*
+** hsub_w0_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uhsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u16_m_untied, svuint16_t, uint16_t,
+ z0 = svhsub_n_u16_m (p0, z1, x0),
+ z0 = svhsub_m (p0, z1, x0))
+
+/*
+** hsub_11_u16_m_tied1:
+** mov (z[0-9]+\.h), #11
+** uhsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u16_m_tied1, svuint16_t,
+ z0 = svhsub_n_u16_m (p0, z0, 11),
+ z0 = svhsub_m (p0, z0, 11))
+
+/*
+** hsub_11_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** uhsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u16_m_untied, svuint16_t,
+ z0 = svhsub_n_u16_m (p0, z1, 11),
+ z0 = svhsub_m (p0, z1, 11))
+
+/*
+** hsub_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u16_z_tied1, svuint16_t,
+ z0 = svhsub_u16_z (p0, z0, z1),
+ z0 = svhsub_z (p0, z0, z1))
+
+/*
+** hsub_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u16_z_tied2, svuint16_t,
+ z0 = svhsub_u16_z (p0, z1, z0),
+ z0 = svhsub_z (p0, z1, z0))
+
+/*
+** hsub_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uhsub z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u16_z_untied, svuint16_t,
+ z0 = svhsub_u16_z (p0, z1, z2),
+ z0 = svhsub_z (p0, z1, z2))
+
+/*
+** hsub_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** uhsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u16_z_tied1, svuint16_t, uint16_t,
+ z0 = svhsub_n_u16_z (p0, z0, x0),
+ z0 = svhsub_z (p0, z0, x0))
+
+/*
+** hsub_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uhsub z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u16_z_untied, svuint16_t, uint16_t,
+ z0 = svhsub_n_u16_z (p0, z1, x0),
+ z0 = svhsub_z (p0, z1, x0))
+
+/*
+** hsub_11_u16_z_tied1:
+** mov (z[0-9]+\.h), #11
+** movprfx z0\.h, p0/z, z0\.h
+** uhsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u16_z_tied1, svuint16_t,
+ z0 = svhsub_n_u16_z (p0, z0, 11),
+ z0 = svhsub_z (p0, z0, 11))
+
+/*
+** hsub_11_u16_z_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uhsub z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u16_z_untied, svuint16_t,
+ z0 = svhsub_n_u16_z (p0, z1, 11),
+ z0 = svhsub_z (p0, z1, 11))
+
+/*
+** hsub_u16_x_tied1:
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u16_x_tied1, svuint16_t,
+ z0 = svhsub_u16_x (p0, z0, z1),
+ z0 = svhsub_x (p0, z0, z1))
+
+/*
+** hsub_u16_x_tied2:
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u16_x_tied2, svuint16_t,
+ z0 = svhsub_u16_x (p0, z1, z0),
+ z0 = svhsub_x (p0, z1, z0))
+
+/*
+** hsub_u16_x_untied:
+** (
+** movprfx z0, z1
+** uhsub z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0, z2
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u16_x_untied, svuint16_t,
+ z0 = svhsub_u16_x (p0, z1, z2),
+ z0 = svhsub_x (p0, z1, z2))
+
+/*
+** hsub_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** uhsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u16_x_tied1, svuint16_t, uint16_t,
+ z0 = svhsub_n_u16_x (p0, z0, x0),
+ z0 = svhsub_x (p0, z0, x0))
+
+/*
+** hsub_w0_u16_x_untied:
+** mov z0\.h, w0
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u16_x_untied, svuint16_t, uint16_t,
+ z0 = svhsub_n_u16_x (p0, z1, x0),
+ z0 = svhsub_x (p0, z1, x0))
+
+/*
+** hsub_11_u16_x_tied1:
+** mov (z[0-9]+\.h), #11
+** uhsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u16_x_tied1, svuint16_t,
+ z0 = svhsub_n_u16_x (p0, z0, 11),
+ z0 = svhsub_x (p0, z0, 11))
+
+/*
+** hsub_11_u16_x_untied:
+** mov z0\.h, #11
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u16_x_untied, svuint16_t,
+ z0 = svhsub_n_u16_x (p0, z1, 11),
+ z0 = svhsub_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsub_u32_m_tied1:
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u32_m_tied1, svuint32_t,
+ z0 = svhsub_u32_m (p0, z0, z1),
+ z0 = svhsub_m (p0, z0, z1))
+
+/*
+** hsub_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uhsub z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u32_m_tied2, svuint32_t,
+ z0 = svhsub_u32_m (p0, z1, z0),
+ z0 = svhsub_m (p0, z1, z0))
+
+/*
+** hsub_u32_m_untied:
+** movprfx z0, z1
+** uhsub z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u32_m_untied, svuint32_t,
+ z0 = svhsub_u32_m (p0, z1, z2),
+ z0 = svhsub_m (p0, z1, z2))
+
+/*
+** hsub_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** uhsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u32_m_tied1, svuint32_t, uint32_t,
+ z0 = svhsub_n_u32_m (p0, z0, x0),
+ z0 = svhsub_m (p0, z0, x0))
+
+/*
+** hsub_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uhsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u32_m_untied, svuint32_t, uint32_t,
+ z0 = svhsub_n_u32_m (p0, z1, x0),
+ z0 = svhsub_m (p0, z1, x0))
+
+/*
+** hsub_11_u32_m_tied1:
+** mov (z[0-9]+\.s), #11
+** uhsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u32_m_tied1, svuint32_t,
+ z0 = svhsub_n_u32_m (p0, z0, 11),
+ z0 = svhsub_m (p0, z0, 11))
+
+/*
+** hsub_11_u32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** uhsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u32_m_untied, svuint32_t,
+ z0 = svhsub_n_u32_m (p0, z1, 11),
+ z0 = svhsub_m (p0, z1, 11))
+
+/*
+** hsub_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u32_z_tied1, svuint32_t,
+ z0 = svhsub_u32_z (p0, z0, z1),
+ z0 = svhsub_z (p0, z0, z1))
+
+/*
+** hsub_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u32_z_tied2, svuint32_t,
+ z0 = svhsub_u32_z (p0, z1, z0),
+ z0 = svhsub_z (p0, z1, z0))
+
+/*
+** hsub_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uhsub z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u32_z_untied, svuint32_t,
+ z0 = svhsub_u32_z (p0, z1, z2),
+ z0 = svhsub_z (p0, z1, z2))
+
+/*
+** hsub_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** uhsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u32_z_tied1, svuint32_t, uint32_t,
+ z0 = svhsub_n_u32_z (p0, z0, x0),
+ z0 = svhsub_z (p0, z0, x0))
+
+/*
+** hsub_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uhsub z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u32_z_untied, svuint32_t, uint32_t,
+ z0 = svhsub_n_u32_z (p0, z1, x0),
+ z0 = svhsub_z (p0, z1, x0))
+
+/*
+** hsub_11_u32_z_tied1:
+** mov (z[0-9]+\.s), #11
+** movprfx z0\.s, p0/z, z0\.s
+** uhsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u32_z_tied1, svuint32_t,
+ z0 = svhsub_n_u32_z (p0, z0, 11),
+ z0 = svhsub_z (p0, z0, 11))
+
+/*
+** hsub_11_u32_z_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uhsub z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u32_z_untied, svuint32_t,
+ z0 = svhsub_n_u32_z (p0, z1, 11),
+ z0 = svhsub_z (p0, z1, 11))
+
+/*
+** hsub_u32_x_tied1:
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u32_x_tied1, svuint32_t,
+ z0 = svhsub_u32_x (p0, z0, z1),
+ z0 = svhsub_x (p0, z0, z1))
+
+/*
+** hsub_u32_x_tied2:
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u32_x_tied2, svuint32_t,
+ z0 = svhsub_u32_x (p0, z1, z0),
+ z0 = svhsub_x (p0, z1, z0))
+
+/*
+** hsub_u32_x_untied:
+** (
+** movprfx z0, z1
+** uhsub z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0, z2
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u32_x_untied, svuint32_t,
+ z0 = svhsub_u32_x (p0, z1, z2),
+ z0 = svhsub_x (p0, z1, z2))
+
+/*
+** hsub_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** uhsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u32_x_tied1, svuint32_t, uint32_t,
+ z0 = svhsub_n_u32_x (p0, z0, x0),
+ z0 = svhsub_x (p0, z0, x0))
+
+/*
+** hsub_w0_u32_x_untied:
+** mov z0\.s, w0
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u32_x_untied, svuint32_t, uint32_t,
+ z0 = svhsub_n_u32_x (p0, z1, x0),
+ z0 = svhsub_x (p0, z1, x0))
+
+/*
+** hsub_11_u32_x_tied1:
+** mov (z[0-9]+\.s), #11
+** uhsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u32_x_tied1, svuint32_t,
+ z0 = svhsub_n_u32_x (p0, z0, 11),
+ z0 = svhsub_x (p0, z0, 11))
+
+/*
+** hsub_11_u32_x_untied:
+** mov z0\.s, #11
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u32_x_untied, svuint32_t,
+ z0 = svhsub_n_u32_x (p0, z1, 11),
+ z0 = svhsub_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsub_u64_m_tied1:
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u64_m_tied1, svuint64_t,
+ z0 = svhsub_u64_m (p0, z0, z1),
+ z0 = svhsub_m (p0, z0, z1))
+
+/*
+** hsub_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uhsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u64_m_tied2, svuint64_t,
+ z0 = svhsub_u64_m (p0, z1, z0),
+ z0 = svhsub_m (p0, z1, z0))
+
+/*
+** hsub_u64_m_untied:
+** movprfx z0, z1
+** uhsub z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u64_m_untied, svuint64_t,
+ z0 = svhsub_u64_m (p0, z1, z2),
+ z0 = svhsub_m (p0, z1, z2))
+
+/*
+** hsub_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** uhsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_u64_m_tied1, svuint64_t, uint64_t,
+ z0 = svhsub_n_u64_m (p0, z0, x0),
+ z0 = svhsub_m (p0, z0, x0))
+
+/*
+** hsub_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** uhsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_u64_m_untied, svuint64_t, uint64_t,
+ z0 = svhsub_n_u64_m (p0, z1, x0),
+ z0 = svhsub_m (p0, z1, x0))
+
+/*
+** hsub_11_u64_m_tied1:
+** mov (z[0-9]+\.d), #11
+** uhsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u64_m_tied1, svuint64_t,
+ z0 = svhsub_n_u64_m (p0, z0, 11),
+ z0 = svhsub_m (p0, z0, 11))
+
+/*
+** hsub_11_u64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** uhsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u64_m_untied, svuint64_t,
+ z0 = svhsub_n_u64_m (p0, z1, 11),
+ z0 = svhsub_m (p0, z1, 11))
+
+/*
+** hsub_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u64_z_tied1, svuint64_t,
+ z0 = svhsub_u64_z (p0, z0, z1),
+ z0 = svhsub_z (p0, z0, z1))
+
+/*
+** hsub_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u64_z_tied2, svuint64_t,
+ z0 = svhsub_u64_z (p0, z1, z0),
+ z0 = svhsub_z (p0, z1, z0))
+
+/*
+** hsub_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uhsub z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u64_z_untied, svuint64_t,
+ z0 = svhsub_u64_z (p0, z1, z2),
+ z0 = svhsub_z (p0, z1, z2))
+
+/*
+** hsub_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** uhsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_u64_z_tied1, svuint64_t, uint64_t,
+ z0 = svhsub_n_u64_z (p0, z0, x0),
+ z0 = svhsub_z (p0, z0, x0))
+
+/*
+** hsub_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uhsub z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_u64_z_untied, svuint64_t, uint64_t,
+ z0 = svhsub_n_u64_z (p0, z1, x0),
+ z0 = svhsub_z (p0, z1, x0))
+
+/*
+** hsub_11_u64_z_tied1:
+** mov (z[0-9]+\.d), #11
+** movprfx z0\.d, p0/z, z0\.d
+** uhsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u64_z_tied1, svuint64_t,
+ z0 = svhsub_n_u64_z (p0, z0, 11),
+ z0 = svhsub_z (p0, z0, 11))
+
+/*
+** hsub_11_u64_z_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uhsub z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u64_z_untied, svuint64_t,
+ z0 = svhsub_n_u64_z (p0, z1, 11),
+ z0 = svhsub_z (p0, z1, 11))
+
+/*
+** hsub_u64_x_tied1:
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u64_x_tied1, svuint64_t,
+ z0 = svhsub_u64_x (p0, z0, z1),
+ z0 = svhsub_x (p0, z0, z1))
+
+/*
+** hsub_u64_x_tied2:
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u64_x_tied2, svuint64_t,
+ z0 = svhsub_u64_x (p0, z1, z0),
+ z0 = svhsub_x (p0, z1, z0))
+
+/*
+** hsub_u64_x_untied:
+** (
+** movprfx z0, z1
+** uhsub z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0, z2
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u64_x_untied, svuint64_t,
+ z0 = svhsub_u64_x (p0, z1, z2),
+ z0 = svhsub_x (p0, z1, z2))
+
+/*
+** hsub_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** uhsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_u64_x_tied1, svuint64_t, uint64_t,
+ z0 = svhsub_n_u64_x (p0, z0, x0),
+ z0 = svhsub_x (p0, z0, x0))
+
+/*
+** hsub_x0_u64_x_untied:
+** mov z0\.d, x0
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_x0_u64_x_untied, svuint64_t, uint64_t,
+ z0 = svhsub_n_u64_x (p0, z1, x0),
+ z0 = svhsub_x (p0, z1, x0))
+
+/*
+** hsub_11_u64_x_tied1:
+** mov (z[0-9]+\.d), #11
+** uhsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u64_x_tied1, svuint64_t,
+ z0 = svhsub_n_u64_x (p0, z0, 11),
+ z0 = svhsub_x (p0, z0, 11))
+
+/*
+** hsub_11_u64_x_untied:
+** mov z0\.d, #11
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u64_x_untied, svuint64_t,
+ z0 = svhsub_n_u64_x (p0, z1, 11),
+ z0 = svhsub_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsub_u8_m_tied1:
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u8_m_tied1, svuint8_t,
+ z0 = svhsub_u8_m (p0, z0, z1),
+ z0 = svhsub_m (p0, z0, z1))
+
+/*
+** hsub_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uhsub z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u8_m_tied2, svuint8_t,
+ z0 = svhsub_u8_m (p0, z1, z0),
+ z0 = svhsub_m (p0, z1, z0))
+
+/*
+** hsub_u8_m_untied:
+** movprfx z0, z1
+** uhsub z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u8_m_untied, svuint8_t,
+ z0 = svhsub_u8_m (p0, z1, z2),
+ z0 = svhsub_m (p0, z1, z2))
+
+/*
+** hsub_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** uhsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u8_m_tied1, svuint8_t, uint8_t,
+ z0 = svhsub_n_u8_m (p0, z0, x0),
+ z0 = svhsub_m (p0, z0, x0))
+
+/*
+** hsub_w0_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uhsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u8_m_untied, svuint8_t, uint8_t,
+ z0 = svhsub_n_u8_m (p0, z1, x0),
+ z0 = svhsub_m (p0, z1, x0))
+
+/*
+** hsub_11_u8_m_tied1:
+** mov (z[0-9]+\.b), #11
+** uhsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u8_m_tied1, svuint8_t,
+ z0 = svhsub_n_u8_m (p0, z0, 11),
+ z0 = svhsub_m (p0, z0, 11))
+
+/*
+** hsub_11_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** uhsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u8_m_untied, svuint8_t,
+ z0 = svhsub_n_u8_m (p0, z1, 11),
+ z0 = svhsub_m (p0, z1, 11))
+
+/*
+** hsub_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u8_z_tied1, svuint8_t,
+ z0 = svhsub_u8_z (p0, z0, z1),
+ z0 = svhsub_z (p0, z0, z1))
+
+/*
+** hsub_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u8_z_tied2, svuint8_t,
+ z0 = svhsub_u8_z (p0, z1, z0),
+ z0 = svhsub_z (p0, z1, z0))
+
+/*
+** hsub_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uhsub z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u8_z_untied, svuint8_t,
+ z0 = svhsub_u8_z (p0, z1, z2),
+ z0 = svhsub_z (p0, z1, z2))
+
+/*
+** hsub_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** uhsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u8_z_tied1, svuint8_t, uint8_t,
+ z0 = svhsub_n_u8_z (p0, z0, x0),
+ z0 = svhsub_z (p0, z0, x0))
+
+/*
+** hsub_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uhsub z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u8_z_untied, svuint8_t, uint8_t,
+ z0 = svhsub_n_u8_z (p0, z1, x0),
+ z0 = svhsub_z (p0, z1, x0))
+
+/*
+** hsub_11_u8_z_tied1:
+** mov (z[0-9]+\.b), #11
+** movprfx z0\.b, p0/z, z0\.b
+** uhsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u8_z_tied1, svuint8_t,
+ z0 = svhsub_n_u8_z (p0, z0, 11),
+ z0 = svhsub_z (p0, z0, 11))
+
+/*
+** hsub_11_u8_z_untied:
+** mov (z[0-9]+\.b), #11
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uhsub z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u8_z_untied, svuint8_t,
+ z0 = svhsub_n_u8_z (p0, z1, 11),
+ z0 = svhsub_z (p0, z1, 11))
+
+/*
+** hsub_u8_x_tied1:
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u8_x_tied1, svuint8_t,
+ z0 = svhsub_u8_x (p0, z0, z1),
+ z0 = svhsub_x (p0, z0, z1))
+
+/*
+** hsub_u8_x_tied2:
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u8_x_tied2, svuint8_t,
+ z0 = svhsub_u8_x (p0, z1, z0),
+ z0 = svhsub_x (p0, z1, z0))
+
+/*
+** hsub_u8_x_untied:
+** (
+** movprfx z0, z1
+** uhsub z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0, z2
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsub_u8_x_untied, svuint8_t,
+ z0 = svhsub_u8_x (p0, z1, z2),
+ z0 = svhsub_x (p0, z1, z2))
+
+/*
+** hsub_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** uhsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u8_x_tied1, svuint8_t, uint8_t,
+ z0 = svhsub_n_u8_x (p0, z0, x0),
+ z0 = svhsub_x (p0, z0, x0))
+
+/*
+** hsub_w0_u8_x_untied:
+** mov z0\.b, w0
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (hsub_w0_u8_x_untied, svuint8_t, uint8_t,
+ z0 = svhsub_n_u8_x (p0, z1, x0),
+ z0 = svhsub_x (p0, z1, x0))
+
+/*
+** hsub_11_u8_x_tied1:
+** mov (z[0-9]+\.b), #11
+** uhsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u8_x_tied1, svuint8_t,
+ z0 = svhsub_n_u8_x (p0, z0, 11),
+ z0 = svhsub_x (p0, z0, 11))
+
+/*
+** hsub_11_u8_x_untied:
+** mov z0\.b, #11
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsub_11_u8_x_untied, svuint8_t,
+ z0 = svhsub_n_u8_x (p0, z1, 11),
+ z0 = svhsub_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsubr_s16_m_tied1:
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s16_m_tied1, svint16_t,
+ z0 = svhsubr_s16_m (p0, z0, z1),
+ z0 = svhsubr_m (p0, z0, z1))
+
+/*
+** hsubr_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** shsubr z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s16_m_tied2, svint16_t,
+ z0 = svhsubr_s16_m (p0, z1, z0),
+ z0 = svhsubr_m (p0, z1, z0))
+
+/*
+** hsubr_s16_m_untied:
+** movprfx z0, z1
+** shsubr z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s16_m_untied, svint16_t,
+ z0 = svhsubr_s16_m (p0, z1, z2),
+ z0 = svhsubr_m (p0, z1, z2))
+
+/*
+** hsubr_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** shsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svhsubr_n_s16_m (p0, z0, x0),
+ z0 = svhsubr_m (p0, z0, x0))
+
+/*
+** hsubr_w0_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** shsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svhsubr_n_s16_m (p0, z1, x0),
+ z0 = svhsubr_m (p0, z1, x0))
+
+/*
+** hsubr_11_s16_m_tied1:
+** mov (z[0-9]+\.h), #11
+** shsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s16_m_tied1, svint16_t,
+ z0 = svhsubr_n_s16_m (p0, z0, 11),
+ z0 = svhsubr_m (p0, z0, 11))
+
+/*
+** hsubr_11_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** shsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s16_m_untied, svint16_t,
+ z0 = svhsubr_n_s16_m (p0, z1, 11),
+ z0 = svhsubr_m (p0, z1, 11))
+
+/*
+** hsubr_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s16_z_tied1, svint16_t,
+ z0 = svhsubr_s16_z (p0, z0, z1),
+ z0 = svhsubr_z (p0, z0, z1))
+
+/*
+** hsubr_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s16_z_tied2, svint16_t,
+ z0 = svhsubr_s16_z (p0, z1, z0),
+ z0 = svhsubr_z (p0, z1, z0))
+
+/*
+** hsubr_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** shsubr z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s16_z_untied, svint16_t,
+ z0 = svhsubr_s16_z (p0, z1, z2),
+ z0 = svhsubr_z (p0, z1, z2))
+
+/*
+** hsubr_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** shsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svhsubr_n_s16_z (p0, z0, x0),
+ z0 = svhsubr_z (p0, z0, x0))
+
+/*
+** hsubr_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** shsubr z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svhsubr_n_s16_z (p0, z1, x0),
+ z0 = svhsubr_z (p0, z1, x0))
+
+/*
+** hsubr_11_s16_z_tied1:
+** mov (z[0-9]+\.h), #11
+** movprfx z0\.h, p0/z, z0\.h
+** shsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s16_z_tied1, svint16_t,
+ z0 = svhsubr_n_s16_z (p0, z0, 11),
+ z0 = svhsubr_z (p0, z0, 11))
+
+/*
+** hsubr_11_s16_z_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** shsubr z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s16_z_untied, svint16_t,
+ z0 = svhsubr_n_s16_z (p0, z1, 11),
+ z0 = svhsubr_z (p0, z1, 11))
+
+/*
+** hsubr_s16_x_tied1:
+** shsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s16_x_tied1, svint16_t,
+ z0 = svhsubr_s16_x (p0, z0, z1),
+ z0 = svhsubr_x (p0, z0, z1))
+
+/*
+** hsubr_s16_x_tied2:
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s16_x_tied2, svint16_t,
+ z0 = svhsubr_s16_x (p0, z1, z0),
+ z0 = svhsubr_x (p0, z1, z0))
+
+/*
+** hsubr_s16_x_untied:
+** (
+** movprfx z0, z1
+** shsubr z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0, z2
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s16_x_untied, svint16_t,
+ z0 = svhsubr_s16_x (p0, z1, z2),
+ z0 = svhsubr_x (p0, z1, z2))
+
+/*
+** hsubr_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** shsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svhsubr_n_s16_x (p0, z0, x0),
+ z0 = svhsubr_x (p0, z0, x0))
+
+/*
+** hsubr_w0_s16_x_untied:
+** mov z0\.h, w0
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svhsubr_n_s16_x (p0, z1, x0),
+ z0 = svhsubr_x (p0, z1, x0))
+
+/*
+** hsubr_11_s16_x_tied1:
+** mov (z[0-9]+\.h), #11
+** shsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s16_x_tied1, svint16_t,
+ z0 = svhsubr_n_s16_x (p0, z0, 11),
+ z0 = svhsubr_x (p0, z0, 11))
+
+/*
+** hsubr_11_s16_x_untied:
+** mov z0\.h, #11
+** shsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s16_x_untied, svint16_t,
+ z0 = svhsubr_n_s16_x (p0, z1, 11),
+ z0 = svhsubr_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsubr_s32_m_tied1:
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s32_m_tied1, svint32_t,
+ z0 = svhsubr_s32_m (p0, z0, z1),
+ z0 = svhsubr_m (p0, z0, z1))
+
+/*
+** hsubr_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** shsubr z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s32_m_tied2, svint32_t,
+ z0 = svhsubr_s32_m (p0, z1, z0),
+ z0 = svhsubr_m (p0, z1, z0))
+
+/*
+** hsubr_s32_m_untied:
+** movprfx z0, z1
+** shsubr z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s32_m_untied, svint32_t,
+ z0 = svhsubr_s32_m (p0, z1, z2),
+ z0 = svhsubr_m (p0, z1, z2))
+
+/*
+** hsubr_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** shsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svhsubr_n_s32_m (p0, z0, x0),
+ z0 = svhsubr_m (p0, z0, x0))
+
+/*
+** hsubr_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** shsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svhsubr_n_s32_m (p0, z1, x0),
+ z0 = svhsubr_m (p0, z1, x0))
+
+/*
+** hsubr_11_s32_m_tied1:
+** mov (z[0-9]+\.s), #11
+** shsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s32_m_tied1, svint32_t,
+ z0 = svhsubr_n_s32_m (p0, z0, 11),
+ z0 = svhsubr_m (p0, z0, 11))
+
+/*
+** hsubr_11_s32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** shsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s32_m_untied, svint32_t,
+ z0 = svhsubr_n_s32_m (p0, z1, 11),
+ z0 = svhsubr_m (p0, z1, 11))
+
+/*
+** hsubr_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s32_z_tied1, svint32_t,
+ z0 = svhsubr_s32_z (p0, z0, z1),
+ z0 = svhsubr_z (p0, z0, z1))
+
+/*
+** hsubr_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s32_z_tied2, svint32_t,
+ z0 = svhsubr_s32_z (p0, z1, z0),
+ z0 = svhsubr_z (p0, z1, z0))
+
+/*
+** hsubr_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** shsubr z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s32_z_untied, svint32_t,
+ z0 = svhsubr_s32_z (p0, z1, z2),
+ z0 = svhsubr_z (p0, z1, z2))
+
+/*
+** hsubr_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** shsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svhsubr_n_s32_z (p0, z0, x0),
+ z0 = svhsubr_z (p0, z0, x0))
+
+/*
+** hsubr_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** shsubr z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svhsubr_n_s32_z (p0, z1, x0),
+ z0 = svhsubr_z (p0, z1, x0))
+
+/*
+** hsubr_11_s32_z_tied1:
+** mov (z[0-9]+\.s), #11
+** movprfx z0\.s, p0/z, z0\.s
+** shsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s32_z_tied1, svint32_t,
+ z0 = svhsubr_n_s32_z (p0, z0, 11),
+ z0 = svhsubr_z (p0, z0, 11))
+
+/*
+** hsubr_11_s32_z_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** shsubr z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s32_z_untied, svint32_t,
+ z0 = svhsubr_n_s32_z (p0, z1, 11),
+ z0 = svhsubr_z (p0, z1, 11))
+
+/*
+** hsubr_s32_x_tied1:
+** shsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s32_x_tied1, svint32_t,
+ z0 = svhsubr_s32_x (p0, z0, z1),
+ z0 = svhsubr_x (p0, z0, z1))
+
+/*
+** hsubr_s32_x_tied2:
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s32_x_tied2, svint32_t,
+ z0 = svhsubr_s32_x (p0, z1, z0),
+ z0 = svhsubr_x (p0, z1, z0))
+
+/*
+** hsubr_s32_x_untied:
+** (
+** movprfx z0, z1
+** shsubr z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0, z2
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s32_x_untied, svint32_t,
+ z0 = svhsubr_s32_x (p0, z1, z2),
+ z0 = svhsubr_x (p0, z1, z2))
+
+/*
+** hsubr_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** shsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svhsubr_n_s32_x (p0, z0, x0),
+ z0 = svhsubr_x (p0, z0, x0))
+
+/*
+** hsubr_w0_s32_x_untied:
+** mov z0\.s, w0
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svhsubr_n_s32_x (p0, z1, x0),
+ z0 = svhsubr_x (p0, z1, x0))
+
+/*
+** hsubr_11_s32_x_tied1:
+** mov (z[0-9]+\.s), #11
+** shsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s32_x_tied1, svint32_t,
+ z0 = svhsubr_n_s32_x (p0, z0, 11),
+ z0 = svhsubr_x (p0, z0, 11))
+
+/*
+** hsubr_11_s32_x_untied:
+** mov z0\.s, #11
+** shsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s32_x_untied, svint32_t,
+ z0 = svhsubr_n_s32_x (p0, z1, 11),
+ z0 = svhsubr_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsubr_s64_m_tied1:
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s64_m_tied1, svint64_t,
+ z0 = svhsubr_s64_m (p0, z0, z1),
+ z0 = svhsubr_m (p0, z0, z1))
+
+/*
+** hsubr_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** shsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s64_m_tied2, svint64_t,
+ z0 = svhsubr_s64_m (p0, z1, z0),
+ z0 = svhsubr_m (p0, z1, z0))
+
+/*
+** hsubr_s64_m_untied:
+** movprfx z0, z1
+** shsubr z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s64_m_untied, svint64_t,
+ z0 = svhsubr_s64_m (p0, z1, z2),
+ z0 = svhsubr_m (p0, z1, z2))
+
+/*
+** hsubr_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** shsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svhsubr_n_s64_m (p0, z0, x0),
+ z0 = svhsubr_m (p0, z0, x0))
+
+/*
+** hsubr_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** shsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svhsubr_n_s64_m (p0, z1, x0),
+ z0 = svhsubr_m (p0, z1, x0))
+
+/*
+** hsubr_11_s64_m_tied1:
+** mov (z[0-9]+\.d), #11
+** shsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s64_m_tied1, svint64_t,
+ z0 = svhsubr_n_s64_m (p0, z0, 11),
+ z0 = svhsubr_m (p0, z0, 11))
+
+/*
+** hsubr_11_s64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** shsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s64_m_untied, svint64_t,
+ z0 = svhsubr_n_s64_m (p0, z1, 11),
+ z0 = svhsubr_m (p0, z1, 11))
+
+/*
+** hsubr_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s64_z_tied1, svint64_t,
+ z0 = svhsubr_s64_z (p0, z0, z1),
+ z0 = svhsubr_z (p0, z0, z1))
+
+/*
+** hsubr_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s64_z_tied2, svint64_t,
+ z0 = svhsubr_s64_z (p0, z1, z0),
+ z0 = svhsubr_z (p0, z1, z0))
+
+/*
+** hsubr_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** shsubr z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s64_z_untied, svint64_t,
+ z0 = svhsubr_s64_z (p0, z1, z2),
+ z0 = svhsubr_z (p0, z1, z2))
+
+/*
+** hsubr_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** shsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svhsubr_n_s64_z (p0, z0, x0),
+ z0 = svhsubr_z (p0, z0, x0))
+
+/*
+** hsubr_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** shsubr z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svhsubr_n_s64_z (p0, z1, x0),
+ z0 = svhsubr_z (p0, z1, x0))
+
+/*
+** hsubr_11_s64_z_tied1:
+** mov (z[0-9]+\.d), #11
+** movprfx z0\.d, p0/z, z0\.d
+** shsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s64_z_tied1, svint64_t,
+ z0 = svhsubr_n_s64_z (p0, z0, 11),
+ z0 = svhsubr_z (p0, z0, 11))
+
+/*
+** hsubr_11_s64_z_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** shsubr z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s64_z_untied, svint64_t,
+ z0 = svhsubr_n_s64_z (p0, z1, 11),
+ z0 = svhsubr_z (p0, z1, 11))
+
+/*
+** hsubr_s64_x_tied1:
+** shsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s64_x_tied1, svint64_t,
+ z0 = svhsubr_s64_x (p0, z0, z1),
+ z0 = svhsubr_x (p0, z0, z1))
+
+/*
+** hsubr_s64_x_tied2:
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s64_x_tied2, svint64_t,
+ z0 = svhsubr_s64_x (p0, z1, z0),
+ z0 = svhsubr_x (p0, z1, z0))
+
+/*
+** hsubr_s64_x_untied:
+** (
+** movprfx z0, z1
+** shsubr z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0, z2
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s64_x_untied, svint64_t,
+ z0 = svhsubr_s64_x (p0, z1, z2),
+ z0 = svhsubr_x (p0, z1, z2))
+
+/*
+** hsubr_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** shsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svhsubr_n_s64_x (p0, z0, x0),
+ z0 = svhsubr_x (p0, z0, x0))
+
+/*
+** hsubr_x0_s64_x_untied:
+** mov z0\.d, x0
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svhsubr_n_s64_x (p0, z1, x0),
+ z0 = svhsubr_x (p0, z1, x0))
+
+/*
+** hsubr_11_s64_x_tied1:
+** mov (z[0-9]+\.d), #11
+** shsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s64_x_tied1, svint64_t,
+ z0 = svhsubr_n_s64_x (p0, z0, 11),
+ z0 = svhsubr_x (p0, z0, 11))
+
+/*
+** hsubr_11_s64_x_untied:
+** mov z0\.d, #11
+** shsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s64_x_untied, svint64_t,
+ z0 = svhsubr_n_s64_x (p0, z1, 11),
+ z0 = svhsubr_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsubr_s8_m_tied1:
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s8_m_tied1, svint8_t,
+ z0 = svhsubr_s8_m (p0, z0, z1),
+ z0 = svhsubr_m (p0, z0, z1))
+
+/*
+** hsubr_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** shsubr z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s8_m_tied2, svint8_t,
+ z0 = svhsubr_s8_m (p0, z1, z0),
+ z0 = svhsubr_m (p0, z1, z0))
+
+/*
+** hsubr_s8_m_untied:
+** movprfx z0, z1
+** shsubr z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s8_m_untied, svint8_t,
+ z0 = svhsubr_s8_m (p0, z1, z2),
+ z0 = svhsubr_m (p0, z1, z2))
+
+/*
+** hsubr_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** shsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svhsubr_n_s8_m (p0, z0, x0),
+ z0 = svhsubr_m (p0, z0, x0))
+
+/*
+** hsubr_w0_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** shsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svhsubr_n_s8_m (p0, z1, x0),
+ z0 = svhsubr_m (p0, z1, x0))
+
+/*
+** hsubr_11_s8_m_tied1:
+** mov (z[0-9]+\.b), #11
+** shsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s8_m_tied1, svint8_t,
+ z0 = svhsubr_n_s8_m (p0, z0, 11),
+ z0 = svhsubr_m (p0, z0, 11))
+
+/*
+** hsubr_11_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** shsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s8_m_untied, svint8_t,
+ z0 = svhsubr_n_s8_m (p0, z1, 11),
+ z0 = svhsubr_m (p0, z1, 11))
+
+/*
+** hsubr_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s8_z_tied1, svint8_t,
+ z0 = svhsubr_s8_z (p0, z0, z1),
+ z0 = svhsubr_z (p0, z0, z1))
+
+/*
+** hsubr_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s8_z_tied2, svint8_t,
+ z0 = svhsubr_s8_z (p0, z1, z0),
+ z0 = svhsubr_z (p0, z1, z0))
+
+/*
+** hsubr_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** shsubr z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s8_z_untied, svint8_t,
+ z0 = svhsubr_s8_z (p0, z1, z2),
+ z0 = svhsubr_z (p0, z1, z2))
+
+/*
+** hsubr_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** shsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svhsubr_n_s8_z (p0, z0, x0),
+ z0 = svhsubr_z (p0, z0, x0))
+
+/*
+** hsubr_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** shsubr z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svhsubr_n_s8_z (p0, z1, x0),
+ z0 = svhsubr_z (p0, z1, x0))
+
+/*
+** hsubr_11_s8_z_tied1:
+** mov (z[0-9]+\.b), #11
+** movprfx z0\.b, p0/z, z0\.b
+** shsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s8_z_tied1, svint8_t,
+ z0 = svhsubr_n_s8_z (p0, z0, 11),
+ z0 = svhsubr_z (p0, z0, 11))
+
+/*
+** hsubr_11_s8_z_untied:
+** mov (z[0-9]+\.b), #11
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** shsubr z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s8_z_untied, svint8_t,
+ z0 = svhsubr_n_s8_z (p0, z1, 11),
+ z0 = svhsubr_z (p0, z1, 11))
+
+/*
+** hsubr_s8_x_tied1:
+** shsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s8_x_tied1, svint8_t,
+ z0 = svhsubr_s8_x (p0, z0, z1),
+ z0 = svhsubr_x (p0, z0, z1))
+
+/*
+** hsubr_s8_x_tied2:
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s8_x_tied2, svint8_t,
+ z0 = svhsubr_s8_x (p0, z1, z0),
+ z0 = svhsubr_x (p0, z1, z0))
+
+/*
+** hsubr_s8_x_untied:
+** (
+** movprfx z0, z1
+** shsubr z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0, z2
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_s8_x_untied, svint8_t,
+ z0 = svhsubr_s8_x (p0, z1, z2),
+ z0 = svhsubr_x (p0, z1, z2))
+
+/*
+** hsubr_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** shsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svhsubr_n_s8_x (p0, z0, x0),
+ z0 = svhsubr_x (p0, z0, x0))
+
+/*
+** hsubr_w0_s8_x_untied:
+** mov z0\.b, w0
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svhsubr_n_s8_x (p0, z1, x0),
+ z0 = svhsubr_x (p0, z1, x0))
+
+/*
+** hsubr_11_s8_x_tied1:
+** mov (z[0-9]+\.b), #11
+** shsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s8_x_tied1, svint8_t,
+ z0 = svhsubr_n_s8_x (p0, z0, 11),
+ z0 = svhsubr_x (p0, z0, 11))
+
+/*
+** hsubr_11_s8_x_untied:
+** mov z0\.b, #11
+** shsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_s8_x_untied, svint8_t,
+ z0 = svhsubr_n_s8_x (p0, z1, 11),
+ z0 = svhsubr_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsubr_u16_m_tied1:
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u16_m_tied1, svuint16_t,
+ z0 = svhsubr_u16_m (p0, z0, z1),
+ z0 = svhsubr_m (p0, z0, z1))
+
+/*
+** hsubr_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uhsubr z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u16_m_tied2, svuint16_t,
+ z0 = svhsubr_u16_m (p0, z1, z0),
+ z0 = svhsubr_m (p0, z1, z0))
+
+/*
+** hsubr_u16_m_untied:
+** movprfx z0, z1
+** uhsubr z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u16_m_untied, svuint16_t,
+ z0 = svhsubr_u16_m (p0, z1, z2),
+ z0 = svhsubr_m (p0, z1, z2))
+
+/*
+** hsubr_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u16_m_tied1, svuint16_t, uint16_t,
+ z0 = svhsubr_n_u16_m (p0, z0, x0),
+ z0 = svhsubr_m (p0, z0, x0))
+
+/*
+** hsubr_w0_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u16_m_untied, svuint16_t, uint16_t,
+ z0 = svhsubr_n_u16_m (p0, z1, x0),
+ z0 = svhsubr_m (p0, z1, x0))
+
+/*
+** hsubr_11_u16_m_tied1:
+** mov (z[0-9]+\.h), #11
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u16_m_tied1, svuint16_t,
+ z0 = svhsubr_n_u16_m (p0, z0, 11),
+ z0 = svhsubr_m (p0, z0, 11))
+
+/*
+** hsubr_11_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u16_m_untied, svuint16_t,
+ z0 = svhsubr_n_u16_m (p0, z1, 11),
+ z0 = svhsubr_m (p0, z1, 11))
+
+/*
+** hsubr_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u16_z_tied1, svuint16_t,
+ z0 = svhsubr_u16_z (p0, z0, z1),
+ z0 = svhsubr_z (p0, z0, z1))
+
+/*
+** hsubr_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u16_z_tied2, svuint16_t,
+ z0 = svhsubr_u16_z (p0, z1, z0),
+ z0 = svhsubr_z (p0, z1, z0))
+
+/*
+** hsubr_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uhsubr z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u16_z_untied, svuint16_t,
+ z0 = svhsubr_u16_z (p0, z1, z2),
+ z0 = svhsubr_z (p0, z1, z2))
+
+/*
+** hsubr_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u16_z_tied1, svuint16_t, uint16_t,
+ z0 = svhsubr_n_u16_z (p0, z0, x0),
+ z0 = svhsubr_z (p0, z0, x0))
+
+/*
+** hsubr_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u16_z_untied, svuint16_t, uint16_t,
+ z0 = svhsubr_n_u16_z (p0, z1, x0),
+ z0 = svhsubr_z (p0, z1, x0))
+
+/*
+** hsubr_11_u16_z_tied1:
+** mov (z[0-9]+\.h), #11
+** movprfx z0\.h, p0/z, z0\.h
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u16_z_tied1, svuint16_t,
+ z0 = svhsubr_n_u16_z (p0, z0, 11),
+ z0 = svhsubr_z (p0, z0, 11))
+
+/*
+** hsubr_11_u16_z_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u16_z_untied, svuint16_t,
+ z0 = svhsubr_n_u16_z (p0, z1, 11),
+ z0 = svhsubr_z (p0, z1, 11))
+
+/*
+** hsubr_u16_x_tied1:
+** uhsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u16_x_tied1, svuint16_t,
+ z0 = svhsubr_u16_x (p0, z0, z1),
+ z0 = svhsubr_x (p0, z0, z1))
+
+/*
+** hsubr_u16_x_tied2:
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u16_x_tied2, svuint16_t,
+ z0 = svhsubr_u16_x (p0, z1, z0),
+ z0 = svhsubr_x (p0, z1, z0))
+
+/*
+** hsubr_u16_x_untied:
+** (
+** movprfx z0, z1
+** uhsubr z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0, z2
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u16_x_untied, svuint16_t,
+ z0 = svhsubr_u16_x (p0, z1, z2),
+ z0 = svhsubr_x (p0, z1, z2))
+
+/*
+** hsubr_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u16_x_tied1, svuint16_t, uint16_t,
+ z0 = svhsubr_n_u16_x (p0, z0, x0),
+ z0 = svhsubr_x (p0, z0, x0))
+
+/*
+** hsubr_w0_u16_x_untied:
+** mov z0\.h, w0
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u16_x_untied, svuint16_t, uint16_t,
+ z0 = svhsubr_n_u16_x (p0, z1, x0),
+ z0 = svhsubr_x (p0, z1, x0))
+
+/*
+** hsubr_11_u16_x_tied1:
+** mov (z[0-9]+\.h), #11
+** uhsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u16_x_tied1, svuint16_t,
+ z0 = svhsubr_n_u16_x (p0, z0, 11),
+ z0 = svhsubr_x (p0, z0, 11))
+
+/*
+** hsubr_11_u16_x_untied:
+** mov z0\.h, #11
+** uhsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u16_x_untied, svuint16_t,
+ z0 = svhsubr_n_u16_x (p0, z1, 11),
+ z0 = svhsubr_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsubr_u32_m_tied1:
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u32_m_tied1, svuint32_t,
+ z0 = svhsubr_u32_m (p0, z0, z1),
+ z0 = svhsubr_m (p0, z0, z1))
+
+/*
+** hsubr_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uhsubr z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u32_m_tied2, svuint32_t,
+ z0 = svhsubr_u32_m (p0, z1, z0),
+ z0 = svhsubr_m (p0, z1, z0))
+
+/*
+** hsubr_u32_m_untied:
+** movprfx z0, z1
+** uhsubr z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u32_m_untied, svuint32_t,
+ z0 = svhsubr_u32_m (p0, z1, z2),
+ z0 = svhsubr_m (p0, z1, z2))
+
+/*
+** hsubr_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u32_m_tied1, svuint32_t, uint32_t,
+ z0 = svhsubr_n_u32_m (p0, z0, x0),
+ z0 = svhsubr_m (p0, z0, x0))
+
+/*
+** hsubr_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u32_m_untied, svuint32_t, uint32_t,
+ z0 = svhsubr_n_u32_m (p0, z1, x0),
+ z0 = svhsubr_m (p0, z1, x0))
+
+/*
+** hsubr_11_u32_m_tied1:
+** mov (z[0-9]+\.s), #11
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u32_m_tied1, svuint32_t,
+ z0 = svhsubr_n_u32_m (p0, z0, 11),
+ z0 = svhsubr_m (p0, z0, 11))
+
+/*
+** hsubr_11_u32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u32_m_untied, svuint32_t,
+ z0 = svhsubr_n_u32_m (p0, z1, 11),
+ z0 = svhsubr_m (p0, z1, 11))
+
+/*
+** hsubr_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u32_z_tied1, svuint32_t,
+ z0 = svhsubr_u32_z (p0, z0, z1),
+ z0 = svhsubr_z (p0, z0, z1))
+
+/*
+** hsubr_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u32_z_tied2, svuint32_t,
+ z0 = svhsubr_u32_z (p0, z1, z0),
+ z0 = svhsubr_z (p0, z1, z0))
+
+/*
+** hsubr_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uhsubr z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u32_z_untied, svuint32_t,
+ z0 = svhsubr_u32_z (p0, z1, z2),
+ z0 = svhsubr_z (p0, z1, z2))
+
+/*
+** hsubr_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u32_z_tied1, svuint32_t, uint32_t,
+ z0 = svhsubr_n_u32_z (p0, z0, x0),
+ z0 = svhsubr_z (p0, z0, x0))
+
+/*
+** hsubr_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u32_z_untied, svuint32_t, uint32_t,
+ z0 = svhsubr_n_u32_z (p0, z1, x0),
+ z0 = svhsubr_z (p0, z1, x0))
+
+/*
+** hsubr_11_u32_z_tied1:
+** mov (z[0-9]+\.s), #11
+** movprfx z0\.s, p0/z, z0\.s
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u32_z_tied1, svuint32_t,
+ z0 = svhsubr_n_u32_z (p0, z0, 11),
+ z0 = svhsubr_z (p0, z0, 11))
+
+/*
+** hsubr_11_u32_z_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u32_z_untied, svuint32_t,
+ z0 = svhsubr_n_u32_z (p0, z1, 11),
+ z0 = svhsubr_z (p0, z1, 11))
+
+/*
+** hsubr_u32_x_tied1:
+** uhsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u32_x_tied1, svuint32_t,
+ z0 = svhsubr_u32_x (p0, z0, z1),
+ z0 = svhsubr_x (p0, z0, z1))
+
+/*
+** hsubr_u32_x_tied2:
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u32_x_tied2, svuint32_t,
+ z0 = svhsubr_u32_x (p0, z1, z0),
+ z0 = svhsubr_x (p0, z1, z0))
+
+/*
+** hsubr_u32_x_untied:
+** (
+** movprfx z0, z1
+** uhsubr z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0, z2
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u32_x_untied, svuint32_t,
+ z0 = svhsubr_u32_x (p0, z1, z2),
+ z0 = svhsubr_x (p0, z1, z2))
+
+/*
+** hsubr_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u32_x_tied1, svuint32_t, uint32_t,
+ z0 = svhsubr_n_u32_x (p0, z0, x0),
+ z0 = svhsubr_x (p0, z0, x0))
+
+/*
+** hsubr_w0_u32_x_untied:
+** mov z0\.s, w0
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u32_x_untied, svuint32_t, uint32_t,
+ z0 = svhsubr_n_u32_x (p0, z1, x0),
+ z0 = svhsubr_x (p0, z1, x0))
+
+/*
+** hsubr_11_u32_x_tied1:
+** mov (z[0-9]+\.s), #11
+** uhsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u32_x_tied1, svuint32_t,
+ z0 = svhsubr_n_u32_x (p0, z0, 11),
+ z0 = svhsubr_x (p0, z0, 11))
+
+/*
+** hsubr_11_u32_x_untied:
+** mov z0\.s, #11
+** uhsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u32_x_untied, svuint32_t,
+ z0 = svhsubr_n_u32_x (p0, z1, 11),
+ z0 = svhsubr_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsubr_u64_m_tied1:
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u64_m_tied1, svuint64_t,
+ z0 = svhsubr_u64_m (p0, z0, z1),
+ z0 = svhsubr_m (p0, z0, z1))
+
+/*
+** hsubr_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u64_m_tied2, svuint64_t,
+ z0 = svhsubr_u64_m (p0, z1, z0),
+ z0 = svhsubr_m (p0, z1, z0))
+
+/*
+** hsubr_u64_m_untied:
+** movprfx z0, z1
+** uhsubr z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u64_m_untied, svuint64_t,
+ z0 = svhsubr_u64_m (p0, z1, z2),
+ z0 = svhsubr_m (p0, z1, z2))
+
+/*
+** hsubr_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_u64_m_tied1, svuint64_t, uint64_t,
+ z0 = svhsubr_n_u64_m (p0, z0, x0),
+ z0 = svhsubr_m (p0, z0, x0))
+
+/*
+** hsubr_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_u64_m_untied, svuint64_t, uint64_t,
+ z0 = svhsubr_n_u64_m (p0, z1, x0),
+ z0 = svhsubr_m (p0, z1, x0))
+
+/*
+** hsubr_11_u64_m_tied1:
+** mov (z[0-9]+\.d), #11
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u64_m_tied1, svuint64_t,
+ z0 = svhsubr_n_u64_m (p0, z0, 11),
+ z0 = svhsubr_m (p0, z0, 11))
+
+/*
+** hsubr_11_u64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u64_m_untied, svuint64_t,
+ z0 = svhsubr_n_u64_m (p0, z1, 11),
+ z0 = svhsubr_m (p0, z1, 11))
+
+/*
+** hsubr_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u64_z_tied1, svuint64_t,
+ z0 = svhsubr_u64_z (p0, z0, z1),
+ z0 = svhsubr_z (p0, z0, z1))
+
+/*
+** hsubr_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u64_z_tied2, svuint64_t,
+ z0 = svhsubr_u64_z (p0, z1, z0),
+ z0 = svhsubr_z (p0, z1, z0))
+
+/*
+** hsubr_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uhsubr z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u64_z_untied, svuint64_t,
+ z0 = svhsubr_u64_z (p0, z1, z2),
+ z0 = svhsubr_z (p0, z1, z2))
+
+/*
+** hsubr_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_u64_z_tied1, svuint64_t, uint64_t,
+ z0 = svhsubr_n_u64_z (p0, z0, x0),
+ z0 = svhsubr_z (p0, z0, x0))
+
+/*
+** hsubr_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_u64_z_untied, svuint64_t, uint64_t,
+ z0 = svhsubr_n_u64_z (p0, z1, x0),
+ z0 = svhsubr_z (p0, z1, x0))
+
+/*
+** hsubr_11_u64_z_tied1:
+** mov (z[0-9]+\.d), #11
+** movprfx z0\.d, p0/z, z0\.d
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u64_z_tied1, svuint64_t,
+ z0 = svhsubr_n_u64_z (p0, z0, 11),
+ z0 = svhsubr_z (p0, z0, 11))
+
+/*
+** hsubr_11_u64_z_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u64_z_untied, svuint64_t,
+ z0 = svhsubr_n_u64_z (p0, z1, 11),
+ z0 = svhsubr_z (p0, z1, 11))
+
+/*
+** hsubr_u64_x_tied1:
+** uhsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u64_x_tied1, svuint64_t,
+ z0 = svhsubr_u64_x (p0, z0, z1),
+ z0 = svhsubr_x (p0, z0, z1))
+
+/*
+** hsubr_u64_x_tied2:
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u64_x_tied2, svuint64_t,
+ z0 = svhsubr_u64_x (p0, z1, z0),
+ z0 = svhsubr_x (p0, z1, z0))
+
+/*
+** hsubr_u64_x_untied:
+** (
+** movprfx z0, z1
+** uhsubr z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0, z2
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u64_x_untied, svuint64_t,
+ z0 = svhsubr_u64_x (p0, z1, z2),
+ z0 = svhsubr_x (p0, z1, z2))
+
+/*
+** hsubr_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_u64_x_tied1, svuint64_t, uint64_t,
+ z0 = svhsubr_n_u64_x (p0, z0, x0),
+ z0 = svhsubr_x (p0, z0, x0))
+
+/*
+** hsubr_x0_u64_x_untied:
+** mov z0\.d, x0
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_x0_u64_x_untied, svuint64_t, uint64_t,
+ z0 = svhsubr_n_u64_x (p0, z1, x0),
+ z0 = svhsubr_x (p0, z1, x0))
+
+/*
+** hsubr_11_u64_x_tied1:
+** mov (z[0-9]+\.d), #11
+** uhsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u64_x_tied1, svuint64_t,
+ z0 = svhsubr_n_u64_x (p0, z0, 11),
+ z0 = svhsubr_x (p0, z0, 11))
+
+/*
+** hsubr_11_u64_x_untied:
+** mov z0\.d, #11
+** uhsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u64_x_untied, svuint64_t,
+ z0 = svhsubr_n_u64_x (p0, z1, 11),
+ z0 = svhsubr_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** hsubr_u8_m_tied1:
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u8_m_tied1, svuint8_t,
+ z0 = svhsubr_u8_m (p0, z0, z1),
+ z0 = svhsubr_m (p0, z0, z1))
+
+/*
+** hsubr_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uhsubr z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u8_m_tied2, svuint8_t,
+ z0 = svhsubr_u8_m (p0, z1, z0),
+ z0 = svhsubr_m (p0, z1, z0))
+
+/*
+** hsubr_u8_m_untied:
+** movprfx z0, z1
+** uhsubr z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u8_m_untied, svuint8_t,
+ z0 = svhsubr_u8_m (p0, z1, z2),
+ z0 = svhsubr_m (p0, z1, z2))
+
+/*
+** hsubr_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u8_m_tied1, svuint8_t, uint8_t,
+ z0 = svhsubr_n_u8_m (p0, z0, x0),
+ z0 = svhsubr_m (p0, z0, x0))
+
+/*
+** hsubr_w0_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u8_m_untied, svuint8_t, uint8_t,
+ z0 = svhsubr_n_u8_m (p0, z1, x0),
+ z0 = svhsubr_m (p0, z1, x0))
+
+/*
+** hsubr_11_u8_m_tied1:
+** mov (z[0-9]+\.b), #11
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u8_m_tied1, svuint8_t,
+ z0 = svhsubr_n_u8_m (p0, z0, 11),
+ z0 = svhsubr_m (p0, z0, 11))
+
+/*
+** hsubr_11_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u8_m_untied, svuint8_t,
+ z0 = svhsubr_n_u8_m (p0, z1, 11),
+ z0 = svhsubr_m (p0, z1, 11))
+
+/*
+** hsubr_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u8_z_tied1, svuint8_t,
+ z0 = svhsubr_u8_z (p0, z0, z1),
+ z0 = svhsubr_z (p0, z0, z1))
+
+/*
+** hsubr_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u8_z_tied2, svuint8_t,
+ z0 = svhsubr_u8_z (p0, z1, z0),
+ z0 = svhsubr_z (p0, z1, z0))
+
+/*
+** hsubr_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uhsubr z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u8_z_untied, svuint8_t,
+ z0 = svhsubr_u8_z (p0, z1, z2),
+ z0 = svhsubr_z (p0, z1, z2))
+
+/*
+** hsubr_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u8_z_tied1, svuint8_t, uint8_t,
+ z0 = svhsubr_n_u8_z (p0, z0, x0),
+ z0 = svhsubr_z (p0, z0, x0))
+
+/*
+** hsubr_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u8_z_untied, svuint8_t, uint8_t,
+ z0 = svhsubr_n_u8_z (p0, z1, x0),
+ z0 = svhsubr_z (p0, z1, x0))
+
+/*
+** hsubr_11_u8_z_tied1:
+** mov (z[0-9]+\.b), #11
+** movprfx z0\.b, p0/z, z0\.b
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u8_z_tied1, svuint8_t,
+ z0 = svhsubr_n_u8_z (p0, z0, 11),
+ z0 = svhsubr_z (p0, z0, 11))
+
+/*
+** hsubr_11_u8_z_untied:
+** mov (z[0-9]+\.b), #11
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u8_z_untied, svuint8_t,
+ z0 = svhsubr_n_u8_z (p0, z1, 11),
+ z0 = svhsubr_z (p0, z1, 11))
+
+/*
+** hsubr_u8_x_tied1:
+** uhsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u8_x_tied1, svuint8_t,
+ z0 = svhsubr_u8_x (p0, z0, z1),
+ z0 = svhsubr_x (p0, z0, z1))
+
+/*
+** hsubr_u8_x_tied2:
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u8_x_tied2, svuint8_t,
+ z0 = svhsubr_u8_x (p0, z1, z0),
+ z0 = svhsubr_x (p0, z1, z0))
+
+/*
+** hsubr_u8_x_untied:
+** (
+** movprfx z0, z1
+** uhsubr z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0, z2
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_u8_x_untied, svuint8_t,
+ z0 = svhsubr_u8_x (p0, z1, z2),
+ z0 = svhsubr_x (p0, z1, z2))
+
+/*
+** hsubr_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u8_x_tied1, svuint8_t, uint8_t,
+ z0 = svhsubr_n_u8_x (p0, z0, x0),
+ z0 = svhsubr_x (p0, z0, x0))
+
+/*
+** hsubr_w0_u8_x_untied:
+** mov z0\.b, w0
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (hsubr_w0_u8_x_untied, svuint8_t, uint8_t,
+ z0 = svhsubr_n_u8_x (p0, z1, x0),
+ z0 = svhsubr_x (p0, z1, x0))
+
+/*
+** hsubr_11_u8_x_tied1:
+** mov (z[0-9]+\.b), #11
+** uhsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u8_x_tied1, svuint8_t,
+ z0 = svhsubr_n_u8_x (p0, z0, 11),
+ z0 = svhsubr_x (p0, z0, 11))
+
+/*
+** hsubr_11_u8_x_untied:
+** mov z0\.b, #11
+** uhsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (hsubr_11_u8_x_untied, svuint8_t,
+ z0 = svhsubr_n_u8_x (p0, z1, 11),
+ z0 = svhsubr_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1_gather_f32_tied1:
+** ldnt1w z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_f32_tied1, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_f32 (p0, z0),
+ z0_res = svldnt1_gather_f32 (p0, z0))
+
+/*
+** ldnt1_gather_f32_untied:
+** ldnt1w z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_f32_untied, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_f32 (p0, z1),
+ z0_res = svldnt1_gather_f32 (p0, z1))
+
+/*
+** ldnt1_gather_x0_f32_offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_f32_offset, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_f32 (p0, z0, x0),
+ z0_res = svldnt1_gather_offset_f32 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m4_f32_offset:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m4_f32_offset, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_f32 (p0, z0, -4),
+ z0_res = svldnt1_gather_offset_f32 (p0, z0, -4))
+
+/*
+** ldnt1_gather_0_f32_offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_f32_offset, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_f32 (p0, z0, 0),
+ z0_res = svldnt1_gather_offset_f32 (p0, z0, 0))
+
+/*
+** ldnt1_gather_5_f32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_5_f32_offset, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_f32 (p0, z0, 5),
+ z0_res = svldnt1_gather_offset_f32 (p0, z0, 5))
+
+/*
+** ldnt1_gather_6_f32_offset:
+** mov (x[0-9]+), #?6
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_6_f32_offset, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_f32 (p0, z0, 6),
+ z0_res = svldnt1_gather_offset_f32 (p0, z0, 6))
+
+/*
+** ldnt1_gather_7_f32_offset:
+** mov (x[0-9]+), #?7
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_7_f32_offset, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_f32 (p0, z0, 7),
+ z0_res = svldnt1_gather_offset_f32 (p0, z0, 7))
+
+/*
+** ldnt1_gather_8_f32_offset:
+** mov (x[0-9]+), #?8
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_8_f32_offset, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_f32 (p0, z0, 8),
+ z0_res = svldnt1_gather_offset_f32 (p0, z0, 8))
+
+/*
+** ldnt1_gather_124_f32_offset:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_124_f32_offset, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_f32 (p0, z0, 124),
+ z0_res = svldnt1_gather_offset_f32 (p0, z0, 124))
+
+/*
+** ldnt1_gather_128_f32_offset:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_128_f32_offset, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_f32 (p0, z0, 128),
+ z0_res = svldnt1_gather_offset_f32 (p0, z0, 128))
+
+/*
+** ldnt1_gather_x0_f32_index:
+** lsl (x[0-9]+), x0, #?2
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_f32_index, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_f32 (p0, z0, x0),
+ z0_res = svldnt1_gather_index_f32 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m1_f32_index:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m1_f32_index, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_f32 (p0, z0, -1),
+ z0_res = svldnt1_gather_index_f32 (p0, z0, -1))
+
+/*
+** ldnt1_gather_0_f32_index:
+** ldnt1w z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_f32_index, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_f32 (p0, z0, 0),
+ z0_res = svldnt1_gather_index_f32 (p0, z0, 0))
+
+/*
+** ldnt1_gather_5_f32_index:
+** mov (x[0-9]+), #?20
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_5_f32_index, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_f32 (p0, z0, 5),
+ z0_res = svldnt1_gather_index_f32 (p0, z0, 5))
+
+/*
+** ldnt1_gather_31_f32_index:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_31_f32_index, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_f32 (p0, z0, 31),
+ z0_res = svldnt1_gather_index_f32 (p0, z0, 31))
+
+/*
+** ldnt1_gather_32_f32_index:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_32_f32_index, svfloat32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_f32 (p0, z0, 32),
+ z0_res = svldnt1_gather_index_f32 (p0, z0, 32))
+
+/*
+** ldnt1_gather_x0_f32_u32offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_f32_u32offset, svfloat32_t, float32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32offset_f32 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_f32_u32offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_f32_u32offset, svfloat32_t, float32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32offset_f32 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_f32_u32offset:
+** ldnt1w z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_f32_u32offset, svfloat32_t, float32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32offset_f32 (p0, x0, z1),
+ z0_res = svldnt1_gather_offset (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1_gather_f64_tied1:
+** ldnt1d z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_f64_tied1, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_f64 (p0, z0),
+ z0_res = svldnt1_gather_f64 (p0, z0))
+
+/*
+** ldnt1_gather_f64_untied:
+** ldnt1d z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_f64_untied, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_f64 (p0, z1),
+ z0_res = svldnt1_gather_f64 (p0, z1))
+
+/*
+** ldnt1_gather_x0_f64_offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, x0),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m8_f64_offset:
+** mov (x[0-9]+), #?-8
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m8_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, -8),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, -8))
+
+/*
+** ldnt1_gather_0_f64_offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 0),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 0))
+
+/*
+** ldnt1_gather_9_f64_offset:
+** mov (x[0-9]+), #?9
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_9_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 9),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 9))
+
+/*
+** ldnt1_gather_10_f64_offset:
+** mov (x[0-9]+), #?10
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_10_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 10),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 10))
+
+/*
+** ldnt1_gather_11_f64_offset:
+** mov (x[0-9]+), #?11
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_11_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 11),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 11))
+
+/*
+** ldnt1_gather_12_f64_offset:
+** mov (x[0-9]+), #?12
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_12_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 12),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 12))
+
+/*
+** ldnt1_gather_13_f64_offset:
+** mov (x[0-9]+), #?13
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_13_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 13),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 13))
+
+/*
+** ldnt1_gather_14_f64_offset:
+** mov (x[0-9]+), #?14
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_14_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 14),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 14))
+
+/*
+** ldnt1_gather_15_f64_offset:
+** mov (x[0-9]+), #?15
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_15_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 15),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 15))
+
+/*
+** ldnt1_gather_16_f64_offset:
+** mov (x[0-9]+), #?16
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_16_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 16),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 16))
+
+/*
+** ldnt1_gather_248_f64_offset:
+** mov (x[0-9]+), #?248
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_248_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 248),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 248))
+
+/*
+** ldnt1_gather_256_f64_offset:
+** mov (x[0-9]+), #?256
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_256_f64_offset, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_f64 (p0, z0, 256),
+ z0_res = svldnt1_gather_offset_f64 (p0, z0, 256))
+
+/*
+** ldnt1_gather_x0_f64_index:
+** lsl (x[0-9]+), x0, #?3
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_f64_index, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_f64 (p0, z0, x0),
+ z0_res = svldnt1_gather_index_f64 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m1_f64_index:
+** mov (x[0-9]+), #?-8
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m1_f64_index, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_f64 (p0, z0, -1),
+ z0_res = svldnt1_gather_index_f64 (p0, z0, -1))
+
+/*
+** ldnt1_gather_0_f64_index:
+** ldnt1d z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_f64_index, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_f64 (p0, z0, 0),
+ z0_res = svldnt1_gather_index_f64 (p0, z0, 0))
+
+/*
+** ldnt1_gather_5_f64_index:
+** mov (x[0-9]+), #?40
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_5_f64_index, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_f64 (p0, z0, 5),
+ z0_res = svldnt1_gather_index_f64 (p0, z0, 5))
+
+/*
+** ldnt1_gather_31_f64_index:
+** mov (x[0-9]+), #?248
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_31_f64_index, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_f64 (p0, z0, 31),
+ z0_res = svldnt1_gather_index_f64 (p0, z0, 31))
+
+/*
+** ldnt1_gather_32_f64_index:
+** mov (x[0-9]+), #?256
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_32_f64_index, svfloat64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_f64 (p0, z0, 32),
+ z0_res = svldnt1_gather_index_f64 (p0, z0, 32))
+
+/*
+** ldnt1_gather_x0_f64_s64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_f64_s64offset, svfloat64_t, float64_t, svint64_t,
+ z0_res = svldnt1_gather_s64offset_f64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_f64_s64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_f64_s64offset, svfloat64_t, float64_t, svint64_t,
+ z0_res = svldnt1_gather_s64offset_f64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_f64_s64offset:
+** ldnt1d z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_f64_s64offset, svfloat64_t, float64_t, svint64_t,
+ z0_res = svldnt1_gather_s64offset_f64 (p0, x0, z1),
+ z0_res = svldnt1_gather_offset (p0, x0, z1))
+
+/*
+** ldnt1_gather_x0_f64_u64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_f64_u64offset, svfloat64_t, float64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64offset_f64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_f64_u64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_f64_u64offset, svfloat64_t, float64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64offset_f64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_f64_u64offset:
+** ldnt1d z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_f64_u64offset, svfloat64_t, float64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64offset_f64 (p0, x0, z1),
+ z0_res = svldnt1_gather_offset (p0, x0, z1))
+
+/*
+** ldnt1_gather_x0_f64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_f64_s64index, svfloat64_t, float64_t, svint64_t,
+ z0_res = svldnt1_gather_s64index_f64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_f64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_f64_s64index, svfloat64_t, float64_t, svint64_t,
+ z0_res = svldnt1_gather_s64index_f64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_f64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_f64_s64index, svfloat64_t, float64_t, svint64_t,
+ z0_res = svldnt1_gather_s64index_f64 (p0, x0, z1),
+ z0_res = svldnt1_gather_index (p0, x0, z1))
+
+/*
+** ldnt1_gather_x0_f64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_f64_u64index, svfloat64_t, float64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64index_f64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_f64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_f64_u64index, svfloat64_t, float64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64index_f64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_f64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_f64_u64index, svfloat64_t, float64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64index_f64 (p0, x0, z1),
+ z0_res = svldnt1_gather_index (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1_gather_s32_tied1:
+** ldnt1w z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_s32_tied1, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_s32 (p0, z0),
+ z0_res = svldnt1_gather_s32 (p0, z0))
+
+/*
+** ldnt1_gather_s32_untied:
+** ldnt1w z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_s32_untied, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_s32 (p0, z1),
+ z0_res = svldnt1_gather_s32 (p0, z1))
+
+/*
+** ldnt1_gather_x0_s32_offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_s32 (p0, z0, x0),
+ z0_res = svldnt1_gather_offset_s32 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m4_s32_offset:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m4_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_s32 (p0, z0, -4),
+ z0_res = svldnt1_gather_offset_s32 (p0, z0, -4))
+
+/*
+** ldnt1_gather_0_s32_offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_s32 (p0, z0, 0),
+ z0_res = svldnt1_gather_offset_s32 (p0, z0, 0))
+
+/*
+** ldnt1_gather_5_s32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_5_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_s32 (p0, z0, 5),
+ z0_res = svldnt1_gather_offset_s32 (p0, z0, 5))
+
+/*
+** ldnt1_gather_6_s32_offset:
+** mov (x[0-9]+), #?6
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_6_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_s32 (p0, z0, 6),
+ z0_res = svldnt1_gather_offset_s32 (p0, z0, 6))
+
+/*
+** ldnt1_gather_7_s32_offset:
+** mov (x[0-9]+), #?7
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_7_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_s32 (p0, z0, 7),
+ z0_res = svldnt1_gather_offset_s32 (p0, z0, 7))
+
+/*
+** ldnt1_gather_8_s32_offset:
+** mov (x[0-9]+), #?8
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_8_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_s32 (p0, z0, 8),
+ z0_res = svldnt1_gather_offset_s32 (p0, z0, 8))
+
+/*
+** ldnt1_gather_124_s32_offset:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_124_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_s32 (p0, z0, 124),
+ z0_res = svldnt1_gather_offset_s32 (p0, z0, 124))
+
+/*
+** ldnt1_gather_128_s32_offset:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_128_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_s32 (p0, z0, 128),
+ z0_res = svldnt1_gather_offset_s32 (p0, z0, 128))
+
+/*
+** ldnt1_gather_x0_s32_index:
+** lsl (x[0-9]+), x0, #?2
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_s32 (p0, z0, x0),
+ z0_res = svldnt1_gather_index_s32 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m1_s32_index:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m1_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_s32 (p0, z0, -1),
+ z0_res = svldnt1_gather_index_s32 (p0, z0, -1))
+
+/*
+** ldnt1_gather_0_s32_index:
+** ldnt1w z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_s32 (p0, z0, 0),
+ z0_res = svldnt1_gather_index_s32 (p0, z0, 0))
+
+/*
+** ldnt1_gather_5_s32_index:
+** mov (x[0-9]+), #?20
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_5_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_s32 (p0, z0, 5),
+ z0_res = svldnt1_gather_index_s32 (p0, z0, 5))
+
+/*
+** ldnt1_gather_31_s32_index:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_31_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_s32 (p0, z0, 31),
+ z0_res = svldnt1_gather_index_s32 (p0, z0, 31))
+
+/*
+** ldnt1_gather_32_s32_index:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_32_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_s32 (p0, z0, 32),
+ z0_res = svldnt1_gather_index_s32 (p0, z0, 32))
+
+/*
+** ldnt1_gather_x0_s32_u32offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_s32_u32offset, svint32_t, int32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_s32_u32offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_s32_u32offset, svint32_t, int32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_s32_u32offset:
+** ldnt1w z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_s32_u32offset, svint32_t, int32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32offset_s32 (p0, x0, z1),
+ z0_res = svldnt1_gather_offset (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1_gather_s64_tied1:
+** ldnt1d z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_s64_tied1, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_s64 (p0, z0),
+ z0_res = svldnt1_gather_s64 (p0, z0))
+
+/*
+** ldnt1_gather_s64_untied:
+** ldnt1d z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_s64_untied, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_s64 (p0, z1),
+ z0_res = svldnt1_gather_s64 (p0, z1))
+
+/*
+** ldnt1_gather_x0_s64_offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, x0),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m8_s64_offset:
+** mov (x[0-9]+), #?-8
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m8_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, -8),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, -8))
+
+/*
+** ldnt1_gather_0_s64_offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 0),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 0))
+
+/*
+** ldnt1_gather_9_s64_offset:
+** mov (x[0-9]+), #?9
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_9_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 9),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 9))
+
+/*
+** ldnt1_gather_10_s64_offset:
+** mov (x[0-9]+), #?10
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_10_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 10),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 10))
+
+/*
+** ldnt1_gather_11_s64_offset:
+** mov (x[0-9]+), #?11
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_11_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 11),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 11))
+
+/*
+** ldnt1_gather_12_s64_offset:
+** mov (x[0-9]+), #?12
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_12_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 12),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 12))
+
+/*
+** ldnt1_gather_13_s64_offset:
+** mov (x[0-9]+), #?13
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_13_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 13),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 13))
+
+/*
+** ldnt1_gather_14_s64_offset:
+** mov (x[0-9]+), #?14
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_14_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 14),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 14))
+
+/*
+** ldnt1_gather_15_s64_offset:
+** mov (x[0-9]+), #?15
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_15_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 15),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 15))
+
+/*
+** ldnt1_gather_16_s64_offset:
+** mov (x[0-9]+), #?16
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_16_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 16),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 16))
+
+/*
+** ldnt1_gather_248_s64_offset:
+** mov (x[0-9]+), #?248
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_248_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 248),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 248))
+
+/*
+** ldnt1_gather_256_s64_offset:
+** mov (x[0-9]+), #?256
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_256_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_s64 (p0, z0, 256),
+ z0_res = svldnt1_gather_offset_s64 (p0, z0, 256))
+
+/*
+** ldnt1_gather_x0_s64_index:
+** lsl (x[0-9]+), x0, #?3
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_s64 (p0, z0, x0),
+ z0_res = svldnt1_gather_index_s64 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m1_s64_index:
+** mov (x[0-9]+), #?-8
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m1_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_s64 (p0, z0, -1),
+ z0_res = svldnt1_gather_index_s64 (p0, z0, -1))
+
+/*
+** ldnt1_gather_0_s64_index:
+** ldnt1d z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_s64 (p0, z0, 0),
+ z0_res = svldnt1_gather_index_s64 (p0, z0, 0))
+
+/*
+** ldnt1_gather_5_s64_index:
+** mov (x[0-9]+), #?40
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_5_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_s64 (p0, z0, 5),
+ z0_res = svldnt1_gather_index_s64 (p0, z0, 5))
+
+/*
+** ldnt1_gather_31_s64_index:
+** mov (x[0-9]+), #?248
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_31_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_s64 (p0, z0, 31),
+ z0_res = svldnt1_gather_index_s64 (p0, z0, 31))
+
+/*
+** ldnt1_gather_32_s64_index:
+** mov (x[0-9]+), #?256
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_32_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_s64 (p0, z0, 32),
+ z0_res = svldnt1_gather_index_s64 (p0, z0, 32))
+
+/*
+** ldnt1_gather_x0_s64_s64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_s64_s64offset, svint64_t, int64_t, svint64_t,
+ z0_res = svldnt1_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_s64_s64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_s64_s64offset, svint64_t, int64_t, svint64_t,
+ z0_res = svldnt1_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_s64_s64offset:
+** ldnt1d z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_s64_s64offset, svint64_t, int64_t, svint64_t,
+ z0_res = svldnt1_gather_s64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1_gather_offset (p0, x0, z1))
+
+/*
+** ldnt1_gather_x0_s64_u64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_s64_u64offset, svint64_t, int64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_s64_u64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_s64_u64offset, svint64_t, int64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_s64_u64offset:
+** ldnt1d z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_s64_u64offset, svint64_t, int64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1_gather_offset (p0, x0, z1))
+
+/*
+** ldnt1_gather_x0_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_s64_s64index, svint64_t, int64_t, svint64_t,
+ z0_res = svldnt1_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_s64_s64index, svint64_t, int64_t, svint64_t,
+ z0_res = svldnt1_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_s64_s64index, svint64_t, int64_t, svint64_t,
+ z0_res = svldnt1_gather_s64index_s64 (p0, x0, z1),
+ z0_res = svldnt1_gather_index (p0, x0, z1))
+
+/*
+** ldnt1_gather_x0_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_s64_u64index, svint64_t, int64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_s64_u64index, svint64_t, int64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_s64_u64index, svint64_t, int64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64index_s64 (p0, x0, z1),
+ z0_res = svldnt1_gather_index (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1_gather_u32_tied1:
+** ldnt1w z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_u32_tied1, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_u32 (p0, z0),
+ z0_res = svldnt1_gather_u32 (p0, z0))
+
+/*
+** ldnt1_gather_u32_untied:
+** ldnt1w z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_u32_untied, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_u32 (p0, z1),
+ z0_res = svldnt1_gather_u32 (p0, z1))
+
+/*
+** ldnt1_gather_x0_u32_offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_u32 (p0, z0, x0),
+ z0_res = svldnt1_gather_offset_u32 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m4_u32_offset:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m4_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_u32 (p0, z0, -4),
+ z0_res = svldnt1_gather_offset_u32 (p0, z0, -4))
+
+/*
+** ldnt1_gather_0_u32_offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_u32 (p0, z0, 0),
+ z0_res = svldnt1_gather_offset_u32 (p0, z0, 0))
+
+/*
+** ldnt1_gather_5_u32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_5_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_u32 (p0, z0, 5),
+ z0_res = svldnt1_gather_offset_u32 (p0, z0, 5))
+
+/*
+** ldnt1_gather_6_u32_offset:
+** mov (x[0-9]+), #?6
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_6_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_u32 (p0, z0, 6),
+ z0_res = svldnt1_gather_offset_u32 (p0, z0, 6))
+
+/*
+** ldnt1_gather_7_u32_offset:
+** mov (x[0-9]+), #?7
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_7_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_u32 (p0, z0, 7),
+ z0_res = svldnt1_gather_offset_u32 (p0, z0, 7))
+
+/*
+** ldnt1_gather_8_u32_offset:
+** mov (x[0-9]+), #?8
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_8_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_u32 (p0, z0, 8),
+ z0_res = svldnt1_gather_offset_u32 (p0, z0, 8))
+
+/*
+** ldnt1_gather_124_u32_offset:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_124_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_u32 (p0, z0, 124),
+ z0_res = svldnt1_gather_offset_u32 (p0, z0, 124))
+
+/*
+** ldnt1_gather_128_u32_offset:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_128_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_offset_u32 (p0, z0, 128),
+ z0_res = svldnt1_gather_offset_u32 (p0, z0, 128))
+
+/*
+** ldnt1_gather_x0_u32_index:
+** lsl (x[0-9]+), x0, #?2
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_u32 (p0, z0, x0),
+ z0_res = svldnt1_gather_index_u32 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m1_u32_index:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m1_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_u32 (p0, z0, -1),
+ z0_res = svldnt1_gather_index_u32 (p0, z0, -1))
+
+/*
+** ldnt1_gather_0_u32_index:
+** ldnt1w z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_u32 (p0, z0, 0),
+ z0_res = svldnt1_gather_index_u32 (p0, z0, 0))
+
+/*
+** ldnt1_gather_5_u32_index:
+** mov (x[0-9]+), #?20
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_5_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_u32 (p0, z0, 5),
+ z0_res = svldnt1_gather_index_u32 (p0, z0, 5))
+
+/*
+** ldnt1_gather_31_u32_index:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_31_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_u32 (p0, z0, 31),
+ z0_res = svldnt1_gather_index_u32 (p0, z0, 31))
+
+/*
+** ldnt1_gather_32_u32_index:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_32_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32base_index_u32 (p0, z0, 32),
+ z0_res = svldnt1_gather_index_u32 (p0, z0, 32))
+
+/*
+** ldnt1_gather_x0_u32_u32offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_u32_u32offset, svuint32_t, uint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_u32_u32offset:
+** ldnt1w z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_u32_u32offset, svuint32_t, uint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_u32_u32offset:
+** ldnt1w z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_u32_u32offset, svuint32_t, uint32_t, svuint32_t,
+ z0_res = svldnt1_gather_u32offset_u32 (p0, x0, z1),
+ z0_res = svldnt1_gather_offset (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1_gather_u64_tied1:
+** ldnt1d z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_u64_tied1, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_u64 (p0, z0),
+ z0_res = svldnt1_gather_u64 (p0, z0))
+
+/*
+** ldnt1_gather_u64_untied:
+** ldnt1d z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_u64_untied, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_u64 (p0, z1),
+ z0_res = svldnt1_gather_u64 (p0, z1))
+
+/*
+** ldnt1_gather_x0_u64_offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, x0),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m8_u64_offset:
+** mov (x[0-9]+), #?-8
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m8_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, -8),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, -8))
+
+/*
+** ldnt1_gather_0_u64_offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 0),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 0))
+
+/*
+** ldnt1_gather_9_u64_offset:
+** mov (x[0-9]+), #?9
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_9_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 9),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 9))
+
+/*
+** ldnt1_gather_10_u64_offset:
+** mov (x[0-9]+), #?10
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_10_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 10),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 10))
+
+/*
+** ldnt1_gather_11_u64_offset:
+** mov (x[0-9]+), #?11
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_11_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 11),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 11))
+
+/*
+** ldnt1_gather_12_u64_offset:
+** mov (x[0-9]+), #?12
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_12_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 12),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 12))
+
+/*
+** ldnt1_gather_13_u64_offset:
+** mov (x[0-9]+), #?13
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_13_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 13),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 13))
+
+/*
+** ldnt1_gather_14_u64_offset:
+** mov (x[0-9]+), #?14
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_14_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 14),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 14))
+
+/*
+** ldnt1_gather_15_u64_offset:
+** mov (x[0-9]+), #?15
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_15_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 15),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 15))
+
+/*
+** ldnt1_gather_16_u64_offset:
+** mov (x[0-9]+), #?16
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_16_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 16),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 16))
+
+/*
+** ldnt1_gather_248_u64_offset:
+** mov (x[0-9]+), #?248
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_248_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 248),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 248))
+
+/*
+** ldnt1_gather_256_u64_offset:
+** mov (x[0-9]+), #?256
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_256_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_offset_u64 (p0, z0, 256),
+ z0_res = svldnt1_gather_offset_u64 (p0, z0, 256))
+
+/*
+** ldnt1_gather_x0_u64_index:
+** lsl (x[0-9]+), x0, #?3
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_x0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_u64 (p0, z0, x0),
+ z0_res = svldnt1_gather_index_u64 (p0, z0, x0))
+
+/*
+** ldnt1_gather_m1_u64_index:
+** mov (x[0-9]+), #?-8
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_m1_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_u64 (p0, z0, -1),
+ z0_res = svldnt1_gather_index_u64 (p0, z0, -1))
+
+/*
+** ldnt1_gather_0_u64_index:
+** ldnt1d z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_u64 (p0, z0, 0),
+ z0_res = svldnt1_gather_index_u64 (p0, z0, 0))
+
+/*
+** ldnt1_gather_5_u64_index:
+** mov (x[0-9]+), #?40
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_5_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_u64 (p0, z0, 5),
+ z0_res = svldnt1_gather_index_u64 (p0, z0, 5))
+
+/*
+** ldnt1_gather_31_u64_index:
+** mov (x[0-9]+), #?248
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_31_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_u64 (p0, z0, 31),
+ z0_res = svldnt1_gather_index_u64 (p0, z0, 31))
+
+/*
+** ldnt1_gather_32_u64_index:
+** mov (x[0-9]+), #?256
+** ldnt1d z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1_gather_32_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64base_index_u64 (p0, z0, 32),
+ z0_res = svldnt1_gather_index_u64 (p0, z0, 32))
+
+/*
+** ldnt1_gather_x0_u64_s64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_u64_s64offset, svuint64_t, uint64_t, svint64_t,
+ z0_res = svldnt1_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_u64_s64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_u64_s64offset, svuint64_t, uint64_t, svint64_t,
+ z0_res = svldnt1_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_u64_s64offset:
+** ldnt1d z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_u64_s64offset, svuint64_t, uint64_t, svint64_t,
+ z0_res = svldnt1_gather_s64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1_gather_offset (p0, x0, z1))
+
+/*
+** ldnt1_gather_x0_u64_u64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_u64_u64offset, svuint64_t, uint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_u64_u64offset:
+** ldnt1d z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_u64_u64offset, svuint64_t, uint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1_gather_offset (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_u64_u64offset:
+** ldnt1d z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_u64_u64offset, svuint64_t, uint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1_gather_offset (p0, x0, z1))
+
+/*
+** ldnt1_gather_x0_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_u64_s64index, svuint64_t, uint64_t, svint64_t,
+ z0_res = svldnt1_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_u64_s64index, svuint64_t, uint64_t, svint64_t,
+ z0_res = svldnt1_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_u64_s64index, svuint64_t, uint64_t, svint64_t,
+ z0_res = svldnt1_gather_s64index_u64 (p0, x0, z1),
+ z0_res = svldnt1_gather_index (p0, x0, z1))
+
+/*
+** ldnt1_gather_x0_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_x0_u64_u64index, svuint64_t, uint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_tied1_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_tied1_u64_u64index, svuint64_t, uint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1_gather_index (p0, x0, z0))
+
+/*
+** ldnt1_gather_untied_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** ldnt1d z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1_gather_untied_u64_u64index, svuint64_t, uint64_t, svuint64_t,
+ z0_res = svldnt1_gather_u64index_u64 (p0, x0, z1),
+ z0_res = svldnt1_gather_index (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sb_gather_s32_tied1:
+** ldnt1sb z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_s32_tied1, svint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_s32 (p0, z0),
+ z0_res = svldnt1sb_gather_s32 (p0, z0))
+
+/*
+** ldnt1sb_gather_s32_untied:
+** ldnt1sb z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_s32_untied, svint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_s32 (p0, z1),
+ z0_res = svldnt1sb_gather_s32 (p0, z1))
+
+/*
+** ldnt1sb_gather_x0_s32_offset:
+** ldnt1sb z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_x0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_s32 (p0, z0, x0),
+ z0_res = svldnt1sb_gather_offset_s32 (p0, z0, x0))
+
+/*
+** ldnt1sb_gather_m1_s32_offset:
+** mov (x[0-9]+), #?-1
+** ldnt1sb z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_m1_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_s32 (p0, z0, -1),
+ z0_res = svldnt1sb_gather_offset_s32 (p0, z0, -1))
+
+/*
+** ldnt1sb_gather_0_s32_offset:
+** ldnt1sb z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_s32 (p0, z0, 0),
+ z0_res = svldnt1sb_gather_offset_s32 (p0, z0, 0))
+
+/*
+** ldnt1sb_gather_5_s32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sb z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_5_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_s32 (p0, z0, 5),
+ z0_res = svldnt1sb_gather_offset_s32 (p0, z0, 5))
+
+/*
+** ldnt1sb_gather_31_s32_offset:
+** mov (x[0-9]+), #?31
+** ldnt1sb z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_31_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_s32 (p0, z0, 31),
+ z0_res = svldnt1sb_gather_offset_s32 (p0, z0, 31))
+
+/*
+** ldnt1sb_gather_32_s32_offset:
+** mov (x[0-9]+), #?32
+** ldnt1sb z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_32_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_s32 (p0, z0, 32),
+ z0_res = svldnt1sb_gather_offset_s32 (p0, z0, 32))
+
+/*
+** ldnt1sb_gather_x0_s32_u32offset:
+** ldnt1sb z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_x0_s32_u32offset, svint32_t, int8_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_s32 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_tied1_s32_u32offset:
+** ldnt1sb z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_tied1_s32_u32offset, svint32_t, int8_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_s32 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_untied_s32_u32offset:
+** ldnt1sb z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_untied_s32_u32offset, svint32_t, int8_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32offset_s32 (p0, x0, z1),
+ z0_res = svldnt1sb_gather_offset_s32 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sb_gather_s64_tied1:
+** ldnt1sb z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_s64_tied1, svint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_s64 (p0, z0),
+ z0_res = svldnt1sb_gather_s64 (p0, z0))
+
+/*
+** ldnt1sb_gather_s64_untied:
+** ldnt1sb z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_s64_untied, svint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_s64 (p0, z1),
+ z0_res = svldnt1sb_gather_s64 (p0, z1))
+
+/*
+** ldnt1sb_gather_x0_s64_offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_x0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_s64 (p0, z0, x0),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, z0, x0))
+
+/*
+** ldnt1sb_gather_m1_s64_offset:
+** mov (x[0-9]+), #?-1
+** ldnt1sb z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_m1_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_s64 (p0, z0, -1),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, z0, -1))
+
+/*
+** ldnt1sb_gather_0_s64_offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_s64 (p0, z0, 0),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, z0, 0))
+
+/*
+** ldnt1sb_gather_5_s64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sb z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_5_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_s64 (p0, z0, 5),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, z0, 5))
+
+/*
+** ldnt1sb_gather_31_s64_offset:
+** mov (x[0-9]+), #?31
+** ldnt1sb z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_31_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_s64 (p0, z0, 31),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, z0, 31))
+
+/*
+** ldnt1sb_gather_32_s64_offset:
+** mov (x[0-9]+), #?32
+** ldnt1sb z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_32_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_s64 (p0, z0, 32),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, z0, 32))
+
+/*
+** ldnt1sb_gather_x0_s64_s64offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_x0_s64_s64offset, svint64_t, int8_t, svint64_t,
+ z0_res = svldnt1sb_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_tied1_s64_s64offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_tied1_s64_s64offset, svint64_t, int8_t, svint64_t,
+ z0_res = svldnt1sb_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_untied_s64_s64offset:
+** ldnt1sb z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_untied_s64_s64offset, svint64_t, int8_t, svint64_t,
+ z0_res = svldnt1sb_gather_s64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1sb_gather_x0_s64_u64offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_x0_s64_u64offset, svint64_t, int8_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_tied1_s64_u64offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_tied1_s64_u64offset, svint64_t, int8_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_untied_s64_u64offset:
+** ldnt1sb z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_untied_s64_u64offset, svint64_t, int8_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1sb_gather_offset_s64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sb_gather_u32_tied1:
+** ldnt1sb z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_u32_tied1, svuint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_u32 (p0, z0),
+ z0_res = svldnt1sb_gather_u32 (p0, z0))
+
+/*
+** ldnt1sb_gather_u32_untied:
+** ldnt1sb z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_u32_untied, svuint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_u32 (p0, z1),
+ z0_res = svldnt1sb_gather_u32 (p0, z1))
+
+/*
+** ldnt1sb_gather_x0_u32_offset:
+** ldnt1sb z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_x0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_u32 (p0, z0, x0),
+ z0_res = svldnt1sb_gather_offset_u32 (p0, z0, x0))
+
+/*
+** ldnt1sb_gather_m1_u32_offset:
+** mov (x[0-9]+), #?-1
+** ldnt1sb z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_m1_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_u32 (p0, z0, -1),
+ z0_res = svldnt1sb_gather_offset_u32 (p0, z0, -1))
+
+/*
+** ldnt1sb_gather_0_u32_offset:
+** ldnt1sb z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_u32 (p0, z0, 0),
+ z0_res = svldnt1sb_gather_offset_u32 (p0, z0, 0))
+
+/*
+** ldnt1sb_gather_5_u32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sb z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_5_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_u32 (p0, z0, 5),
+ z0_res = svldnt1sb_gather_offset_u32 (p0, z0, 5))
+
+/*
+** ldnt1sb_gather_31_u32_offset:
+** mov (x[0-9]+), #?31
+** ldnt1sb z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_31_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_u32 (p0, z0, 31),
+ z0_res = svldnt1sb_gather_offset_u32 (p0, z0, 31))
+
+/*
+** ldnt1sb_gather_32_u32_offset:
+** mov (x[0-9]+), #?32
+** ldnt1sb z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_32_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32base_offset_u32 (p0, z0, 32),
+ z0_res = svldnt1sb_gather_offset_u32 (p0, z0, 32))
+
+/*
+** ldnt1sb_gather_x0_u32_u32offset:
+** ldnt1sb z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_x0_u32_u32offset, svuint32_t, int8_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_u32 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_tied1_u32_u32offset:
+** ldnt1sb z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_tied1_u32_u32offset, svuint32_t, int8_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_u32 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_untied_u32_u32offset:
+** ldnt1sb z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_untied_u32_u32offset, svuint32_t, int8_t, svuint32_t,
+ z0_res = svldnt1sb_gather_u32offset_u32 (p0, x0, z1),
+ z0_res = svldnt1sb_gather_offset_u32 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sb_gather_u64_tied1:
+** ldnt1sb z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_u64_tied1, svuint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_u64 (p0, z0),
+ z0_res = svldnt1sb_gather_u64 (p0, z0))
+
+/*
+** ldnt1sb_gather_u64_untied:
+** ldnt1sb z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_u64_untied, svuint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_u64 (p0, z1),
+ z0_res = svldnt1sb_gather_u64 (p0, z1))
+
+/*
+** ldnt1sb_gather_x0_u64_offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_x0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_u64 (p0, z0, x0),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, z0, x0))
+
+/*
+** ldnt1sb_gather_m1_u64_offset:
+** mov (x[0-9]+), #?-1
+** ldnt1sb z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_m1_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_u64 (p0, z0, -1),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, z0, -1))
+
+/*
+** ldnt1sb_gather_0_u64_offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_u64 (p0, z0, 0),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, z0, 0))
+
+/*
+** ldnt1sb_gather_5_u64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sb z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_5_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_u64 (p0, z0, 5),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, z0, 5))
+
+/*
+** ldnt1sb_gather_31_u64_offset:
+** mov (x[0-9]+), #?31
+** ldnt1sb z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_31_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_u64 (p0, z0, 31),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, z0, 31))
+
+/*
+** ldnt1sb_gather_32_u64_offset:
+** mov (x[0-9]+), #?32
+** ldnt1sb z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sb_gather_32_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64base_offset_u64 (p0, z0, 32),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, z0, 32))
+
+/*
+** ldnt1sb_gather_x0_u64_s64offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_x0_u64_s64offset, svuint64_t, int8_t, svint64_t,
+ z0_res = svldnt1sb_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_tied1_u64_s64offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_tied1_u64_s64offset, svuint64_t, int8_t, svint64_t,
+ z0_res = svldnt1sb_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_untied_u64_s64offset:
+** ldnt1sb z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_untied_u64_s64offset, svuint64_t, int8_t, svint64_t,
+ z0_res = svldnt1sb_gather_s64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1sb_gather_x0_u64_u64offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_x0_u64_u64offset, svuint64_t, int8_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_tied1_u64_u64offset:
+** ldnt1sb z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_tied1_u64_u64offset, svuint64_t, int8_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sb_gather_untied_u64_u64offset:
+** ldnt1sb z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sb_gather_untied_u64_u64offset, svuint64_t, int8_t, svuint64_t,
+ z0_res = svldnt1sb_gather_u64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1sb_gather_offset_u64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sh_gather_s32_tied1:
+** ldnt1sh z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_s32_tied1, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_s32 (p0, z0),
+ z0_res = svldnt1sh_gather_s32 (p0, z0))
+
+/*
+** ldnt1sh_gather_s32_untied:
+** ldnt1sh z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_s32_untied, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_s32 (p0, z1),
+ z0_res = svldnt1sh_gather_s32 (p0, z1))
+
+/*
+** ldnt1sh_gather_x0_s32_offset:
+** ldnt1sh z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_x0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_s32 (p0, z0, x0),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, z0, x0))
+
+/*
+** ldnt1sh_gather_m2_s32_offset:
+** mov (x[0-9]+), #?-2
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_m2_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_s32 (p0, z0, -2),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, z0, -2))
+
+/*
+** ldnt1sh_gather_0_s32_offset:
+** ldnt1sh z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_s32 (p0, z0, 0),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, z0, 0))
+
+/*
+** ldnt1sh_gather_5_s32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_5_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_s32 (p0, z0, 5),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, z0, 5))
+
+/*
+** ldnt1sh_gather_6_s32_offset:
+** mov (x[0-9]+), #?6
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_6_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_s32 (p0, z0, 6),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, z0, 6))
+
+/*
+** ldnt1sh_gather_62_s32_offset:
+** mov (x[0-9]+), #?62
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_62_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_s32 (p0, z0, 62),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, z0, 62))
+
+/*
+** ldnt1sh_gather_64_s32_offset:
+** mov (x[0-9]+), #?64
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_64_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_s32 (p0, z0, 64),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, z0, 64))
+
+/*
+** ldnt1sh_gather_x0_s32_index:
+** lsl (x[0-9]+), x0, #?1
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_x0_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_s32 (p0, z0, x0),
+ z0_res = svldnt1sh_gather_index_s32 (p0, z0, x0))
+
+/*
+** ldnt1sh_gather_m1_s32_index:
+** mov (x[0-9]+), #?-2
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_m1_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_s32 (p0, z0, -1),
+ z0_res = svldnt1sh_gather_index_s32 (p0, z0, -1))
+
+/*
+** ldnt1sh_gather_0_s32_index:
+** ldnt1sh z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_0_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_s32 (p0, z0, 0),
+ z0_res = svldnt1sh_gather_index_s32 (p0, z0, 0))
+
+/*
+** ldnt1sh_gather_5_s32_index:
+** mov (x[0-9]+), #?10
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_5_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_s32 (p0, z0, 5),
+ z0_res = svldnt1sh_gather_index_s32 (p0, z0, 5))
+
+/*
+** ldnt1sh_gather_31_s32_index:
+** mov (x[0-9]+), #?62
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_31_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_s32 (p0, z0, 31),
+ z0_res = svldnt1sh_gather_index_s32 (p0, z0, 31))
+
+/*
+** ldnt1sh_gather_32_s32_index:
+** mov (x[0-9]+), #?64
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_32_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_s32 (p0, z0, 32),
+ z0_res = svldnt1sh_gather_index_s32 (p0, z0, 32))
+
+/*
+** ldnt1sh_gather_x0_s32_u32offset:
+** ldnt1sh z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_s32_u32offset, svint32_t, int16_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_s32_u32offset:
+** ldnt1sh z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_s32_u32offset, svint32_t, int16_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_s32_u32offset:
+** ldnt1sh z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_s32_u32offset, svint32_t, int16_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32offset_s32 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_offset_s32 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sh_gather_s64_tied1:
+** ldnt1sh z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_s64_tied1, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_s64 (p0, z0),
+ z0_res = svldnt1sh_gather_s64 (p0, z0))
+
+/*
+** ldnt1sh_gather_s64_untied:
+** ldnt1sh z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_s64_untied, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_s64 (p0, z1),
+ z0_res = svldnt1sh_gather_s64 (p0, z1))
+
+/*
+** ldnt1sh_gather_x0_s64_offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_x0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_s64 (p0, z0, x0),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, z0, x0))
+
+/*
+** ldnt1sh_gather_m2_s64_offset:
+** mov (x[0-9]+), #?-2
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_m2_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_s64 (p0, z0, -2),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, z0, -2))
+
+/*
+** ldnt1sh_gather_0_s64_offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_s64 (p0, z0, 0),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, z0, 0))
+
+/*
+** ldnt1sh_gather_5_s64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_5_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_s64 (p0, z0, 5),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, z0, 5))
+
+/*
+** ldnt1sh_gather_6_s64_offset:
+** mov (x[0-9]+), #?6
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_6_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_s64 (p0, z0, 6),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, z0, 6))
+
+/*
+** ldnt1sh_gather_62_s64_offset:
+** mov (x[0-9]+), #?62
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_62_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_s64 (p0, z0, 62),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, z0, 62))
+
+/*
+** ldnt1sh_gather_64_s64_offset:
+** mov (x[0-9]+), #?64
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_64_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_s64 (p0, z0, 64),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, z0, 64))
+
+/*
+** ldnt1sh_gather_x0_s64_index:
+** lsl (x[0-9]+), x0, #?1
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_x0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_s64 (p0, z0, x0),
+ z0_res = svldnt1sh_gather_index_s64 (p0, z0, x0))
+
+/*
+** ldnt1sh_gather_m1_s64_index:
+** mov (x[0-9]+), #?-2
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_m1_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_s64 (p0, z0, -1),
+ z0_res = svldnt1sh_gather_index_s64 (p0, z0, -1))
+
+/*
+** ldnt1sh_gather_0_s64_index:
+** ldnt1sh z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_s64 (p0, z0, 0),
+ z0_res = svldnt1sh_gather_index_s64 (p0, z0, 0))
+
+/*
+** ldnt1sh_gather_5_s64_index:
+** mov (x[0-9]+), #?10
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_5_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_s64 (p0, z0, 5),
+ z0_res = svldnt1sh_gather_index_s64 (p0, z0, 5))
+
+/*
+** ldnt1sh_gather_31_s64_index:
+** mov (x[0-9]+), #?62
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_31_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_s64 (p0, z0, 31),
+ z0_res = svldnt1sh_gather_index_s64 (p0, z0, 31))
+
+/*
+** ldnt1sh_gather_32_s64_index:
+** mov (x[0-9]+), #?64
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_32_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_s64 (p0, z0, 32),
+ z0_res = svldnt1sh_gather_index_s64 (p0, z0, 32))
+
+/*
+** ldnt1sh_gather_x0_s64_s64offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_s64_s64offset, svint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_s64_s64offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_s64_s64offset, svint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_s64_s64offset:
+** ldnt1sh z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_s64_s64offset, svint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1sh_gather_x0_s64_u64offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_s64_u64offset, svint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_s64_u64offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_s64_u64offset, svint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_s64_u64offset:
+** ldnt1sh z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_s64_u64offset, svint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1sh_gather_x0_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_s64_s64index, svint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_s64_s64index, svint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_s64_s64index, svint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64index_s64 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_index_s64 (p0, x0, z1))
+
+/*
+** ldnt1sh_gather_x0_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_s64_u64index, svint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_s64_u64index, svint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_s64_u64index, svint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64index_s64 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_index_s64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sh_gather_u32_tied1:
+** ldnt1sh z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_u32_tied1, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_u32 (p0, z0),
+ z0_res = svldnt1sh_gather_u32 (p0, z0))
+
+/*
+** ldnt1sh_gather_u32_untied:
+** ldnt1sh z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_u32_untied, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_u32 (p0, z1),
+ z0_res = svldnt1sh_gather_u32 (p0, z1))
+
+/*
+** ldnt1sh_gather_x0_u32_offset:
+** ldnt1sh z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_x0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_u32 (p0, z0, x0),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, z0, x0))
+
+/*
+** ldnt1sh_gather_m2_u32_offset:
+** mov (x[0-9]+), #?-2
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_m2_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_u32 (p0, z0, -2),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, z0, -2))
+
+/*
+** ldnt1sh_gather_0_u32_offset:
+** ldnt1sh z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_u32 (p0, z0, 0),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, z0, 0))
+
+/*
+** ldnt1sh_gather_5_u32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_5_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_u32 (p0, z0, 5),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, z0, 5))
+
+/*
+** ldnt1sh_gather_6_u32_offset:
+** mov (x[0-9]+), #?6
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_6_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_u32 (p0, z0, 6),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, z0, 6))
+
+/*
+** ldnt1sh_gather_62_u32_offset:
+** mov (x[0-9]+), #?62
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_62_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_u32 (p0, z0, 62),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, z0, 62))
+
+/*
+** ldnt1sh_gather_64_u32_offset:
+** mov (x[0-9]+), #?64
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_64_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_offset_u32 (p0, z0, 64),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, z0, 64))
+
+/*
+** ldnt1sh_gather_x0_u32_index:
+** lsl (x[0-9]+), x0, #?1
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_x0_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_u32 (p0, z0, x0),
+ z0_res = svldnt1sh_gather_index_u32 (p0, z0, x0))
+
+/*
+** ldnt1sh_gather_m1_u32_index:
+** mov (x[0-9]+), #?-2
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_m1_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_u32 (p0, z0, -1),
+ z0_res = svldnt1sh_gather_index_u32 (p0, z0, -1))
+
+/*
+** ldnt1sh_gather_0_u32_index:
+** ldnt1sh z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_0_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_u32 (p0, z0, 0),
+ z0_res = svldnt1sh_gather_index_u32 (p0, z0, 0))
+
+/*
+** ldnt1sh_gather_5_u32_index:
+** mov (x[0-9]+), #?10
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_5_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_u32 (p0, z0, 5),
+ z0_res = svldnt1sh_gather_index_u32 (p0, z0, 5))
+
+/*
+** ldnt1sh_gather_31_u32_index:
+** mov (x[0-9]+), #?62
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_31_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_u32 (p0, z0, 31),
+ z0_res = svldnt1sh_gather_index_u32 (p0, z0, 31))
+
+/*
+** ldnt1sh_gather_32_u32_index:
+** mov (x[0-9]+), #?64
+** ldnt1sh z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_32_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32base_index_u32 (p0, z0, 32),
+ z0_res = svldnt1sh_gather_index_u32 (p0, z0, 32))
+
+/*
+** ldnt1sh_gather_x0_u32_u32offset:
+** ldnt1sh z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_u32_u32offset, svuint32_t, int16_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_u32_u32offset:
+** ldnt1sh z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_u32_u32offset, svuint32_t, int16_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_u32_u32offset:
+** ldnt1sh z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_u32_u32offset, svuint32_t, int16_t, svuint32_t,
+ z0_res = svldnt1sh_gather_u32offset_u32 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_offset_u32 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sh_gather_u64_tied1:
+** ldnt1sh z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_u64_tied1, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_u64 (p0, z0),
+ z0_res = svldnt1sh_gather_u64 (p0, z0))
+
+/*
+** ldnt1sh_gather_u64_untied:
+** ldnt1sh z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_u64_untied, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_u64 (p0, z1),
+ z0_res = svldnt1sh_gather_u64 (p0, z1))
+
+/*
+** ldnt1sh_gather_x0_u64_offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_x0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_u64 (p0, z0, x0),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, z0, x0))
+
+/*
+** ldnt1sh_gather_m2_u64_offset:
+** mov (x[0-9]+), #?-2
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_m2_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_u64 (p0, z0, -2),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, z0, -2))
+
+/*
+** ldnt1sh_gather_0_u64_offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_u64 (p0, z0, 0),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, z0, 0))
+
+/*
+** ldnt1sh_gather_5_u64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_5_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_u64 (p0, z0, 5),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, z0, 5))
+
+/*
+** ldnt1sh_gather_6_u64_offset:
+** mov (x[0-9]+), #?6
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_6_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_u64 (p0, z0, 6),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, z0, 6))
+
+/*
+** ldnt1sh_gather_62_u64_offset:
+** mov (x[0-9]+), #?62
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_62_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_u64 (p0, z0, 62),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, z0, 62))
+
+/*
+** ldnt1sh_gather_64_u64_offset:
+** mov (x[0-9]+), #?64
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_64_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_offset_u64 (p0, z0, 64),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, z0, 64))
+
+/*
+** ldnt1sh_gather_x0_u64_index:
+** lsl (x[0-9]+), x0, #?1
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_x0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_u64 (p0, z0, x0),
+ z0_res = svldnt1sh_gather_index_u64 (p0, z0, x0))
+
+/*
+** ldnt1sh_gather_m1_u64_index:
+** mov (x[0-9]+), #?-2
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_m1_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_u64 (p0, z0, -1),
+ z0_res = svldnt1sh_gather_index_u64 (p0, z0, -1))
+
+/*
+** ldnt1sh_gather_0_u64_index:
+** ldnt1sh z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_u64 (p0, z0, 0),
+ z0_res = svldnt1sh_gather_index_u64 (p0, z0, 0))
+
+/*
+** ldnt1sh_gather_5_u64_index:
+** mov (x[0-9]+), #?10
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_5_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_u64 (p0, z0, 5),
+ z0_res = svldnt1sh_gather_index_u64 (p0, z0, 5))
+
+/*
+** ldnt1sh_gather_31_u64_index:
+** mov (x[0-9]+), #?62
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_31_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_u64 (p0, z0, 31),
+ z0_res = svldnt1sh_gather_index_u64 (p0, z0, 31))
+
+/*
+** ldnt1sh_gather_32_u64_index:
+** mov (x[0-9]+), #?64
+** ldnt1sh z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sh_gather_32_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64base_index_u64 (p0, z0, 32),
+ z0_res = svldnt1sh_gather_index_u64 (p0, z0, 32))
+
+/*
+** ldnt1sh_gather_x0_u64_s64offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_u64_s64offset, svuint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_u64_s64offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_u64_s64offset, svuint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_u64_s64offset:
+** ldnt1sh z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_u64_s64offset, svuint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1sh_gather_x0_u64_u64offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_u64_u64offset, svuint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_u64_u64offset:
+** ldnt1sh z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_u64_u64offset, svuint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_u64_u64offset:
+** ldnt1sh z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_u64_u64offset, svuint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1sh_gather_x0_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_u64_s64index, svuint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_u64_s64index, svuint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_u64_s64index, svuint64_t, int16_t, svint64_t,
+ z0_res = svldnt1sh_gather_s64index_u64 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_index_u64 (p0, x0, z1))
+
+/*
+** ldnt1sh_gather_x0_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_x0_u64_u64index, svuint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_tied1_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_tied1_u64_u64index, svuint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1sh_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1sh_gather_untied_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** ldnt1sh z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sh_gather_untied_u64_u64index, svuint64_t, int16_t, svuint64_t,
+ z0_res = svldnt1sh_gather_u64index_u64 (p0, x0, z1),
+ z0_res = svldnt1sh_gather_index_u64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sw_gather_s64_tied1:
+** ldnt1sw z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_s64_tied1, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_s64 (p0, z0),
+ z0_res = svldnt1sw_gather_s64 (p0, z0))
+
+/*
+** ldnt1sw_gather_s64_untied:
+** ldnt1sw z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_s64_untied, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_s64 (p0, z1),
+ z0_res = svldnt1sw_gather_s64 (p0, z1))
+
+/*
+** ldnt1sw_gather_x0_s64_offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_x0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_s64 (p0, z0, x0),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, z0, x0))
+
+/*
+** ldnt1sw_gather_m4_s64_offset:
+** mov (x[0-9]+), #?-4
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_m4_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_s64 (p0, z0, -4),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, z0, -4))
+
+/*
+** ldnt1sw_gather_0_s64_offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_s64 (p0, z0, 0),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, z0, 0))
+
+/*
+** ldnt1sw_gather_5_s64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_5_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_s64 (p0, z0, 5),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, z0, 5))
+
+/*
+** ldnt1sw_gather_6_s64_offset:
+** mov (x[0-9]+), #?6
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_6_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_s64 (p0, z0, 6),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, z0, 6))
+
+/*
+** ldnt1sw_gather_7_s64_offset:
+** mov (x[0-9]+), #?7
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_7_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_s64 (p0, z0, 7),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, z0, 7))
+
+/*
+** ldnt1sw_gather_8_s64_offset:
+** mov (x[0-9]+), #?8
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_8_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_s64 (p0, z0, 8),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, z0, 8))
+
+/*
+** ldnt1sw_gather_124_s64_offset:
+** mov (x[0-9]+), #?124
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_124_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_s64 (p0, z0, 124),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, z0, 124))
+
+/*
+** ldnt1sw_gather_128_s64_offset:
+** mov (x[0-9]+), #?128
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_128_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_s64 (p0, z0, 128),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, z0, 128))
+
+/*
+** ldnt1sw_gather_x0_s64_index:
+** lsl (x[0-9]+), x0, #?2
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_x0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_s64 (p0, z0, x0),
+ z0_res = svldnt1sw_gather_index_s64 (p0, z0, x0))
+
+/*
+** ldnt1sw_gather_m1_s64_index:
+** mov (x[0-9]+), #?-4
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_m1_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_s64 (p0, z0, -1),
+ z0_res = svldnt1sw_gather_index_s64 (p0, z0, -1))
+
+/*
+** ldnt1sw_gather_0_s64_index:
+** ldnt1sw z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_s64 (p0, z0, 0),
+ z0_res = svldnt1sw_gather_index_s64 (p0, z0, 0))
+
+/*
+** ldnt1sw_gather_5_s64_index:
+** mov (x[0-9]+), #?20
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_5_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_s64 (p0, z0, 5),
+ z0_res = svldnt1sw_gather_index_s64 (p0, z0, 5))
+
+/*
+** ldnt1sw_gather_31_s64_index:
+** mov (x[0-9]+), #?124
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_31_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_s64 (p0, z0, 31),
+ z0_res = svldnt1sw_gather_index_s64 (p0, z0, 31))
+
+/*
+** ldnt1sw_gather_32_s64_index:
+** mov (x[0-9]+), #?128
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_32_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_s64 (p0, z0, 32),
+ z0_res = svldnt1sw_gather_index_s64 (p0, z0, 32))
+
+/*
+** ldnt1sw_gather_x0_s64_s64offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_x0_s64_s64offset, svint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_tied1_s64_s64offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_tied1_s64_s64offset, svint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_untied_s64_s64offset:
+** ldnt1sw z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_untied_s64_s64offset, svint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1sw_gather_x0_s64_u64offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_x0_s64_u64offset, svint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_tied1_s64_u64offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_tied1_s64_u64offset, svint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_untied_s64_u64offset:
+** ldnt1sw z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_untied_s64_u64offset, svint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1sw_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1sw_gather_x0_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_x0_s64_s64index, svint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_tied1_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_tied1_s64_s64index, svint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_untied_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_untied_s64_s64index, svint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64index_s64 (p0, x0, z1),
+ z0_res = svldnt1sw_gather_index_s64 (p0, x0, z1))
+
+/*
+** ldnt1sw_gather_x0_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_x0_s64_u64index, svint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_tied1_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_tied1_s64_u64index, svint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_untied_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_untied_s64_u64index, svint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64index_s64 (p0, x0, z1),
+ z0_res = svldnt1sw_gather_index_s64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1sw_gather_u64_tied1:
+** ldnt1sw z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_u64_tied1, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_u64 (p0, z0),
+ z0_res = svldnt1sw_gather_u64 (p0, z0))
+
+/*
+** ldnt1sw_gather_u64_untied:
+** ldnt1sw z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_u64_untied, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_u64 (p0, z1),
+ z0_res = svldnt1sw_gather_u64 (p0, z1))
+
+/*
+** ldnt1sw_gather_x0_u64_offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_x0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_u64 (p0, z0, x0),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, z0, x0))
+
+/*
+** ldnt1sw_gather_m4_u64_offset:
+** mov (x[0-9]+), #?-4
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_m4_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_u64 (p0, z0, -4),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, z0, -4))
+
+/*
+** ldnt1sw_gather_0_u64_offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_u64 (p0, z0, 0),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, z0, 0))
+
+/*
+** ldnt1sw_gather_5_u64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_5_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_u64 (p0, z0, 5),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, z0, 5))
+
+/*
+** ldnt1sw_gather_6_u64_offset:
+** mov (x[0-9]+), #?6
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_6_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_u64 (p0, z0, 6),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, z0, 6))
+
+/*
+** ldnt1sw_gather_7_u64_offset:
+** mov (x[0-9]+), #?7
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_7_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_u64 (p0, z0, 7),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, z0, 7))
+
+/*
+** ldnt1sw_gather_8_u64_offset:
+** mov (x[0-9]+), #?8
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_8_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_u64 (p0, z0, 8),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, z0, 8))
+
+/*
+** ldnt1sw_gather_124_u64_offset:
+** mov (x[0-9]+), #?124
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_124_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_u64 (p0, z0, 124),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, z0, 124))
+
+/*
+** ldnt1sw_gather_128_u64_offset:
+** mov (x[0-9]+), #?128
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_128_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_offset_u64 (p0, z0, 128),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, z0, 128))
+
+/*
+** ldnt1sw_gather_x0_u64_index:
+** lsl (x[0-9]+), x0, #?2
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_x0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_u64 (p0, z0, x0),
+ z0_res = svldnt1sw_gather_index_u64 (p0, z0, x0))
+
+/*
+** ldnt1sw_gather_m1_u64_index:
+** mov (x[0-9]+), #?-4
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_m1_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_u64 (p0, z0, -1),
+ z0_res = svldnt1sw_gather_index_u64 (p0, z0, -1))
+
+/*
+** ldnt1sw_gather_0_u64_index:
+** ldnt1sw z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_u64 (p0, z0, 0),
+ z0_res = svldnt1sw_gather_index_u64 (p0, z0, 0))
+
+/*
+** ldnt1sw_gather_5_u64_index:
+** mov (x[0-9]+), #?20
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_5_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_u64 (p0, z0, 5),
+ z0_res = svldnt1sw_gather_index_u64 (p0, z0, 5))
+
+/*
+** ldnt1sw_gather_31_u64_index:
+** mov (x[0-9]+), #?124
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_31_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_u64 (p0, z0, 31),
+ z0_res = svldnt1sw_gather_index_u64 (p0, z0, 31))
+
+/*
+** ldnt1sw_gather_32_u64_index:
+** mov (x[0-9]+), #?128
+** ldnt1sw z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1sw_gather_32_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64base_index_u64 (p0, z0, 32),
+ z0_res = svldnt1sw_gather_index_u64 (p0, z0, 32))
+
+/*
+** ldnt1sw_gather_x0_u64_s64offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_x0_u64_s64offset, svuint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_tied1_u64_s64offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_tied1_u64_s64offset, svuint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_untied_u64_s64offset:
+** ldnt1sw z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_untied_u64_s64offset, svuint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1sw_gather_x0_u64_u64offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_x0_u64_u64offset, svuint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_tied1_u64_u64offset:
+** ldnt1sw z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_tied1_u64_u64offset, svuint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_untied_u64_u64offset:
+** ldnt1sw z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_untied_u64_u64offset, svuint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1sw_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1sw_gather_x0_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_x0_u64_s64index, svuint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_tied1_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_tied1_u64_s64index, svuint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_untied_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_untied_u64_s64index, svuint64_t, int32_t, svint64_t,
+ z0_res = svldnt1sw_gather_s64index_u64 (p0, x0, z1),
+ z0_res = svldnt1sw_gather_index_u64 (p0, x0, z1))
+
+/*
+** ldnt1sw_gather_x0_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_x0_u64_u64index, svuint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_tied1_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_tied1_u64_u64index, svuint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1sw_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1sw_gather_untied_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** ldnt1sw z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1sw_gather_untied_u64_u64index, svuint64_t, int32_t, svuint64_t,
+ z0_res = svldnt1sw_gather_u64index_u64 (p0, x0, z1),
+ z0_res = svldnt1sw_gather_index_u64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1ub_gather_s32_tied1:
+** ldnt1b z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_s32_tied1, svint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_s32 (p0, z0),
+ z0_res = svldnt1ub_gather_s32 (p0, z0))
+
+/*
+** ldnt1ub_gather_s32_untied:
+** ldnt1b z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_s32_untied, svint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_s32 (p0, z1),
+ z0_res = svldnt1ub_gather_s32 (p0, z1))
+
+/*
+** ldnt1ub_gather_x0_s32_offset:
+** ldnt1b z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_x0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_s32 (p0, z0, x0),
+ z0_res = svldnt1ub_gather_offset_s32 (p0, z0, x0))
+
+/*
+** ldnt1ub_gather_m1_s32_offset:
+** mov (x[0-9]+), #?-1
+** ldnt1b z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_m1_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_s32 (p0, z0, -1),
+ z0_res = svldnt1ub_gather_offset_s32 (p0, z0, -1))
+
+/*
+** ldnt1ub_gather_0_s32_offset:
+** ldnt1b z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_s32 (p0, z0, 0),
+ z0_res = svldnt1ub_gather_offset_s32 (p0, z0, 0))
+
+/*
+** ldnt1ub_gather_5_s32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1b z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_5_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_s32 (p0, z0, 5),
+ z0_res = svldnt1ub_gather_offset_s32 (p0, z0, 5))
+
+/*
+** ldnt1ub_gather_31_s32_offset:
+** mov (x[0-9]+), #?31
+** ldnt1b z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_31_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_s32 (p0, z0, 31),
+ z0_res = svldnt1ub_gather_offset_s32 (p0, z0, 31))
+
+/*
+** ldnt1ub_gather_32_s32_offset:
+** mov (x[0-9]+), #?32
+** ldnt1b z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_32_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_s32 (p0, z0, 32),
+ z0_res = svldnt1ub_gather_offset_s32 (p0, z0, 32))
+
+/*
+** ldnt1ub_gather_x0_s32_u32offset:
+** ldnt1b z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_x0_s32_u32offset, svint32_t, uint8_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_s32 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_tied1_s32_u32offset:
+** ldnt1b z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_tied1_s32_u32offset, svint32_t, uint8_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_s32 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_untied_s32_u32offset:
+** ldnt1b z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_untied_s32_u32offset, svint32_t, uint8_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32offset_s32 (p0, x0, z1),
+ z0_res = svldnt1ub_gather_offset_s32 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1ub_gather_s64_tied1:
+** ldnt1b z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_s64_tied1, svint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_s64 (p0, z0),
+ z0_res = svldnt1ub_gather_s64 (p0, z0))
+
+/*
+** ldnt1ub_gather_s64_untied:
+** ldnt1b z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_s64_untied, svint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_s64 (p0, z1),
+ z0_res = svldnt1ub_gather_s64 (p0, z1))
+
+/*
+** ldnt1ub_gather_x0_s64_offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_x0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_s64 (p0, z0, x0),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, z0, x0))
+
+/*
+** ldnt1ub_gather_m1_s64_offset:
+** mov (x[0-9]+), #?-1
+** ldnt1b z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_m1_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_s64 (p0, z0, -1),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, z0, -1))
+
+/*
+** ldnt1ub_gather_0_s64_offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_s64 (p0, z0, 0),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, z0, 0))
+
+/*
+** ldnt1ub_gather_5_s64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1b z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_5_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_s64 (p0, z0, 5),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, z0, 5))
+
+/*
+** ldnt1ub_gather_31_s64_offset:
+** mov (x[0-9]+), #?31
+** ldnt1b z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_31_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_s64 (p0, z0, 31),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, z0, 31))
+
+/*
+** ldnt1ub_gather_32_s64_offset:
+** mov (x[0-9]+), #?32
+** ldnt1b z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_32_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_s64 (p0, z0, 32),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, z0, 32))
+
+/*
+** ldnt1ub_gather_x0_s64_s64offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_x0_s64_s64offset, svint64_t, uint8_t, svint64_t,
+ z0_res = svldnt1ub_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_tied1_s64_s64offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_tied1_s64_s64offset, svint64_t, uint8_t, svint64_t,
+ z0_res = svldnt1ub_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_untied_s64_s64offset:
+** ldnt1b z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_untied_s64_s64offset, svint64_t, uint8_t, svint64_t,
+ z0_res = svldnt1ub_gather_s64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1ub_gather_x0_s64_u64offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_x0_s64_u64offset, svint64_t, uint8_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_tied1_s64_u64offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_tied1_s64_u64offset, svint64_t, uint8_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_untied_s64_u64offset:
+** ldnt1b z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_untied_s64_u64offset, svint64_t, uint8_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1ub_gather_offset_s64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1ub_gather_u32_tied1:
+** ldnt1b z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_u32_tied1, svuint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_u32 (p0, z0),
+ z0_res = svldnt1ub_gather_u32 (p0, z0))
+
+/*
+** ldnt1ub_gather_u32_untied:
+** ldnt1b z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_u32_untied, svuint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_u32 (p0, z1),
+ z0_res = svldnt1ub_gather_u32 (p0, z1))
+
+/*
+** ldnt1ub_gather_x0_u32_offset:
+** ldnt1b z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_x0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_u32 (p0, z0, x0),
+ z0_res = svldnt1ub_gather_offset_u32 (p0, z0, x0))
+
+/*
+** ldnt1ub_gather_m1_u32_offset:
+** mov (x[0-9]+), #?-1
+** ldnt1b z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_m1_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_u32 (p0, z0, -1),
+ z0_res = svldnt1ub_gather_offset_u32 (p0, z0, -1))
+
+/*
+** ldnt1ub_gather_0_u32_offset:
+** ldnt1b z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_u32 (p0, z0, 0),
+ z0_res = svldnt1ub_gather_offset_u32 (p0, z0, 0))
+
+/*
+** ldnt1ub_gather_5_u32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1b z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_5_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_u32 (p0, z0, 5),
+ z0_res = svldnt1ub_gather_offset_u32 (p0, z0, 5))
+
+/*
+** ldnt1ub_gather_31_u32_offset:
+** mov (x[0-9]+), #?31
+** ldnt1b z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_31_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_u32 (p0, z0, 31),
+ z0_res = svldnt1ub_gather_offset_u32 (p0, z0, 31))
+
+/*
+** ldnt1ub_gather_32_u32_offset:
+** mov (x[0-9]+), #?32
+** ldnt1b z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_32_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32base_offset_u32 (p0, z0, 32),
+ z0_res = svldnt1ub_gather_offset_u32 (p0, z0, 32))
+
+/*
+** ldnt1ub_gather_x0_u32_u32offset:
+** ldnt1b z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_x0_u32_u32offset, svuint32_t, uint8_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_u32 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_tied1_u32_u32offset:
+** ldnt1b z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_tied1_u32_u32offset, svuint32_t, uint8_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_u32 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_untied_u32_u32offset:
+** ldnt1b z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_untied_u32_u32offset, svuint32_t, uint8_t, svuint32_t,
+ z0_res = svldnt1ub_gather_u32offset_u32 (p0, x0, z1),
+ z0_res = svldnt1ub_gather_offset_u32 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1ub_gather_u64_tied1:
+** ldnt1b z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_u64_tied1, svuint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_u64 (p0, z0),
+ z0_res = svldnt1ub_gather_u64 (p0, z0))
+
+/*
+** ldnt1ub_gather_u64_untied:
+** ldnt1b z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_u64_untied, svuint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_u64 (p0, z1),
+ z0_res = svldnt1ub_gather_u64 (p0, z1))
+
+/*
+** ldnt1ub_gather_x0_u64_offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_x0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_u64 (p0, z0, x0),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, z0, x0))
+
+/*
+** ldnt1ub_gather_m1_u64_offset:
+** mov (x[0-9]+), #?-1
+** ldnt1b z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_m1_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_u64 (p0, z0, -1),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, z0, -1))
+
+/*
+** ldnt1ub_gather_0_u64_offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_u64 (p0, z0, 0),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, z0, 0))
+
+/*
+** ldnt1ub_gather_5_u64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1b z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_5_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_u64 (p0, z0, 5),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, z0, 5))
+
+/*
+** ldnt1ub_gather_31_u64_offset:
+** mov (x[0-9]+), #?31
+** ldnt1b z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_31_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_u64 (p0, z0, 31),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, z0, 31))
+
+/*
+** ldnt1ub_gather_32_u64_offset:
+** mov (x[0-9]+), #?32
+** ldnt1b z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1ub_gather_32_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64base_offset_u64 (p0, z0, 32),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, z0, 32))
+
+/*
+** ldnt1ub_gather_x0_u64_s64offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_x0_u64_s64offset, svuint64_t, uint8_t, svint64_t,
+ z0_res = svldnt1ub_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_tied1_u64_s64offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_tied1_u64_s64offset, svuint64_t, uint8_t, svint64_t,
+ z0_res = svldnt1ub_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_untied_u64_s64offset:
+** ldnt1b z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_untied_u64_s64offset, svuint64_t, uint8_t, svint64_t,
+ z0_res = svldnt1ub_gather_s64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1ub_gather_x0_u64_u64offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_x0_u64_u64offset, svuint64_t, uint8_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_tied1_u64_u64offset:
+** ldnt1b z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_tied1_u64_u64offset, svuint64_t, uint8_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1ub_gather_untied_u64_u64offset:
+** ldnt1b z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1ub_gather_untied_u64_u64offset, svuint64_t, uint8_t, svuint64_t,
+ z0_res = svldnt1ub_gather_u64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1ub_gather_offset_u64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1uh_gather_s32_tied1:
+** ldnt1h z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_s32_tied1, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_s32 (p0, z0),
+ z0_res = svldnt1uh_gather_s32 (p0, z0))
+
+/*
+** ldnt1uh_gather_s32_untied:
+** ldnt1h z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_s32_untied, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_s32 (p0, z1),
+ z0_res = svldnt1uh_gather_s32 (p0, z1))
+
+/*
+** ldnt1uh_gather_x0_s32_offset:
+** ldnt1h z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_x0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_s32 (p0, z0, x0),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, z0, x0))
+
+/*
+** ldnt1uh_gather_m2_s32_offset:
+** mov (x[0-9]+), #?-2
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_m2_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_s32 (p0, z0, -2),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, z0, -2))
+
+/*
+** ldnt1uh_gather_0_s32_offset:
+** ldnt1h z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_0_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_s32 (p0, z0, 0),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, z0, 0))
+
+/*
+** ldnt1uh_gather_5_s32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_5_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_s32 (p0, z0, 5),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, z0, 5))
+
+/*
+** ldnt1uh_gather_6_s32_offset:
+** mov (x[0-9]+), #?6
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_6_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_s32 (p0, z0, 6),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, z0, 6))
+
+/*
+** ldnt1uh_gather_62_s32_offset:
+** mov (x[0-9]+), #?62
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_62_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_s32 (p0, z0, 62),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, z0, 62))
+
+/*
+** ldnt1uh_gather_64_s32_offset:
+** mov (x[0-9]+), #?64
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_64_s32_offset, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_s32 (p0, z0, 64),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, z0, 64))
+
+/*
+** ldnt1uh_gather_x0_s32_index:
+** lsl (x[0-9]+), x0, #?1
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_x0_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_s32 (p0, z0, x0),
+ z0_res = svldnt1uh_gather_index_s32 (p0, z0, x0))
+
+/*
+** ldnt1uh_gather_m1_s32_index:
+** mov (x[0-9]+), #?-2
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_m1_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_s32 (p0, z0, -1),
+ z0_res = svldnt1uh_gather_index_s32 (p0, z0, -1))
+
+/*
+** ldnt1uh_gather_0_s32_index:
+** ldnt1h z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_0_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_s32 (p0, z0, 0),
+ z0_res = svldnt1uh_gather_index_s32 (p0, z0, 0))
+
+/*
+** ldnt1uh_gather_5_s32_index:
+** mov (x[0-9]+), #?10
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_5_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_s32 (p0, z0, 5),
+ z0_res = svldnt1uh_gather_index_s32 (p0, z0, 5))
+
+/*
+** ldnt1uh_gather_31_s32_index:
+** mov (x[0-9]+), #?62
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_31_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_s32 (p0, z0, 31),
+ z0_res = svldnt1uh_gather_index_s32 (p0, z0, 31))
+
+/*
+** ldnt1uh_gather_32_s32_index:
+** mov (x[0-9]+), #?64
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_32_s32_index, svint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_s32 (p0, z0, 32),
+ z0_res = svldnt1uh_gather_index_s32 (p0, z0, 32))
+
+/*
+** ldnt1uh_gather_x0_s32_u32offset:
+** ldnt1h z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_s32_u32offset, svint32_t, uint16_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_s32_u32offset:
+** ldnt1h z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_s32_u32offset, svint32_t, uint16_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32offset_s32 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_s32_u32offset:
+** ldnt1h z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_s32_u32offset, svint32_t, uint16_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32offset_s32 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_offset_s32 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1uh_gather_s64_tied1:
+** ldnt1h z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_s64_tied1, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_s64 (p0, z0),
+ z0_res = svldnt1uh_gather_s64 (p0, z0))
+
+/*
+** ldnt1uh_gather_s64_untied:
+** ldnt1h z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_s64_untied, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_s64 (p0, z1),
+ z0_res = svldnt1uh_gather_s64 (p0, z1))
+
+/*
+** ldnt1uh_gather_x0_s64_offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_x0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_s64 (p0, z0, x0),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, z0, x0))
+
+/*
+** ldnt1uh_gather_m2_s64_offset:
+** mov (x[0-9]+), #?-2
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_m2_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_s64 (p0, z0, -2),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, z0, -2))
+
+/*
+** ldnt1uh_gather_0_s64_offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_s64 (p0, z0, 0),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, z0, 0))
+
+/*
+** ldnt1uh_gather_5_s64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_5_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_s64 (p0, z0, 5),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, z0, 5))
+
+/*
+** ldnt1uh_gather_6_s64_offset:
+** mov (x[0-9]+), #?6
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_6_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_s64 (p0, z0, 6),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, z0, 6))
+
+/*
+** ldnt1uh_gather_62_s64_offset:
+** mov (x[0-9]+), #?62
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_62_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_s64 (p0, z0, 62),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, z0, 62))
+
+/*
+** ldnt1uh_gather_64_s64_offset:
+** mov (x[0-9]+), #?64
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_64_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_s64 (p0, z0, 64),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, z0, 64))
+
+/*
+** ldnt1uh_gather_x0_s64_index:
+** lsl (x[0-9]+), x0, #?1
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_x0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_s64 (p0, z0, x0),
+ z0_res = svldnt1uh_gather_index_s64 (p0, z0, x0))
+
+/*
+** ldnt1uh_gather_m1_s64_index:
+** mov (x[0-9]+), #?-2
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_m1_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_s64 (p0, z0, -1),
+ z0_res = svldnt1uh_gather_index_s64 (p0, z0, -1))
+
+/*
+** ldnt1uh_gather_0_s64_index:
+** ldnt1h z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_s64 (p0, z0, 0),
+ z0_res = svldnt1uh_gather_index_s64 (p0, z0, 0))
+
+/*
+** ldnt1uh_gather_5_s64_index:
+** mov (x[0-9]+), #?10
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_5_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_s64 (p0, z0, 5),
+ z0_res = svldnt1uh_gather_index_s64 (p0, z0, 5))
+
+/*
+** ldnt1uh_gather_31_s64_index:
+** mov (x[0-9]+), #?62
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_31_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_s64 (p0, z0, 31),
+ z0_res = svldnt1uh_gather_index_s64 (p0, z0, 31))
+
+/*
+** ldnt1uh_gather_32_s64_index:
+** mov (x[0-9]+), #?64
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_32_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_s64 (p0, z0, 32),
+ z0_res = svldnt1uh_gather_index_s64 (p0, z0, 32))
+
+/*
+** ldnt1uh_gather_x0_s64_s64offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_s64_s64offset, svint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_s64_s64offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_s64_s64offset, svint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_s64_s64offset:
+** ldnt1h z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_s64_s64offset, svint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1uh_gather_x0_s64_u64offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_s64_u64offset, svint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_s64_u64offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_s64_u64offset, svint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_s64_u64offset:
+** ldnt1h z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_s64_u64offset, svint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1uh_gather_x0_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_s64_s64index, svint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_s64_s64index, svint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_s64_s64index, svint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64index_s64 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_index_s64 (p0, x0, z1))
+
+/*
+** ldnt1uh_gather_x0_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_s64_u64index, svint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_s64_u64index, svint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_s64_u64index, svint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64index_s64 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_index_s64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1uh_gather_u32_tied1:
+** ldnt1h z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_u32_tied1, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_u32 (p0, z0),
+ z0_res = svldnt1uh_gather_u32 (p0, z0))
+
+/*
+** ldnt1uh_gather_u32_untied:
+** ldnt1h z0\.s, p0/z, \[z1\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_u32_untied, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_u32 (p0, z1),
+ z0_res = svldnt1uh_gather_u32 (p0, z1))
+
+/*
+** ldnt1uh_gather_x0_u32_offset:
+** ldnt1h z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_x0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_u32 (p0, z0, x0),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, z0, x0))
+
+/*
+** ldnt1uh_gather_m2_u32_offset:
+** mov (x[0-9]+), #?-2
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_m2_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_u32 (p0, z0, -2),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, z0, -2))
+
+/*
+** ldnt1uh_gather_0_u32_offset:
+** ldnt1h z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_0_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_u32 (p0, z0, 0),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, z0, 0))
+
+/*
+** ldnt1uh_gather_5_u32_offset:
+** mov (x[0-9]+), #?5
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_5_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_u32 (p0, z0, 5),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, z0, 5))
+
+/*
+** ldnt1uh_gather_6_u32_offset:
+** mov (x[0-9]+), #?6
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_6_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_u32 (p0, z0, 6),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, z0, 6))
+
+/*
+** ldnt1uh_gather_62_u32_offset:
+** mov (x[0-9]+), #?62
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_62_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_u32 (p0, z0, 62),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, z0, 62))
+
+/*
+** ldnt1uh_gather_64_u32_offset:
+** mov (x[0-9]+), #?64
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_64_u32_offset, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_offset_u32 (p0, z0, 64),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, z0, 64))
+
+/*
+** ldnt1uh_gather_x0_u32_index:
+** lsl (x[0-9]+), x0, #?1
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_x0_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_u32 (p0, z0, x0),
+ z0_res = svldnt1uh_gather_index_u32 (p0, z0, x0))
+
+/*
+** ldnt1uh_gather_m1_u32_index:
+** mov (x[0-9]+), #?-2
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_m1_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_u32 (p0, z0, -1),
+ z0_res = svldnt1uh_gather_index_u32 (p0, z0, -1))
+
+/*
+** ldnt1uh_gather_0_u32_index:
+** ldnt1h z0\.s, p0/z, \[z0\.s\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_0_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_u32 (p0, z0, 0),
+ z0_res = svldnt1uh_gather_index_u32 (p0, z0, 0))
+
+/*
+** ldnt1uh_gather_5_u32_index:
+** mov (x[0-9]+), #?10
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_5_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_u32 (p0, z0, 5),
+ z0_res = svldnt1uh_gather_index_u32 (p0, z0, 5))
+
+/*
+** ldnt1uh_gather_31_u32_index:
+** mov (x[0-9]+), #?62
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_31_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_u32 (p0, z0, 31),
+ z0_res = svldnt1uh_gather_index_u32 (p0, z0, 31))
+
+/*
+** ldnt1uh_gather_32_u32_index:
+** mov (x[0-9]+), #?64
+** ldnt1h z0\.s, p0/z, \[z0\.s, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_32_u32_index, svuint32_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32base_index_u32 (p0, z0, 32),
+ z0_res = svldnt1uh_gather_index_u32 (p0, z0, 32))
+
+/*
+** ldnt1uh_gather_x0_u32_u32offset:
+** ldnt1h z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_u32_u32offset, svuint32_t, uint16_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_u32_u32offset:
+** ldnt1h z0\.s, p0/z, \[z0\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_u32_u32offset, svuint32_t, uint16_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32offset_u32 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_u32_u32offset:
+** ldnt1h z0\.s, p0/z, \[z1\.s, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_u32_u32offset, svuint32_t, uint16_t, svuint32_t,
+ z0_res = svldnt1uh_gather_u32offset_u32 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_offset_u32 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1uh_gather_u64_tied1:
+** ldnt1h z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_u64_tied1, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_u64 (p0, z0),
+ z0_res = svldnt1uh_gather_u64 (p0, z0))
+
+/*
+** ldnt1uh_gather_u64_untied:
+** ldnt1h z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_u64_untied, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_u64 (p0, z1),
+ z0_res = svldnt1uh_gather_u64 (p0, z1))
+
+/*
+** ldnt1uh_gather_x0_u64_offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_x0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_u64 (p0, z0, x0),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, z0, x0))
+
+/*
+** ldnt1uh_gather_m2_u64_offset:
+** mov (x[0-9]+), #?-2
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_m2_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_u64 (p0, z0, -2),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, z0, -2))
+
+/*
+** ldnt1uh_gather_0_u64_offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_u64 (p0, z0, 0),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, z0, 0))
+
+/*
+** ldnt1uh_gather_5_u64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_5_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_u64 (p0, z0, 5),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, z0, 5))
+
+/*
+** ldnt1uh_gather_6_u64_offset:
+** mov (x[0-9]+), #?6
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_6_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_u64 (p0, z0, 6),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, z0, 6))
+
+/*
+** ldnt1uh_gather_62_u64_offset:
+** mov (x[0-9]+), #?62
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_62_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_u64 (p0, z0, 62),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, z0, 62))
+
+/*
+** ldnt1uh_gather_64_u64_offset:
+** mov (x[0-9]+), #?64
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_64_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_offset_u64 (p0, z0, 64),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, z0, 64))
+
+/*
+** ldnt1uh_gather_x0_u64_index:
+** lsl (x[0-9]+), x0, #?1
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_x0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_u64 (p0, z0, x0),
+ z0_res = svldnt1uh_gather_index_u64 (p0, z0, x0))
+
+/*
+** ldnt1uh_gather_m1_u64_index:
+** mov (x[0-9]+), #?-2
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_m1_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_u64 (p0, z0, -1),
+ z0_res = svldnt1uh_gather_index_u64 (p0, z0, -1))
+
+/*
+** ldnt1uh_gather_0_u64_index:
+** ldnt1h z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_u64 (p0, z0, 0),
+ z0_res = svldnt1uh_gather_index_u64 (p0, z0, 0))
+
+/*
+** ldnt1uh_gather_5_u64_index:
+** mov (x[0-9]+), #?10
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_5_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_u64 (p0, z0, 5),
+ z0_res = svldnt1uh_gather_index_u64 (p0, z0, 5))
+
+/*
+** ldnt1uh_gather_31_u64_index:
+** mov (x[0-9]+), #?62
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_31_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_u64 (p0, z0, 31),
+ z0_res = svldnt1uh_gather_index_u64 (p0, z0, 31))
+
+/*
+** ldnt1uh_gather_32_u64_index:
+** mov (x[0-9]+), #?64
+** ldnt1h z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uh_gather_32_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64base_index_u64 (p0, z0, 32),
+ z0_res = svldnt1uh_gather_index_u64 (p0, z0, 32))
+
+/*
+** ldnt1uh_gather_x0_u64_s64offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_u64_s64offset, svuint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_u64_s64offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_u64_s64offset, svuint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_u64_s64offset:
+** ldnt1h z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_u64_s64offset, svuint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1uh_gather_x0_u64_u64offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_u64_u64offset, svuint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_u64_u64offset:
+** ldnt1h z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_u64_u64offset, svuint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_u64_u64offset:
+** ldnt1h z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_u64_u64offset, svuint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1uh_gather_x0_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_u64_s64index, svuint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_u64_s64index, svuint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_u64_s64index, svuint64_t, uint16_t, svint64_t,
+ z0_res = svldnt1uh_gather_s64index_u64 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_index_u64 (p0, x0, z1))
+
+/*
+** ldnt1uh_gather_x0_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_x0_u64_u64index, svuint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_tied1_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_tied1_u64_u64index, svuint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1uh_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1uh_gather_untied_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** ldnt1h z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uh_gather_untied_u64_u64index, svuint64_t, uint16_t, svuint64_t,
+ z0_res = svldnt1uh_gather_u64index_u64 (p0, x0, z1),
+ z0_res = svldnt1uh_gather_index_u64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1uw_gather_s64_tied1:
+** ldnt1w z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_s64_tied1, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_s64 (p0, z0),
+ z0_res = svldnt1uw_gather_s64 (p0, z0))
+
+/*
+** ldnt1uw_gather_s64_untied:
+** ldnt1w z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_s64_untied, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_s64 (p0, z1),
+ z0_res = svldnt1uw_gather_s64 (p0, z1))
+
+/*
+** ldnt1uw_gather_x0_s64_offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_x0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_s64 (p0, z0, x0),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, z0, x0))
+
+/*
+** ldnt1uw_gather_m4_s64_offset:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_m4_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_s64 (p0, z0, -4),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, z0, -4))
+
+/*
+** ldnt1uw_gather_0_s64_offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_0_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_s64 (p0, z0, 0),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, z0, 0))
+
+/*
+** ldnt1uw_gather_5_s64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_5_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_s64 (p0, z0, 5),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, z0, 5))
+
+/*
+** ldnt1uw_gather_6_s64_offset:
+** mov (x[0-9]+), #?6
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_6_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_s64 (p0, z0, 6),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, z0, 6))
+
+/*
+** ldnt1uw_gather_7_s64_offset:
+** mov (x[0-9]+), #?7
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_7_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_s64 (p0, z0, 7),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, z0, 7))
+
+/*
+** ldnt1uw_gather_8_s64_offset:
+** mov (x[0-9]+), #?8
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_8_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_s64 (p0, z0, 8),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, z0, 8))
+
+/*
+** ldnt1uw_gather_124_s64_offset:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_124_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_s64 (p0, z0, 124),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, z0, 124))
+
+/*
+** ldnt1uw_gather_128_s64_offset:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_128_s64_offset, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_s64 (p0, z0, 128),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, z0, 128))
+
+/*
+** ldnt1uw_gather_x0_s64_index:
+** lsl (x[0-9]+), x0, #?2
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_x0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_s64 (p0, z0, x0),
+ z0_res = svldnt1uw_gather_index_s64 (p0, z0, x0))
+
+/*
+** ldnt1uw_gather_m1_s64_index:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_m1_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_s64 (p0, z0, -1),
+ z0_res = svldnt1uw_gather_index_s64 (p0, z0, -1))
+
+/*
+** ldnt1uw_gather_0_s64_index:
+** ldnt1w z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_0_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_s64 (p0, z0, 0),
+ z0_res = svldnt1uw_gather_index_s64 (p0, z0, 0))
+
+/*
+** ldnt1uw_gather_5_s64_index:
+** mov (x[0-9]+), #?20
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_5_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_s64 (p0, z0, 5),
+ z0_res = svldnt1uw_gather_index_s64 (p0, z0, 5))
+
+/*
+** ldnt1uw_gather_31_s64_index:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_31_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_s64 (p0, z0, 31),
+ z0_res = svldnt1uw_gather_index_s64 (p0, z0, 31))
+
+/*
+** ldnt1uw_gather_32_s64_index:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_32_s64_index, svint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_s64 (p0, z0, 32),
+ z0_res = svldnt1uw_gather_index_s64 (p0, z0, 32))
+
+/*
+** ldnt1uw_gather_x0_s64_s64offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_x0_s64_s64offset, svint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_tied1_s64_s64offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_tied1_s64_s64offset, svint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_untied_s64_s64offset:
+** ldnt1w z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_untied_s64_s64offset, svint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1uw_gather_x0_s64_u64offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_x0_s64_u64offset, svint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_tied1_s64_u64offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_tied1_s64_u64offset, svint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64offset_s64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_untied_s64_u64offset:
+** ldnt1w z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_untied_s64_u64offset, svint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64offset_s64 (p0, x0, z1),
+ z0_res = svldnt1uw_gather_offset_s64 (p0, x0, z1))
+
+/*
+** ldnt1uw_gather_x0_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_x0_s64_s64index, svint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_tied1_s64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_tied1_s64_s64index, svint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64index_s64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_untied_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_untied_s64_s64index, svint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64index_s64 (p0, x0, z1),
+ z0_res = svldnt1uw_gather_index_s64 (p0, x0, z1))
+
+/*
+** ldnt1uw_gather_x0_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_x0_s64_u64index, svint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_tied1_s64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_tied1_s64_u64index, svint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64index_s64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_index_s64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_untied_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_untied_s64_u64index, svint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64index_s64 (p0, x0, z1),
+ z0_res = svldnt1uw_gather_index_s64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** ldnt1uw_gather_u64_tied1:
+** ldnt1w z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_u64_tied1, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_u64 (p0, z0),
+ z0_res = svldnt1uw_gather_u64 (p0, z0))
+
+/*
+** ldnt1uw_gather_u64_untied:
+** ldnt1w z0\.d, p0/z, \[z1\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_u64_untied, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_u64 (p0, z1),
+ z0_res = svldnt1uw_gather_u64 (p0, z1))
+
+/*
+** ldnt1uw_gather_x0_u64_offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_x0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_u64 (p0, z0, x0),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, z0, x0))
+
+/*
+** ldnt1uw_gather_m4_u64_offset:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_m4_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_u64 (p0, z0, -4),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, z0, -4))
+
+/*
+** ldnt1uw_gather_0_u64_offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_0_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_u64 (p0, z0, 0),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, z0, 0))
+
+/*
+** ldnt1uw_gather_5_u64_offset:
+** mov (x[0-9]+), #?5
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_5_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_u64 (p0, z0, 5),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, z0, 5))
+
+/*
+** ldnt1uw_gather_6_u64_offset:
+** mov (x[0-9]+), #?6
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_6_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_u64 (p0, z0, 6),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, z0, 6))
+
+/*
+** ldnt1uw_gather_7_u64_offset:
+** mov (x[0-9]+), #?7
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_7_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_u64 (p0, z0, 7),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, z0, 7))
+
+/*
+** ldnt1uw_gather_8_u64_offset:
+** mov (x[0-9]+), #?8
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_8_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_u64 (p0, z0, 8),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, z0, 8))
+
+/*
+** ldnt1uw_gather_124_u64_offset:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_124_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_u64 (p0, z0, 124),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, z0, 124))
+
+/*
+** ldnt1uw_gather_128_u64_offset:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_128_u64_offset, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_offset_u64 (p0, z0, 128),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, z0, 128))
+
+/*
+** ldnt1uw_gather_x0_u64_index:
+** lsl (x[0-9]+), x0, #?2
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_x0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_u64 (p0, z0, x0),
+ z0_res = svldnt1uw_gather_index_u64 (p0, z0, x0))
+
+/*
+** ldnt1uw_gather_m1_u64_index:
+** mov (x[0-9]+), #?-4
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_m1_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_u64 (p0, z0, -1),
+ z0_res = svldnt1uw_gather_index_u64 (p0, z0, -1))
+
+/*
+** ldnt1uw_gather_0_u64_index:
+** ldnt1w z0\.d, p0/z, \[z0\.d\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_0_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_u64 (p0, z0, 0),
+ z0_res = svldnt1uw_gather_index_u64 (p0, z0, 0))
+
+/*
+** ldnt1uw_gather_5_u64_index:
+** mov (x[0-9]+), #?20
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_5_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_u64 (p0, z0, 5),
+ z0_res = svldnt1uw_gather_index_u64 (p0, z0, 5))
+
+/*
+** ldnt1uw_gather_31_u64_index:
+** mov (x[0-9]+), #?124
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_31_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_u64 (p0, z0, 31),
+ z0_res = svldnt1uw_gather_index_u64 (p0, z0, 31))
+
+/*
+** ldnt1uw_gather_32_u64_index:
+** mov (x[0-9]+), #?128
+** ldnt1w z0\.d, p0/z, \[z0\.d, \1\]
+** ret
+*/
+TEST_LOAD_GATHER_ZS (ldnt1uw_gather_32_u64_index, svuint64_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64base_index_u64 (p0, z0, 32),
+ z0_res = svldnt1uw_gather_index_u64 (p0, z0, 32))
+
+/*
+** ldnt1uw_gather_x0_u64_s64offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_x0_u64_s64offset, svuint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_tied1_u64_s64offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_tied1_u64_s64offset, svuint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_untied_u64_s64offset:
+** ldnt1w z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_untied_u64_s64offset, svuint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1uw_gather_x0_u64_u64offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_x0_u64_u64offset, svuint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_tied1_u64_u64offset:
+** ldnt1w z0\.d, p0/z, \[z0\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_tied1_u64_u64offset, svuint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64offset_u64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_untied_u64_u64offset:
+** ldnt1w z0\.d, p0/z, \[z1\.d, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_untied_u64_u64offset, svuint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64offset_u64 (p0, x0, z1),
+ z0_res = svldnt1uw_gather_offset_u64 (p0, x0, z1))
+
+/*
+** ldnt1uw_gather_x0_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_x0_u64_s64index, svuint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_tied1_u64_s64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_tied1_u64_s64index, svuint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64index_u64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_untied_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_untied_u64_s64index, svuint64_t, uint32_t, svint64_t,
+ z0_res = svldnt1uw_gather_s64index_u64 (p0, x0, z1),
+ z0_res = svldnt1uw_gather_index_u64 (p0, x0, z1))
+
+/*
+** ldnt1uw_gather_x0_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_x0_u64_u64index, svuint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_tied1_u64_u64index:
+** lsl (z[0-9]+\.d), z0\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_tied1_u64_u64index, svuint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64index_u64 (p0, x0, z0),
+ z0_res = svldnt1uw_gather_index_u64 (p0, x0, z0))
+
+/*
+** ldnt1uw_gather_untied_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** ldnt1w z0\.d, p0/z, \[\1, x0\]
+** ret
+*/
+TEST_LOAD_GATHER_SZ (ldnt1uw_gather_untied_u64_u64index, svuint64_t, uint32_t, svuint64_t,
+ z0_res = svldnt1uw_gather_u64index_u64 (p0, x0, z1),
+ z0_res = svldnt1uw_gather_index_u64 (p0, x0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** logb_f16_m_tied1:
+** flogb z0\.h, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (logb_f16_m_tied1, svint16_t, svfloat16_t,
+ z0 = svlogb_f16_m (z0, p0, z4),
+ z0 = svlogb_m (z0, p0, z4))
+
+/*
+** logb_f16_m_untied:
+** movprfx z0, z1
+** flogb z0\.h, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (logb_f16_m_untied, svint16_t, svfloat16_t,
+ z0 = svlogb_f16_m (z1, p0, z4),
+ z0 = svlogb_m (z1, p0, z4))
+
+/*
+** logb_f16_z:
+** movprfx z0\.h, p0/z, z4\.h
+** flogb z0\.h, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (logb_f16_z, svint16_t, svfloat16_t,
+ z0 = svlogb_f16_z (p0, z4),
+ z0 = svlogb_z (p0, z4))
+
+/*
+** logb_f16_x:
+** flogb z0\.h, p0/m, z4\.h
+** ret
+*/
+TEST_DUAL_Z (logb_f16_x, svint16_t, svfloat16_t,
+ z0 = svlogb_f16_x (p0, z4),
+ z0 = svlogb_x (p0, z4))
+
+/*
+** ptrue_logb_f16_x:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_logb_f16_x, svint16_t, svfloat16_t,
+ z0 = svlogb_f16_x (svptrue_b16 (), z4),
+ z0 = svlogb_x (svptrue_b16 (), z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** logb_f32_m_tied1:
+** flogb z0\.s, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (logb_f32_m_tied1, svint32_t, svfloat32_t,
+ z0 = svlogb_f32_m (z0, p0, z4),
+ z0 = svlogb_m (z0, p0, z4))
+
+/*
+** logb_f32_m_untied:
+** movprfx z0, z1
+** flogb z0\.s, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (logb_f32_m_untied, svint32_t, svfloat32_t,
+ z0 = svlogb_f32_m (z1, p0, z4),
+ z0 = svlogb_m (z1, p0, z4))
+
+/*
+** logb_f32_z:
+** movprfx z0\.s, p0/z, z4\.s
+** flogb z0\.s, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (logb_f32_z, svint32_t, svfloat32_t,
+ z0 = svlogb_f32_z (p0, z4),
+ z0 = svlogb_z (p0, z4))
+
+/*
+** logb_f32_x:
+** flogb z0\.s, p0/m, z4\.s
+** ret
+*/
+TEST_DUAL_Z (logb_f32_x, svint32_t, svfloat32_t,
+ z0 = svlogb_f32_x (p0, z4),
+ z0 = svlogb_x (p0, z4))
+
+/*
+** ptrue_logb_f32_x:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_logb_f32_x, svint32_t, svfloat32_t,
+ z0 = svlogb_f32_x (svptrue_b32 (), z4),
+ z0 = svlogb_x (svptrue_b32 (), z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** logb_f64_m_tied1:
+** flogb z0\.d, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (logb_f64_m_tied1, svint64_t, svfloat64_t,
+ z0 = svlogb_f64_m (z0, p0, z4),
+ z0 = svlogb_m (z0, p0, z4))
+
+/*
+** logb_f64_m_untied:
+** movprfx z0, z1
+** flogb z0\.d, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (logb_f64_m_untied, svint64_t, svfloat64_t,
+ z0 = svlogb_f64_m (z1, p0, z4),
+ z0 = svlogb_m (z1, p0, z4))
+
+/*
+** logb_f64_z:
+** movprfx z0\.d, p0/z, z4\.d
+** flogb z0\.d, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (logb_f64_z, svint64_t, svfloat64_t,
+ z0 = svlogb_f64_z (p0, z4),
+ z0 = svlogb_z (p0, z4))
+
+/*
+** logb_f64_x:
+** flogb z0\.d, p0/m, z4\.d
+** ret
+*/
+TEST_DUAL_Z (logb_f64_x, svint64_t, svfloat64_t,
+ z0 = svlogb_f64_x (p0, z4),
+ z0 = svlogb_x (p0, z4))
+
+/*
+** ptrue_logb_f64_x:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_DUAL_Z (ptrue_logb_f64_x, svint64_t, svfloat64_t,
+ z0 = svlogb_f64_x (svptrue_b64 (), z4),
+ z0 = svlogb_x (svptrue_b64 (), z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** match_s16_tied:
+** match p0\.h, p0/z, z0\.h, z1\.h
+** ret
+*/
+TEST_COMPARE_Z (match_s16_tied, svint16_t,
+ p0 = svmatch_s16 (p0, z0, z1),
+ p0 = svmatch (p0, z0, z1))
+
+/*
+** match_s16_untied:
+** match p0\.h, p1/z, z0\.h, z1\.h
+** ret
+*/
+TEST_COMPARE_Z (match_s16_untied, svint16_t,
+ p0 = svmatch_s16 (p1, z0, z1),
+ p0 = svmatch (p1, z0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** match_s8_tied:
+** match p0\.b, p0/z, z0\.b, z1\.b
+** ret
+*/
+TEST_COMPARE_Z (match_s8_tied, svint8_t,
+ p0 = svmatch_s8 (p0, z0, z1),
+ p0 = svmatch (p0, z0, z1))
+
+/*
+** match_s8_untied:
+** match p0\.b, p1/z, z0\.b, z1\.b
+** ret
+*/
+TEST_COMPARE_Z (match_s8_untied, svint8_t,
+ p0 = svmatch_s8 (p1, z0, z1),
+ p0 = svmatch (p1, z0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** match_u16_tied:
+** match p0\.h, p0/z, z0\.h, z1\.h
+** ret
+*/
+TEST_COMPARE_Z (match_u16_tied, svuint16_t,
+ p0 = svmatch_u16 (p0, z0, z1),
+ p0 = svmatch (p0, z0, z1))
+
+/*
+** match_u16_untied:
+** match p0\.h, p1/z, z0\.h, z1\.h
+** ret
+*/
+TEST_COMPARE_Z (match_u16_untied, svuint16_t,
+ p0 = svmatch_u16 (p1, z0, z1),
+ p0 = svmatch (p1, z0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** match_u8_tied:
+** match p0\.b, p0/z, z0\.b, z1\.b
+** ret
+*/
+TEST_COMPARE_Z (match_u8_tied, svuint8_t,
+ p0 = svmatch_u8 (p0, z0, z1),
+ p0 = svmatch (p0, z0, z1))
+
+/*
+** match_u8_untied:
+** match p0\.b, p1/z, z0\.b, z1\.b
+** ret
+*/
+TEST_COMPARE_Z (match_u8_untied, svuint8_t,
+ p0 = svmatch_u8 (p1, z0, z1),
+ p0 = svmatch (p1, z0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxnmp_f16_m_tied1:
+** fmaxnmp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f16_m_tied1, svfloat16_t,
+ z0 = svmaxnmp_f16_m (p0, z0, z1),
+ z0 = svmaxnmp_m (p0, z0, z1))
+
+/*
+** maxnmp_f16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fmaxnmp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f16_m_tied2, svfloat16_t,
+ z0 = svmaxnmp_f16_m (p0, z1, z0),
+ z0 = svmaxnmp_m (p0, z1, z0))
+
+/*
+** maxnmp_f16_m_untied:
+** movprfx z0, z1
+** fmaxnmp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f16_m_untied, svfloat16_t,
+ z0 = svmaxnmp_f16_m (p0, z1, z2),
+ z0 = svmaxnmp_m (p0, z1, z2))
+
+/*
+** maxnmp_f16_x_tied1:
+** fmaxnmp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f16_x_tied1, svfloat16_t,
+ z0 = svmaxnmp_f16_x (p0, z0, z1),
+ z0 = svmaxnmp_x (p0, z0, z1))
+
+/*
+** maxnmp_f16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fmaxnmp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f16_x_tied2, svfloat16_t,
+ z0 = svmaxnmp_f16_x (p0, z1, z0),
+ z0 = svmaxnmp_x (p0, z1, z0))
+
+/*
+** maxnmp_f16_x_untied:
+** movprfx z0, z1
+** fmaxnmp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f16_x_untied, svfloat16_t,
+ z0 = svmaxnmp_f16_x (p0, z1, z2),
+ z0 = svmaxnmp_x (p0, z1, z2))
+
+/*
+** ptrue_maxnmp_f16_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxnmp_f16_x_tied1, svfloat16_t,
+ z0 = svmaxnmp_f16_x (svptrue_b16 (), z0, z1),
+ z0 = svmaxnmp_x (svptrue_b16 (), z0, z1))
+
+/*
+** ptrue_maxnmp_f16_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxnmp_f16_x_tied2, svfloat16_t,
+ z0 = svmaxnmp_f16_x (svptrue_b16 (), z1, z0),
+ z0 = svmaxnmp_x (svptrue_b16 (), z1, z0))
+
+/*
+** ptrue_maxnmp_f16_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxnmp_f16_x_untied, svfloat16_t,
+ z0 = svmaxnmp_f16_x (svptrue_b16 (), z1, z2),
+ z0 = svmaxnmp_x (svptrue_b16 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxnmp_f32_m_tied1:
+** fmaxnmp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f32_m_tied1, svfloat32_t,
+ z0 = svmaxnmp_f32_m (p0, z0, z1),
+ z0 = svmaxnmp_m (p0, z0, z1))
+
+/*
+** maxnmp_f32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fmaxnmp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f32_m_tied2, svfloat32_t,
+ z0 = svmaxnmp_f32_m (p0, z1, z0),
+ z0 = svmaxnmp_m (p0, z1, z0))
+
+/*
+** maxnmp_f32_m_untied:
+** movprfx z0, z1
+** fmaxnmp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f32_m_untied, svfloat32_t,
+ z0 = svmaxnmp_f32_m (p0, z1, z2),
+ z0 = svmaxnmp_m (p0, z1, z2))
+
+/*
+** maxnmp_f32_x_tied1:
+** fmaxnmp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f32_x_tied1, svfloat32_t,
+ z0 = svmaxnmp_f32_x (p0, z0, z1),
+ z0 = svmaxnmp_x (p0, z0, z1))
+
+/*
+** maxnmp_f32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fmaxnmp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f32_x_tied2, svfloat32_t,
+ z0 = svmaxnmp_f32_x (p0, z1, z0),
+ z0 = svmaxnmp_x (p0, z1, z0))
+
+/*
+** maxnmp_f32_x_untied:
+** movprfx z0, z1
+** fmaxnmp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f32_x_untied, svfloat32_t,
+ z0 = svmaxnmp_f32_x (p0, z1, z2),
+ z0 = svmaxnmp_x (p0, z1, z2))
+
+/*
+** ptrue_maxnmp_f32_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxnmp_f32_x_tied1, svfloat32_t,
+ z0 = svmaxnmp_f32_x (svptrue_b32 (), z0, z1),
+ z0 = svmaxnmp_x (svptrue_b32 (), z0, z1))
+
+/*
+** ptrue_maxnmp_f32_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxnmp_f32_x_tied2, svfloat32_t,
+ z0 = svmaxnmp_f32_x (svptrue_b32 (), z1, z0),
+ z0 = svmaxnmp_x (svptrue_b32 (), z1, z0))
+
+/*
+** ptrue_maxnmp_f32_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxnmp_f32_x_untied, svfloat32_t,
+ z0 = svmaxnmp_f32_x (svptrue_b32 (), z1, z2),
+ z0 = svmaxnmp_x (svptrue_b32 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxnmp_f64_m_tied1:
+** fmaxnmp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f64_m_tied1, svfloat64_t,
+ z0 = svmaxnmp_f64_m (p0, z0, z1),
+ z0 = svmaxnmp_m (p0, z0, z1))
+
+/*
+** maxnmp_f64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** fmaxnmp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f64_m_tied2, svfloat64_t,
+ z0 = svmaxnmp_f64_m (p0, z1, z0),
+ z0 = svmaxnmp_m (p0, z1, z0))
+
+/*
+** maxnmp_f64_m_untied:
+** movprfx z0, z1
+** fmaxnmp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f64_m_untied, svfloat64_t,
+ z0 = svmaxnmp_f64_m (p0, z1, z2),
+ z0 = svmaxnmp_m (p0, z1, z2))
+
+/*
+** maxnmp_f64_x_tied1:
+** fmaxnmp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f64_x_tied1, svfloat64_t,
+ z0 = svmaxnmp_f64_x (p0, z0, z1),
+ z0 = svmaxnmp_x (p0, z0, z1))
+
+/*
+** maxnmp_f64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** fmaxnmp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f64_x_tied2, svfloat64_t,
+ z0 = svmaxnmp_f64_x (p0, z1, z0),
+ z0 = svmaxnmp_x (p0, z1, z0))
+
+/*
+** maxnmp_f64_x_untied:
+** movprfx z0, z1
+** fmaxnmp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxnmp_f64_x_untied, svfloat64_t,
+ z0 = svmaxnmp_f64_x (p0, z1, z2),
+ z0 = svmaxnmp_x (p0, z1, z2))
+
+/*
+** ptrue_maxnmp_f64_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxnmp_f64_x_tied1, svfloat64_t,
+ z0 = svmaxnmp_f64_x (svptrue_b64 (), z0, z1),
+ z0 = svmaxnmp_x (svptrue_b64 (), z0, z1))
+
+/*
+** ptrue_maxnmp_f64_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxnmp_f64_x_tied2, svfloat64_t,
+ z0 = svmaxnmp_f64_x (svptrue_b64 (), z1, z0),
+ z0 = svmaxnmp_x (svptrue_b64 (), z1, z0))
+
+/*
+** ptrue_maxnmp_f64_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxnmp_f64_x_untied, svfloat64_t,
+ z0 = svmaxnmp_f64_x (svptrue_b64 (), z1, z2),
+ z0 = svmaxnmp_x (svptrue_b64 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_f16_m_tied1:
+** fmaxp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f16_m_tied1, svfloat16_t,
+ z0 = svmaxp_f16_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_f16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fmaxp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f16_m_tied2, svfloat16_t,
+ z0 = svmaxp_f16_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_f16_m_untied:
+** movprfx z0, z1
+** fmaxp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f16_m_untied, svfloat16_t,
+ z0 = svmaxp_f16_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_f16_x_tied1:
+** fmaxp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f16_x_tied1, svfloat16_t,
+ z0 = svmaxp_f16_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_f16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fmaxp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f16_x_tied2, svfloat16_t,
+ z0 = svmaxp_f16_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_f16_x_untied:
+** movprfx z0, z1
+** fmaxp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f16_x_untied, svfloat16_t,
+ z0 = svmaxp_f16_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
+
+/*
+** ptrue_maxp_f16_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxp_f16_x_tied1, svfloat16_t,
+ z0 = svmaxp_f16_x (svptrue_b16 (), z0, z1),
+ z0 = svmaxp_x (svptrue_b16 (), z0, z1))
+
+/*
+** ptrue_maxp_f16_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxp_f16_x_tied2, svfloat16_t,
+ z0 = svmaxp_f16_x (svptrue_b16 (), z1, z0),
+ z0 = svmaxp_x (svptrue_b16 (), z1, z0))
+
+/*
+** ptrue_maxp_f16_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxp_f16_x_untied, svfloat16_t,
+ z0 = svmaxp_f16_x (svptrue_b16 (), z1, z2),
+ z0 = svmaxp_x (svptrue_b16 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_f32_m_tied1:
+** fmaxp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f32_m_tied1, svfloat32_t,
+ z0 = svmaxp_f32_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_f32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fmaxp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f32_m_tied2, svfloat32_t,
+ z0 = svmaxp_f32_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_f32_m_untied:
+** movprfx z0, z1
+** fmaxp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f32_m_untied, svfloat32_t,
+ z0 = svmaxp_f32_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_f32_x_tied1:
+** fmaxp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f32_x_tied1, svfloat32_t,
+ z0 = svmaxp_f32_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_f32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fmaxp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f32_x_tied2, svfloat32_t,
+ z0 = svmaxp_f32_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_f32_x_untied:
+** movprfx z0, z1
+** fmaxp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f32_x_untied, svfloat32_t,
+ z0 = svmaxp_f32_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
+
+/*
+** ptrue_maxp_f32_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxp_f32_x_tied1, svfloat32_t,
+ z0 = svmaxp_f32_x (svptrue_b32 (), z0, z1),
+ z0 = svmaxp_x (svptrue_b32 (), z0, z1))
+
+/*
+** ptrue_maxp_f32_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxp_f32_x_tied2, svfloat32_t,
+ z0 = svmaxp_f32_x (svptrue_b32 (), z1, z0),
+ z0 = svmaxp_x (svptrue_b32 (), z1, z0))
+
+/*
+** ptrue_maxp_f32_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxp_f32_x_untied, svfloat32_t,
+ z0 = svmaxp_f32_x (svptrue_b32 (), z1, z2),
+ z0 = svmaxp_x (svptrue_b32 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_f64_m_tied1:
+** fmaxp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f64_m_tied1, svfloat64_t,
+ z0 = svmaxp_f64_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_f64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** fmaxp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f64_m_tied2, svfloat64_t,
+ z0 = svmaxp_f64_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_f64_m_untied:
+** movprfx z0, z1
+** fmaxp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f64_m_untied, svfloat64_t,
+ z0 = svmaxp_f64_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_f64_x_tied1:
+** fmaxp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f64_x_tied1, svfloat64_t,
+ z0 = svmaxp_f64_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_f64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** fmaxp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f64_x_tied2, svfloat64_t,
+ z0 = svmaxp_f64_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_f64_x_untied:
+** movprfx z0, z1
+** fmaxp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_f64_x_untied, svfloat64_t,
+ z0 = svmaxp_f64_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
+
+/*
+** ptrue_maxp_f64_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxp_f64_x_tied1, svfloat64_t,
+ z0 = svmaxp_f64_x (svptrue_b64 (), z0, z1),
+ z0 = svmaxp_x (svptrue_b64 (), z0, z1))
+
+/*
+** ptrue_maxp_f64_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxp_f64_x_tied2, svfloat64_t,
+ z0 = svmaxp_f64_x (svptrue_b64 (), z1, z0),
+ z0 = svmaxp_x (svptrue_b64 (), z1, z0))
+
+/*
+** ptrue_maxp_f64_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_maxp_f64_x_untied, svfloat64_t,
+ z0 = svmaxp_f64_x (svptrue_b64 (), z1, z2),
+ z0 = svmaxp_x (svptrue_b64 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_s16_m_tied1:
+** smaxp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s16_m_tied1, svint16_t,
+ z0 = svmaxp_s16_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** smaxp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s16_m_tied2, svint16_t,
+ z0 = svmaxp_s16_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_s16_m_untied:
+** movprfx z0, z1
+** smaxp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s16_m_untied, svint16_t,
+ z0 = svmaxp_s16_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_s16_x_tied1:
+** smaxp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s16_x_tied1, svint16_t,
+ z0 = svmaxp_s16_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_s16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** smaxp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s16_x_tied2, svint16_t,
+ z0 = svmaxp_s16_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_s16_x_untied:
+** movprfx z0, z1
+** smaxp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s16_x_untied, svint16_t,
+ z0 = svmaxp_s16_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_s32_m_tied1:
+** smaxp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s32_m_tied1, svint32_t,
+ z0 = svmaxp_s32_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** smaxp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s32_m_tied2, svint32_t,
+ z0 = svmaxp_s32_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_s32_m_untied:
+** movprfx z0, z1
+** smaxp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s32_m_untied, svint32_t,
+ z0 = svmaxp_s32_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_s32_x_tied1:
+** smaxp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s32_x_tied1, svint32_t,
+ z0 = svmaxp_s32_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_s32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** smaxp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s32_x_tied2, svint32_t,
+ z0 = svmaxp_s32_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_s32_x_untied:
+** movprfx z0, z1
+** smaxp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s32_x_untied, svint32_t,
+ z0 = svmaxp_s32_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_s64_m_tied1:
+** smaxp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s64_m_tied1, svint64_t,
+ z0 = svmaxp_s64_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** smaxp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s64_m_tied2, svint64_t,
+ z0 = svmaxp_s64_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_s64_m_untied:
+** movprfx z0, z1
+** smaxp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s64_m_untied, svint64_t,
+ z0 = svmaxp_s64_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_s64_x_tied1:
+** smaxp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s64_x_tied1, svint64_t,
+ z0 = svmaxp_s64_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_s64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** smaxp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s64_x_tied2, svint64_t,
+ z0 = svmaxp_s64_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_s64_x_untied:
+** movprfx z0, z1
+** smaxp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s64_x_untied, svint64_t,
+ z0 = svmaxp_s64_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_s8_m_tied1:
+** smaxp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s8_m_tied1, svint8_t,
+ z0 = svmaxp_s8_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** smaxp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s8_m_tied2, svint8_t,
+ z0 = svmaxp_s8_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_s8_m_untied:
+** movprfx z0, z1
+** smaxp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s8_m_untied, svint8_t,
+ z0 = svmaxp_s8_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_s8_x_tied1:
+** smaxp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s8_x_tied1, svint8_t,
+ z0 = svmaxp_s8_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_s8_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** smaxp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s8_x_tied2, svint8_t,
+ z0 = svmaxp_s8_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_s8_x_untied:
+** movprfx z0, z1
+** smaxp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_s8_x_untied, svint8_t,
+ z0 = svmaxp_s8_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_u16_m_tied1:
+** umaxp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u16_m_tied1, svuint16_t,
+ z0 = svmaxp_u16_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** umaxp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u16_m_tied2, svuint16_t,
+ z0 = svmaxp_u16_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_u16_m_untied:
+** movprfx z0, z1
+** umaxp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u16_m_untied, svuint16_t,
+ z0 = svmaxp_u16_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_u16_x_tied1:
+** umaxp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u16_x_tied1, svuint16_t,
+ z0 = svmaxp_u16_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_u16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** umaxp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u16_x_tied2, svuint16_t,
+ z0 = svmaxp_u16_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_u16_x_untied:
+** movprfx z0, z1
+** umaxp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u16_x_untied, svuint16_t,
+ z0 = svmaxp_u16_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_u32_m_tied1:
+** umaxp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u32_m_tied1, svuint32_t,
+ z0 = svmaxp_u32_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** umaxp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u32_m_tied2, svuint32_t,
+ z0 = svmaxp_u32_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_u32_m_untied:
+** movprfx z0, z1
+** umaxp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u32_m_untied, svuint32_t,
+ z0 = svmaxp_u32_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_u32_x_tied1:
+** umaxp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u32_x_tied1, svuint32_t,
+ z0 = svmaxp_u32_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_u32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** umaxp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u32_x_tied2, svuint32_t,
+ z0 = svmaxp_u32_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_u32_x_untied:
+** movprfx z0, z1
+** umaxp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u32_x_untied, svuint32_t,
+ z0 = svmaxp_u32_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_u64_m_tied1:
+** umaxp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u64_m_tied1, svuint64_t,
+ z0 = svmaxp_u64_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** umaxp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u64_m_tied2, svuint64_t,
+ z0 = svmaxp_u64_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_u64_m_untied:
+** movprfx z0, z1
+** umaxp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u64_m_untied, svuint64_t,
+ z0 = svmaxp_u64_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_u64_x_tied1:
+** umaxp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u64_x_tied1, svuint64_t,
+ z0 = svmaxp_u64_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_u64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** umaxp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u64_x_tied2, svuint64_t,
+ z0 = svmaxp_u64_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_u64_x_untied:
+** movprfx z0, z1
+** umaxp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u64_x_untied, svuint64_t,
+ z0 = svmaxp_u64_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** maxp_u8_m_tied1:
+** umaxp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u8_m_tied1, svuint8_t,
+ z0 = svmaxp_u8_m (p0, z0, z1),
+ z0 = svmaxp_m (p0, z0, z1))
+
+/*
+** maxp_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** umaxp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u8_m_tied2, svuint8_t,
+ z0 = svmaxp_u8_m (p0, z1, z0),
+ z0 = svmaxp_m (p0, z1, z0))
+
+/*
+** maxp_u8_m_untied:
+** movprfx z0, z1
+** umaxp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u8_m_untied, svuint8_t,
+ z0 = svmaxp_u8_m (p0, z1, z2),
+ z0 = svmaxp_m (p0, z1, z2))
+
+/*
+** maxp_u8_x_tied1:
+** umaxp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u8_x_tied1, svuint8_t,
+ z0 = svmaxp_u8_x (p0, z0, z1),
+ z0 = svmaxp_x (p0, z0, z1))
+
+/*
+** maxp_u8_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** umaxp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u8_x_tied2, svuint8_t,
+ z0 = svmaxp_u8_x (p0, z1, z0),
+ z0 = svmaxp_x (p0, z1, z0))
+
+/*
+** maxp_u8_x_untied:
+** movprfx z0, z1
+** umaxp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (maxp_u8_x_untied, svuint8_t,
+ z0 = svmaxp_u8_x (p0, z1, z2),
+ z0 = svmaxp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minnmp_f16_m_tied1:
+** fminnmp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f16_m_tied1, svfloat16_t,
+ z0 = svminnmp_f16_m (p0, z0, z1),
+ z0 = svminnmp_m (p0, z0, z1))
+
+/*
+** minnmp_f16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fminnmp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f16_m_tied2, svfloat16_t,
+ z0 = svminnmp_f16_m (p0, z1, z0),
+ z0 = svminnmp_m (p0, z1, z0))
+
+/*
+** minnmp_f16_m_untied:
+** movprfx z0, z1
+** fminnmp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f16_m_untied, svfloat16_t,
+ z0 = svminnmp_f16_m (p0, z1, z2),
+ z0 = svminnmp_m (p0, z1, z2))
+
+/*
+** minnmp_f16_x_tied1:
+** fminnmp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f16_x_tied1, svfloat16_t,
+ z0 = svminnmp_f16_x (p0, z0, z1),
+ z0 = svminnmp_x (p0, z0, z1))
+
+/*
+** minnmp_f16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fminnmp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f16_x_tied2, svfloat16_t,
+ z0 = svminnmp_f16_x (p0, z1, z0),
+ z0 = svminnmp_x (p0, z1, z0))
+
+/*
+** minnmp_f16_x_untied:
+** movprfx z0, z1
+** fminnmp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f16_x_untied, svfloat16_t,
+ z0 = svminnmp_f16_x (p0, z1, z2),
+ z0 = svminnmp_x (p0, z1, z2))
+
+/*
+** ptrue_minnmp_f16_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minnmp_f16_x_tied1, svfloat16_t,
+ z0 = svminnmp_f16_x (svptrue_b16 (), z0, z1),
+ z0 = svminnmp_x (svptrue_b16 (), z0, z1))
+
+/*
+** ptrue_minnmp_f16_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minnmp_f16_x_tied2, svfloat16_t,
+ z0 = svminnmp_f16_x (svptrue_b16 (), z1, z0),
+ z0 = svminnmp_x (svptrue_b16 (), z1, z0))
+
+/*
+** ptrue_minnmp_f16_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minnmp_f16_x_untied, svfloat16_t,
+ z0 = svminnmp_f16_x (svptrue_b16 (), z1, z2),
+ z0 = svminnmp_x (svptrue_b16 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minnmp_f32_m_tied1:
+** fminnmp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f32_m_tied1, svfloat32_t,
+ z0 = svminnmp_f32_m (p0, z0, z1),
+ z0 = svminnmp_m (p0, z0, z1))
+
+/*
+** minnmp_f32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fminnmp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f32_m_tied2, svfloat32_t,
+ z0 = svminnmp_f32_m (p0, z1, z0),
+ z0 = svminnmp_m (p0, z1, z0))
+
+/*
+** minnmp_f32_m_untied:
+** movprfx z0, z1
+** fminnmp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f32_m_untied, svfloat32_t,
+ z0 = svminnmp_f32_m (p0, z1, z2),
+ z0 = svminnmp_m (p0, z1, z2))
+
+/*
+** minnmp_f32_x_tied1:
+** fminnmp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f32_x_tied1, svfloat32_t,
+ z0 = svminnmp_f32_x (p0, z0, z1),
+ z0 = svminnmp_x (p0, z0, z1))
+
+/*
+** minnmp_f32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fminnmp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f32_x_tied2, svfloat32_t,
+ z0 = svminnmp_f32_x (p0, z1, z0),
+ z0 = svminnmp_x (p0, z1, z0))
+
+/*
+** minnmp_f32_x_untied:
+** movprfx z0, z1
+** fminnmp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f32_x_untied, svfloat32_t,
+ z0 = svminnmp_f32_x (p0, z1, z2),
+ z0 = svminnmp_x (p0, z1, z2))
+
+/*
+** ptrue_minnmp_f32_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minnmp_f32_x_tied1, svfloat32_t,
+ z0 = svminnmp_f32_x (svptrue_b32 (), z0, z1),
+ z0 = svminnmp_x (svptrue_b32 (), z0, z1))
+
+/*
+** ptrue_minnmp_f32_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minnmp_f32_x_tied2, svfloat32_t,
+ z0 = svminnmp_f32_x (svptrue_b32 (), z1, z0),
+ z0 = svminnmp_x (svptrue_b32 (), z1, z0))
+
+/*
+** ptrue_minnmp_f32_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minnmp_f32_x_untied, svfloat32_t,
+ z0 = svminnmp_f32_x (svptrue_b32 (), z1, z2),
+ z0 = svminnmp_x (svptrue_b32 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minnmp_f64_m_tied1:
+** fminnmp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f64_m_tied1, svfloat64_t,
+ z0 = svminnmp_f64_m (p0, z0, z1),
+ z0 = svminnmp_m (p0, z0, z1))
+
+/*
+** minnmp_f64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** fminnmp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f64_m_tied2, svfloat64_t,
+ z0 = svminnmp_f64_m (p0, z1, z0),
+ z0 = svminnmp_m (p0, z1, z0))
+
+/*
+** minnmp_f64_m_untied:
+** movprfx z0, z1
+** fminnmp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f64_m_untied, svfloat64_t,
+ z0 = svminnmp_f64_m (p0, z1, z2),
+ z0 = svminnmp_m (p0, z1, z2))
+
+/*
+** minnmp_f64_x_tied1:
+** fminnmp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f64_x_tied1, svfloat64_t,
+ z0 = svminnmp_f64_x (p0, z0, z1),
+ z0 = svminnmp_x (p0, z0, z1))
+
+/*
+** minnmp_f64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** fminnmp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f64_x_tied2, svfloat64_t,
+ z0 = svminnmp_f64_x (p0, z1, z0),
+ z0 = svminnmp_x (p0, z1, z0))
+
+/*
+** minnmp_f64_x_untied:
+** movprfx z0, z1
+** fminnmp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (minnmp_f64_x_untied, svfloat64_t,
+ z0 = svminnmp_f64_x (p0, z1, z2),
+ z0 = svminnmp_x (p0, z1, z2))
+
+/*
+** ptrue_minnmp_f64_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minnmp_f64_x_tied1, svfloat64_t,
+ z0 = svminnmp_f64_x (svptrue_b64 (), z0, z1),
+ z0 = svminnmp_x (svptrue_b64 (), z0, z1))
+
+/*
+** ptrue_minnmp_f64_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minnmp_f64_x_tied2, svfloat64_t,
+ z0 = svminnmp_f64_x (svptrue_b64 (), z1, z0),
+ z0 = svminnmp_x (svptrue_b64 (), z1, z0))
+
+/*
+** ptrue_minnmp_f64_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minnmp_f64_x_untied, svfloat64_t,
+ z0 = svminnmp_f64_x (svptrue_b64 (), z1, z2),
+ z0 = svminnmp_x (svptrue_b64 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_f16_m_tied1:
+** fminp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_f16_m_tied1, svfloat16_t,
+ z0 = svminp_f16_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_f16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fminp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_f16_m_tied2, svfloat16_t,
+ z0 = svminp_f16_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_f16_m_untied:
+** movprfx z0, z1
+** fminp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_f16_m_untied, svfloat16_t,
+ z0 = svminp_f16_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_f16_x_tied1:
+** fminp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_f16_x_tied1, svfloat16_t,
+ z0 = svminp_f16_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_f16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fminp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_f16_x_tied2, svfloat16_t,
+ z0 = svminp_f16_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_f16_x_untied:
+** movprfx z0, z1
+** fminp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_f16_x_untied, svfloat16_t,
+ z0 = svminp_f16_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
+
+/*
+** ptrue_minp_f16_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minp_f16_x_tied1, svfloat16_t,
+ z0 = svminp_f16_x (svptrue_b16 (), z0, z1),
+ z0 = svminp_x (svptrue_b16 (), z0, z1))
+
+/*
+** ptrue_minp_f16_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minp_f16_x_tied2, svfloat16_t,
+ z0 = svminp_f16_x (svptrue_b16 (), z1, z0),
+ z0 = svminp_x (svptrue_b16 (), z1, z0))
+
+/*
+** ptrue_minp_f16_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minp_f16_x_untied, svfloat16_t,
+ z0 = svminp_f16_x (svptrue_b16 (), z1, z2),
+ z0 = svminp_x (svptrue_b16 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_f32_m_tied1:
+** fminp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_f32_m_tied1, svfloat32_t,
+ z0 = svminp_f32_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_f32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fminp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_f32_m_tied2, svfloat32_t,
+ z0 = svminp_f32_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_f32_m_untied:
+** movprfx z0, z1
+** fminp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_f32_m_untied, svfloat32_t,
+ z0 = svminp_f32_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_f32_x_tied1:
+** fminp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_f32_x_tied1, svfloat32_t,
+ z0 = svminp_f32_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_f32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** fminp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_f32_x_tied2, svfloat32_t,
+ z0 = svminp_f32_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_f32_x_untied:
+** movprfx z0, z1
+** fminp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_f32_x_untied, svfloat32_t,
+ z0 = svminp_f32_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
+
+/*
+** ptrue_minp_f32_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minp_f32_x_tied1, svfloat32_t,
+ z0 = svminp_f32_x (svptrue_b32 (), z0, z1),
+ z0 = svminp_x (svptrue_b32 (), z0, z1))
+
+/*
+** ptrue_minp_f32_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minp_f32_x_tied2, svfloat32_t,
+ z0 = svminp_f32_x (svptrue_b32 (), z1, z0),
+ z0 = svminp_x (svptrue_b32 (), z1, z0))
+
+/*
+** ptrue_minp_f32_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minp_f32_x_untied, svfloat32_t,
+ z0 = svminp_f32_x (svptrue_b32 (), z1, z2),
+ z0 = svminp_x (svptrue_b32 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_f64_m_tied1:
+** fminp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_f64_m_tied1, svfloat64_t,
+ z0 = svminp_f64_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_f64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** fminp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (minp_f64_m_tied2, svfloat64_t,
+ z0 = svminp_f64_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_f64_m_untied:
+** movprfx z0, z1
+** fminp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_f64_m_untied, svfloat64_t,
+ z0 = svminp_f64_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_f64_x_tied1:
+** fminp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_f64_x_tied1, svfloat64_t,
+ z0 = svminp_f64_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_f64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** fminp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (minp_f64_x_tied2, svfloat64_t,
+ z0 = svminp_f64_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_f64_x_untied:
+** movprfx z0, z1
+** fminp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_f64_x_untied, svfloat64_t,
+ z0 = svminp_f64_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
+
+/*
+** ptrue_minp_f64_x_tied1:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minp_f64_x_tied1, svfloat64_t,
+ z0 = svminp_f64_x (svptrue_b64 (), z0, z1),
+ z0 = svminp_x (svptrue_b64 (), z0, z1))
+
+/*
+** ptrue_minp_f64_x_tied2:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minp_f64_x_tied2, svfloat64_t,
+ z0 = svminp_f64_x (svptrue_b64 (), z1, z0),
+ z0 = svminp_x (svptrue_b64 (), z1, z0))
+
+/*
+** ptrue_minp_f64_x_untied:
+** ...
+** ptrue p[0-9]+\.b[^\n]*
+** ...
+** ret
+*/
+TEST_UNIFORM_Z (ptrue_minp_f64_x_untied, svfloat64_t,
+ z0 = svminp_f64_x (svptrue_b64 (), z1, z2),
+ z0 = svminp_x (svptrue_b64 (), z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_s16_m_tied1:
+** sminp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_s16_m_tied1, svint16_t,
+ z0 = svminp_s16_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sminp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_s16_m_tied2, svint16_t,
+ z0 = svminp_s16_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_s16_m_untied:
+** movprfx z0, z1
+** sminp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_s16_m_untied, svint16_t,
+ z0 = svminp_s16_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_s16_x_tied1:
+** sminp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_s16_x_tied1, svint16_t,
+ z0 = svminp_s16_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_s16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sminp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_s16_x_tied2, svint16_t,
+ z0 = svminp_s16_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_s16_x_untied:
+** movprfx z0, z1
+** sminp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_s16_x_untied, svint16_t,
+ z0 = svminp_s16_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_s32_m_tied1:
+** sminp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_s32_m_tied1, svint32_t,
+ z0 = svminp_s32_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sminp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_s32_m_tied2, svint32_t,
+ z0 = svminp_s32_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_s32_m_untied:
+** movprfx z0, z1
+** sminp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_s32_m_untied, svint32_t,
+ z0 = svminp_s32_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_s32_x_tied1:
+** sminp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_s32_x_tied1, svint32_t,
+ z0 = svminp_s32_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_s32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sminp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_s32_x_tied2, svint32_t,
+ z0 = svminp_s32_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_s32_x_untied:
+** movprfx z0, z1
+** sminp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_s32_x_untied, svint32_t,
+ z0 = svminp_s32_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_s64_m_tied1:
+** sminp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_s64_m_tied1, svint64_t,
+ z0 = svminp_s64_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sminp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (minp_s64_m_tied2, svint64_t,
+ z0 = svminp_s64_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_s64_m_untied:
+** movprfx z0, z1
+** sminp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_s64_m_untied, svint64_t,
+ z0 = svminp_s64_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_s64_x_tied1:
+** sminp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_s64_x_tied1, svint64_t,
+ z0 = svminp_s64_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_s64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sminp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (minp_s64_x_tied2, svint64_t,
+ z0 = svminp_s64_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_s64_x_untied:
+** movprfx z0, z1
+** sminp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_s64_x_untied, svint64_t,
+ z0 = svminp_s64_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_s8_m_tied1:
+** sminp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_s8_m_tied1, svint8_t,
+ z0 = svminp_s8_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sminp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_s8_m_tied2, svint8_t,
+ z0 = svminp_s8_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_s8_m_untied:
+** movprfx z0, z1
+** sminp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_s8_m_untied, svint8_t,
+ z0 = svminp_s8_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_s8_x_tied1:
+** sminp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_s8_x_tied1, svint8_t,
+ z0 = svminp_s8_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_s8_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sminp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_s8_x_tied2, svint8_t,
+ z0 = svminp_s8_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_s8_x_untied:
+** movprfx z0, z1
+** sminp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_s8_x_untied, svint8_t,
+ z0 = svminp_s8_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_u16_m_tied1:
+** uminp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_u16_m_tied1, svuint16_t,
+ z0 = svminp_u16_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uminp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_u16_m_tied2, svuint16_t,
+ z0 = svminp_u16_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_u16_m_untied:
+** movprfx z0, z1
+** uminp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_u16_m_untied, svuint16_t,
+ z0 = svminp_u16_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_u16_x_tied1:
+** uminp z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_u16_x_tied1, svuint16_t,
+ z0 = svminp_u16_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_u16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uminp z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_u16_x_tied2, svuint16_t,
+ z0 = svminp_u16_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_u16_x_untied:
+** movprfx z0, z1
+** uminp z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (minp_u16_x_untied, svuint16_t,
+ z0 = svminp_u16_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_u32_m_tied1:
+** uminp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_u32_m_tied1, svuint32_t,
+ z0 = svminp_u32_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uminp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_u32_m_tied2, svuint32_t,
+ z0 = svminp_u32_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_u32_m_untied:
+** movprfx z0, z1
+** uminp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_u32_m_untied, svuint32_t,
+ z0 = svminp_u32_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_u32_x_tied1:
+** uminp z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_u32_x_tied1, svuint32_t,
+ z0 = svminp_u32_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_u32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uminp z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_u32_x_tied2, svuint32_t,
+ z0 = svminp_u32_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_u32_x_untied:
+** movprfx z0, z1
+** uminp z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (minp_u32_x_untied, svuint32_t,
+ z0 = svminp_u32_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_u64_m_tied1:
+** uminp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_u64_m_tied1, svuint64_t,
+ z0 = svminp_u64_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uminp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (minp_u64_m_tied2, svuint64_t,
+ z0 = svminp_u64_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_u64_m_untied:
+** movprfx z0, z1
+** uminp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_u64_m_untied, svuint64_t,
+ z0 = svminp_u64_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_u64_x_tied1:
+** uminp z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_u64_x_tied1, svuint64_t,
+ z0 = svminp_u64_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_u64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uminp z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (minp_u64_x_tied2, svuint64_t,
+ z0 = svminp_u64_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_u64_x_untied:
+** movprfx z0, z1
+** uminp z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (minp_u64_x_untied, svuint64_t,
+ z0 = svminp_u64_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** minp_u8_m_tied1:
+** uminp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_u8_m_tied1, svuint8_t,
+ z0 = svminp_u8_m (p0, z0, z1),
+ z0 = svminp_m (p0, z0, z1))
+
+/*
+** minp_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uminp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_u8_m_tied2, svuint8_t,
+ z0 = svminp_u8_m (p0, z1, z0),
+ z0 = svminp_m (p0, z1, z0))
+
+/*
+** minp_u8_m_untied:
+** movprfx z0, z1
+** uminp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_u8_m_untied, svuint8_t,
+ z0 = svminp_u8_m (p0, z1, z2),
+ z0 = svminp_m (p0, z1, z2))
+
+/*
+** minp_u8_x_tied1:
+** uminp z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_u8_x_tied1, svuint8_t,
+ z0 = svminp_u8_x (p0, z0, z1),
+ z0 = svminp_x (p0, z0, z1))
+
+/*
+** minp_u8_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uminp z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_u8_x_tied2, svuint8_t,
+ z0 = svminp_u8_x (p0, z1, z0),
+ z0 = svminp_x (p0, z1, z0))
+
+/*
+** minp_u8_x_untied:
+** movprfx z0, z1
+** uminp z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (minp_u8_x_untied, svuint8_t,
+ z0 = svminp_u8_x (p0, z1, z2),
+ z0 = svminp_x (p0, z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mla_lane_0_s16_tied1:
+** mla z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s16_tied1, svint16_t,
+ z0 = svmla_lane_s16 (z0, z1, z2, 0),
+ z0 = svmla_lane (z0, z1, z2, 0))
+
+/*
+** mla_lane_0_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mla z0\.h, \1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s16_tied2, svint16_t,
+ z0 = svmla_lane_s16 (z1, z0, z2, 0),
+ z0 = svmla_lane (z1, z0, z2, 0))
+
+/*
+** mla_lane_0_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mla z0\.h, z2\.h, \1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s16_tied3, svint16_t,
+ z0 = svmla_lane_s16 (z1, z2, z0, 0),
+ z0 = svmla_lane (z1, z2, z0, 0))
+
+/*
+** mla_lane_0_s16_untied:
+** movprfx z0, z1
+** mla z0\.h, z2\.h, z3\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s16_untied, svint16_t,
+ z0 = svmla_lane_s16 (z1, z2, z3, 0),
+ z0 = svmla_lane (z1, z2, z3, 0))
+
+/*
+** mla_lane_1_s16:
+** mla z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_1_s16, svint16_t,
+ z0 = svmla_lane_s16 (z0, z1, z2, 1),
+ z0 = svmla_lane (z0, z1, z2, 1))
+
+/*
+** mla_lane_2_s16:
+** mla z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_2_s16, svint16_t,
+ z0 = svmla_lane_s16 (z0, z1, z2, 2),
+ z0 = svmla_lane (z0, z1, z2, 2))
+
+/*
+** mla_lane_3_s16:
+** mla z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_3_s16, svint16_t,
+ z0 = svmla_lane_s16 (z0, z1, z2, 3),
+ z0 = svmla_lane (z0, z1, z2, 3))
+
+/*
+** mla_lane_4_s16:
+** mla z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_4_s16, svint16_t,
+ z0 = svmla_lane_s16 (z0, z1, z2, 4),
+ z0 = svmla_lane (z0, z1, z2, 4))
+
+/*
+** mla_lane_5_s16:
+** mla z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_5_s16, svint16_t,
+ z0 = svmla_lane_s16 (z0, z1, z2, 5),
+ z0 = svmla_lane (z0, z1, z2, 5))
+
+/*
+** mla_lane_6_s16:
+** mla z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_6_s16, svint16_t,
+ z0 = svmla_lane_s16 (z0, z1, z2, 6),
+ z0 = svmla_lane (z0, z1, z2, 6))
+
+/*
+** mla_lane_7_s16:
+** mla z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_7_s16, svint16_t,
+ z0 = svmla_lane_s16 (z0, z1, z2, 7),
+ z0 = svmla_lane (z0, z1, z2, 7))
+
+/*
+** mla_lane_z8_s16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mla z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z8_s16, svint16_t, svint16_t, z8,
+ z0 = svmla_lane_s16 (z0, z1, z8, 1),
+ z0 = svmla_lane (z0, z1, z8, 1))
+
+/*
+** mla_lane_z16_s16:
+** mov (z[0-7])\.d, z16\.d
+** mla z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z16_s16, svint16_t, svint16_t, z16,
+ z0 = svmla_lane_s16 (z0, z1, z16, 1),
+ z0 = svmla_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mla_lane_0_s32_tied1:
+** mla z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s32_tied1, svint32_t,
+ z0 = svmla_lane_s32 (z0, z1, z2, 0),
+ z0 = svmla_lane (z0, z1, z2, 0))
+
+/*
+** mla_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mla z0\.s, \1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s32_tied2, svint32_t,
+ z0 = svmla_lane_s32 (z1, z0, z2, 0),
+ z0 = svmla_lane (z1, z0, z2, 0))
+
+/*
+** mla_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mla z0\.s, z2\.s, \1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s32_tied3, svint32_t,
+ z0 = svmla_lane_s32 (z1, z2, z0, 0),
+ z0 = svmla_lane (z1, z2, z0, 0))
+
+/*
+** mla_lane_0_s32_untied:
+** movprfx z0, z1
+** mla z0\.s, z2\.s, z3\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s32_untied, svint32_t,
+ z0 = svmla_lane_s32 (z1, z2, z3, 0),
+ z0 = svmla_lane (z1, z2, z3, 0))
+
+/*
+** mla_lane_1_s32:
+** mla z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_1_s32, svint32_t,
+ z0 = svmla_lane_s32 (z0, z1, z2, 1),
+ z0 = svmla_lane (z0, z1, z2, 1))
+
+/*
+** mla_lane_2_s32:
+** mla z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_2_s32, svint32_t,
+ z0 = svmla_lane_s32 (z0, z1, z2, 2),
+ z0 = svmla_lane (z0, z1, z2, 2))
+
+/*
+** mla_lane_3_s32:
+** mla z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_3_s32, svint32_t,
+ z0 = svmla_lane_s32 (z0, z1, z2, 3),
+ z0 = svmla_lane (z0, z1, z2, 3))
+
+/*
+** mla_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mla z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z8_s32, svint32_t, svint32_t, z8,
+ z0 = svmla_lane_s32 (z0, z1, z8, 1),
+ z0 = svmla_lane (z0, z1, z8, 1))
+
+/*
+** mla_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** mla z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z16_s32, svint32_t, svint32_t, z16,
+ z0 = svmla_lane_s32 (z0, z1, z16, 1),
+ z0 = svmla_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mla_lane_0_s64_tied1:
+** mla z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s64_tied1, svint64_t,
+ z0 = svmla_lane_s64 (z0, z1, z2, 0),
+ z0 = svmla_lane (z0, z1, z2, 0))
+
+/*
+** mla_lane_0_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** mla z0\.d, \1, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s64_tied2, svint64_t,
+ z0 = svmla_lane_s64 (z1, z0, z2, 0),
+ z0 = svmla_lane (z1, z0, z2, 0))
+
+/*
+** mla_lane_0_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** mla z0\.d, z2\.d, \1\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s64_tied3, svint64_t,
+ z0 = svmla_lane_s64 (z1, z2, z0, 0),
+ z0 = svmla_lane (z1, z2, z0, 0))
+
+/*
+** mla_lane_0_s64_untied:
+** movprfx z0, z1
+** mla z0\.d, z2\.d, z3\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_s64_untied, svint64_t,
+ z0 = svmla_lane_s64 (z1, z2, z3, 0),
+ z0 = svmla_lane (z1, z2, z3, 0))
+
+/*
+** mla_lane_1_s64:
+** mla z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_1_s64, svint64_t,
+ z0 = svmla_lane_s64 (z0, z1, z2, 1),
+ z0 = svmla_lane (z0, z1, z2, 1))
+
+/*
+** mla_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** mla z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z15_s64, svint64_t, svint64_t, z15,
+ z0 = svmla_lane_s64 (z0, z1, z15, 1),
+ z0 = svmla_lane (z0, z1, z15, 1))
+
+/*
+** mla_lane_z16_s64:
+** mov (z[0-7])\.d, z16\.d
+** mla z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z16_s64, svint64_t, svint64_t, z16,
+ z0 = svmla_lane_s64 (z0, z1, z16, 1),
+ z0 = svmla_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mla_lane_0_u16_tied1:
+** mla z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u16_tied1, svuint16_t,
+ z0 = svmla_lane_u16 (z0, z1, z2, 0),
+ z0 = svmla_lane (z0, z1, z2, 0))
+
+/*
+** mla_lane_0_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mla z0\.h, \1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u16_tied2, svuint16_t,
+ z0 = svmla_lane_u16 (z1, z0, z2, 0),
+ z0 = svmla_lane (z1, z0, z2, 0))
+
+/*
+** mla_lane_0_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mla z0\.h, z2\.h, \1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u16_tied3, svuint16_t,
+ z0 = svmla_lane_u16 (z1, z2, z0, 0),
+ z0 = svmla_lane (z1, z2, z0, 0))
+
+/*
+** mla_lane_0_u16_untied:
+** movprfx z0, z1
+** mla z0\.h, z2\.h, z3\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u16_untied, svuint16_t,
+ z0 = svmla_lane_u16 (z1, z2, z3, 0),
+ z0 = svmla_lane (z1, z2, z3, 0))
+
+/*
+** mla_lane_1_u16:
+** mla z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_1_u16, svuint16_t,
+ z0 = svmla_lane_u16 (z0, z1, z2, 1),
+ z0 = svmla_lane (z0, z1, z2, 1))
+
+/*
+** mla_lane_2_u16:
+** mla z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_2_u16, svuint16_t,
+ z0 = svmla_lane_u16 (z0, z1, z2, 2),
+ z0 = svmla_lane (z0, z1, z2, 2))
+
+/*
+** mla_lane_3_u16:
+** mla z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_3_u16, svuint16_t,
+ z0 = svmla_lane_u16 (z0, z1, z2, 3),
+ z0 = svmla_lane (z0, z1, z2, 3))
+
+/*
+** mla_lane_4_u16:
+** mla z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_4_u16, svuint16_t,
+ z0 = svmla_lane_u16 (z0, z1, z2, 4),
+ z0 = svmla_lane (z0, z1, z2, 4))
+
+/*
+** mla_lane_5_u16:
+** mla z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_5_u16, svuint16_t,
+ z0 = svmla_lane_u16 (z0, z1, z2, 5),
+ z0 = svmla_lane (z0, z1, z2, 5))
+
+/*
+** mla_lane_6_u16:
+** mla z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_6_u16, svuint16_t,
+ z0 = svmla_lane_u16 (z0, z1, z2, 6),
+ z0 = svmla_lane (z0, z1, z2, 6))
+
+/*
+** mla_lane_7_u16:
+** mla z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_7_u16, svuint16_t,
+ z0 = svmla_lane_u16 (z0, z1, z2, 7),
+ z0 = svmla_lane (z0, z1, z2, 7))
+
+/*
+** mla_lane_z8_u16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mla z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z8_u16, svuint16_t, svuint16_t, z8,
+ z0 = svmla_lane_u16 (z0, z1, z8, 1),
+ z0 = svmla_lane (z0, z1, z8, 1))
+
+/*
+** mla_lane_z16_u16:
+** mov (z[0-7])\.d, z16\.d
+** mla z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z16_u16, svuint16_t, svuint16_t, z16,
+ z0 = svmla_lane_u16 (z0, z1, z16, 1),
+ z0 = svmla_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mla_lane_0_u32_tied1:
+** mla z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u32_tied1, svuint32_t,
+ z0 = svmla_lane_u32 (z0, z1, z2, 0),
+ z0 = svmla_lane (z0, z1, z2, 0))
+
+/*
+** mla_lane_0_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mla z0\.s, \1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u32_tied2, svuint32_t,
+ z0 = svmla_lane_u32 (z1, z0, z2, 0),
+ z0 = svmla_lane (z1, z0, z2, 0))
+
+/*
+** mla_lane_0_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mla z0\.s, z2\.s, \1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u32_tied3, svuint32_t,
+ z0 = svmla_lane_u32 (z1, z2, z0, 0),
+ z0 = svmla_lane (z1, z2, z0, 0))
+
+/*
+** mla_lane_0_u32_untied:
+** movprfx z0, z1
+** mla z0\.s, z2\.s, z3\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u32_untied, svuint32_t,
+ z0 = svmla_lane_u32 (z1, z2, z3, 0),
+ z0 = svmla_lane (z1, z2, z3, 0))
+
+/*
+** mla_lane_1_u32:
+** mla z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_1_u32, svuint32_t,
+ z0 = svmla_lane_u32 (z0, z1, z2, 1),
+ z0 = svmla_lane (z0, z1, z2, 1))
+
+/*
+** mla_lane_2_u32:
+** mla z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_2_u32, svuint32_t,
+ z0 = svmla_lane_u32 (z0, z1, z2, 2),
+ z0 = svmla_lane (z0, z1, z2, 2))
+
+/*
+** mla_lane_3_u32:
+** mla z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_3_u32, svuint32_t,
+ z0 = svmla_lane_u32 (z0, z1, z2, 3),
+ z0 = svmla_lane (z0, z1, z2, 3))
+
+/*
+** mla_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mla z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z8_u32, svuint32_t, svuint32_t, z8,
+ z0 = svmla_lane_u32 (z0, z1, z8, 1),
+ z0 = svmla_lane (z0, z1, z8, 1))
+
+/*
+** mla_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** mla z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z16_u32, svuint32_t, svuint32_t, z16,
+ z0 = svmla_lane_u32 (z0, z1, z16, 1),
+ z0 = svmla_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mla_lane_0_u64_tied1:
+** mla z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u64_tied1, svuint64_t,
+ z0 = svmla_lane_u64 (z0, z1, z2, 0),
+ z0 = svmla_lane (z0, z1, z2, 0))
+
+/*
+** mla_lane_0_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** mla z0\.d, \1, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u64_tied2, svuint64_t,
+ z0 = svmla_lane_u64 (z1, z0, z2, 0),
+ z0 = svmla_lane (z1, z0, z2, 0))
+
+/*
+** mla_lane_0_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** mla z0\.d, z2\.d, \1\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u64_tied3, svuint64_t,
+ z0 = svmla_lane_u64 (z1, z2, z0, 0),
+ z0 = svmla_lane (z1, z2, z0, 0))
+
+/*
+** mla_lane_0_u64_untied:
+** movprfx z0, z1
+** mla z0\.d, z2\.d, z3\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_0_u64_untied, svuint64_t,
+ z0 = svmla_lane_u64 (z1, z2, z3, 0),
+ z0 = svmla_lane (z1, z2, z3, 0))
+
+/*
+** mla_lane_1_u64:
+** mla z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mla_lane_1_u64, svuint64_t,
+ z0 = svmla_lane_u64 (z0, z1, z2, 1),
+ z0 = svmla_lane (z0, z1, z2, 1))
+
+/*
+** mla_lane_z15_u64:
+** str d15, \[sp, -16\]!
+** mla z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z15_u64, svuint64_t, svuint64_t, z15,
+ z0 = svmla_lane_u64 (z0, z1, z15, 1),
+ z0 = svmla_lane (z0, z1, z15, 1))
+
+/*
+** mla_lane_z16_u64:
+** mov (z[0-7])\.d, z16\.d
+** mla z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mla_lane_z16_u64, svuint64_t, svuint64_t, z16,
+ z0 = svmla_lane_u64 (z0, z1, z16, 1),
+ z0 = svmla_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_f32_tied1:
+** fmlalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalb_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlalb_f32 (z0, z4, z5),
+ z0 = svmlalb (z0, z4, z5))
+
+/*
+** mlalb_f32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlalb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_f32_tied2, svfloat32_t, svfloat16_t,
+ z0_res = svmlalb_f32 (z4, z0, z1),
+ z0_res = svmlalb (z4, z0, z1))
+
+/*
+** mlalb_f32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlalb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_f32_tied3, svfloat32_t, svfloat16_t,
+ z0_res = svmlalb_f32 (z4, z1, z0),
+ z0_res = svmlalb (z4, z1, z0))
+
+/*
+** mlalb_f32_untied:
+** movprfx z0, z1
+** fmlalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalb_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlalb_f32 (z1, z4, z5),
+ z0 = svmlalb (z1, z4, z5))
+
+/*
+** mlalb_h7_f32_tied1:
+** mov (z[0-9]+\.h), h7
+** fmlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZD (mlalb_h7_f32_tied1, svfloat32_t, svfloat16_t, float16_t,
+ z0 = svmlalb_n_f32 (z0, z4, d7),
+ z0 = svmlalb (z0, z4, d7))
+
+/*
+** mlalb_h7_f32_untied:
+** mov (z[0-9]+\.h), h7
+** movprfx z0, z1
+** fmlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZD (mlalb_h7_f32_untied, svfloat32_t, svfloat16_t, float16_t,
+ z0 = svmlalb_n_f32 (z1, z4, d7),
+ z0 = svmlalb (z1, z4, d7))
+
+/*
+** mlalb_2_f32_tied1:
+** fmov (z[0-9]+\.h), #2\.0(?:e\+0)?
+** fmlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_2_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlalb_n_f32 (z0, z4, 2),
+ z0 = svmlalb (z0, z4, 2))
+
+/*
+** mlalb_2_f32_untied:
+** fmov (z[0-9]+\.h), #2\.0(?:e\+0)?
+** movprfx z0, z1
+** fmlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_2_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlalb_n_f32 (z1, z4, 2),
+ z0 = svmlalb (z1, z4, 2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_lane_0_f32_tied1:
+** fmlalb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlalb_lane_f32 (z0, z4, z5, 0),
+ z0 = svmlalb_lane (z0, z4, z5, 0))
+
+/*
+** mlalb_lane_0_f32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlalb z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_f32_tied2, svfloat32_t, svfloat16_t,
+ z0_res = svmlalb_lane_f32 (z4, z0, z1, 0),
+ z0_res = svmlalb_lane (z4, z0, z1, 0))
+
+/*
+** mlalb_lane_0_f32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlalb z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_f32_tied3, svfloat32_t, svfloat16_t,
+ z0_res = svmlalb_lane_f32 (z4, z1, z0, 0),
+ z0_res = svmlalb_lane (z4, z1, z0, 0))
+
+/*
+** mlalb_lane_0_f32_untied:
+** movprfx z0, z1
+** fmlalb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlalb_lane_f32 (z1, z4, z5, 0),
+ z0 = svmlalb_lane (z1, z4, z5, 0))
+
+/*
+** mlalb_lane_1_f32:
+** fmlalb z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_1_f32, svfloat32_t, svfloat16_t,
+ z0 = svmlalb_lane_f32 (z0, z4, z5, 1),
+ z0 = svmlalb_lane (z0, z4, z5, 1))
+
+/*
+** mlalb_lane_z8_f32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** fmlalb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z8_f32, svfloat32_t, svfloat16_t, z8,
+ z0 = svmlalb_lane_f32 (z0, z1, z8, 1),
+ z0 = svmlalb_lane (z0, z1, z8, 1))
+
+/*
+** mlalb_lane_z16_f32:
+** mov (z[0-7])\.d, z16\.d
+** fmlalb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z16_f32, svfloat32_t, svfloat16_t, z16,
+ z0 = svmlalb_lane_f32 (z0, z1, z16, 1),
+ z0 = svmlalb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_lane_0_s32_tied1:
+** smlalb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlalb_lane_s32 (z0, z4, z5, 0),
+ z0 = svmlalb_lane (z0, z4, z5, 0))
+
+/*
+** mlalb_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmlalb_lane_s32 (z4, z0, z1, 0),
+ z0_res = svmlalb_lane (z4, z0, z1, 0))
+
+/*
+** mlalb_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_s32_tied3, svint32_t, svint16_t,
+ z0_res = svmlalb_lane_s32 (z4, z1, z0, 0),
+ z0_res = svmlalb_lane (z4, z1, z0, 0))
+
+/*
+** mlalb_lane_0_s32_untied:
+** movprfx z0, z1
+** smlalb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_s32_untied, svint32_t, svint16_t,
+ z0 = svmlalb_lane_s32 (z1, z4, z5, 0),
+ z0 = svmlalb_lane (z1, z4, z5, 0))
+
+/*
+** mlalb_lane_1_s32:
+** smlalb z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_1_s32, svint32_t, svint16_t,
+ z0 = svmlalb_lane_s32 (z0, z4, z5, 1),
+ z0 = svmlalb_lane (z0, z4, z5, 1))
+
+/*
+** mlalb_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** smlalb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svmlalb_lane_s32 (z0, z1, z8, 1),
+ z0 = svmlalb_lane (z0, z1, z8, 1))
+
+/*
+** mlalb_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** smlalb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svmlalb_lane_s32 (z0, z1, z16, 1),
+ z0 = svmlalb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_lane_0_s64_tied1:
+** smlalb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlalb_lane_s64 (z0, z4, z5, 0),
+ z0 = svmlalb_lane (z0, z4, z5, 0))
+
+/*
+** mlalb_lane_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmlalb_lane_s64 (z4, z0, z1, 0),
+ z0_res = svmlalb_lane (z4, z0, z1, 0))
+
+/*
+** mlalb_lane_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_s64_tied3, svint64_t, svint32_t,
+ z0_res = svmlalb_lane_s64 (z4, z1, z0, 0),
+ z0_res = svmlalb_lane (z4, z1, z0, 0))
+
+/*
+** mlalb_lane_0_s64_untied:
+** movprfx z0, z1
+** smlalb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_s64_untied, svint64_t, svint32_t,
+ z0 = svmlalb_lane_s64 (z1, z4, z5, 0),
+ z0 = svmlalb_lane (z1, z4, z5, 0))
+
+/*
+** mlalb_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** smlalb z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svmlalb_lane_s64 (z0, z1, z15, 1),
+ z0 = svmlalb_lane (z0, z1, z15, 1))
+
+/*
+** mlalb_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** smlalb z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svmlalb_lane_s64 (z0, z1, z16, 1),
+ z0 = svmlalb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_lane_0_u32_tied1:
+** umlalb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlalb_lane_u32 (z0, z4, z5, 0),
+ z0 = svmlalb_lane (z0, z4, z5, 0))
+
+/*
+** mlalb_lane_0_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmlalb_lane_u32 (z4, z0, z1, 0),
+ z0_res = svmlalb_lane (z4, z0, z1, 0))
+
+/*
+** mlalb_lane_0_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svmlalb_lane_u32 (z4, z1, z0, 0),
+ z0_res = svmlalb_lane (z4, z1, z0, 0))
+
+/*
+** mlalb_lane_0_u32_untied:
+** movprfx z0, z1
+** umlalb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlalb_lane_u32 (z1, z4, z5, 0),
+ z0 = svmlalb_lane (z1, z4, z5, 0))
+
+/*
+** mlalb_lane_1_u32:
+** umlalb z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_1_u32, svuint32_t, svuint16_t,
+ z0 = svmlalb_lane_u32 (z0, z4, z5, 1),
+ z0 = svmlalb_lane (z0, z4, z5, 1))
+
+/*
+** mlalb_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** umlalb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z8_u32, svuint32_t, svuint16_t, z8,
+ z0 = svmlalb_lane_u32 (z0, z1, z8, 1),
+ z0 = svmlalb_lane (z0, z1, z8, 1))
+
+/*
+** mlalb_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** umlalb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z16_u32, svuint32_t, svuint16_t, z16,
+ z0 = svmlalb_lane_u32 (z0, z1, z16, 1),
+ z0 = svmlalb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_lane_0_u64_tied1:
+** umlalb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlalb_lane_u64 (z0, z4, z5, 0),
+ z0 = svmlalb_lane (z0, z4, z5, 0))
+
+/*
+** mlalb_lane_0_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmlalb_lane_u64 (z4, z0, z1, 0),
+ z0_res = svmlalb_lane (z4, z0, z1, 0))
+
+/*
+** mlalb_lane_0_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_lane_0_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svmlalb_lane_u64 (z4, z1, z0, 0),
+ z0_res = svmlalb_lane (z4, z1, z0, 0))
+
+/*
+** mlalb_lane_0_u64_untied:
+** movprfx z0, z1
+** umlalb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalb_lane_0_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlalb_lane_u64 (z1, z4, z5, 0),
+ z0 = svmlalb_lane (z1, z4, z5, 0))
+
+/*
+** mlalb_lane_z15_u64:
+** str d15, \[sp, -16\]!
+** umlalb z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z15_u64, svuint64_t, svuint32_t, z15,
+ z0 = svmlalb_lane_u64 (z0, z1, z15, 1),
+ z0 = svmlalb_lane (z0, z1, z15, 1))
+
+/*
+** mlalb_lane_z16_u64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** umlalb z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalb_lane_z16_u64, svuint64_t, svuint32_t, z16,
+ z0 = svmlalb_lane_u64 (z0, z1, z16, 1),
+ z0 = svmlalb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_s16_tied1:
+** smlalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlalb_s16_tied1, svint16_t, svint8_t,
+ z0 = svmlalb_s16 (z0, z4, z5),
+ z0 = svmlalb (z0, z4, z5))
+
+/*
+** mlalb_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svmlalb_s16 (z4, z0, z1),
+ z0_res = svmlalb (z4, z0, z1))
+
+/*
+** mlalb_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_s16_tied3, svint16_t, svint8_t,
+ z0_res = svmlalb_s16 (z4, z1, z0),
+ z0_res = svmlalb (z4, z1, z0))
+
+/*
+** mlalb_s16_untied:
+** movprfx z0, z1
+** smlalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlalb_s16_untied, svint16_t, svint8_t,
+ z0 = svmlalb_s16 (z1, z4, z5),
+ z0 = svmlalb (z1, z4, z5))
+
+/*
+** mlalb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** smlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svmlalb_n_s16 (z0, z4, x0),
+ z0 = svmlalb (z0, z4, x0))
+
+/*
+** mlalb_w0_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** smlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svmlalb_n_s16 (z1, z4, x0),
+ z0 = svmlalb (z1, z4, x0))
+
+/*
+** mlalb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** smlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svmlalb_n_s16 (z0, z4, 11),
+ z0 = svmlalb (z0, z4, 11))
+
+/*
+** mlalb_11_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** smlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_s16_untied, svint16_t, svint8_t,
+ z0 = svmlalb_n_s16 (z1, z4, 11),
+ z0 = svmlalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_s32_tied1:
+** smlalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalb_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlalb_s32 (z0, z4, z5),
+ z0 = svmlalb (z0, z4, z5))
+
+/*
+** mlalb_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmlalb_s32 (z4, z0, z1),
+ z0_res = svmlalb (z4, z0, z1))
+
+/*
+** mlalb_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_s32_tied3, svint32_t, svint16_t,
+ z0_res = svmlalb_s32 (z4, z1, z0),
+ z0_res = svmlalb (z4, z1, z0))
+
+/*
+** mlalb_s32_untied:
+** movprfx z0, z1
+** smlalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalb_s32_untied, svint32_t, svint16_t,
+ z0 = svmlalb_s32 (z1, z4, z5),
+ z0 = svmlalb (z1, z4, z5))
+
+/*
+** mlalb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** smlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svmlalb_n_s32 (z0, z4, x0),
+ z0 = svmlalb (z0, z4, x0))
+
+/*
+** mlalb_w0_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** smlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svmlalb_n_s32 (z1, z4, x0),
+ z0 = svmlalb (z1, z4, x0))
+
+/*
+** mlalb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** smlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlalb_n_s32 (z0, z4, 11),
+ z0 = svmlalb (z0, z4, 11))
+
+/*
+** mlalb_11_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** smlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_s32_untied, svint32_t, svint16_t,
+ z0 = svmlalb_n_s32 (z1, z4, 11),
+ z0 = svmlalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_s64_tied1:
+** smlalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlalb_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlalb_s64 (z0, z4, z5),
+ z0 = svmlalb (z0, z4, z5))
+
+/*
+** mlalb_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmlalb_s64 (z4, z0, z1),
+ z0_res = svmlalb (z4, z0, z1))
+
+/*
+** mlalb_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalb z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_s64_tied3, svint64_t, svint32_t,
+ z0_res = svmlalb_s64 (z4, z1, z0),
+ z0_res = svmlalb (z4, z1, z0))
+
+/*
+** mlalb_s64_untied:
+** movprfx z0, z1
+** smlalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlalb_s64_untied, svint64_t, svint32_t,
+ z0 = svmlalb_s64 (z1, z4, z5),
+ z0 = svmlalb (z1, z4, z5))
+
+/*
+** mlalb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** smlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svmlalb_n_s64 (z0, z4, x0),
+ z0 = svmlalb (z0, z4, x0))
+
+/*
+** mlalb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** smlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svmlalb_n_s64 (z1, z4, x0),
+ z0 = svmlalb (z1, z4, x0))
+
+/*
+** mlalb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** smlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlalb_n_s64 (z0, z4, 11),
+ z0 = svmlalb (z0, z4, 11))
+
+/*
+** mlalb_11_s64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** smlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_s64_untied, svint64_t, svint32_t,
+ z0 = svmlalb_n_s64 (z1, z4, 11),
+ z0 = svmlalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_u16_tied1:
+** umlalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlalb_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svmlalb_u16 (z0, z4, z5),
+ z0 = svmlalb (z0, z4, z5))
+
+/*
+** mlalb_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svmlalb_u16 (z4, z0, z1),
+ z0_res = svmlalb (z4, z0, z1))
+
+/*
+** mlalb_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_u16_tied3, svuint16_t, svuint8_t,
+ z0_res = svmlalb_u16 (z4, z1, z0),
+ z0_res = svmlalb (z4, z1, z0))
+
+/*
+** mlalb_u16_untied:
+** movprfx z0, z1
+** umlalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlalb_u16_untied, svuint16_t, svuint8_t,
+ z0 = svmlalb_u16 (z1, z4, z5),
+ z0 = svmlalb (z1, z4, z5))
+
+/*
+** mlalb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** umlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0 = svmlalb_n_u16 (z0, z4, x0),
+ z0 = svmlalb (z0, z4, x0))
+
+/*
+** mlalb_w0_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** umlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0 = svmlalb_n_u16 (z1, z4, x0),
+ z0 = svmlalb (z1, z4, x0))
+
+/*
+** mlalb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** umlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svmlalb_n_u16 (z0, z4, 11),
+ z0 = svmlalb (z0, z4, 11))
+
+/*
+** mlalb_11_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** umlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_u16_untied, svuint16_t, svuint8_t,
+ z0 = svmlalb_n_u16 (z1, z4, 11),
+ z0 = svmlalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_u32_tied1:
+** umlalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalb_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlalb_u32 (z0, z4, z5),
+ z0 = svmlalb (z0, z4, z5))
+
+/*
+** mlalb_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmlalb_u32 (z4, z0, z1),
+ z0_res = svmlalb (z4, z0, z1))
+
+/*
+** mlalb_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svmlalb_u32 (z4, z1, z0),
+ z0_res = svmlalb (z4, z1, z0))
+
+/*
+** mlalb_u32_untied:
+** movprfx z0, z1
+** umlalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalb_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlalb_u32 (z1, z4, z5),
+ z0 = svmlalb (z1, z4, z5))
+
+/*
+** mlalb_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** umlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0 = svmlalb_n_u32 (z0, z4, x0),
+ z0 = svmlalb (z0, z4, x0))
+
+/*
+** mlalb_w0_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** umlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0 = svmlalb_n_u32 (z1, z4, x0),
+ z0 = svmlalb (z1, z4, x0))
+
+/*
+** mlalb_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** umlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlalb_n_u32 (z0, z4, 11),
+ z0 = svmlalb (z0, z4, 11))
+
+/*
+** mlalb_11_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** umlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlalb_n_u32 (z1, z4, 11),
+ z0 = svmlalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalb_u64_tied1:
+** umlalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlalb_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlalb_u64 (z0, z4, z5),
+ z0 = svmlalb (z0, z4, z5))
+
+/*
+** mlalb_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmlalb_u64 (z4, z0, z1),
+ z0_res = svmlalb (z4, z0, z1))
+
+/*
+** mlalb_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalb z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlalb_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svmlalb_u64 (z4, z1, z0),
+ z0_res = svmlalb (z4, z1, z0))
+
+/*
+** mlalb_u64_untied:
+** movprfx z0, z1
+** umlalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlalb_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlalb_u64 (z1, z4, z5),
+ z0 = svmlalb (z1, z4, z5))
+
+/*
+** mlalb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** umlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0 = svmlalb_n_u64 (z0, z4, x0),
+ z0 = svmlalb (z0, z4, x0))
+
+/*
+** mlalb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** umlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalb_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0 = svmlalb_n_u64 (z1, z4, x0),
+ z0 = svmlalb (z1, z4, x0))
+
+/*
+** mlalb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** umlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlalb_n_u64 (z0, z4, 11),
+ z0 = svmlalb (z0, z4, 11))
+
+/*
+** mlalb_11_u64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** umlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlalb_11_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlalb_n_u64 (z1, z4, 11),
+ z0 = svmlalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_f32_tied1:
+** fmlalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalt_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlalt_f32 (z0, z4, z5),
+ z0 = svmlalt (z0, z4, z5))
+
+/*
+** mlalt_f32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlalt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_f32_tied2, svfloat32_t, svfloat16_t,
+ z0_res = svmlalt_f32 (z4, z0, z1),
+ z0_res = svmlalt (z4, z0, z1))
+
+/*
+** mlalt_f32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlalt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_f32_tied3, svfloat32_t, svfloat16_t,
+ z0_res = svmlalt_f32 (z4, z1, z0),
+ z0_res = svmlalt (z4, z1, z0))
+
+/*
+** mlalt_f32_untied:
+** movprfx z0, z1
+** fmlalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalt_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlalt_f32 (z1, z4, z5),
+ z0 = svmlalt (z1, z4, z5))
+
+/*
+** mlalt_h7_f32_tied1:
+** mov (z[0-9]+\.h), h7
+** fmlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZD (mlalt_h7_f32_tied1, svfloat32_t, svfloat16_t, float16_t,
+ z0 = svmlalt_n_f32 (z0, z4, d7),
+ z0 = svmlalt (z0, z4, d7))
+
+/*
+** mlalt_h7_f32_untied:
+** mov (z[0-9]+\.h), h7
+** movprfx z0, z1
+** fmlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZD (mlalt_h7_f32_untied, svfloat32_t, svfloat16_t, float16_t,
+ z0 = svmlalt_n_f32 (z1, z4, d7),
+ z0 = svmlalt (z1, z4, d7))
+
+/*
+** mlalt_2_f32_tied1:
+** fmov (z[0-9]+\.h), #2\.0(?:e\+0)?
+** fmlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_2_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlalt_n_f32 (z0, z4, 2),
+ z0 = svmlalt (z0, z4, 2))
+
+/*
+** mlalt_2_f32_untied:
+** fmov (z[0-9]+\.h), #2\.0(?:e\+0)?
+** movprfx z0, z1
+** fmlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_2_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlalt_n_f32 (z1, z4, 2),
+ z0 = svmlalt (z1, z4, 2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_lane_0_f32_tied1:
+** fmlalt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlalt_lane_f32 (z0, z4, z5, 0),
+ z0 = svmlalt_lane (z0, z4, z5, 0))
+
+/*
+** mlalt_lane_0_f32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlalt z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_f32_tied2, svfloat32_t, svfloat16_t,
+ z0_res = svmlalt_lane_f32 (z4, z0, z1, 0),
+ z0_res = svmlalt_lane (z4, z0, z1, 0))
+
+/*
+** mlalt_lane_0_f32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlalt z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_f32_tied3, svfloat32_t, svfloat16_t,
+ z0_res = svmlalt_lane_f32 (z4, z1, z0, 0),
+ z0_res = svmlalt_lane (z4, z1, z0, 0))
+
+/*
+** mlalt_lane_0_f32_untied:
+** movprfx z0, z1
+** fmlalt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlalt_lane_f32 (z1, z4, z5, 0),
+ z0 = svmlalt_lane (z1, z4, z5, 0))
+
+/*
+** mlalt_lane_1_f32:
+** fmlalt z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_1_f32, svfloat32_t, svfloat16_t,
+ z0 = svmlalt_lane_f32 (z0, z4, z5, 1),
+ z0 = svmlalt_lane (z0, z4, z5, 1))
+
+/*
+** mlalt_lane_z8_f32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** fmlalt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z8_f32, svfloat32_t, svfloat16_t, z8,
+ z0 = svmlalt_lane_f32 (z0, z1, z8, 1),
+ z0 = svmlalt_lane (z0, z1, z8, 1))
+
+/*
+** mlalt_lane_z16_f32:
+** mov (z[0-7])\.d, z16\.d
+** fmlalt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z16_f32, svfloat32_t, svfloat16_t, z16,
+ z0 = svmlalt_lane_f32 (z0, z1, z16, 1),
+ z0 = svmlalt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_lane_0_s32_tied1:
+** smlalt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlalt_lane_s32 (z0, z4, z5, 0),
+ z0 = svmlalt_lane (z0, z4, z5, 0))
+
+/*
+** mlalt_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmlalt_lane_s32 (z4, z0, z1, 0),
+ z0_res = svmlalt_lane (z4, z0, z1, 0))
+
+/*
+** mlalt_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_s32_tied3, svint32_t, svint16_t,
+ z0_res = svmlalt_lane_s32 (z4, z1, z0, 0),
+ z0_res = svmlalt_lane (z4, z1, z0, 0))
+
+/*
+** mlalt_lane_0_s32_untied:
+** movprfx z0, z1
+** smlalt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_s32_untied, svint32_t, svint16_t,
+ z0 = svmlalt_lane_s32 (z1, z4, z5, 0),
+ z0 = svmlalt_lane (z1, z4, z5, 0))
+
+/*
+** mlalt_lane_1_s32:
+** smlalt z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_1_s32, svint32_t, svint16_t,
+ z0 = svmlalt_lane_s32 (z0, z4, z5, 1),
+ z0 = svmlalt_lane (z0, z4, z5, 1))
+
+/*
+** mlalt_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** smlalt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svmlalt_lane_s32 (z0, z1, z8, 1),
+ z0 = svmlalt_lane (z0, z1, z8, 1))
+
+/*
+** mlalt_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** smlalt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svmlalt_lane_s32 (z0, z1, z16, 1),
+ z0 = svmlalt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_lane_0_s64_tied1:
+** smlalt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlalt_lane_s64 (z0, z4, z5, 0),
+ z0 = svmlalt_lane (z0, z4, z5, 0))
+
+/*
+** mlalt_lane_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmlalt_lane_s64 (z4, z0, z1, 0),
+ z0_res = svmlalt_lane (z4, z0, z1, 0))
+
+/*
+** mlalt_lane_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_s64_tied3, svint64_t, svint32_t,
+ z0_res = svmlalt_lane_s64 (z4, z1, z0, 0),
+ z0_res = svmlalt_lane (z4, z1, z0, 0))
+
+/*
+** mlalt_lane_0_s64_untied:
+** movprfx z0, z1
+** smlalt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_s64_untied, svint64_t, svint32_t,
+ z0 = svmlalt_lane_s64 (z1, z4, z5, 0),
+ z0 = svmlalt_lane (z1, z4, z5, 0))
+
+/*
+** mlalt_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** smlalt z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svmlalt_lane_s64 (z0, z1, z15, 1),
+ z0 = svmlalt_lane (z0, z1, z15, 1))
+
+/*
+** mlalt_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** smlalt z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svmlalt_lane_s64 (z0, z1, z16, 1),
+ z0 = svmlalt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_lane_0_u32_tied1:
+** umlalt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlalt_lane_u32 (z0, z4, z5, 0),
+ z0 = svmlalt_lane (z0, z4, z5, 0))
+
+/*
+** mlalt_lane_0_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmlalt_lane_u32 (z4, z0, z1, 0),
+ z0_res = svmlalt_lane (z4, z0, z1, 0))
+
+/*
+** mlalt_lane_0_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svmlalt_lane_u32 (z4, z1, z0, 0),
+ z0_res = svmlalt_lane (z4, z1, z0, 0))
+
+/*
+** mlalt_lane_0_u32_untied:
+** movprfx z0, z1
+** umlalt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlalt_lane_u32 (z1, z4, z5, 0),
+ z0 = svmlalt_lane (z1, z4, z5, 0))
+
+/*
+** mlalt_lane_1_u32:
+** umlalt z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_1_u32, svuint32_t, svuint16_t,
+ z0 = svmlalt_lane_u32 (z0, z4, z5, 1),
+ z0 = svmlalt_lane (z0, z4, z5, 1))
+
+/*
+** mlalt_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** umlalt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z8_u32, svuint32_t, svuint16_t, z8,
+ z0 = svmlalt_lane_u32 (z0, z1, z8, 1),
+ z0 = svmlalt_lane (z0, z1, z8, 1))
+
+/*
+** mlalt_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** umlalt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z16_u32, svuint32_t, svuint16_t, z16,
+ z0 = svmlalt_lane_u32 (z0, z1, z16, 1),
+ z0 = svmlalt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_lane_0_u64_tied1:
+** umlalt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlalt_lane_u64 (z0, z4, z5, 0),
+ z0 = svmlalt_lane (z0, z4, z5, 0))
+
+/*
+** mlalt_lane_0_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmlalt_lane_u64 (z4, z0, z1, 0),
+ z0_res = svmlalt_lane (z4, z0, z1, 0))
+
+/*
+** mlalt_lane_0_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_lane_0_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svmlalt_lane_u64 (z4, z1, z0, 0),
+ z0_res = svmlalt_lane (z4, z1, z0, 0))
+
+/*
+** mlalt_lane_0_u64_untied:
+** movprfx z0, z1
+** umlalt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlalt_lane_0_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlalt_lane_u64 (z1, z4, z5, 0),
+ z0 = svmlalt_lane (z1, z4, z5, 0))
+
+/*
+** mlalt_lane_z15_u64:
+** str d15, \[sp, -16\]!
+** umlalt z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z15_u64, svuint64_t, svuint32_t, z15,
+ z0 = svmlalt_lane_u64 (z0, z1, z15, 1),
+ z0 = svmlalt_lane (z0, z1, z15, 1))
+
+/*
+** mlalt_lane_z16_u64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** umlalt z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlalt_lane_z16_u64, svuint64_t, svuint32_t, z16,
+ z0 = svmlalt_lane_u64 (z0, z1, z16, 1),
+ z0 = svmlalt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_s16_tied1:
+** smlalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlalt_s16_tied1, svint16_t, svint8_t,
+ z0 = svmlalt_s16 (z0, z4, z5),
+ z0 = svmlalt (z0, z4, z5))
+
+/*
+** mlalt_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svmlalt_s16 (z4, z0, z1),
+ z0_res = svmlalt (z4, z0, z1))
+
+/*
+** mlalt_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_s16_tied3, svint16_t, svint8_t,
+ z0_res = svmlalt_s16 (z4, z1, z0),
+ z0_res = svmlalt (z4, z1, z0))
+
+/*
+** mlalt_s16_untied:
+** movprfx z0, z1
+** smlalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlalt_s16_untied, svint16_t, svint8_t,
+ z0 = svmlalt_s16 (z1, z4, z5),
+ z0 = svmlalt (z1, z4, z5))
+
+/*
+** mlalt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** smlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svmlalt_n_s16 (z0, z4, x0),
+ z0 = svmlalt (z0, z4, x0))
+
+/*
+** mlalt_w0_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** smlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svmlalt_n_s16 (z1, z4, x0),
+ z0 = svmlalt (z1, z4, x0))
+
+/*
+** mlalt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** smlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svmlalt_n_s16 (z0, z4, 11),
+ z0 = svmlalt (z0, z4, 11))
+
+/*
+** mlalt_11_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** smlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_s16_untied, svint16_t, svint8_t,
+ z0 = svmlalt_n_s16 (z1, z4, 11),
+ z0 = svmlalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_s32_tied1:
+** smlalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalt_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlalt_s32 (z0, z4, z5),
+ z0 = svmlalt (z0, z4, z5))
+
+/*
+** mlalt_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmlalt_s32 (z4, z0, z1),
+ z0_res = svmlalt (z4, z0, z1))
+
+/*
+** mlalt_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_s32_tied3, svint32_t, svint16_t,
+ z0_res = svmlalt_s32 (z4, z1, z0),
+ z0_res = svmlalt (z4, z1, z0))
+
+/*
+** mlalt_s32_untied:
+** movprfx z0, z1
+** smlalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalt_s32_untied, svint32_t, svint16_t,
+ z0 = svmlalt_s32 (z1, z4, z5),
+ z0 = svmlalt (z1, z4, z5))
+
+/*
+** mlalt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** smlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svmlalt_n_s32 (z0, z4, x0),
+ z0 = svmlalt (z0, z4, x0))
+
+/*
+** mlalt_w0_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** smlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svmlalt_n_s32 (z1, z4, x0),
+ z0 = svmlalt (z1, z4, x0))
+
+/*
+** mlalt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** smlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlalt_n_s32 (z0, z4, 11),
+ z0 = svmlalt (z0, z4, 11))
+
+/*
+** mlalt_11_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** smlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_s32_untied, svint32_t, svint16_t,
+ z0 = svmlalt_n_s32 (z1, z4, 11),
+ z0 = svmlalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_s64_tied1:
+** smlalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlalt_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlalt_s64 (z0, z4, z5),
+ z0 = svmlalt (z0, z4, z5))
+
+/*
+** mlalt_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmlalt_s64 (z4, z0, z1),
+ z0_res = svmlalt (z4, z0, z1))
+
+/*
+** mlalt_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlalt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_s64_tied3, svint64_t, svint32_t,
+ z0_res = svmlalt_s64 (z4, z1, z0),
+ z0_res = svmlalt (z4, z1, z0))
+
+/*
+** mlalt_s64_untied:
+** movprfx z0, z1
+** smlalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlalt_s64_untied, svint64_t, svint32_t,
+ z0 = svmlalt_s64 (z1, z4, z5),
+ z0 = svmlalt (z1, z4, z5))
+
+/*
+** mlalt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** smlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svmlalt_n_s64 (z0, z4, x0),
+ z0 = svmlalt (z0, z4, x0))
+
+/*
+** mlalt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** smlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svmlalt_n_s64 (z1, z4, x0),
+ z0 = svmlalt (z1, z4, x0))
+
+/*
+** mlalt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** smlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlalt_n_s64 (z0, z4, 11),
+ z0 = svmlalt (z0, z4, 11))
+
+/*
+** mlalt_11_s64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** smlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_s64_untied, svint64_t, svint32_t,
+ z0 = svmlalt_n_s64 (z1, z4, 11),
+ z0 = svmlalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_u16_tied1:
+** umlalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlalt_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svmlalt_u16 (z0, z4, z5),
+ z0 = svmlalt (z0, z4, z5))
+
+/*
+** mlalt_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svmlalt_u16 (z4, z0, z1),
+ z0_res = svmlalt (z4, z0, z1))
+
+/*
+** mlalt_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_u16_tied3, svuint16_t, svuint8_t,
+ z0_res = svmlalt_u16 (z4, z1, z0),
+ z0_res = svmlalt (z4, z1, z0))
+
+/*
+** mlalt_u16_untied:
+** movprfx z0, z1
+** umlalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlalt_u16_untied, svuint16_t, svuint8_t,
+ z0 = svmlalt_u16 (z1, z4, z5),
+ z0 = svmlalt (z1, z4, z5))
+
+/*
+** mlalt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** umlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0 = svmlalt_n_u16 (z0, z4, x0),
+ z0 = svmlalt (z0, z4, x0))
+
+/*
+** mlalt_w0_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** umlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0 = svmlalt_n_u16 (z1, z4, x0),
+ z0 = svmlalt (z1, z4, x0))
+
+/*
+** mlalt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** umlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svmlalt_n_u16 (z0, z4, 11),
+ z0 = svmlalt (z0, z4, 11))
+
+/*
+** mlalt_11_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** umlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_u16_untied, svuint16_t, svuint8_t,
+ z0 = svmlalt_n_u16 (z1, z4, 11),
+ z0 = svmlalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_u32_tied1:
+** umlalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalt_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlalt_u32 (z0, z4, z5),
+ z0 = svmlalt (z0, z4, z5))
+
+/*
+** mlalt_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmlalt_u32 (z4, z0, z1),
+ z0_res = svmlalt (z4, z0, z1))
+
+/*
+** mlalt_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svmlalt_u32 (z4, z1, z0),
+ z0_res = svmlalt (z4, z1, z0))
+
+/*
+** mlalt_u32_untied:
+** movprfx z0, z1
+** umlalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlalt_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlalt_u32 (z1, z4, z5),
+ z0 = svmlalt (z1, z4, z5))
+
+/*
+** mlalt_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** umlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0 = svmlalt_n_u32 (z0, z4, x0),
+ z0 = svmlalt (z0, z4, x0))
+
+/*
+** mlalt_w0_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** umlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0 = svmlalt_n_u32 (z1, z4, x0),
+ z0 = svmlalt (z1, z4, x0))
+
+/*
+** mlalt_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** umlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlalt_n_u32 (z0, z4, 11),
+ z0 = svmlalt (z0, z4, 11))
+
+/*
+** mlalt_11_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** umlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlalt_n_u32 (z1, z4, 11),
+ z0 = svmlalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlalt_u64_tied1:
+** umlalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlalt_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlalt_u64 (z0, z4, z5),
+ z0 = svmlalt (z0, z4, z5))
+
+/*
+** mlalt_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmlalt_u64 (z4, z0, z1),
+ z0_res = svmlalt (z4, z0, z1))
+
+/*
+** mlalt_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlalt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlalt_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svmlalt_u64 (z4, z1, z0),
+ z0_res = svmlalt (z4, z1, z0))
+
+/*
+** mlalt_u64_untied:
+** movprfx z0, z1
+** umlalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlalt_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlalt_u64 (z1, z4, z5),
+ z0 = svmlalt (z1, z4, z5))
+
+/*
+** mlalt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** umlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0 = svmlalt_n_u64 (z0, z4, x0),
+ z0 = svmlalt (z0, z4, x0))
+
+/*
+** mlalt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** umlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlalt_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0 = svmlalt_n_u64 (z1, z4, x0),
+ z0 = svmlalt (z1, z4, x0))
+
+/*
+** mlalt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** umlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlalt_n_u64 (z0, z4, 11),
+ z0 = svmlalt (z0, z4, 11))
+
+/*
+** mlalt_11_u64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** umlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlalt_11_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlalt_n_u64 (z1, z4, 11),
+ z0 = svmlalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mls_lane_0_s16_tied1:
+** mls z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s16_tied1, svint16_t,
+ z0 = svmls_lane_s16 (z0, z1, z2, 0),
+ z0 = svmls_lane (z0, z1, z2, 0))
+
+/*
+** mls_lane_0_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mls z0\.h, \1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s16_tied2, svint16_t,
+ z0 = svmls_lane_s16 (z1, z0, z2, 0),
+ z0 = svmls_lane (z1, z0, z2, 0))
+
+/*
+** mls_lane_0_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mls z0\.h, z2\.h, \1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s16_tied3, svint16_t,
+ z0 = svmls_lane_s16 (z1, z2, z0, 0),
+ z0 = svmls_lane (z1, z2, z0, 0))
+
+/*
+** mls_lane_0_s16_untied:
+** movprfx z0, z1
+** mls z0\.h, z2\.h, z3\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s16_untied, svint16_t,
+ z0 = svmls_lane_s16 (z1, z2, z3, 0),
+ z0 = svmls_lane (z1, z2, z3, 0))
+
+/*
+** mls_lane_1_s16:
+** mls z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_1_s16, svint16_t,
+ z0 = svmls_lane_s16 (z0, z1, z2, 1),
+ z0 = svmls_lane (z0, z1, z2, 1))
+
+/*
+** mls_lane_2_s16:
+** mls z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_2_s16, svint16_t,
+ z0 = svmls_lane_s16 (z0, z1, z2, 2),
+ z0 = svmls_lane (z0, z1, z2, 2))
+
+/*
+** mls_lane_3_s16:
+** mls z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_3_s16, svint16_t,
+ z0 = svmls_lane_s16 (z0, z1, z2, 3),
+ z0 = svmls_lane (z0, z1, z2, 3))
+
+/*
+** mls_lane_4_s16:
+** mls z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_4_s16, svint16_t,
+ z0 = svmls_lane_s16 (z0, z1, z2, 4),
+ z0 = svmls_lane (z0, z1, z2, 4))
+
+/*
+** mls_lane_5_s16:
+** mls z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_5_s16, svint16_t,
+ z0 = svmls_lane_s16 (z0, z1, z2, 5),
+ z0 = svmls_lane (z0, z1, z2, 5))
+
+/*
+** mls_lane_6_s16:
+** mls z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_6_s16, svint16_t,
+ z0 = svmls_lane_s16 (z0, z1, z2, 6),
+ z0 = svmls_lane (z0, z1, z2, 6))
+
+/*
+** mls_lane_7_s16:
+** mls z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_7_s16, svint16_t,
+ z0 = svmls_lane_s16 (z0, z1, z2, 7),
+ z0 = svmls_lane (z0, z1, z2, 7))
+
+/*
+** mls_lane_z8_s16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mls z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z8_s16, svint16_t, svint16_t, z8,
+ z0 = svmls_lane_s16 (z0, z1, z8, 1),
+ z0 = svmls_lane (z0, z1, z8, 1))
+
+/*
+** mls_lane_z16_s16:
+** mov (z[0-7])\.d, z16\.d
+** mls z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z16_s16, svint16_t, svint16_t, z16,
+ z0 = svmls_lane_s16 (z0, z1, z16, 1),
+ z0 = svmls_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mls_lane_0_s32_tied1:
+** mls z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s32_tied1, svint32_t,
+ z0 = svmls_lane_s32 (z0, z1, z2, 0),
+ z0 = svmls_lane (z0, z1, z2, 0))
+
+/*
+** mls_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mls z0\.s, \1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s32_tied2, svint32_t,
+ z0 = svmls_lane_s32 (z1, z0, z2, 0),
+ z0 = svmls_lane (z1, z0, z2, 0))
+
+/*
+** mls_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mls z0\.s, z2\.s, \1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s32_tied3, svint32_t,
+ z0 = svmls_lane_s32 (z1, z2, z0, 0),
+ z0 = svmls_lane (z1, z2, z0, 0))
+
+/*
+** mls_lane_0_s32_untied:
+** movprfx z0, z1
+** mls z0\.s, z2\.s, z3\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s32_untied, svint32_t,
+ z0 = svmls_lane_s32 (z1, z2, z3, 0),
+ z0 = svmls_lane (z1, z2, z3, 0))
+
+/*
+** mls_lane_1_s32:
+** mls z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_1_s32, svint32_t,
+ z0 = svmls_lane_s32 (z0, z1, z2, 1),
+ z0 = svmls_lane (z0, z1, z2, 1))
+
+/*
+** mls_lane_2_s32:
+** mls z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_2_s32, svint32_t,
+ z0 = svmls_lane_s32 (z0, z1, z2, 2),
+ z0 = svmls_lane (z0, z1, z2, 2))
+
+/*
+** mls_lane_3_s32:
+** mls z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_3_s32, svint32_t,
+ z0 = svmls_lane_s32 (z0, z1, z2, 3),
+ z0 = svmls_lane (z0, z1, z2, 3))
+
+/*
+** mls_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mls z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z8_s32, svint32_t, svint32_t, z8,
+ z0 = svmls_lane_s32 (z0, z1, z8, 1),
+ z0 = svmls_lane (z0, z1, z8, 1))
+
+/*
+** mls_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** mls z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z16_s32, svint32_t, svint32_t, z16,
+ z0 = svmls_lane_s32 (z0, z1, z16, 1),
+ z0 = svmls_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mls_lane_0_s64_tied1:
+** mls z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s64_tied1, svint64_t,
+ z0 = svmls_lane_s64 (z0, z1, z2, 0),
+ z0 = svmls_lane (z0, z1, z2, 0))
+
+/*
+** mls_lane_0_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** mls z0\.d, \1, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s64_tied2, svint64_t,
+ z0 = svmls_lane_s64 (z1, z0, z2, 0),
+ z0 = svmls_lane (z1, z0, z2, 0))
+
+/*
+** mls_lane_0_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** mls z0\.d, z2\.d, \1\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s64_tied3, svint64_t,
+ z0 = svmls_lane_s64 (z1, z2, z0, 0),
+ z0 = svmls_lane (z1, z2, z0, 0))
+
+/*
+** mls_lane_0_s64_untied:
+** movprfx z0, z1
+** mls z0\.d, z2\.d, z3\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_s64_untied, svint64_t,
+ z0 = svmls_lane_s64 (z1, z2, z3, 0),
+ z0 = svmls_lane (z1, z2, z3, 0))
+
+/*
+** mls_lane_1_s64:
+** mls z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_1_s64, svint64_t,
+ z0 = svmls_lane_s64 (z0, z1, z2, 1),
+ z0 = svmls_lane (z0, z1, z2, 1))
+
+/*
+** mls_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** mls z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z15_s64, svint64_t, svint64_t, z15,
+ z0 = svmls_lane_s64 (z0, z1, z15, 1),
+ z0 = svmls_lane (z0, z1, z15, 1))
+
+/*
+** mls_lane_z16_s64:
+** mov (z[0-7])\.d, z16\.d
+** mls z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z16_s64, svint64_t, svint64_t, z16,
+ z0 = svmls_lane_s64 (z0, z1, z16, 1),
+ z0 = svmls_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mls_lane_0_u16_tied1:
+** mls z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u16_tied1, svuint16_t,
+ z0 = svmls_lane_u16 (z0, z1, z2, 0),
+ z0 = svmls_lane (z0, z1, z2, 0))
+
+/*
+** mls_lane_0_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mls z0\.h, \1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u16_tied2, svuint16_t,
+ z0 = svmls_lane_u16 (z1, z0, z2, 0),
+ z0 = svmls_lane (z1, z0, z2, 0))
+
+/*
+** mls_lane_0_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mls z0\.h, z2\.h, \1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u16_tied3, svuint16_t,
+ z0 = svmls_lane_u16 (z1, z2, z0, 0),
+ z0 = svmls_lane (z1, z2, z0, 0))
+
+/*
+** mls_lane_0_u16_untied:
+** movprfx z0, z1
+** mls z0\.h, z2\.h, z3\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u16_untied, svuint16_t,
+ z0 = svmls_lane_u16 (z1, z2, z3, 0),
+ z0 = svmls_lane (z1, z2, z3, 0))
+
+/*
+** mls_lane_1_u16:
+** mls z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_1_u16, svuint16_t,
+ z0 = svmls_lane_u16 (z0, z1, z2, 1),
+ z0 = svmls_lane (z0, z1, z2, 1))
+
+/*
+** mls_lane_2_u16:
+** mls z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_2_u16, svuint16_t,
+ z0 = svmls_lane_u16 (z0, z1, z2, 2),
+ z0 = svmls_lane (z0, z1, z2, 2))
+
+/*
+** mls_lane_3_u16:
+** mls z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_3_u16, svuint16_t,
+ z0 = svmls_lane_u16 (z0, z1, z2, 3),
+ z0 = svmls_lane (z0, z1, z2, 3))
+
+/*
+** mls_lane_4_u16:
+** mls z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_4_u16, svuint16_t,
+ z0 = svmls_lane_u16 (z0, z1, z2, 4),
+ z0 = svmls_lane (z0, z1, z2, 4))
+
+/*
+** mls_lane_5_u16:
+** mls z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_5_u16, svuint16_t,
+ z0 = svmls_lane_u16 (z0, z1, z2, 5),
+ z0 = svmls_lane (z0, z1, z2, 5))
+
+/*
+** mls_lane_6_u16:
+** mls z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_6_u16, svuint16_t,
+ z0 = svmls_lane_u16 (z0, z1, z2, 6),
+ z0 = svmls_lane (z0, z1, z2, 6))
+
+/*
+** mls_lane_7_u16:
+** mls z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_7_u16, svuint16_t,
+ z0 = svmls_lane_u16 (z0, z1, z2, 7),
+ z0 = svmls_lane (z0, z1, z2, 7))
+
+/*
+** mls_lane_z8_u16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mls z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z8_u16, svuint16_t, svuint16_t, z8,
+ z0 = svmls_lane_u16 (z0, z1, z8, 1),
+ z0 = svmls_lane (z0, z1, z8, 1))
+
+/*
+** mls_lane_z16_u16:
+** mov (z[0-7])\.d, z16\.d
+** mls z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z16_u16, svuint16_t, svuint16_t, z16,
+ z0 = svmls_lane_u16 (z0, z1, z16, 1),
+ z0 = svmls_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mls_lane_0_u32_tied1:
+** mls z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u32_tied1, svuint32_t,
+ z0 = svmls_lane_u32 (z0, z1, z2, 0),
+ z0 = svmls_lane (z0, z1, z2, 0))
+
+/*
+** mls_lane_0_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mls z0\.s, \1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u32_tied2, svuint32_t,
+ z0 = svmls_lane_u32 (z1, z0, z2, 0),
+ z0 = svmls_lane (z1, z0, z2, 0))
+
+/*
+** mls_lane_0_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** mls z0\.s, z2\.s, \1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u32_tied3, svuint32_t,
+ z0 = svmls_lane_u32 (z1, z2, z0, 0),
+ z0 = svmls_lane (z1, z2, z0, 0))
+
+/*
+** mls_lane_0_u32_untied:
+** movprfx z0, z1
+** mls z0\.s, z2\.s, z3\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u32_untied, svuint32_t,
+ z0 = svmls_lane_u32 (z1, z2, z3, 0),
+ z0 = svmls_lane (z1, z2, z3, 0))
+
+/*
+** mls_lane_1_u32:
+** mls z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_1_u32, svuint32_t,
+ z0 = svmls_lane_u32 (z0, z1, z2, 1),
+ z0 = svmls_lane (z0, z1, z2, 1))
+
+/*
+** mls_lane_2_u32:
+** mls z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_2_u32, svuint32_t,
+ z0 = svmls_lane_u32 (z0, z1, z2, 2),
+ z0 = svmls_lane (z0, z1, z2, 2))
+
+/*
+** mls_lane_3_u32:
+** mls z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_3_u32, svuint32_t,
+ z0 = svmls_lane_u32 (z0, z1, z2, 3),
+ z0 = svmls_lane (z0, z1, z2, 3))
+
+/*
+** mls_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mls z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z8_u32, svuint32_t, svuint32_t, z8,
+ z0 = svmls_lane_u32 (z0, z1, z8, 1),
+ z0 = svmls_lane (z0, z1, z8, 1))
+
+/*
+** mls_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** mls z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z16_u32, svuint32_t, svuint32_t, z16,
+ z0 = svmls_lane_u32 (z0, z1, z16, 1),
+ z0 = svmls_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mls_lane_0_u64_tied1:
+** mls z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u64_tied1, svuint64_t,
+ z0 = svmls_lane_u64 (z0, z1, z2, 0),
+ z0 = svmls_lane (z0, z1, z2, 0))
+
+/*
+** mls_lane_0_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** mls z0\.d, \1, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u64_tied2, svuint64_t,
+ z0 = svmls_lane_u64 (z1, z0, z2, 0),
+ z0 = svmls_lane (z1, z0, z2, 0))
+
+/*
+** mls_lane_0_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** mls z0\.d, z2\.d, \1\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u64_tied3, svuint64_t,
+ z0 = svmls_lane_u64 (z1, z2, z0, 0),
+ z0 = svmls_lane (z1, z2, z0, 0))
+
+/*
+** mls_lane_0_u64_untied:
+** movprfx z0, z1
+** mls z0\.d, z2\.d, z3\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_0_u64_untied, svuint64_t,
+ z0 = svmls_lane_u64 (z1, z2, z3, 0),
+ z0 = svmls_lane (z1, z2, z3, 0))
+
+/*
+** mls_lane_1_u64:
+** mls z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mls_lane_1_u64, svuint64_t,
+ z0 = svmls_lane_u64 (z0, z1, z2, 1),
+ z0 = svmls_lane (z0, z1, z2, 1))
+
+/*
+** mls_lane_z15_u64:
+** str d15, \[sp, -16\]!
+** mls z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z15_u64, svuint64_t, svuint64_t, z15,
+ z0 = svmls_lane_u64 (z0, z1, z15, 1),
+ z0 = svmls_lane (z0, z1, z15, 1))
+
+/*
+** mls_lane_z16_u64:
+** mov (z[0-7])\.d, z16\.d
+** mls z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mls_lane_z16_u64, svuint64_t, svuint64_t, z16,
+ z0 = svmls_lane_u64 (z0, z1, z16, 1),
+ z0 = svmls_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_f32_tied1:
+** fmlslb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslb_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlslb_f32 (z0, z4, z5),
+ z0 = svmlslb (z0, z4, z5))
+
+/*
+** mlslb_f32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlslb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_f32_tied2, svfloat32_t, svfloat16_t,
+ z0_res = svmlslb_f32 (z4, z0, z1),
+ z0_res = svmlslb (z4, z0, z1))
+
+/*
+** mlslb_f32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlslb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_f32_tied3, svfloat32_t, svfloat16_t,
+ z0_res = svmlslb_f32 (z4, z1, z0),
+ z0_res = svmlslb (z4, z1, z0))
+
+/*
+** mlslb_f32_untied:
+** movprfx z0, z1
+** fmlslb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslb_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlslb_f32 (z1, z4, z5),
+ z0 = svmlslb (z1, z4, z5))
+
+/*
+** mlslb_h7_f32_tied1:
+** mov (z[0-9]+\.h), h7
+** fmlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZD (mlslb_h7_f32_tied1, svfloat32_t, svfloat16_t, float16_t,
+ z0 = svmlslb_n_f32 (z0, z4, d7),
+ z0 = svmlslb (z0, z4, d7))
+
+/*
+** mlslb_h7_f32_untied:
+** mov (z[0-9]+\.h), h7
+** movprfx z0, z1
+** fmlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZD (mlslb_h7_f32_untied, svfloat32_t, svfloat16_t, float16_t,
+ z0 = svmlslb_n_f32 (z1, z4, d7),
+ z0 = svmlslb (z1, z4, d7))
+
+/*
+** mlslb_2_f32_tied1:
+** fmov (z[0-9]+\.h), #2\.0(?:e\+0)?
+** fmlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_2_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlslb_n_f32 (z0, z4, 2),
+ z0 = svmlslb (z0, z4, 2))
+
+/*
+** mlslb_2_f32_untied:
+** fmov (z[0-9]+\.h), #2\.0(?:e\+0)?
+** movprfx z0, z1
+** fmlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_2_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlslb_n_f32 (z1, z4, 2),
+ z0 = svmlslb (z1, z4, 2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_lane_0_f32_tied1:
+** fmlslb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlslb_lane_f32 (z0, z4, z5, 0),
+ z0 = svmlslb_lane (z0, z4, z5, 0))
+
+/*
+** mlslb_lane_0_f32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlslb z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_f32_tied2, svfloat32_t, svfloat16_t,
+ z0_res = svmlslb_lane_f32 (z4, z0, z1, 0),
+ z0_res = svmlslb_lane (z4, z0, z1, 0))
+
+/*
+** mlslb_lane_0_f32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlslb z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_f32_tied3, svfloat32_t, svfloat16_t,
+ z0_res = svmlslb_lane_f32 (z4, z1, z0, 0),
+ z0_res = svmlslb_lane (z4, z1, z0, 0))
+
+/*
+** mlslb_lane_0_f32_untied:
+** movprfx z0, z1
+** fmlslb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlslb_lane_f32 (z1, z4, z5, 0),
+ z0 = svmlslb_lane (z1, z4, z5, 0))
+
+/*
+** mlslb_lane_1_f32:
+** fmlslb z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_1_f32, svfloat32_t, svfloat16_t,
+ z0 = svmlslb_lane_f32 (z0, z4, z5, 1),
+ z0 = svmlslb_lane (z0, z4, z5, 1))
+
+/*
+** mlslb_lane_z8_f32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** fmlslb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z8_f32, svfloat32_t, svfloat16_t, z8,
+ z0 = svmlslb_lane_f32 (z0, z1, z8, 1),
+ z0 = svmlslb_lane (z0, z1, z8, 1))
+
+/*
+** mlslb_lane_z16_f32:
+** mov (z[0-7])\.d, z16\.d
+** fmlslb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z16_f32, svfloat32_t, svfloat16_t, z16,
+ z0 = svmlslb_lane_f32 (z0, z1, z16, 1),
+ z0 = svmlslb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_lane_0_s32_tied1:
+** smlslb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlslb_lane_s32 (z0, z4, z5, 0),
+ z0 = svmlslb_lane (z0, z4, z5, 0))
+
+/*
+** mlslb_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmlslb_lane_s32 (z4, z0, z1, 0),
+ z0_res = svmlslb_lane (z4, z0, z1, 0))
+
+/*
+** mlslb_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_s32_tied3, svint32_t, svint16_t,
+ z0_res = svmlslb_lane_s32 (z4, z1, z0, 0),
+ z0_res = svmlslb_lane (z4, z1, z0, 0))
+
+/*
+** mlslb_lane_0_s32_untied:
+** movprfx z0, z1
+** smlslb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_s32_untied, svint32_t, svint16_t,
+ z0 = svmlslb_lane_s32 (z1, z4, z5, 0),
+ z0 = svmlslb_lane (z1, z4, z5, 0))
+
+/*
+** mlslb_lane_1_s32:
+** smlslb z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_1_s32, svint32_t, svint16_t,
+ z0 = svmlslb_lane_s32 (z0, z4, z5, 1),
+ z0 = svmlslb_lane (z0, z4, z5, 1))
+
+/*
+** mlslb_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** smlslb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svmlslb_lane_s32 (z0, z1, z8, 1),
+ z0 = svmlslb_lane (z0, z1, z8, 1))
+
+/*
+** mlslb_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** smlslb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svmlslb_lane_s32 (z0, z1, z16, 1),
+ z0 = svmlslb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_lane_0_s64_tied1:
+** smlslb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlslb_lane_s64 (z0, z4, z5, 0),
+ z0 = svmlslb_lane (z0, z4, z5, 0))
+
+/*
+** mlslb_lane_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmlslb_lane_s64 (z4, z0, z1, 0),
+ z0_res = svmlslb_lane (z4, z0, z1, 0))
+
+/*
+** mlslb_lane_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_s64_tied3, svint64_t, svint32_t,
+ z0_res = svmlslb_lane_s64 (z4, z1, z0, 0),
+ z0_res = svmlslb_lane (z4, z1, z0, 0))
+
+/*
+** mlslb_lane_0_s64_untied:
+** movprfx z0, z1
+** smlslb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_s64_untied, svint64_t, svint32_t,
+ z0 = svmlslb_lane_s64 (z1, z4, z5, 0),
+ z0 = svmlslb_lane (z1, z4, z5, 0))
+
+/*
+** mlslb_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** smlslb z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svmlslb_lane_s64 (z0, z1, z15, 1),
+ z0 = svmlslb_lane (z0, z1, z15, 1))
+
+/*
+** mlslb_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** smlslb z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svmlslb_lane_s64 (z0, z1, z16, 1),
+ z0 = svmlslb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_lane_0_u32_tied1:
+** umlslb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlslb_lane_u32 (z0, z4, z5, 0),
+ z0 = svmlslb_lane (z0, z4, z5, 0))
+
+/*
+** mlslb_lane_0_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmlslb_lane_u32 (z4, z0, z1, 0),
+ z0_res = svmlslb_lane (z4, z0, z1, 0))
+
+/*
+** mlslb_lane_0_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svmlslb_lane_u32 (z4, z1, z0, 0),
+ z0_res = svmlslb_lane (z4, z1, z0, 0))
+
+/*
+** mlslb_lane_0_u32_untied:
+** movprfx z0, z1
+** umlslb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlslb_lane_u32 (z1, z4, z5, 0),
+ z0 = svmlslb_lane (z1, z4, z5, 0))
+
+/*
+** mlslb_lane_1_u32:
+** umlslb z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_1_u32, svuint32_t, svuint16_t,
+ z0 = svmlslb_lane_u32 (z0, z4, z5, 1),
+ z0 = svmlslb_lane (z0, z4, z5, 1))
+
+/*
+** mlslb_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** umlslb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z8_u32, svuint32_t, svuint16_t, z8,
+ z0 = svmlslb_lane_u32 (z0, z1, z8, 1),
+ z0 = svmlslb_lane (z0, z1, z8, 1))
+
+/*
+** mlslb_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** umlslb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z16_u32, svuint32_t, svuint16_t, z16,
+ z0 = svmlslb_lane_u32 (z0, z1, z16, 1),
+ z0 = svmlslb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_lane_0_u64_tied1:
+** umlslb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlslb_lane_u64 (z0, z4, z5, 0),
+ z0 = svmlslb_lane (z0, z4, z5, 0))
+
+/*
+** mlslb_lane_0_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmlslb_lane_u64 (z4, z0, z1, 0),
+ z0_res = svmlslb_lane (z4, z0, z1, 0))
+
+/*
+** mlslb_lane_0_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_lane_0_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svmlslb_lane_u64 (z4, z1, z0, 0),
+ z0_res = svmlslb_lane (z4, z1, z0, 0))
+
+/*
+** mlslb_lane_0_u64_untied:
+** movprfx z0, z1
+** umlslb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslb_lane_0_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlslb_lane_u64 (z1, z4, z5, 0),
+ z0 = svmlslb_lane (z1, z4, z5, 0))
+
+/*
+** mlslb_lane_z15_u64:
+** str d15, \[sp, -16\]!
+** umlslb z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z15_u64, svuint64_t, svuint32_t, z15,
+ z0 = svmlslb_lane_u64 (z0, z1, z15, 1),
+ z0 = svmlslb_lane (z0, z1, z15, 1))
+
+/*
+** mlslb_lane_z16_u64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** umlslb z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslb_lane_z16_u64, svuint64_t, svuint32_t, z16,
+ z0 = svmlslb_lane_u64 (z0, z1, z16, 1),
+ z0 = svmlslb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_s16_tied1:
+** smlslb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlslb_s16_tied1, svint16_t, svint8_t,
+ z0 = svmlslb_s16 (z0, z4, z5),
+ z0 = svmlslb (z0, z4, z5))
+
+/*
+** mlslb_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svmlslb_s16 (z4, z0, z1),
+ z0_res = svmlslb (z4, z0, z1))
+
+/*
+** mlslb_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_s16_tied3, svint16_t, svint8_t,
+ z0_res = svmlslb_s16 (z4, z1, z0),
+ z0_res = svmlslb (z4, z1, z0))
+
+/*
+** mlslb_s16_untied:
+** movprfx z0, z1
+** smlslb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlslb_s16_untied, svint16_t, svint8_t,
+ z0 = svmlslb_s16 (z1, z4, z5),
+ z0 = svmlslb (z1, z4, z5))
+
+/*
+** mlslb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** smlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svmlslb_n_s16 (z0, z4, x0),
+ z0 = svmlslb (z0, z4, x0))
+
+/*
+** mlslb_w0_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** smlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svmlslb_n_s16 (z1, z4, x0),
+ z0 = svmlslb (z1, z4, x0))
+
+/*
+** mlslb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** smlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svmlslb_n_s16 (z0, z4, 11),
+ z0 = svmlslb (z0, z4, 11))
+
+/*
+** mlslb_11_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** smlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_s16_untied, svint16_t, svint8_t,
+ z0 = svmlslb_n_s16 (z1, z4, 11),
+ z0 = svmlslb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_s32_tied1:
+** smlslb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslb_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlslb_s32 (z0, z4, z5),
+ z0 = svmlslb (z0, z4, z5))
+
+/*
+** mlslb_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmlslb_s32 (z4, z0, z1),
+ z0_res = svmlslb (z4, z0, z1))
+
+/*
+** mlslb_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_s32_tied3, svint32_t, svint16_t,
+ z0_res = svmlslb_s32 (z4, z1, z0),
+ z0_res = svmlslb (z4, z1, z0))
+
+/*
+** mlslb_s32_untied:
+** movprfx z0, z1
+** smlslb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslb_s32_untied, svint32_t, svint16_t,
+ z0 = svmlslb_s32 (z1, z4, z5),
+ z0 = svmlslb (z1, z4, z5))
+
+/*
+** mlslb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** smlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svmlslb_n_s32 (z0, z4, x0),
+ z0 = svmlslb (z0, z4, x0))
+
+/*
+** mlslb_w0_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** smlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svmlslb_n_s32 (z1, z4, x0),
+ z0 = svmlslb (z1, z4, x0))
+
+/*
+** mlslb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** smlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlslb_n_s32 (z0, z4, 11),
+ z0 = svmlslb (z0, z4, 11))
+
+/*
+** mlslb_11_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** smlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_s32_untied, svint32_t, svint16_t,
+ z0 = svmlslb_n_s32 (z1, z4, 11),
+ z0 = svmlslb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_s64_tied1:
+** smlslb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlslb_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlslb_s64 (z0, z4, z5),
+ z0 = svmlslb (z0, z4, z5))
+
+/*
+** mlslb_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmlslb_s64 (z4, z0, z1),
+ z0_res = svmlslb (z4, z0, z1))
+
+/*
+** mlslb_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslb z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_s64_tied3, svint64_t, svint32_t,
+ z0_res = svmlslb_s64 (z4, z1, z0),
+ z0_res = svmlslb (z4, z1, z0))
+
+/*
+** mlslb_s64_untied:
+** movprfx z0, z1
+** smlslb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlslb_s64_untied, svint64_t, svint32_t,
+ z0 = svmlslb_s64 (z1, z4, z5),
+ z0 = svmlslb (z1, z4, z5))
+
+/*
+** mlslb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** smlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svmlslb_n_s64 (z0, z4, x0),
+ z0 = svmlslb (z0, z4, x0))
+
+/*
+** mlslb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** smlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svmlslb_n_s64 (z1, z4, x0),
+ z0 = svmlslb (z1, z4, x0))
+
+/*
+** mlslb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** smlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlslb_n_s64 (z0, z4, 11),
+ z0 = svmlslb (z0, z4, 11))
+
+/*
+** mlslb_11_s64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** smlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_s64_untied, svint64_t, svint32_t,
+ z0 = svmlslb_n_s64 (z1, z4, 11),
+ z0 = svmlslb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_u16_tied1:
+** umlslb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlslb_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svmlslb_u16 (z0, z4, z5),
+ z0 = svmlslb (z0, z4, z5))
+
+/*
+** mlslb_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svmlslb_u16 (z4, z0, z1),
+ z0_res = svmlslb (z4, z0, z1))
+
+/*
+** mlslb_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_u16_tied3, svuint16_t, svuint8_t,
+ z0_res = svmlslb_u16 (z4, z1, z0),
+ z0_res = svmlslb (z4, z1, z0))
+
+/*
+** mlslb_u16_untied:
+** movprfx z0, z1
+** umlslb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlslb_u16_untied, svuint16_t, svuint8_t,
+ z0 = svmlslb_u16 (z1, z4, z5),
+ z0 = svmlslb (z1, z4, z5))
+
+/*
+** mlslb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** umlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0 = svmlslb_n_u16 (z0, z4, x0),
+ z0 = svmlslb (z0, z4, x0))
+
+/*
+** mlslb_w0_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** umlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0 = svmlslb_n_u16 (z1, z4, x0),
+ z0 = svmlslb (z1, z4, x0))
+
+/*
+** mlslb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** umlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svmlslb_n_u16 (z0, z4, 11),
+ z0 = svmlslb (z0, z4, 11))
+
+/*
+** mlslb_11_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** umlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_u16_untied, svuint16_t, svuint8_t,
+ z0 = svmlslb_n_u16 (z1, z4, 11),
+ z0 = svmlslb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_u32_tied1:
+** umlslb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslb_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlslb_u32 (z0, z4, z5),
+ z0 = svmlslb (z0, z4, z5))
+
+/*
+** mlslb_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmlslb_u32 (z4, z0, z1),
+ z0_res = svmlslb (z4, z0, z1))
+
+/*
+** mlslb_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svmlslb_u32 (z4, z1, z0),
+ z0_res = svmlslb (z4, z1, z0))
+
+/*
+** mlslb_u32_untied:
+** movprfx z0, z1
+** umlslb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslb_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlslb_u32 (z1, z4, z5),
+ z0 = svmlslb (z1, z4, z5))
+
+/*
+** mlslb_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** umlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0 = svmlslb_n_u32 (z0, z4, x0),
+ z0 = svmlslb (z0, z4, x0))
+
+/*
+** mlslb_w0_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** umlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0 = svmlslb_n_u32 (z1, z4, x0),
+ z0 = svmlslb (z1, z4, x0))
+
+/*
+** mlslb_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** umlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlslb_n_u32 (z0, z4, 11),
+ z0 = svmlslb (z0, z4, 11))
+
+/*
+** mlslb_11_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** umlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlslb_n_u32 (z1, z4, 11),
+ z0 = svmlslb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslb_u64_tied1:
+** umlslb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlslb_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlslb_u64 (z0, z4, z5),
+ z0 = svmlslb (z0, z4, z5))
+
+/*
+** mlslb_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmlslb_u64 (z4, z0, z1),
+ z0_res = svmlslb (z4, z0, z1))
+
+/*
+** mlslb_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslb z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlslb_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svmlslb_u64 (z4, z1, z0),
+ z0_res = svmlslb (z4, z1, z0))
+
+/*
+** mlslb_u64_untied:
+** movprfx z0, z1
+** umlslb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlslb_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlslb_u64 (z1, z4, z5),
+ z0 = svmlslb (z1, z4, z5))
+
+/*
+** mlslb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** umlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0 = svmlslb_n_u64 (z0, z4, x0),
+ z0 = svmlslb (z0, z4, x0))
+
+/*
+** mlslb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** umlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslb_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0 = svmlslb_n_u64 (z1, z4, x0),
+ z0 = svmlslb (z1, z4, x0))
+
+/*
+** mlslb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** umlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlslb_n_u64 (z0, z4, 11),
+ z0 = svmlslb (z0, z4, 11))
+
+/*
+** mlslb_11_u64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** umlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlslb_11_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlslb_n_u64 (z1, z4, 11),
+ z0 = svmlslb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_f32_tied1:
+** fmlslt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslt_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlslt_f32 (z0, z4, z5),
+ z0 = svmlslt (z0, z4, z5))
+
+/*
+** mlslt_f32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlslt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_f32_tied2, svfloat32_t, svfloat16_t,
+ z0_res = svmlslt_f32 (z4, z0, z1),
+ z0_res = svmlslt (z4, z0, z1))
+
+/*
+** mlslt_f32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlslt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_f32_tied3, svfloat32_t, svfloat16_t,
+ z0_res = svmlslt_f32 (z4, z1, z0),
+ z0_res = svmlslt (z4, z1, z0))
+
+/*
+** mlslt_f32_untied:
+** movprfx z0, z1
+** fmlslt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslt_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlslt_f32 (z1, z4, z5),
+ z0 = svmlslt (z1, z4, z5))
+
+/*
+** mlslt_h7_f32_tied1:
+** mov (z[0-9]+\.h), h7
+** fmlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZD (mlslt_h7_f32_tied1, svfloat32_t, svfloat16_t, float16_t,
+ z0 = svmlslt_n_f32 (z0, z4, d7),
+ z0 = svmlslt (z0, z4, d7))
+
+/*
+** mlslt_h7_f32_untied:
+** mov (z[0-9]+\.h), h7
+** movprfx z0, z1
+** fmlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZD (mlslt_h7_f32_untied, svfloat32_t, svfloat16_t, float16_t,
+ z0 = svmlslt_n_f32 (z1, z4, d7),
+ z0 = svmlslt (z1, z4, d7))
+
+/*
+** mlslt_2_f32_tied1:
+** fmov (z[0-9]+\.h), #2\.0(?:e\+0)?
+** fmlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_2_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlslt_n_f32 (z0, z4, 2),
+ z0 = svmlslt (z0, z4, 2))
+
+/*
+** mlslt_2_f32_untied:
+** fmov (z[0-9]+\.h), #2\.0(?:e\+0)?
+** movprfx z0, z1
+** fmlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_2_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlslt_n_f32 (z1, z4, 2),
+ z0 = svmlslt (z1, z4, 2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_lane_0_f32_tied1:
+** fmlslt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_f32_tied1, svfloat32_t, svfloat16_t,
+ z0 = svmlslt_lane_f32 (z0, z4, z5, 0),
+ z0 = svmlslt_lane (z0, z4, z5, 0))
+
+/*
+** mlslt_lane_0_f32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlslt z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_f32_tied2, svfloat32_t, svfloat16_t,
+ z0_res = svmlslt_lane_f32 (z4, z0, z1, 0),
+ z0_res = svmlslt_lane (z4, z0, z1, 0))
+
+/*
+** mlslt_lane_0_f32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** fmlslt z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_f32_tied3, svfloat32_t, svfloat16_t,
+ z0_res = svmlslt_lane_f32 (z4, z1, z0, 0),
+ z0_res = svmlslt_lane (z4, z1, z0, 0))
+
+/*
+** mlslt_lane_0_f32_untied:
+** movprfx z0, z1
+** fmlslt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_f32_untied, svfloat32_t, svfloat16_t,
+ z0 = svmlslt_lane_f32 (z1, z4, z5, 0),
+ z0 = svmlslt_lane (z1, z4, z5, 0))
+
+/*
+** mlslt_lane_1_f32:
+** fmlslt z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_1_f32, svfloat32_t, svfloat16_t,
+ z0 = svmlslt_lane_f32 (z0, z4, z5, 1),
+ z0 = svmlslt_lane (z0, z4, z5, 1))
+
+/*
+** mlslt_lane_z8_f32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** fmlslt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z8_f32, svfloat32_t, svfloat16_t, z8,
+ z0 = svmlslt_lane_f32 (z0, z1, z8, 1),
+ z0 = svmlslt_lane (z0, z1, z8, 1))
+
+/*
+** mlslt_lane_z16_f32:
+** mov (z[0-7])\.d, z16\.d
+** fmlslt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z16_f32, svfloat32_t, svfloat16_t, z16,
+ z0 = svmlslt_lane_f32 (z0, z1, z16, 1),
+ z0 = svmlslt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_lane_0_s32_tied1:
+** smlslt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlslt_lane_s32 (z0, z4, z5, 0),
+ z0 = svmlslt_lane (z0, z4, z5, 0))
+
+/*
+** mlslt_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmlslt_lane_s32 (z4, z0, z1, 0),
+ z0_res = svmlslt_lane (z4, z0, z1, 0))
+
+/*
+** mlslt_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_s32_tied3, svint32_t, svint16_t,
+ z0_res = svmlslt_lane_s32 (z4, z1, z0, 0),
+ z0_res = svmlslt_lane (z4, z1, z0, 0))
+
+/*
+** mlslt_lane_0_s32_untied:
+** movprfx z0, z1
+** smlslt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_s32_untied, svint32_t, svint16_t,
+ z0 = svmlslt_lane_s32 (z1, z4, z5, 0),
+ z0 = svmlslt_lane (z1, z4, z5, 0))
+
+/*
+** mlslt_lane_1_s32:
+** smlslt z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_1_s32, svint32_t, svint16_t,
+ z0 = svmlslt_lane_s32 (z0, z4, z5, 1),
+ z0 = svmlslt_lane (z0, z4, z5, 1))
+
+/*
+** mlslt_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** smlslt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svmlslt_lane_s32 (z0, z1, z8, 1),
+ z0 = svmlslt_lane (z0, z1, z8, 1))
+
+/*
+** mlslt_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** smlslt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svmlslt_lane_s32 (z0, z1, z16, 1),
+ z0 = svmlslt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_lane_0_s64_tied1:
+** smlslt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlslt_lane_s64 (z0, z4, z5, 0),
+ z0 = svmlslt_lane (z0, z4, z5, 0))
+
+/*
+** mlslt_lane_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmlslt_lane_s64 (z4, z0, z1, 0),
+ z0_res = svmlslt_lane (z4, z0, z1, 0))
+
+/*
+** mlslt_lane_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_s64_tied3, svint64_t, svint32_t,
+ z0_res = svmlslt_lane_s64 (z4, z1, z0, 0),
+ z0_res = svmlslt_lane (z4, z1, z0, 0))
+
+/*
+** mlslt_lane_0_s64_untied:
+** movprfx z0, z1
+** smlslt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_s64_untied, svint64_t, svint32_t,
+ z0 = svmlslt_lane_s64 (z1, z4, z5, 0),
+ z0 = svmlslt_lane (z1, z4, z5, 0))
+
+/*
+** mlslt_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** smlslt z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svmlslt_lane_s64 (z0, z1, z15, 1),
+ z0 = svmlslt_lane (z0, z1, z15, 1))
+
+/*
+** mlslt_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** smlslt z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svmlslt_lane_s64 (z0, z1, z16, 1),
+ z0 = svmlslt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_lane_0_u32_tied1:
+** umlslt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlslt_lane_u32 (z0, z4, z5, 0),
+ z0 = svmlslt_lane (z0, z4, z5, 0))
+
+/*
+** mlslt_lane_0_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmlslt_lane_u32 (z4, z0, z1, 0),
+ z0_res = svmlslt_lane (z4, z0, z1, 0))
+
+/*
+** mlslt_lane_0_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svmlslt_lane_u32 (z4, z1, z0, 0),
+ z0_res = svmlslt_lane (z4, z1, z0, 0))
+
+/*
+** mlslt_lane_0_u32_untied:
+** movprfx z0, z1
+** umlslt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlslt_lane_u32 (z1, z4, z5, 0),
+ z0 = svmlslt_lane (z1, z4, z5, 0))
+
+/*
+** mlslt_lane_1_u32:
+** umlslt z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_1_u32, svuint32_t, svuint16_t,
+ z0 = svmlslt_lane_u32 (z0, z4, z5, 1),
+ z0 = svmlslt_lane (z0, z4, z5, 1))
+
+/*
+** mlslt_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** umlslt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z8_u32, svuint32_t, svuint16_t, z8,
+ z0 = svmlslt_lane_u32 (z0, z1, z8, 1),
+ z0 = svmlslt_lane (z0, z1, z8, 1))
+
+/*
+** mlslt_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** umlslt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z16_u32, svuint32_t, svuint16_t, z16,
+ z0 = svmlslt_lane_u32 (z0, z1, z16, 1),
+ z0 = svmlslt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_lane_0_u64_tied1:
+** umlslt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlslt_lane_u64 (z0, z4, z5, 0),
+ z0 = svmlslt_lane (z0, z4, z5, 0))
+
+/*
+** mlslt_lane_0_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmlslt_lane_u64 (z4, z0, z1, 0),
+ z0_res = svmlslt_lane (z4, z0, z1, 0))
+
+/*
+** mlslt_lane_0_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_lane_0_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svmlslt_lane_u64 (z4, z1, z0, 0),
+ z0_res = svmlslt_lane (z4, z1, z0, 0))
+
+/*
+** mlslt_lane_0_u64_untied:
+** movprfx z0, z1
+** umlslt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (mlslt_lane_0_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlslt_lane_u64 (z1, z4, z5, 0),
+ z0 = svmlslt_lane (z1, z4, z5, 0))
+
+/*
+** mlslt_lane_z15_u64:
+** str d15, \[sp, -16\]!
+** umlslt z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z15_u64, svuint64_t, svuint32_t, z15,
+ z0 = svmlslt_lane_u64 (z0, z1, z15, 1),
+ z0 = svmlslt_lane (z0, z1, z15, 1))
+
+/*
+** mlslt_lane_z16_u64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** umlslt z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mlslt_lane_z16_u64, svuint64_t, svuint32_t, z16,
+ z0 = svmlslt_lane_u64 (z0, z1, z16, 1),
+ z0 = svmlslt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_s16_tied1:
+** smlslt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlslt_s16_tied1, svint16_t, svint8_t,
+ z0 = svmlslt_s16 (z0, z4, z5),
+ z0 = svmlslt (z0, z4, z5))
+
+/*
+** mlslt_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svmlslt_s16 (z4, z0, z1),
+ z0_res = svmlslt (z4, z0, z1))
+
+/*
+** mlslt_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_s16_tied3, svint16_t, svint8_t,
+ z0_res = svmlslt_s16 (z4, z1, z0),
+ z0_res = svmlslt (z4, z1, z0))
+
+/*
+** mlslt_s16_untied:
+** movprfx z0, z1
+** smlslt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlslt_s16_untied, svint16_t, svint8_t,
+ z0 = svmlslt_s16 (z1, z4, z5),
+ z0 = svmlslt (z1, z4, z5))
+
+/*
+** mlslt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** smlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svmlslt_n_s16 (z0, z4, x0),
+ z0 = svmlslt (z0, z4, x0))
+
+/*
+** mlslt_w0_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** smlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svmlslt_n_s16 (z1, z4, x0),
+ z0 = svmlslt (z1, z4, x0))
+
+/*
+** mlslt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** smlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svmlslt_n_s16 (z0, z4, 11),
+ z0 = svmlslt (z0, z4, 11))
+
+/*
+** mlslt_11_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** smlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_s16_untied, svint16_t, svint8_t,
+ z0 = svmlslt_n_s16 (z1, z4, 11),
+ z0 = svmlslt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_s32_tied1:
+** smlslt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslt_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlslt_s32 (z0, z4, z5),
+ z0 = svmlslt (z0, z4, z5))
+
+/*
+** mlslt_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmlslt_s32 (z4, z0, z1),
+ z0_res = svmlslt (z4, z0, z1))
+
+/*
+** mlslt_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_s32_tied3, svint32_t, svint16_t,
+ z0_res = svmlslt_s32 (z4, z1, z0),
+ z0_res = svmlslt (z4, z1, z0))
+
+/*
+** mlslt_s32_untied:
+** movprfx z0, z1
+** smlslt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslt_s32_untied, svint32_t, svint16_t,
+ z0 = svmlslt_s32 (z1, z4, z5),
+ z0 = svmlslt (z1, z4, z5))
+
+/*
+** mlslt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** smlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svmlslt_n_s32 (z0, z4, x0),
+ z0 = svmlslt (z0, z4, x0))
+
+/*
+** mlslt_w0_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** smlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svmlslt_n_s32 (z1, z4, x0),
+ z0 = svmlslt (z1, z4, x0))
+
+/*
+** mlslt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** smlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svmlslt_n_s32 (z0, z4, 11),
+ z0 = svmlslt (z0, z4, 11))
+
+/*
+** mlslt_11_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** smlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_s32_untied, svint32_t, svint16_t,
+ z0 = svmlslt_n_s32 (z1, z4, 11),
+ z0 = svmlslt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_s64_tied1:
+** smlslt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlslt_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlslt_s64 (z0, z4, z5),
+ z0 = svmlslt (z0, z4, z5))
+
+/*
+** mlslt_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmlslt_s64 (z4, z0, z1),
+ z0_res = svmlslt (z4, z0, z1))
+
+/*
+** mlslt_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** smlslt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_s64_tied3, svint64_t, svint32_t,
+ z0_res = svmlslt_s64 (z4, z1, z0),
+ z0_res = svmlslt (z4, z1, z0))
+
+/*
+** mlslt_s64_untied:
+** movprfx z0, z1
+** smlslt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlslt_s64_untied, svint64_t, svint32_t,
+ z0 = svmlslt_s64 (z1, z4, z5),
+ z0 = svmlslt (z1, z4, z5))
+
+/*
+** mlslt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** smlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svmlslt_n_s64 (z0, z4, x0),
+ z0 = svmlslt (z0, z4, x0))
+
+/*
+** mlslt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** smlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svmlslt_n_s64 (z1, z4, x0),
+ z0 = svmlslt (z1, z4, x0))
+
+/*
+** mlslt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** smlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svmlslt_n_s64 (z0, z4, 11),
+ z0 = svmlslt (z0, z4, 11))
+
+/*
+** mlslt_11_s64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** smlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_s64_untied, svint64_t, svint32_t,
+ z0 = svmlslt_n_s64 (z1, z4, 11),
+ z0 = svmlslt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_u16_tied1:
+** umlslt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlslt_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svmlslt_u16 (z0, z4, z5),
+ z0 = svmlslt (z0, z4, z5))
+
+/*
+** mlslt_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svmlslt_u16 (z4, z0, z1),
+ z0_res = svmlslt (z4, z0, z1))
+
+/*
+** mlslt_u16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_u16_tied3, svuint16_t, svuint8_t,
+ z0_res = svmlslt_u16 (z4, z1, z0),
+ z0_res = svmlslt (z4, z1, z0))
+
+/*
+** mlslt_u16_untied:
+** movprfx z0, z1
+** umlslt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (mlslt_u16_untied, svuint16_t, svuint8_t,
+ z0 = svmlslt_u16 (z1, z4, z5),
+ z0 = svmlslt (z1, z4, z5))
+
+/*
+** mlslt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** umlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0 = svmlslt_n_u16 (z0, z4, x0),
+ z0 = svmlslt (z0, z4, x0))
+
+/*
+** mlslt_w0_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** umlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0 = svmlslt_n_u16 (z1, z4, x0),
+ z0 = svmlslt (z1, z4, x0))
+
+/*
+** mlslt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** umlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svmlslt_n_u16 (z0, z4, 11),
+ z0 = svmlslt (z0, z4, 11))
+
+/*
+** mlslt_11_u16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** umlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_u16_untied, svuint16_t, svuint8_t,
+ z0 = svmlslt_n_u16 (z1, z4, 11),
+ z0 = svmlslt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_u32_tied1:
+** umlslt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslt_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlslt_u32 (z0, z4, z5),
+ z0 = svmlslt (z0, z4, z5))
+
+/*
+** mlslt_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmlslt_u32 (z4, z0, z1),
+ z0_res = svmlslt (z4, z0, z1))
+
+/*
+** mlslt_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_u32_tied3, svuint32_t, svuint16_t,
+ z0_res = svmlslt_u32 (z4, z1, z0),
+ z0_res = svmlslt (z4, z1, z0))
+
+/*
+** mlslt_u32_untied:
+** movprfx z0, z1
+** umlslt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (mlslt_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlslt_u32 (z1, z4, z5),
+ z0 = svmlslt (z1, z4, z5))
+
+/*
+** mlslt_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** umlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0 = svmlslt_n_u32 (z0, z4, x0),
+ z0 = svmlslt (z0, z4, x0))
+
+/*
+** mlslt_w0_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** umlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0 = svmlslt_n_u32 (z1, z4, x0),
+ z0 = svmlslt (z1, z4, x0))
+
+/*
+** mlslt_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** umlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svmlslt_n_u32 (z0, z4, 11),
+ z0 = svmlslt (z0, z4, 11))
+
+/*
+** mlslt_11_u32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** umlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_u32_untied, svuint32_t, svuint16_t,
+ z0 = svmlslt_n_u32 (z1, z4, 11),
+ z0 = svmlslt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mlslt_u64_tied1:
+** umlslt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlslt_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlslt_u64 (z0, z4, z5),
+ z0 = svmlslt (z0, z4, z5))
+
+/*
+** mlslt_u64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmlslt_u64 (z4, z0, z1),
+ z0_res = svmlslt (z4, z0, z1))
+
+/*
+** mlslt_u64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** umlslt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (mlslt_u64_tied3, svuint64_t, svuint32_t,
+ z0_res = svmlslt_u64 (z4, z1, z0),
+ z0_res = svmlslt (z4, z1, z0))
+
+/*
+** mlslt_u64_untied:
+** movprfx z0, z1
+** umlslt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (mlslt_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlslt_u64 (z1, z4, z5),
+ z0 = svmlslt (z1, z4, z5))
+
+/*
+** mlslt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** umlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0 = svmlslt_n_u64 (z0, z4, x0),
+ z0 = svmlslt (z0, z4, x0))
+
+/*
+** mlslt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** umlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (mlslt_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0 = svmlslt_n_u64 (z1, z4, x0),
+ z0 = svmlslt (z1, z4, x0))
+
+/*
+** mlslt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** umlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svmlslt_n_u64 (z0, z4, 11),
+ z0 = svmlslt (z0, z4, 11))
+
+/*
+** mlslt_11_u64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** umlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (mlslt_11_u64_untied, svuint64_t, svuint32_t,
+ z0 = svmlslt_n_u64 (z1, z4, 11),
+ z0 = svmlslt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlb_s16_tied1:
+** sshllb z0\.h, z0\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_s16_tied1, svint16_t, svint8_t,
+ z0_res = svmovlb_s16 (z0),
+ z0_res = svmovlb (z0))
+
+/*
+** movlb_s16_untied:
+** sshllb z0\.h, z1\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_s16_untied, svint16_t, svint8_t,
+ z0_res = svmovlb_s16 (z1),
+ z0_res = svmovlb (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlb_s32_tied1:
+** sshllb z0\.s, z0\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_s32_tied1, svint32_t, svint16_t,
+ z0_res = svmovlb_s32 (z0),
+ z0_res = svmovlb (z0))
+
+/*
+** movlb_s32_untied:
+** sshllb z0\.s, z1\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_s32_untied, svint32_t, svint16_t,
+ z0_res = svmovlb_s32 (z1),
+ z0_res = svmovlb (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlb_s64_tied1:
+** sshllb z0\.d, z0\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_s64_tied1, svint64_t, svint32_t,
+ z0_res = svmovlb_s64 (z0),
+ z0_res = svmovlb (z0))
+
+/*
+** movlb_s64_untied:
+** sshllb z0\.d, z1\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_s64_untied, svint64_t, svint32_t,
+ z0_res = svmovlb_s64 (z1),
+ z0_res = svmovlb (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlb_u16_tied1:
+** ushllb z0\.h, z0\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svmovlb_u16 (z0),
+ z0_res = svmovlb (z0))
+
+/*
+** movlb_u16_untied:
+** ushllb z0\.h, z1\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svmovlb_u16 (z1),
+ z0_res = svmovlb (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlb_u32_tied1:
+** ushllb z0\.s, z0\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svmovlb_u32 (z0),
+ z0_res = svmovlb (z0))
+
+/*
+** movlb_u32_untied:
+** ushllb z0\.s, z1\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svmovlb_u32 (z1),
+ z0_res = svmovlb (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlb_u64_tied1:
+** ushllb z0\.d, z0\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svmovlb_u64 (z0),
+ z0_res = svmovlb (z0))
+
+/*
+** movlb_u64_untied:
+** ushllb z0\.d, z1\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlb_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svmovlb_u64 (z1),
+ z0_res = svmovlb (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlt_s16_tied1:
+** sshllt z0\.h, z0\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_s16_tied1, svint16_t, svint8_t,
+ z0_res = svmovlt_s16 (z0),
+ z0_res = svmovlt (z0))
+
+/*
+** movlt_s16_untied:
+** sshllt z0\.h, z1\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_s16_untied, svint16_t, svint8_t,
+ z0_res = svmovlt_s16 (z1),
+ z0_res = svmovlt (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlt_s32_tied1:
+** sshllt z0\.s, z0\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_s32_tied1, svint32_t, svint16_t,
+ z0_res = svmovlt_s32 (z0),
+ z0_res = svmovlt (z0))
+
+/*
+** movlt_s32_untied:
+** sshllt z0\.s, z1\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_s32_untied, svint32_t, svint16_t,
+ z0_res = svmovlt_s32 (z1),
+ z0_res = svmovlt (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlt_s64_tied1:
+** sshllt z0\.d, z0\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_s64_tied1, svint64_t, svint32_t,
+ z0_res = svmovlt_s64 (z0),
+ z0_res = svmovlt (z0))
+
+/*
+** movlt_s64_untied:
+** sshllt z0\.d, z1\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_s64_untied, svint64_t, svint32_t,
+ z0_res = svmovlt_s64 (z1),
+ z0_res = svmovlt (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlt_u16_tied1:
+** ushllt z0\.h, z0\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svmovlt_u16 (z0),
+ z0_res = svmovlt (z0))
+
+/*
+** movlt_u16_untied:
+** ushllt z0\.h, z1\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svmovlt_u16 (z1),
+ z0_res = svmovlt (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlt_u32_tied1:
+** ushllt z0\.s, z0\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svmovlt_u32 (z0),
+ z0_res = svmovlt (z0))
+
+/*
+** movlt_u32_untied:
+** ushllt z0\.s, z1\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svmovlt_u32 (z1),
+ z0_res = svmovlt (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** movlt_u64_tied1:
+** ushllt z0\.d, z0\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svmovlt_u64 (z0),
+ z0_res = svmovlt (z0))
+
+/*
+** movlt_u64_untied:
+** ushllt z0\.d, z1\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (movlt_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svmovlt_u64 (z1),
+ z0_res = svmovlt (z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mul_lane_0_s16_tied1:
+** mul z0\.h, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_s16_tied1, svint16_t,
+ z0 = svmul_lane_s16 (z0, z1, 0),
+ z0 = svmul_lane (z0, z1, 0))
+
+/*
+** mul_lane_0_s16_tied2:
+** mul z0\.h, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_s16_tied2, svint16_t,
+ z0 = svmul_lane_s16 (z1, z0, 0),
+ z0 = svmul_lane (z1, z0, 0))
+
+/*
+** mul_lane_0_s16_untied:
+** mul z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_s16_untied, svint16_t,
+ z0 = svmul_lane_s16 (z1, z2, 0),
+ z0 = svmul_lane (z1, z2, 0))
+
+/*
+** mul_lane_1_s16:
+** mul z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_1_s16, svint16_t,
+ z0 = svmul_lane_s16 (z1, z2, 1),
+ z0 = svmul_lane (z1, z2, 1))
+
+/*
+** mul_lane_2_s16:
+** mul z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_2_s16, svint16_t,
+ z0 = svmul_lane_s16 (z1, z2, 2),
+ z0 = svmul_lane (z1, z2, 2))
+
+/*
+** mul_lane_3_s16:
+** mul z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_3_s16, svint16_t,
+ z0 = svmul_lane_s16 (z1, z2, 3),
+ z0 = svmul_lane (z1, z2, 3))
+
+/*
+** mul_lane_4_s16:
+** mul z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_4_s16, svint16_t,
+ z0 = svmul_lane_s16 (z1, z2, 4),
+ z0 = svmul_lane (z1, z2, 4))
+
+/*
+** mul_lane_5_s16:
+** mul z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_5_s16, svint16_t,
+ z0 = svmul_lane_s16 (z1, z2, 5),
+ z0 = svmul_lane (z1, z2, 5))
+
+/*
+** mul_lane_6_s16:
+** mul z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_6_s16, svint16_t,
+ z0 = svmul_lane_s16 (z1, z2, 6),
+ z0 = svmul_lane (z1, z2, 6))
+
+/*
+** mul_lane_7_s16:
+** mul z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_7_s16, svint16_t,
+ z0 = svmul_lane_s16 (z1, z2, 7),
+ z0 = svmul_lane (z1, z2, 7))
+
+/*
+** mul_lane_z8_s16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mul z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z8_s16, svint16_t, svint16_t, z8,
+ z0 = svmul_lane_s16 (z1, z8, 1),
+ z0 = svmul_lane (z1, z8, 1))
+
+/*
+** mul_lane_z16_s16:
+** mov (z[0-7])\.d, z16\.d
+** mul z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z16_s16, svint16_t, svint16_t, z16,
+ z0 = svmul_lane_s16 (z1, z16, 1),
+ z0 = svmul_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mul_lane_0_s32_tied1:
+** mul z0\.s, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_s32_tied1, svint32_t,
+ z0 = svmul_lane_s32 (z0, z1, 0),
+ z0 = svmul_lane (z0, z1, 0))
+
+/*
+** mul_lane_0_s32_tied2:
+** mul z0\.s, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_s32_tied2, svint32_t,
+ z0 = svmul_lane_s32 (z1, z0, 0),
+ z0 = svmul_lane (z1, z0, 0))
+
+/*
+** mul_lane_0_s32_untied:
+** mul z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_s32_untied, svint32_t,
+ z0 = svmul_lane_s32 (z1, z2, 0),
+ z0 = svmul_lane (z1, z2, 0))
+
+/*
+** mul_lane_1_s32:
+** mul z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_1_s32, svint32_t,
+ z0 = svmul_lane_s32 (z1, z2, 1),
+ z0 = svmul_lane (z1, z2, 1))
+
+/*
+** mul_lane_2_s32:
+** mul z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_2_s32, svint32_t,
+ z0 = svmul_lane_s32 (z1, z2, 2),
+ z0 = svmul_lane (z1, z2, 2))
+
+/*
+** mul_lane_3_s32:
+** mul z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_3_s32, svint32_t,
+ z0 = svmul_lane_s32 (z1, z2, 3),
+ z0 = svmul_lane (z1, z2, 3))
+
+/*
+** mul_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mul z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z8_s32, svint32_t, svint32_t, z8,
+ z0 = svmul_lane_s32 (z1, z8, 1),
+ z0 = svmul_lane (z1, z8, 1))
+
+/*
+** mul_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** mul z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z16_s32, svint32_t, svint32_t, z16,
+ z0 = svmul_lane_s32 (z1, z16, 1),
+ z0 = svmul_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mul_lane_0_s64_tied1:
+** mul z0\.d, z0\.d, z1\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_s64_tied1, svint64_t,
+ z0 = svmul_lane_s64 (z0, z1, 0),
+ z0 = svmul_lane (z0, z1, 0))
+
+/*
+** mul_lane_0_s64_tied2:
+** mul z0\.d, z1\.d, z0\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_s64_tied2, svint64_t,
+ z0 = svmul_lane_s64 (z1, z0, 0),
+ z0 = svmul_lane (z1, z0, 0))
+
+/*
+** mul_lane_0_s64_untied:
+** mul z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_s64_untied, svint64_t,
+ z0 = svmul_lane_s64 (z1, z2, 0),
+ z0 = svmul_lane (z1, z2, 0))
+
+/*
+** mul_lane_1_s64:
+** mul z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_1_s64, svint64_t,
+ z0 = svmul_lane_s64 (z1, z2, 1),
+ z0 = svmul_lane (z1, z2, 1))
+
+/*
+** mul_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** mul z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z15_s64, svint64_t, svint64_t, z15,
+ z0 = svmul_lane_s64 (z1, z15, 1),
+ z0 = svmul_lane (z1, z15, 1))
+
+/*
+** mul_lane_z16_s64:
+** mov (z[0-7])\.d, z16\.d
+** mul z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z16_s64, svint64_t, svint64_t, z16,
+ z0 = svmul_lane_s64 (z1, z16, 1),
+ z0 = svmul_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mul_lane_0_u16_tied1:
+** mul z0\.h, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_u16_tied1, svuint16_t,
+ z0 = svmul_lane_u16 (z0, z1, 0),
+ z0 = svmul_lane (z0, z1, 0))
+
+/*
+** mul_lane_0_u16_tied2:
+** mul z0\.h, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_u16_tied2, svuint16_t,
+ z0 = svmul_lane_u16 (z1, z0, 0),
+ z0 = svmul_lane (z1, z0, 0))
+
+/*
+** mul_lane_0_u16_untied:
+** mul z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_u16_untied, svuint16_t,
+ z0 = svmul_lane_u16 (z1, z2, 0),
+ z0 = svmul_lane (z1, z2, 0))
+
+/*
+** mul_lane_1_u16:
+** mul z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_1_u16, svuint16_t,
+ z0 = svmul_lane_u16 (z1, z2, 1),
+ z0 = svmul_lane (z1, z2, 1))
+
+/*
+** mul_lane_2_u16:
+** mul z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_2_u16, svuint16_t,
+ z0 = svmul_lane_u16 (z1, z2, 2),
+ z0 = svmul_lane (z1, z2, 2))
+
+/*
+** mul_lane_3_u16:
+** mul z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_3_u16, svuint16_t,
+ z0 = svmul_lane_u16 (z1, z2, 3),
+ z0 = svmul_lane (z1, z2, 3))
+
+/*
+** mul_lane_4_u16:
+** mul z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_4_u16, svuint16_t,
+ z0 = svmul_lane_u16 (z1, z2, 4),
+ z0 = svmul_lane (z1, z2, 4))
+
+/*
+** mul_lane_5_u16:
+** mul z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_5_u16, svuint16_t,
+ z0 = svmul_lane_u16 (z1, z2, 5),
+ z0 = svmul_lane (z1, z2, 5))
+
+/*
+** mul_lane_6_u16:
+** mul z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_6_u16, svuint16_t,
+ z0 = svmul_lane_u16 (z1, z2, 6),
+ z0 = svmul_lane (z1, z2, 6))
+
+/*
+** mul_lane_7_u16:
+** mul z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_7_u16, svuint16_t,
+ z0 = svmul_lane_u16 (z1, z2, 7),
+ z0 = svmul_lane (z1, z2, 7))
+
+/*
+** mul_lane_z8_u16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mul z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z8_u16, svuint16_t, svuint16_t, z8,
+ z0 = svmul_lane_u16 (z1, z8, 1),
+ z0 = svmul_lane (z1, z8, 1))
+
+/*
+** mul_lane_z16_u16:
+** mov (z[0-7])\.d, z16\.d
+** mul z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z16_u16, svuint16_t, svuint16_t, z16,
+ z0 = svmul_lane_u16 (z1, z16, 1),
+ z0 = svmul_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mul_lane_0_u32_tied1:
+** mul z0\.s, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_u32_tied1, svuint32_t,
+ z0 = svmul_lane_u32 (z0, z1, 0),
+ z0 = svmul_lane (z0, z1, 0))
+
+/*
+** mul_lane_0_u32_tied2:
+** mul z0\.s, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_u32_tied2, svuint32_t,
+ z0 = svmul_lane_u32 (z1, z0, 0),
+ z0 = svmul_lane (z1, z0, 0))
+
+/*
+** mul_lane_0_u32_untied:
+** mul z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_u32_untied, svuint32_t,
+ z0 = svmul_lane_u32 (z1, z2, 0),
+ z0 = svmul_lane (z1, z2, 0))
+
+/*
+** mul_lane_1_u32:
+** mul z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_1_u32, svuint32_t,
+ z0 = svmul_lane_u32 (z1, z2, 1),
+ z0 = svmul_lane (z1, z2, 1))
+
+/*
+** mul_lane_2_u32:
+** mul z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_2_u32, svuint32_t,
+ z0 = svmul_lane_u32 (z1, z2, 2),
+ z0 = svmul_lane (z1, z2, 2))
+
+/*
+** mul_lane_3_u32:
+** mul z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_3_u32, svuint32_t,
+ z0 = svmul_lane_u32 (z1, z2, 3),
+ z0 = svmul_lane (z1, z2, 3))
+
+/*
+** mul_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** mul z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z8_u32, svuint32_t, svuint32_t, z8,
+ z0 = svmul_lane_u32 (z1, z8, 1),
+ z0 = svmul_lane (z1, z8, 1))
+
+/*
+** mul_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** mul z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z16_u32, svuint32_t, svuint32_t, z16,
+ z0 = svmul_lane_u32 (z1, z16, 1),
+ z0 = svmul_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mul_lane_0_u64_tied1:
+** mul z0\.d, z0\.d, z1\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_u64_tied1, svuint64_t,
+ z0 = svmul_lane_u64 (z0, z1, 0),
+ z0 = svmul_lane (z0, z1, 0))
+
+/*
+** mul_lane_0_u64_tied2:
+** mul z0\.d, z1\.d, z0\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_u64_tied2, svuint64_t,
+ z0 = svmul_lane_u64 (z1, z0, 0),
+ z0 = svmul_lane (z1, z0, 0))
+
+/*
+** mul_lane_0_u64_untied:
+** mul z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_0_u64_untied, svuint64_t,
+ z0 = svmul_lane_u64 (z1, z2, 0),
+ z0 = svmul_lane (z1, z2, 0))
+
+/*
+** mul_lane_1_u64:
+** mul z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (mul_lane_1_u64, svuint64_t,
+ z0 = svmul_lane_u64 (z1, z2, 1),
+ z0 = svmul_lane (z1, z2, 1))
+
+/*
+** mul_lane_z15_u64:
+** str d15, \[sp, -16\]!
+** mul z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z15_u64, svuint64_t, svuint64_t, z15,
+ z0 = svmul_lane_u64 (z1, z15, 1),
+ z0 = svmul_lane (z1, z15, 1))
+
+/*
+** mul_lane_z16_u64:
+** mov (z[0-7])\.d, z16\.d
+** mul z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mul_lane_z16_u64, svuint64_t, svuint64_t, z16,
+ z0 = svmul_lane_u64 (z1, z16, 1),
+ z0 = svmul_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_lane_0_s32_tied1:
+** smullb z0\.s, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z0, z1, 0),
+ z0_res = svmullb_lane (z0, z1, 0))
+
+/*
+** mullb_lane_0_s32_tied2:
+** smullb z0\.s, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z1, z0, 0),
+ z0_res = svmullb_lane (z1, z0, 0))
+
+/*
+** mullb_lane_0_s32_untied:
+** smullb z0\.s, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_s32_untied, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z1, z2, 0),
+ z0_res = svmullb_lane (z1, z2, 0))
+
+/*
+** mullb_lane_1_s32:
+** smullb z0\.s, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_1_s32, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z1, z2, 1),
+ z0_res = svmullb_lane (z1, z2, 1))
+
+/*
+** mullb_lane_2_s32:
+** smullb z0\.s, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_2_s32, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z1, z2, 2),
+ z0_res = svmullb_lane (z1, z2, 2))
+
+/*
+** mullb_lane_3_s32:
+** smullb z0\.s, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_3_s32, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z1, z2, 3),
+ z0_res = svmullb_lane (z1, z2, 3))
+
+/*
+** mullb_lane_4_s32:
+** smullb z0\.s, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_4_s32, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z1, z2, 4),
+ z0_res = svmullb_lane (z1, z2, 4))
+
+/*
+** mullb_lane_5_s32:
+** smullb z0\.s, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_5_s32, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z1, z2, 5),
+ z0_res = svmullb_lane (z1, z2, 5))
+
+/*
+** mullb_lane_6_s32:
+** smullb z0\.s, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_6_s32, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z1, z2, 6),
+ z0_res = svmullb_lane (z1, z2, 6))
+
+/*
+** mullb_lane_7_s32:
+** smullb z0\.s, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_7_s32, svint32_t, svint16_t,
+ z0_res = svmullb_lane_s32 (z1, z2, 7),
+ z0_res = svmullb_lane (z1, z2, 7))
+
+/*
+** mullb_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** smullb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mullb_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svmullb_lane_s32 (z1, z8, 1),
+ z0 = svmullb_lane (z1, z8, 1))
+
+/*
+** mullb_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** smullb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mullb_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svmullb_lane_s32 (z1, z16, 1),
+ z0 = svmullb_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_lane_0_s64_tied1:
+** smullb z0\.d, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0_res = svmullb_lane_s64 (z0, z1, 0),
+ z0_res = svmullb_lane (z0, z1, 0))
+
+/*
+** mullb_lane_0_s64_tied2:
+** smullb z0\.d, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmullb_lane_s64 (z1, z0, 0),
+ z0_res = svmullb_lane (z1, z0, 0))
+
+/*
+** mullb_lane_0_s64_untied:
+** smullb z0\.d, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_s64_untied, svint64_t, svint32_t,
+ z0_res = svmullb_lane_s64 (z1, z2, 0),
+ z0_res = svmullb_lane (z1, z2, 0))
+
+/*
+** mullb_lane_1_s64:
+** smullb z0\.d, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_1_s64, svint64_t, svint32_t,
+ z0_res = svmullb_lane_s64 (z1, z2, 1),
+ z0_res = svmullb_lane (z1, z2, 1))
+
+/*
+** mullb_lane_2_s64:
+** smullb z0\.d, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_2_s64, svint64_t, svint32_t,
+ z0_res = svmullb_lane_s64 (z1, z2, 2),
+ z0_res = svmullb_lane (z1, z2, 2))
+
+/*
+** mullb_lane_3_s64:
+** smullb z0\.d, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_3_s64, svint64_t, svint32_t,
+ z0_res = svmullb_lane_s64 (z1, z2, 3),
+ z0_res = svmullb_lane (z1, z2, 3))
+
+/*
+** mullb_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** smullb z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mullb_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svmullb_lane_s64 (z1, z15, 1),
+ z0 = svmullb_lane (z1, z15, 1))
+
+/*
+** mullb_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** smullb z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mullb_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svmullb_lane_s64 (z1, z16, 1),
+ z0 = svmullb_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_lane_0_u32_tied1:
+** umullb z0\.s, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z0, z1, 0),
+ z0_res = svmullb_lane (z0, z1, 0))
+
+/*
+** mullb_lane_0_u32_tied2:
+** umullb z0\.s, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z1, z0, 0),
+ z0_res = svmullb_lane (z1, z0, 0))
+
+/*
+** mullb_lane_0_u32_untied:
+** umullb z0\.s, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z1, z2, 0),
+ z0_res = svmullb_lane (z1, z2, 0))
+
+/*
+** mullb_lane_1_u32:
+** umullb z0\.s, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_1_u32, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z1, z2, 1),
+ z0_res = svmullb_lane (z1, z2, 1))
+
+/*
+** mullb_lane_2_u32:
+** umullb z0\.s, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_2_u32, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z1, z2, 2),
+ z0_res = svmullb_lane (z1, z2, 2))
+
+/*
+** mullb_lane_3_u32:
+** umullb z0\.s, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_3_u32, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z1, z2, 3),
+ z0_res = svmullb_lane (z1, z2, 3))
+
+/*
+** mullb_lane_4_u32:
+** umullb z0\.s, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_4_u32, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z1, z2, 4),
+ z0_res = svmullb_lane (z1, z2, 4))
+
+/*
+** mullb_lane_5_u32:
+** umullb z0\.s, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_5_u32, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z1, z2, 5),
+ z0_res = svmullb_lane (z1, z2, 5))
+
+/*
+** mullb_lane_6_u32:
+** umullb z0\.s, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_6_u32, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z1, z2, 6),
+ z0_res = svmullb_lane (z1, z2, 6))
+
+/*
+** mullb_lane_7_u32:
+** umullb z0\.s, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_7_u32, svuint32_t, svuint16_t,
+ z0_res = svmullb_lane_u32 (z1, z2, 7),
+ z0_res = svmullb_lane (z1, z2, 7))
+
+/*
+** mullb_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** umullb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mullb_lane_z8_u32, svuint32_t, svuint16_t, z8,
+ z0 = svmullb_lane_u32 (z1, z8, 1),
+ z0 = svmullb_lane (z1, z8, 1))
+
+/*
+** mullb_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** umullb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mullb_lane_z16_u32, svuint32_t, svuint16_t, z16,
+ z0 = svmullb_lane_u32 (z1, z16, 1),
+ z0 = svmullb_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_lane_0_u64_tied1:
+** umullb z0\.d, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svmullb_lane_u64 (z0, z1, 0),
+ z0_res = svmullb_lane (z0, z1, 0))
+
+/*
+** mullb_lane_0_u64_tied2:
+** umullb z0\.d, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmullb_lane_u64 (z1, z0, 0),
+ z0_res = svmullb_lane (z1, z0, 0))
+
+/*
+** mullb_lane_0_u64_untied:
+** umullb z0\.d, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_0_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svmullb_lane_u64 (z1, z2, 0),
+ z0_res = svmullb_lane (z1, z2, 0))
+
+/*
+** mullb_lane_1_u64:
+** umullb z0\.d, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_1_u64, svuint64_t, svuint32_t,
+ z0_res = svmullb_lane_u64 (z1, z2, 1),
+ z0_res = svmullb_lane (z1, z2, 1))
+
+/*
+** mullb_lane_2_u64:
+** umullb z0\.d, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_2_u64, svuint64_t, svuint32_t,
+ z0_res = svmullb_lane_u64 (z1, z2, 2),
+ z0_res = svmullb_lane (z1, z2, 2))
+
+/*
+** mullb_lane_3_u64:
+** umullb z0\.d, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_lane_3_u64, svuint64_t, svuint32_t,
+ z0_res = svmullb_lane_u64 (z1, z2, 3),
+ z0_res = svmullb_lane (z1, z2, 3))
+
+/*
+** mullb_lane_z15_u64:
+** str d15, \[sp, -16\]!
+** umullb z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mullb_lane_z15_u64, svuint64_t, svuint32_t, z15,
+ z0 = svmullb_lane_u64 (z1, z15, 1),
+ z0 = svmullb_lane (z1, z15, 1))
+
+/*
+** mullb_lane_z16_u64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** umullb z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mullb_lane_z16_u64, svuint64_t, svuint32_t, z16,
+ z0 = svmullb_lane_u64 (z1, z16, 1),
+ z0 = svmullb_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_s16_tied1:
+** smullb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_s16_tied1, svint16_t, svint8_t,
+ z0_res = svmullb_s16 (z0, z1),
+ z0_res = svmullb (z0, z1))
+
+/*
+** mullb_s16_tied2:
+** smullb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svmullb_s16 (z1, z0),
+ z0_res = svmullb (z1, z0))
+
+/*
+** mullb_s16_untied:
+** smullb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_s16_untied, svint16_t, svint8_t,
+ z0_res = svmullb_s16 (z1, z2),
+ z0_res = svmullb (z1, z2))
+
+/*
+** mullb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** smullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svmullb_n_s16 (z0, x0),
+ z0_res = svmullb (z0, x0))
+
+/*
+** mullb_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** smullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svmullb_n_s16 (z1, x0),
+ z0_res = svmullb (z1, x0))
+
+/*
+** mullb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** smullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svmullb_n_s16 (z0, 11),
+ z0_res = svmullb (z0, 11))
+
+/*
+** mullb_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** smullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svmullb_n_s16 (z1, 11),
+ z0_res = svmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_s32_tied1:
+** smullb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_s32_tied1, svint32_t, svint16_t,
+ z0_res = svmullb_s32 (z0, z1),
+ z0_res = svmullb (z0, z1))
+
+/*
+** mullb_s32_tied2:
+** smullb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmullb_s32 (z1, z0),
+ z0_res = svmullb (z1, z0))
+
+/*
+** mullb_s32_untied:
+** smullb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_s32_untied, svint32_t, svint16_t,
+ z0_res = svmullb_s32 (z1, z2),
+ z0_res = svmullb (z1, z2))
+
+/*
+** mullb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** smullb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svmullb_n_s32 (z0, x0),
+ z0_res = svmullb (z0, x0))
+
+/*
+** mullb_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** smullb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svmullb_n_s32 (z1, x0),
+ z0_res = svmullb (z1, x0))
+
+/*
+** mullb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** smullb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svmullb_n_s32 (z0, 11),
+ z0_res = svmullb (z0, 11))
+
+/*
+** mullb_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** smullb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svmullb_n_s32 (z1, 11),
+ z0_res = svmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_s64_tied1:
+** smullb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_s64_tied1, svint64_t, svint32_t,
+ z0_res = svmullb_s64 (z0, z1),
+ z0_res = svmullb (z0, z1))
+
+/*
+** mullb_s64_tied2:
+** smullb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmullb_s64 (z1, z0),
+ z0_res = svmullb (z1, z0))
+
+/*
+** mullb_s64_untied:
+** smullb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_s64_untied, svint64_t, svint32_t,
+ z0_res = svmullb_s64 (z1, z2),
+ z0_res = svmullb (z1, z2))
+
+/*
+** mullb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** smullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svmullb_n_s64 (z0, x0),
+ z0_res = svmullb (z0, x0))
+
+/*
+** mullb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** smullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svmullb_n_s64 (z1, x0),
+ z0_res = svmullb (z1, x0))
+
+/*
+** mullb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** smullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svmullb_n_s64 (z0, 11),
+ z0_res = svmullb (z0, 11))
+
+/*
+** mullb_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** smullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svmullb_n_s64 (z1, 11),
+ z0_res = svmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_u16_tied1:
+** umullb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svmullb_u16 (z0, z1),
+ z0_res = svmullb (z0, z1))
+
+/*
+** mullb_u16_tied2:
+** umullb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svmullb_u16 (z1, z0),
+ z0_res = svmullb (z1, z0))
+
+/*
+** mullb_u16_untied:
+** umullb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svmullb_u16 (z1, z2),
+ z0_res = svmullb (z1, z2))
+
+/*
+** mullb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** umullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svmullb_n_u16 (z0, x0),
+ z0_res = svmullb (z0, x0))
+
+/*
+** mullb_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** umullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svmullb_n_u16 (z1, x0),
+ z0_res = svmullb (z1, x0))
+
+/*
+** mullb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** umullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svmullb_n_u16 (z0, 11),
+ z0_res = svmullb (z0, 11))
+
+/*
+** mullb_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** umullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svmullb_n_u16 (z1, 11),
+ z0_res = svmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_u32_tied1:
+** umullb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svmullb_u32 (z0, z1),
+ z0_res = svmullb (z0, z1))
+
+/*
+** mullb_u32_tied2:
+** umullb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmullb_u32 (z1, z0),
+ z0_res = svmullb (z1, z0))
+
+/*
+** mullb_u32_untied:
+** umullb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svmullb_u32 (z1, z2),
+ z0_res = svmullb (z1, z2))
+
+/*
+** mullb_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** umullb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svmullb_n_u32 (z0, x0),
+ z0_res = svmullb (z0, x0))
+
+/*
+** mullb_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** umullb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svmullb_n_u32 (z1, x0),
+ z0_res = svmullb (z1, x0))
+
+/*
+** mullb_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** umullb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svmullb_n_u32 (z0, 11),
+ z0_res = svmullb (z0, 11))
+
+/*
+** mullb_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** umullb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svmullb_n_u32 (z1, 11),
+ z0_res = svmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullb_u64_tied1:
+** umullb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svmullb_u64 (z0, z1),
+ z0_res = svmullb (z0, z1))
+
+/*
+** mullb_u64_tied2:
+** umullb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmullb_u64 (z1, z0),
+ z0_res = svmullb (z1, z0))
+
+/*
+** mullb_u64_untied:
+** umullb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svmullb_u64 (z1, z2),
+ z0_res = svmullb (z1, z2))
+
+/*
+** mullb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** umullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svmullb_n_u64 (z0, x0),
+ z0_res = svmullb (z0, x0))
+
+/*
+** mullb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** umullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullb_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svmullb_n_u64 (z1, x0),
+ z0_res = svmullb (z1, x0))
+
+/*
+** mullb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** umullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svmullb_n_u64 (z0, 11),
+ z0_res = svmullb (z0, 11))
+
+/*
+** mullb_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** umullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullb_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svmullb_n_u64 (z1, 11),
+ z0_res = svmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_lane_0_s32_tied1:
+** smullt z0\.s, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z0, z1, 0),
+ z0_res = svmullt_lane (z0, z1, 0))
+
+/*
+** mullt_lane_0_s32_tied2:
+** smullt z0\.s, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z1, z0, 0),
+ z0_res = svmullt_lane (z1, z0, 0))
+
+/*
+** mullt_lane_0_s32_untied:
+** smullt z0\.s, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_s32_untied, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z1, z2, 0),
+ z0_res = svmullt_lane (z1, z2, 0))
+
+/*
+** mullt_lane_1_s32:
+** smullt z0\.s, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_1_s32, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z1, z2, 1),
+ z0_res = svmullt_lane (z1, z2, 1))
+
+/*
+** mullt_lane_2_s32:
+** smullt z0\.s, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_2_s32, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z1, z2, 2),
+ z0_res = svmullt_lane (z1, z2, 2))
+
+/*
+** mullt_lane_3_s32:
+** smullt z0\.s, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_3_s32, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z1, z2, 3),
+ z0_res = svmullt_lane (z1, z2, 3))
+
+/*
+** mullt_lane_4_s32:
+** smullt z0\.s, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_4_s32, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z1, z2, 4),
+ z0_res = svmullt_lane (z1, z2, 4))
+
+/*
+** mullt_lane_5_s32:
+** smullt z0\.s, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_5_s32, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z1, z2, 5),
+ z0_res = svmullt_lane (z1, z2, 5))
+
+/*
+** mullt_lane_6_s32:
+** smullt z0\.s, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_6_s32, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z1, z2, 6),
+ z0_res = svmullt_lane (z1, z2, 6))
+
+/*
+** mullt_lane_7_s32:
+** smullt z0\.s, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_7_s32, svint32_t, svint16_t,
+ z0_res = svmullt_lane_s32 (z1, z2, 7),
+ z0_res = svmullt_lane (z1, z2, 7))
+
+/*
+** mullt_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** smullt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mullt_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svmullt_lane_s32 (z1, z8, 1),
+ z0 = svmullt_lane (z1, z8, 1))
+
+/*
+** mullt_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** smullt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mullt_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svmullt_lane_s32 (z1, z16, 1),
+ z0 = svmullt_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_lane_0_s64_tied1:
+** smullt z0\.d, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0_res = svmullt_lane_s64 (z0, z1, 0),
+ z0_res = svmullt_lane (z0, z1, 0))
+
+/*
+** mullt_lane_0_s64_tied2:
+** smullt z0\.d, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmullt_lane_s64 (z1, z0, 0),
+ z0_res = svmullt_lane (z1, z0, 0))
+
+/*
+** mullt_lane_0_s64_untied:
+** smullt z0\.d, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_s64_untied, svint64_t, svint32_t,
+ z0_res = svmullt_lane_s64 (z1, z2, 0),
+ z0_res = svmullt_lane (z1, z2, 0))
+
+/*
+** mullt_lane_1_s64:
+** smullt z0\.d, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_1_s64, svint64_t, svint32_t,
+ z0_res = svmullt_lane_s64 (z1, z2, 1),
+ z0_res = svmullt_lane (z1, z2, 1))
+
+/*
+** mullt_lane_2_s64:
+** smullt z0\.d, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_2_s64, svint64_t, svint32_t,
+ z0_res = svmullt_lane_s64 (z1, z2, 2),
+ z0_res = svmullt_lane (z1, z2, 2))
+
+/*
+** mullt_lane_3_s64:
+** smullt z0\.d, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_3_s64, svint64_t, svint32_t,
+ z0_res = svmullt_lane_s64 (z1, z2, 3),
+ z0_res = svmullt_lane (z1, z2, 3))
+
+/*
+** mullt_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** smullt z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mullt_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svmullt_lane_s64 (z1, z15, 1),
+ z0 = svmullt_lane (z1, z15, 1))
+
+/*
+** mullt_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** smullt z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mullt_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svmullt_lane_s64 (z1, z16, 1),
+ z0 = svmullt_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_lane_0_u32_tied1:
+** umullt z0\.s, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z0, z1, 0),
+ z0_res = svmullt_lane (z0, z1, 0))
+
+/*
+** mullt_lane_0_u32_tied2:
+** umullt z0\.s, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z1, z0, 0),
+ z0_res = svmullt_lane (z1, z0, 0))
+
+/*
+** mullt_lane_0_u32_untied:
+** umullt z0\.s, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z1, z2, 0),
+ z0_res = svmullt_lane (z1, z2, 0))
+
+/*
+** mullt_lane_1_u32:
+** umullt z0\.s, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_1_u32, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z1, z2, 1),
+ z0_res = svmullt_lane (z1, z2, 1))
+
+/*
+** mullt_lane_2_u32:
+** umullt z0\.s, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_2_u32, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z1, z2, 2),
+ z0_res = svmullt_lane (z1, z2, 2))
+
+/*
+** mullt_lane_3_u32:
+** umullt z0\.s, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_3_u32, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z1, z2, 3),
+ z0_res = svmullt_lane (z1, z2, 3))
+
+/*
+** mullt_lane_4_u32:
+** umullt z0\.s, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_4_u32, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z1, z2, 4),
+ z0_res = svmullt_lane (z1, z2, 4))
+
+/*
+** mullt_lane_5_u32:
+** umullt z0\.s, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_5_u32, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z1, z2, 5),
+ z0_res = svmullt_lane (z1, z2, 5))
+
+/*
+** mullt_lane_6_u32:
+** umullt z0\.s, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_6_u32, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z1, z2, 6),
+ z0_res = svmullt_lane (z1, z2, 6))
+
+/*
+** mullt_lane_7_u32:
+** umullt z0\.s, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_7_u32, svuint32_t, svuint16_t,
+ z0_res = svmullt_lane_u32 (z1, z2, 7),
+ z0_res = svmullt_lane (z1, z2, 7))
+
+/*
+** mullt_lane_z8_u32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** umullt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mullt_lane_z8_u32, svuint32_t, svuint16_t, z8,
+ z0 = svmullt_lane_u32 (z1, z8, 1),
+ z0 = svmullt_lane (z1, z8, 1))
+
+/*
+** mullt_lane_z16_u32:
+** mov (z[0-7])\.d, z16\.d
+** umullt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mullt_lane_z16_u32, svuint32_t, svuint16_t, z16,
+ z0 = svmullt_lane_u32 (z1, z16, 1),
+ z0 = svmullt_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_lane_0_u64_tied1:
+** umullt z0\.d, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svmullt_lane_u64 (z0, z1, 0),
+ z0_res = svmullt_lane (z0, z1, 0))
+
+/*
+** mullt_lane_0_u64_tied2:
+** umullt z0\.d, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmullt_lane_u64 (z1, z0, 0),
+ z0_res = svmullt_lane (z1, z0, 0))
+
+/*
+** mullt_lane_0_u64_untied:
+** umullt z0\.d, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_0_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svmullt_lane_u64 (z1, z2, 0),
+ z0_res = svmullt_lane (z1, z2, 0))
+
+/*
+** mullt_lane_1_u64:
+** umullt z0\.d, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_1_u64, svuint64_t, svuint32_t,
+ z0_res = svmullt_lane_u64 (z1, z2, 1),
+ z0_res = svmullt_lane (z1, z2, 1))
+
+/*
+** mullt_lane_2_u64:
+** umullt z0\.d, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_2_u64, svuint64_t, svuint32_t,
+ z0_res = svmullt_lane_u64 (z1, z2, 2),
+ z0_res = svmullt_lane (z1, z2, 2))
+
+/*
+** mullt_lane_3_u64:
+** umullt z0\.d, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_lane_3_u64, svuint64_t, svuint32_t,
+ z0_res = svmullt_lane_u64 (z1, z2, 3),
+ z0_res = svmullt_lane (z1, z2, 3))
+
+/*
+** mullt_lane_z15_u64:
+** str d15, \[sp, -16\]!
+** umullt z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (mullt_lane_z15_u64, svuint64_t, svuint32_t, z15,
+ z0 = svmullt_lane_u64 (z1, z15, 1),
+ z0 = svmullt_lane (z1, z15, 1))
+
+/*
+** mullt_lane_z16_u64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** umullt z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (mullt_lane_z16_u64, svuint64_t, svuint32_t, z16,
+ z0 = svmullt_lane_u64 (z1, z16, 1),
+ z0 = svmullt_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_s16_tied1:
+** smullt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_s16_tied1, svint16_t, svint8_t,
+ z0_res = svmullt_s16 (z0, z1),
+ z0_res = svmullt (z0, z1))
+
+/*
+** mullt_s16_tied2:
+** smullt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svmullt_s16 (z1, z0),
+ z0_res = svmullt (z1, z0))
+
+/*
+** mullt_s16_untied:
+** smullt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_s16_untied, svint16_t, svint8_t,
+ z0_res = svmullt_s16 (z1, z2),
+ z0_res = svmullt (z1, z2))
+
+/*
+** mullt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** smullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svmullt_n_s16 (z0, x0),
+ z0_res = svmullt (z0, x0))
+
+/*
+** mullt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** smullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svmullt_n_s16 (z1, x0),
+ z0_res = svmullt (z1, x0))
+
+/*
+** mullt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** smullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svmullt_n_s16 (z0, 11),
+ z0_res = svmullt (z0, 11))
+
+/*
+** mullt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** smullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svmullt_n_s16 (z1, 11),
+ z0_res = svmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_s32_tied1:
+** smullt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_s32_tied1, svint32_t, svint16_t,
+ z0_res = svmullt_s32 (z0, z1),
+ z0_res = svmullt (z0, z1))
+
+/*
+** mullt_s32_tied2:
+** smullt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svmullt_s32 (z1, z0),
+ z0_res = svmullt (z1, z0))
+
+/*
+** mullt_s32_untied:
+** smullt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_s32_untied, svint32_t, svint16_t,
+ z0_res = svmullt_s32 (z1, z2),
+ z0_res = svmullt (z1, z2))
+
+/*
+** mullt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** smullt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svmullt_n_s32 (z0, x0),
+ z0_res = svmullt (z0, x0))
+
+/*
+** mullt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** smullt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svmullt_n_s32 (z1, x0),
+ z0_res = svmullt (z1, x0))
+
+/*
+** mullt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** smullt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svmullt_n_s32 (z0, 11),
+ z0_res = svmullt (z0, 11))
+
+/*
+** mullt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** smullt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svmullt_n_s32 (z1, 11),
+ z0_res = svmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_s64_tied1:
+** smullt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_s64_tied1, svint64_t, svint32_t,
+ z0_res = svmullt_s64 (z0, z1),
+ z0_res = svmullt (z0, z1))
+
+/*
+** mullt_s64_tied2:
+** smullt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svmullt_s64 (z1, z0),
+ z0_res = svmullt (z1, z0))
+
+/*
+** mullt_s64_untied:
+** smullt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_s64_untied, svint64_t, svint32_t,
+ z0_res = svmullt_s64 (z1, z2),
+ z0_res = svmullt (z1, z2))
+
+/*
+** mullt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** smullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svmullt_n_s64 (z0, x0),
+ z0_res = svmullt (z0, x0))
+
+/*
+** mullt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** smullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svmullt_n_s64 (z1, x0),
+ z0_res = svmullt (z1, x0))
+
+/*
+** mullt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** smullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svmullt_n_s64 (z0, 11),
+ z0_res = svmullt (z0, 11))
+
+/*
+** mullt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** smullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svmullt_n_s64 (z1, 11),
+ z0_res = svmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_u16_tied1:
+** umullt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svmullt_u16 (z0, z1),
+ z0_res = svmullt (z0, z1))
+
+/*
+** mullt_u16_tied2:
+** umullt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svmullt_u16 (z1, z0),
+ z0_res = svmullt (z1, z0))
+
+/*
+** mullt_u16_untied:
+** umullt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svmullt_u16 (z1, z2),
+ z0_res = svmullt (z1, z2))
+
+/*
+** mullt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** umullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svmullt_n_u16 (z0, x0),
+ z0_res = svmullt (z0, x0))
+
+/*
+** mullt_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** umullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svmullt_n_u16 (z1, x0),
+ z0_res = svmullt (z1, x0))
+
+/*
+** mullt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** umullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svmullt_n_u16 (z0, 11),
+ z0_res = svmullt (z0, 11))
+
+/*
+** mullt_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** umullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svmullt_n_u16 (z1, 11),
+ z0_res = svmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_u32_tied1:
+** umullt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svmullt_u32 (z0, z1),
+ z0_res = svmullt (z0, z1))
+
+/*
+** mullt_u32_tied2:
+** umullt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svmullt_u32 (z1, z0),
+ z0_res = svmullt (z1, z0))
+
+/*
+** mullt_u32_untied:
+** umullt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svmullt_u32 (z1, z2),
+ z0_res = svmullt (z1, z2))
+
+/*
+** mullt_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** umullt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svmullt_n_u32 (z0, x0),
+ z0_res = svmullt (z0, x0))
+
+/*
+** mullt_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** umullt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svmullt_n_u32 (z1, x0),
+ z0_res = svmullt (z1, x0))
+
+/*
+** mullt_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** umullt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svmullt_n_u32 (z0, 11),
+ z0_res = svmullt (z0, 11))
+
+/*
+** mullt_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** umullt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svmullt_n_u32 (z1, 11),
+ z0_res = svmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** mullt_u64_tied1:
+** umullt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svmullt_u64 (z0, z1),
+ z0_res = svmullt (z0, z1))
+
+/*
+** mullt_u64_tied2:
+** umullt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svmullt_u64 (z1, z0),
+ z0_res = svmullt (z1, z0))
+
+/*
+** mullt_u64_untied:
+** umullt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svmullt_u64 (z1, z2),
+ z0_res = svmullt (z1, z2))
+
+/*
+** mullt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** umullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svmullt_n_u64 (z0, x0),
+ z0_res = svmullt (z0, x0))
+
+/*
+** mullt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** umullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (mullt_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svmullt_n_u64 (z1, x0),
+ z0_res = svmullt (z1, x0))
+
+/*
+** mullt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** umullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svmullt_n_u64 (z0, 11),
+ z0_res = svmullt (z0, 11))
+
+/*
+** mullt_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** umullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (mullt_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svmullt_n_u64 (z1, 11),
+ z0_res = svmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nbsl_s16_tied1:
+** nbsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s16_tied1, svint16_t,
+ z0 = svnbsl_s16 (z0, z1, z2),
+ z0 = svnbsl (z0, z1, z2))
+
+/*
+** nbsl_s16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s16_tied2, svint16_t,
+ z0 = svnbsl_s16 (z1, z0, z2),
+ z0 = svnbsl (z1, z0, z2))
+
+/*
+** nbsl_s16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s16_tied3, svint16_t,
+ z0 = svnbsl_s16 (z1, z2, z0),
+ z0 = svnbsl (z1, z2, z0))
+
+/*
+** nbsl_s16_untied:
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s16_untied, svint16_t,
+ z0 = svnbsl_s16 (z1, z2, z3),
+ z0 = svnbsl (z1, z2, z3))
+
+/*
+** nbsl_w0_s16_tied1:
+** mov (z[0-9]+)\.h, w0
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svnbsl_n_s16 (z0, z1, x0),
+ z0 = svnbsl (z0, z1, x0))
+
+/*
+** nbsl_w0_s16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_s16_tied2, svint16_t, int16_t,
+ z0 = svnbsl_n_s16 (z1, z0, x0),
+ z0 = svnbsl (z1, z0, x0))
+
+/*
+** nbsl_w0_s16_untied:
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_s16_untied, svint16_t, int16_t,
+ z0 = svnbsl_n_s16 (z1, z2, x0),
+ z0 = svnbsl (z1, z2, x0))
+
+/*
+** nbsl_11_s16_tied1:
+** mov (z[0-9]+)\.h, #11
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s16_tied1, svint16_t,
+ z0 = svnbsl_n_s16 (z0, z1, 11),
+ z0 = svnbsl (z0, z1, 11))
+
+/*
+** nbsl_11_s16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s16_tied2, svint16_t,
+ z0 = svnbsl_n_s16 (z1, z0, 11),
+ z0 = svnbsl (z1, z0, 11))
+
+/*
+** nbsl_11_s16_untied:
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s16_untied, svint16_t,
+ z0 = svnbsl_n_s16 (z1, z2, 11),
+ z0 = svnbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nbsl_s32_tied1:
+** nbsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s32_tied1, svint32_t,
+ z0 = svnbsl_s32 (z0, z1, z2),
+ z0 = svnbsl (z0, z1, z2))
+
+/*
+** nbsl_s32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s32_tied2, svint32_t,
+ z0 = svnbsl_s32 (z1, z0, z2),
+ z0 = svnbsl (z1, z0, z2))
+
+/*
+** nbsl_s32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s32_tied3, svint32_t,
+ z0 = svnbsl_s32 (z1, z2, z0),
+ z0 = svnbsl (z1, z2, z0))
+
+/*
+** nbsl_s32_untied:
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s32_untied, svint32_t,
+ z0 = svnbsl_s32 (z1, z2, z3),
+ z0 = svnbsl (z1, z2, z3))
+
+/*
+** nbsl_w0_s32_tied1:
+** mov (z[0-9]+)\.s, w0
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svnbsl_n_s32 (z0, z1, x0),
+ z0 = svnbsl (z0, z1, x0))
+
+/*
+** nbsl_w0_s32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_s32_tied2, svint32_t, int32_t,
+ z0 = svnbsl_n_s32 (z1, z0, x0),
+ z0 = svnbsl (z1, z0, x0))
+
+/*
+** nbsl_w0_s32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_s32_untied, svint32_t, int32_t,
+ z0 = svnbsl_n_s32 (z1, z2, x0),
+ z0 = svnbsl (z1, z2, x0))
+
+/*
+** nbsl_11_s32_tied1:
+** mov (z[0-9]+)\.s, #11
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s32_tied1, svint32_t,
+ z0 = svnbsl_n_s32 (z0, z1, 11),
+ z0 = svnbsl (z0, z1, 11))
+
+/*
+** nbsl_11_s32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s32_tied2, svint32_t,
+ z0 = svnbsl_n_s32 (z1, z0, 11),
+ z0 = svnbsl (z1, z0, 11))
+
+/*
+** nbsl_11_s32_untied:
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s32_untied, svint32_t,
+ z0 = svnbsl_n_s32 (z1, z2, 11),
+ z0 = svnbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nbsl_s64_tied1:
+** nbsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s64_tied1, svint64_t,
+ z0 = svnbsl_s64 (z0, z1, z2),
+ z0 = svnbsl (z0, z1, z2))
+
+/*
+** nbsl_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s64_tied2, svint64_t,
+ z0 = svnbsl_s64 (z1, z0, z2),
+ z0 = svnbsl (z1, z0, z2))
+
+/*
+** nbsl_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s64_tied3, svint64_t,
+ z0 = svnbsl_s64 (z1, z2, z0),
+ z0 = svnbsl (z1, z2, z0))
+
+/*
+** nbsl_s64_untied:
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s64_untied, svint64_t,
+ z0 = svnbsl_s64 (z1, z2, z3),
+ z0 = svnbsl (z1, z2, z3))
+
+/*
+** nbsl_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** nbsl z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svnbsl_n_s64 (z0, z1, x0),
+ z0 = svnbsl (z0, z1, x0))
+
+/*
+** nbsl_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_x0_s64_tied2, svint64_t, int64_t,
+ z0 = svnbsl_n_s64 (z1, z0, x0),
+ z0 = svnbsl (z1, z0, x0))
+
+/*
+** nbsl_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_x0_s64_untied, svint64_t, int64_t,
+ z0 = svnbsl_n_s64 (z1, z2, x0),
+ z0 = svnbsl (z1, z2, x0))
+
+/*
+** nbsl_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** nbsl z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s64_tied1, svint64_t,
+ z0 = svnbsl_n_s64 (z0, z1, 11),
+ z0 = svnbsl (z0, z1, 11))
+
+/*
+** nbsl_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s64_tied2, svint64_t,
+ z0 = svnbsl_n_s64 (z1, z0, 11),
+ z0 = svnbsl (z1, z0, 11))
+
+/*
+** nbsl_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s64_untied, svint64_t,
+ z0 = svnbsl_n_s64 (z1, z2, 11),
+ z0 = svnbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nbsl_s8_tied1:
+** nbsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s8_tied1, svint8_t,
+ z0 = svnbsl_s8 (z0, z1, z2),
+ z0 = svnbsl (z0, z1, z2))
+
+/*
+** nbsl_s8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s8_tied2, svint8_t,
+ z0 = svnbsl_s8 (z1, z0, z2),
+ z0 = svnbsl (z1, z0, z2))
+
+/*
+** nbsl_s8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s8_tied3, svint8_t,
+ z0 = svnbsl_s8 (z1, z2, z0),
+ z0 = svnbsl (z1, z2, z0))
+
+/*
+** nbsl_s8_untied:
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_s8_untied, svint8_t,
+ z0 = svnbsl_s8 (z1, z2, z3),
+ z0 = svnbsl (z1, z2, z3))
+
+/*
+** nbsl_w0_s8_tied1:
+** mov (z[0-9]+)\.b, w0
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svnbsl_n_s8 (z0, z1, x0),
+ z0 = svnbsl (z0, z1, x0))
+
+/*
+** nbsl_w0_s8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_s8_tied2, svint8_t, int8_t,
+ z0 = svnbsl_n_s8 (z1, z0, x0),
+ z0 = svnbsl (z1, z0, x0))
+
+/*
+** nbsl_w0_s8_untied:
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_s8_untied, svint8_t, int8_t,
+ z0 = svnbsl_n_s8 (z1, z2, x0),
+ z0 = svnbsl (z1, z2, x0))
+
+/*
+** nbsl_11_s8_tied1:
+** mov (z[0-9]+)\.b, #11
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s8_tied1, svint8_t,
+ z0 = svnbsl_n_s8 (z0, z1, 11),
+ z0 = svnbsl (z0, z1, 11))
+
+/*
+** nbsl_11_s8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s8_tied2, svint8_t,
+ z0 = svnbsl_n_s8 (z1, z0, 11),
+ z0 = svnbsl (z1, z0, 11))
+
+/*
+** nbsl_11_s8_untied:
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_s8_untied, svint8_t,
+ z0 = svnbsl_n_s8 (z1, z2, 11),
+ z0 = svnbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nbsl_u16_tied1:
+** nbsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u16_tied1, svuint16_t,
+ z0 = svnbsl_u16 (z0, z1, z2),
+ z0 = svnbsl (z0, z1, z2))
+
+/*
+** nbsl_u16_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u16_tied2, svuint16_t,
+ z0 = svnbsl_u16 (z1, z0, z2),
+ z0 = svnbsl (z1, z0, z2))
+
+/*
+** nbsl_u16_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u16_tied3, svuint16_t,
+ z0 = svnbsl_u16 (z1, z2, z0),
+ z0 = svnbsl (z1, z2, z0))
+
+/*
+** nbsl_u16_untied:
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u16_untied, svuint16_t,
+ z0 = svnbsl_u16 (z1, z2, z3),
+ z0 = svnbsl (z1, z2, z3))
+
+/*
+** nbsl_w0_u16_tied1:
+** mov (z[0-9]+)\.h, w0
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svnbsl_n_u16 (z0, z1, x0),
+ z0 = svnbsl (z0, z1, x0))
+
+/*
+** nbsl_w0_u16_tied2:
+** mov (z[0-9]+)\.h, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_u16_tied2, svuint16_t, uint16_t,
+ z0 = svnbsl_n_u16 (z1, z0, x0),
+ z0 = svnbsl (z1, z0, x0))
+
+/*
+** nbsl_w0_u16_untied:
+** mov (z[0-9]+)\.h, w0
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svnbsl_n_u16 (z1, z2, x0),
+ z0 = svnbsl (z1, z2, x0))
+
+/*
+** nbsl_11_u16_tied1:
+** mov (z[0-9]+)\.h, #11
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u16_tied1, svuint16_t,
+ z0 = svnbsl_n_u16 (z0, z1, 11),
+ z0 = svnbsl (z0, z1, 11))
+
+/*
+** nbsl_11_u16_tied2:
+** mov (z[0-9]+)\.h, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u16_tied2, svuint16_t,
+ z0 = svnbsl_n_u16 (z1, z0, 11),
+ z0 = svnbsl (z1, z0, 11))
+
+/*
+** nbsl_11_u16_untied:
+** mov (z[0-9]+)\.h, #11
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u16_untied, svuint16_t,
+ z0 = svnbsl_n_u16 (z1, z2, 11),
+ z0 = svnbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nbsl_u32_tied1:
+** nbsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u32_tied1, svuint32_t,
+ z0 = svnbsl_u32 (z0, z1, z2),
+ z0 = svnbsl (z0, z1, z2))
+
+/*
+** nbsl_u32_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u32_tied2, svuint32_t,
+ z0 = svnbsl_u32 (z1, z0, z2),
+ z0 = svnbsl (z1, z0, z2))
+
+/*
+** nbsl_u32_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u32_tied3, svuint32_t,
+ z0 = svnbsl_u32 (z1, z2, z0),
+ z0 = svnbsl (z1, z2, z0))
+
+/*
+** nbsl_u32_untied:
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u32_untied, svuint32_t,
+ z0 = svnbsl_u32 (z1, z2, z3),
+ z0 = svnbsl (z1, z2, z3))
+
+/*
+** nbsl_w0_u32_tied1:
+** mov (z[0-9]+)\.s, w0
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svnbsl_n_u32 (z0, z1, x0),
+ z0 = svnbsl (z0, z1, x0))
+
+/*
+** nbsl_w0_u32_tied2:
+** mov (z[0-9]+)\.s, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svnbsl_n_u32 (z1, z0, x0),
+ z0 = svnbsl (z1, z0, x0))
+
+/*
+** nbsl_w0_u32_untied:
+** mov (z[0-9]+)\.s, w0
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svnbsl_n_u32 (z1, z2, x0),
+ z0 = svnbsl (z1, z2, x0))
+
+/*
+** nbsl_11_u32_tied1:
+** mov (z[0-9]+)\.s, #11
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u32_tied1, svuint32_t,
+ z0 = svnbsl_n_u32 (z0, z1, 11),
+ z0 = svnbsl (z0, z1, 11))
+
+/*
+** nbsl_11_u32_tied2:
+** mov (z[0-9]+)\.s, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u32_tied2, svuint32_t,
+ z0 = svnbsl_n_u32 (z1, z0, 11),
+ z0 = svnbsl (z1, z0, 11))
+
+/*
+** nbsl_11_u32_untied:
+** mov (z[0-9]+)\.s, #11
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u32_untied, svuint32_t,
+ z0 = svnbsl_n_u32 (z1, z2, 11),
+ z0 = svnbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nbsl_u64_tied1:
+** nbsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u64_tied1, svuint64_t,
+ z0 = svnbsl_u64 (z0, z1, z2),
+ z0 = svnbsl (z0, z1, z2))
+
+/*
+** nbsl_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u64_tied2, svuint64_t,
+ z0 = svnbsl_u64 (z1, z0, z2),
+ z0 = svnbsl (z1, z0, z2))
+
+/*
+** nbsl_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u64_tied3, svuint64_t,
+ z0 = svnbsl_u64 (z1, z2, z0),
+ z0 = svnbsl (z1, z2, z0))
+
+/*
+** nbsl_u64_untied:
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u64_untied, svuint64_t,
+ z0 = svnbsl_u64 (z1, z2, z3),
+ z0 = svnbsl (z1, z2, z3))
+
+/*
+** nbsl_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** nbsl z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svnbsl_n_u64 (z0, z1, x0),
+ z0 = svnbsl (z0, z1, x0))
+
+/*
+** nbsl_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svnbsl_n_u64 (z1, z0, x0),
+ z0 = svnbsl (z1, z0, x0))
+
+/*
+** nbsl_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svnbsl_n_u64 (z1, z2, x0),
+ z0 = svnbsl (z1, z2, x0))
+
+/*
+** nbsl_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** nbsl z0\.d, z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u64_tied1, svuint64_t,
+ z0 = svnbsl_n_u64 (z0, z1, 11),
+ z0 = svnbsl (z0, z1, 11))
+
+/*
+** nbsl_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u64_tied2, svuint64_t,
+ z0 = svnbsl_n_u64 (z1, z0, 11),
+ z0 = svnbsl (z1, z0, 11))
+
+/*
+** nbsl_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u64_untied, svuint64_t,
+ z0 = svnbsl_n_u64 (z1, z2, 11),
+ z0 = svnbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nbsl_u8_tied1:
+** nbsl z0\.d, z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u8_tied1, svuint8_t,
+ z0 = svnbsl_u8 (z0, z1, z2),
+ z0 = svnbsl (z0, z1, z2))
+
+/*
+** nbsl_u8_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u8_tied2, svuint8_t,
+ z0 = svnbsl_u8 (z1, z0, z2),
+ z0 = svnbsl (z1, z0, z2))
+
+/*
+** nbsl_u8_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u8_tied3, svuint8_t,
+ z0 = svnbsl_u8 (z1, z2, z0),
+ z0 = svnbsl (z1, z2, z0))
+
+/*
+** nbsl_u8_untied:
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_u8_untied, svuint8_t,
+ z0 = svnbsl_u8 (z1, z2, z3),
+ z0 = svnbsl (z1, z2, z3))
+
+/*
+** nbsl_w0_u8_tied1:
+** mov (z[0-9]+)\.b, w0
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svnbsl_n_u8 (z0, z1, x0),
+ z0 = svnbsl (z0, z1, x0))
+
+/*
+** nbsl_w0_u8_tied2:
+** mov (z[0-9]+)\.b, w0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_u8_tied2, svuint8_t, uint8_t,
+ z0 = svnbsl_n_u8 (z1, z0, x0),
+ z0 = svnbsl (z1, z0, x0))
+
+/*
+** nbsl_w0_u8_untied:
+** mov (z[0-9]+)\.b, w0
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (nbsl_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svnbsl_n_u8 (z1, z2, x0),
+ z0 = svnbsl (z1, z2, x0))
+
+/*
+** nbsl_11_u8_tied1:
+** mov (z[0-9]+)\.b, #11
+** nbsl z0\.d, z0\.d, z1\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u8_tied1, svuint8_t,
+ z0 = svnbsl_n_u8 (z0, z1, 11),
+ z0 = svnbsl (z0, z1, 11))
+
+/*
+** nbsl_11_u8_tied2:
+** mov (z[0-9]+)\.b, #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, \2, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u8_tied2, svuint8_t,
+ z0 = svnbsl_n_u8 (z1, z0, 11),
+ z0 = svnbsl (z1, z0, 11))
+
+/*
+** nbsl_11_u8_untied:
+** mov (z[0-9]+)\.b, #11
+** movprfx z0, z1
+** nbsl z0\.d, z0\.d, z2\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (nbsl_11_u8_untied, svuint8_t,
+ z0 = svnbsl_n_u8 (z1, z2, 11),
+ z0 = svnbsl (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nmatch_s16_tied:
+** nmatch p0\.h, p0/z, z0\.h, z1\.h
+** ret
+*/
+TEST_COMPARE_Z (nmatch_s16_tied, svint16_t,
+ p0 = svnmatch_s16 (p0, z0, z1),
+ p0 = svnmatch (p0, z0, z1))
+
+/*
+** nmatch_s16_untied:
+** nmatch p0\.h, p1/z, z0\.h, z1\.h
+** ret
+*/
+TEST_COMPARE_Z (nmatch_s16_untied, svint16_t,
+ p0 = svnmatch_s16 (p1, z0, z1),
+ p0 = svnmatch (p1, z0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nmatch_s8_tied:
+** nmatch p0\.b, p0/z, z0\.b, z1\.b
+** ret
+*/
+TEST_COMPARE_Z (nmatch_s8_tied, svint8_t,
+ p0 = svnmatch_s8 (p0, z0, z1),
+ p0 = svnmatch (p0, z0, z1))
+
+/*
+** nmatch_s8_untied:
+** nmatch p0\.b, p1/z, z0\.b, z1\.b
+** ret
+*/
+TEST_COMPARE_Z (nmatch_s8_untied, svint8_t,
+ p0 = svnmatch_s8 (p1, z0, z1),
+ p0 = svnmatch (p1, z0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nmatch_u16_tied:
+** nmatch p0\.h, p0/z, z0\.h, z1\.h
+** ret
+*/
+TEST_COMPARE_Z (nmatch_u16_tied, svuint16_t,
+ p0 = svnmatch_u16 (p0, z0, z1),
+ p0 = svnmatch (p0, z0, z1))
+
+/*
+** nmatch_u16_untied:
+** nmatch p0\.h, p1/z, z0\.h, z1\.h
+** ret
+*/
+TEST_COMPARE_Z (nmatch_u16_untied, svuint16_t,
+ p0 = svnmatch_u16 (p1, z0, z1),
+ p0 = svnmatch (p1, z0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** nmatch_u8_tied:
+** nmatch p0\.b, p0/z, z0\.b, z1\.b
+** ret
+*/
+TEST_COMPARE_Z (nmatch_u8_tied, svuint8_t,
+ p0 = svnmatch_u8 (p0, z0, z1),
+ p0 = svnmatch (p0, z0, z1))
+
+/*
+** nmatch_u8_untied:
+** nmatch p0\.b, p1/z, z0\.b, z1\.b
+** ret
+*/
+TEST_COMPARE_Z (nmatch_u8_untied, svuint8_t,
+ p0 = svnmatch_u8 (p1, z0, z1),
+ p0 = svnmatch (p1, z0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** pmul_u8_tied1:
+** pmul z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (pmul_u8_tied1, svuint8_t,
+ z0 = svpmul_u8 (z0, z1),
+ z0 = svpmul (z0, z1))
+
+/*
+** pmul_u8_tied2:
+** pmul z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (pmul_u8_tied2, svuint8_t,
+ z0 = svpmul_u8 (z1, z0),
+ z0 = svpmul (z1, z0))
+
+/*
+** pmul_u8_untied:
+** pmul z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (pmul_u8_untied, svuint8_t,
+ z0 = svpmul_u8 (z1, z2),
+ z0 = svpmul (z1, z2))
+
+/*
+** pmul_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** pmul z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmul_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svpmul_n_u8 (z0, x0),
+ z0 = svpmul (z0, x0))
+
+/*
+** pmul_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** pmul z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmul_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svpmul_n_u8 (z1, x0),
+ z0 = svpmul (z1, x0))
+
+/*
+** pmul_11_u8_tied1:
+** mov (z[0-9]+\.b), #11
+** pmul z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmul_11_u8_tied1, svuint8_t,
+ z0 = svpmul_n_u8 (z0, 11),
+ z0 = svpmul (z0, 11))
+
+/*
+** pmul_11_u8_untied:
+** mov (z[0-9]+\.b), #11
+** pmul z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmul_11_u8_untied, svuint8_t,
+ z0 = svpmul_n_u8 (z1, 11),
+ z0 = svpmul (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** pmullb_pair_u32_tied1:
+** pmullb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_u32_tied1, svuint32_t,
+ z0 = svpmullb_pair_u32 (z0, z1),
+ z0 = svpmullb_pair (z0, z1))
+
+/*
+** pmullb_pair_u32_tied2:
+** pmullb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_u32_tied2, svuint32_t,
+ z0 = svpmullb_pair_u32 (z1, z0),
+ z0 = svpmullb_pair (z1, z0))
+
+/*
+** pmullb_pair_u32_untied:
+** pmullb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_u32_untied, svuint32_t,
+ z0 = svpmullb_pair_u32 (z1, z2),
+ z0 = svpmullb_pair (z1, z2))
+
+/*
+** pmullb_pair_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** pmullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullb_pair_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svpmullb_pair_n_u32 (z0, x0),
+ z0 = svpmullb_pair (z0, x0))
+
+/*
+** pmullb_pair_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** pmullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullb_pair_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svpmullb_pair_n_u32 (z1, x0),
+ z0 = svpmullb_pair (z1, x0))
+
+/*
+** pmullb_pair_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** pmullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_11_u32_tied1, svuint32_t,
+ z0 = svpmullb_pair_n_u32 (z0, 11),
+ z0 = svpmullb_pair (z0, 11))
+
+/*
+** pmullb_pair_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** pmullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_11_u32_untied, svuint32_t,
+ z0 = svpmullb_pair_n_u32 (z1, 11),
+ z0 = svpmullb_pair (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-aes"
+
+/*
+** pmullb_pair_u64_tied1:
+** pmullb z0\.q, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_u64_tied1, svuint64_t,
+ z0 = svpmullb_pair_u64 (z0, z1),
+ z0 = svpmullb_pair (z0, z1))
+
+/*
+** pmullb_pair_u64_tied2:
+** pmullb z0\.q, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_u64_tied2, svuint64_t,
+ z0 = svpmullb_pair_u64 (z1, z0),
+ z0 = svpmullb_pair (z1, z0))
+
+/*
+** pmullb_pair_u64_untied:
+** pmullb z0\.q, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_u64_untied, svuint64_t,
+ z0 = svpmullb_pair_u64 (z1, z2),
+ z0 = svpmullb_pair (z1, z2))
+
+/*
+** pmullb_pair_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** pmullb z0\.q, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullb_pair_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svpmullb_pair_n_u64 (z0, x0),
+ z0 = svpmullb_pair (z0, x0))
+
+/*
+** pmullb_pair_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** pmullb z0\.q, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullb_pair_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svpmullb_pair_n_u64 (z1, x0),
+ z0 = svpmullb_pair (z1, x0))
+
+/*
+** pmullb_pair_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** pmullb z0\.q, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_11_u64_tied1, svuint64_t,
+ z0 = svpmullb_pair_n_u64 (z0, 11),
+ z0 = svpmullb_pair (z0, 11))
+
+/*
+** pmullb_pair_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** pmullb z0\.q, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_11_u64_untied, svuint64_t,
+ z0 = svpmullb_pair_n_u64 (z1, 11),
+ z0 = svpmullb_pair (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** pmullb_pair_u8_tied1:
+** pmullb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_u8_tied1, svuint8_t,
+ z0 = svpmullb_pair_u8 (z0, z1),
+ z0 = svpmullb_pair (z0, z1))
+
+/*
+** pmullb_pair_u8_tied2:
+** pmullb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_u8_tied2, svuint8_t,
+ z0 = svpmullb_pair_u8 (z1, z0),
+ z0 = svpmullb_pair (z1, z0))
+
+/*
+** pmullb_pair_u8_untied:
+** pmullb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_u8_untied, svuint8_t,
+ z0 = svpmullb_pair_u8 (z1, z2),
+ z0 = svpmullb_pair (z1, z2))
+
+/*
+** pmullb_pair_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** pmullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullb_pair_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svpmullb_pair_n_u8 (z0, x0),
+ z0 = svpmullb_pair (z0, x0))
+
+/*
+** pmullb_pair_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** pmullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullb_pair_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svpmullb_pair_n_u8 (z1, x0),
+ z0 = svpmullb_pair (z1, x0))
+
+/*
+** pmullb_pair_11_u8_tied1:
+** mov (z[0-9]+\.b), #11
+** pmullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_11_u8_tied1, svuint8_t,
+ z0 = svpmullb_pair_n_u8 (z0, 11),
+ z0 = svpmullb_pair (z0, 11))
+
+/*
+** pmullb_pair_11_u8_untied:
+** mov (z[0-9]+\.b), #11
+** pmullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullb_pair_11_u8_untied, svuint8_t,
+ z0 = svpmullb_pair_n_u8 (z1, 11),
+ z0 = svpmullb_pair (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** pmullb_u16_tied1:
+** pmullb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svpmullb_u16 (z0, z1),
+ z0_res = svpmullb (z0, z1))
+
+/*
+** pmullb_u16_tied2:
+** pmullb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svpmullb_u16 (z1, z0),
+ z0_res = svpmullb (z1, z0))
+
+/*
+** pmullb_u16_untied:
+** pmullb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svpmullb_u16 (z1, z2),
+ z0_res = svpmullb (z1, z2))
+
+/*
+** pmullb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** pmullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (pmullb_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svpmullb_n_u16 (z0, x0),
+ z0_res = svpmullb (z0, x0))
+
+/*
+** pmullb_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** pmullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (pmullb_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svpmullb_n_u16 (z1, x0),
+ z0_res = svpmullb (z1, x0))
+
+/*
+** pmullb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** pmullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svpmullb_n_u16 (z0, 11),
+ z0_res = svpmullb (z0, 11))
+
+/*
+** pmullb_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** pmullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svpmullb_n_u16 (z1, 11),
+ z0_res = svpmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** pmullb_u64_tied1:
+** pmullb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svpmullb_u64 (z0, z1),
+ z0_res = svpmullb (z0, z1))
+
+/*
+** pmullb_u64_tied2:
+** pmullb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svpmullb_u64 (z1, z0),
+ z0_res = svpmullb (z1, z0))
+
+/*
+** pmullb_u64_untied:
+** pmullb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svpmullb_u64 (z1, z2),
+ z0_res = svpmullb (z1, z2))
+
+/*
+** pmullb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** pmullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (pmullb_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svpmullb_n_u64 (z0, x0),
+ z0_res = svpmullb (z0, x0))
+
+/*
+** pmullb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** pmullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (pmullb_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svpmullb_n_u64 (z1, x0),
+ z0_res = svpmullb (z1, x0))
+
+/*
+** pmullb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** pmullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svpmullb_n_u64 (z0, 11),
+ z0_res = svpmullb (z0, 11))
+
+/*
+** pmullb_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** pmullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullb_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svpmullb_n_u64 (z1, 11),
+ z0_res = svpmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** pmullt_pair_u32_tied1:
+** pmullt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_u32_tied1, svuint32_t,
+ z0 = svpmullt_pair_u32 (z0, z1),
+ z0 = svpmullt_pair (z0, z1))
+
+/*
+** pmullt_pair_u32_tied2:
+** pmullt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_u32_tied2, svuint32_t,
+ z0 = svpmullt_pair_u32 (z1, z0),
+ z0 = svpmullt_pair (z1, z0))
+
+/*
+** pmullt_pair_u32_untied:
+** pmullt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_u32_untied, svuint32_t,
+ z0 = svpmullt_pair_u32 (z1, z2),
+ z0 = svpmullt_pair (z1, z2))
+
+/*
+** pmullt_pair_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** pmullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullt_pair_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svpmullt_pair_n_u32 (z0, x0),
+ z0 = svpmullt_pair (z0, x0))
+
+/*
+** pmullt_pair_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** pmullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullt_pair_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svpmullt_pair_n_u32 (z1, x0),
+ z0 = svpmullt_pair (z1, x0))
+
+/*
+** pmullt_pair_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** pmullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_11_u32_tied1, svuint32_t,
+ z0 = svpmullt_pair_n_u32 (z0, 11),
+ z0 = svpmullt_pair (z0, 11))
+
+/*
+** pmullt_pair_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** pmullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_11_u32_untied, svuint32_t,
+ z0 = svpmullt_pair_n_u32 (z1, 11),
+ z0 = svpmullt_pair (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-aes"
+
+/*
+** pmullt_pair_u64_tied1:
+** pmullt z0\.q, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_u64_tied1, svuint64_t,
+ z0 = svpmullt_pair_u64 (z0, z1),
+ z0 = svpmullt_pair (z0, z1))
+
+/*
+** pmullt_pair_u64_tied2:
+** pmullt z0\.q, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_u64_tied2, svuint64_t,
+ z0 = svpmullt_pair_u64 (z1, z0),
+ z0 = svpmullt_pair (z1, z0))
+
+/*
+** pmullt_pair_u64_untied:
+** pmullt z0\.q, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_u64_untied, svuint64_t,
+ z0 = svpmullt_pair_u64 (z1, z2),
+ z0 = svpmullt_pair (z1, z2))
+
+/*
+** pmullt_pair_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** pmullt z0\.q, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullt_pair_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svpmullt_pair_n_u64 (z0, x0),
+ z0 = svpmullt_pair (z0, x0))
+
+/*
+** pmullt_pair_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** pmullt z0\.q, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullt_pair_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svpmullt_pair_n_u64 (z1, x0),
+ z0 = svpmullt_pair (z1, x0))
+
+/*
+** pmullt_pair_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** pmullt z0\.q, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_11_u64_tied1, svuint64_t,
+ z0 = svpmullt_pair_n_u64 (z0, 11),
+ z0 = svpmullt_pair (z0, 11))
+
+/*
+** pmullt_pair_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** pmullt z0\.q, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_11_u64_untied, svuint64_t,
+ z0 = svpmullt_pair_n_u64 (z1, 11),
+ z0 = svpmullt_pair (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** pmullt_pair_u8_tied1:
+** pmullt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_u8_tied1, svuint8_t,
+ z0 = svpmullt_pair_u8 (z0, z1),
+ z0 = svpmullt_pair (z0, z1))
+
+/*
+** pmullt_pair_u8_tied2:
+** pmullt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_u8_tied2, svuint8_t,
+ z0 = svpmullt_pair_u8 (z1, z0),
+ z0 = svpmullt_pair (z1, z0))
+
+/*
+** pmullt_pair_u8_untied:
+** pmullt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_u8_untied, svuint8_t,
+ z0 = svpmullt_pair_u8 (z1, z2),
+ z0 = svpmullt_pair (z1, z2))
+
+/*
+** pmullt_pair_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** pmullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullt_pair_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svpmullt_pair_n_u8 (z0, x0),
+ z0 = svpmullt_pair (z0, x0))
+
+/*
+** pmullt_pair_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** pmullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (pmullt_pair_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svpmullt_pair_n_u8 (z1, x0),
+ z0 = svpmullt_pair (z1, x0))
+
+/*
+** pmullt_pair_11_u8_tied1:
+** mov (z[0-9]+\.b), #11
+** pmullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_11_u8_tied1, svuint8_t,
+ z0 = svpmullt_pair_n_u8 (z0, 11),
+ z0 = svpmullt_pair (z0, 11))
+
+/*
+** pmullt_pair_11_u8_untied:
+** mov (z[0-9]+\.b), #11
+** pmullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (pmullt_pair_11_u8_untied, svuint8_t,
+ z0 = svpmullt_pair_n_u8 (z1, 11),
+ z0 = svpmullt_pair (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** pmullt_u16_tied1:
+** pmullt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svpmullt_u16 (z0, z1),
+ z0_res = svpmullt (z0, z1))
+
+/*
+** pmullt_u16_tied2:
+** pmullt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svpmullt_u16 (z1, z0),
+ z0_res = svpmullt (z1, z0))
+
+/*
+** pmullt_u16_untied:
+** pmullt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svpmullt_u16 (z1, z2),
+ z0_res = svpmullt (z1, z2))
+
+/*
+** pmullt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** pmullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (pmullt_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svpmullt_n_u16 (z0, x0),
+ z0_res = svpmullt (z0, x0))
+
+/*
+** pmullt_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** pmullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (pmullt_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svpmullt_n_u16 (z1, x0),
+ z0_res = svpmullt (z1, x0))
+
+/*
+** pmullt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** pmullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svpmullt_n_u16 (z0, 11),
+ z0_res = svpmullt (z0, 11))
+
+/*
+** pmullt_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** pmullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svpmullt_n_u16 (z1, 11),
+ z0_res = svpmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** pmullt_u64_tied1:
+** pmullt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svpmullt_u64 (z0, z1),
+ z0_res = svpmullt (z0, z1))
+
+/*
+** pmullt_u64_tied2:
+** pmullt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svpmullt_u64 (z1, z0),
+ z0_res = svpmullt (z1, z0))
+
+/*
+** pmullt_u64_untied:
+** pmullt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svpmullt_u64 (z1, z2),
+ z0_res = svpmullt (z1, z2))
+
+/*
+** pmullt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** pmullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (pmullt_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svpmullt_n_u64 (z0, x0),
+ z0_res = svpmullt (z0, x0))
+
+/*
+** pmullt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** pmullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (pmullt_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svpmullt_n_u64 (z1, x0),
+ z0_res = svpmullt (z1, x0))
+
+/*
+** pmullt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** pmullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svpmullt_n_u64 (z0, 11),
+ z0_res = svpmullt (z0, 11))
+
+/*
+** pmullt_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** pmullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (pmullt_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svpmullt_n_u64 (z1, 11),
+ z0_res = svpmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qabs_s16_m_tied12:
+** sqabs z0\.h, p0/m, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s16_m_tied12, svint16_t,
+ z0 = svqabs_s16_m (z0, p0, z0),
+ z0 = svqabs_m (z0, p0, z0))
+
+/*
+** qabs_s16_m_tied1:
+** sqabs z0\.h, p0/m, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s16_m_tied1, svint16_t,
+ z0 = svqabs_s16_m (z0, p0, z1),
+ z0 = svqabs_m (z0, p0, z1))
+
+/*
+** qabs_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqabs z0\.h, p0/m, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s16_m_tied2, svint16_t,
+ z0 = svqabs_s16_m (z1, p0, z0),
+ z0 = svqabs_m (z1, p0, z0))
+
+/*
+** qabs_s16_m_untied:
+** movprfx z0, z2
+** sqabs z0\.h, p0/m, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s16_m_untied, svint16_t,
+ z0 = svqabs_s16_m (z2, p0, z1),
+ z0 = svqabs_m (z2, p0, z1))
+
+/*
+** qabs_s16_z_tied1:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.h, p0/z, \1\.h
+** sqabs z0\.h, p0/m, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s16_z_tied1, svint16_t,
+ z0 = svqabs_s16_z (p0, z0),
+ z0 = svqabs_z (p0, z0))
+
+/*
+** qabs_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** sqabs z0\.h, p0/m, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s16_z_untied, svint16_t,
+ z0 = svqabs_s16_z (p0, z1),
+ z0 = svqabs_z (p0, z1))
+
+/*
+** qabs_s16_x_tied1:
+** sqabs z0\.h, p0/m, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s16_x_tied1, svint16_t,
+ z0 = svqabs_s16_x (p0, z0),
+ z0 = svqabs_x (p0, z0))
+
+/*
+** qabs_s16_x_untied:
+** sqabs z0\.h, p0/m, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s16_x_untied, svint16_t,
+ z0 = svqabs_s16_x (p0, z1),
+ z0 = svqabs_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qabs_s32_m_tied12:
+** sqabs z0\.s, p0/m, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s32_m_tied12, svint32_t,
+ z0 = svqabs_s32_m (z0, p0, z0),
+ z0 = svqabs_m (z0, p0, z0))
+
+/*
+** qabs_s32_m_tied1:
+** sqabs z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s32_m_tied1, svint32_t,
+ z0 = svqabs_s32_m (z0, p0, z1),
+ z0 = svqabs_m (z0, p0, z1))
+
+/*
+** qabs_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqabs z0\.s, p0/m, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s32_m_tied2, svint32_t,
+ z0 = svqabs_s32_m (z1, p0, z0),
+ z0 = svqabs_m (z1, p0, z0))
+
+/*
+** qabs_s32_m_untied:
+** movprfx z0, z2
+** sqabs z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s32_m_untied, svint32_t,
+ z0 = svqabs_s32_m (z2, p0, z1),
+ z0 = svqabs_m (z2, p0, z1))
+
+/*
+** qabs_s32_z_tied1:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.s, p0/z, \1\.s
+** sqabs z0\.s, p0/m, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s32_z_tied1, svint32_t,
+ z0 = svqabs_s32_z (p0, z0),
+ z0 = svqabs_z (p0, z0))
+
+/*
+** qabs_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** sqabs z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s32_z_untied, svint32_t,
+ z0 = svqabs_s32_z (p0, z1),
+ z0 = svqabs_z (p0, z1))
+
+/*
+** qabs_s32_x_tied1:
+** sqabs z0\.s, p0/m, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s32_x_tied1, svint32_t,
+ z0 = svqabs_s32_x (p0, z0),
+ z0 = svqabs_x (p0, z0))
+
+/*
+** qabs_s32_x_untied:
+** sqabs z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s32_x_untied, svint32_t,
+ z0 = svqabs_s32_x (p0, z1),
+ z0 = svqabs_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qabs_s64_m_tied12:
+** sqabs z0\.d, p0/m, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s64_m_tied12, svint64_t,
+ z0 = svqabs_s64_m (z0, p0, z0),
+ z0 = svqabs_m (z0, p0, z0))
+
+/*
+** qabs_s64_m_tied1:
+** sqabs z0\.d, p0/m, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s64_m_tied1, svint64_t,
+ z0 = svqabs_s64_m (z0, p0, z1),
+ z0 = svqabs_m (z0, p0, z1))
+
+/*
+** qabs_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqabs z0\.d, p0/m, \1
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s64_m_tied2, svint64_t,
+ z0 = svqabs_s64_m (z1, p0, z0),
+ z0 = svqabs_m (z1, p0, z0))
+
+/*
+** qabs_s64_m_untied:
+** movprfx z0, z2
+** sqabs z0\.d, p0/m, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s64_m_untied, svint64_t,
+ z0 = svqabs_s64_m (z2, p0, z1),
+ z0 = svqabs_m (z2, p0, z1))
+
+/*
+** qabs_s64_z_tied1:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0\.d, p0/z, \1
+** sqabs z0\.d, p0/m, \1
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s64_z_tied1, svint64_t,
+ z0 = svqabs_s64_z (p0, z0),
+ z0 = svqabs_z (p0, z0))
+
+/*
+** qabs_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** sqabs z0\.d, p0/m, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s64_z_untied, svint64_t,
+ z0 = svqabs_s64_z (p0, z1),
+ z0 = svqabs_z (p0, z1))
+
+/*
+** qabs_s64_x_tied1:
+** sqabs z0\.d, p0/m, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s64_x_tied1, svint64_t,
+ z0 = svqabs_s64_x (p0, z0),
+ z0 = svqabs_x (p0, z0))
+
+/*
+** qabs_s64_x_untied:
+** sqabs z0\.d, p0/m, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s64_x_untied, svint64_t,
+ z0 = svqabs_s64_x (p0, z1),
+ z0 = svqabs_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qabs_s8_m_tied12:
+** sqabs z0\.b, p0/m, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s8_m_tied12, svint8_t,
+ z0 = svqabs_s8_m (z0, p0, z0),
+ z0 = svqabs_m (z0, p0, z0))
+
+/*
+** qabs_s8_m_tied1:
+** sqabs z0\.b, p0/m, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s8_m_tied1, svint8_t,
+ z0 = svqabs_s8_m (z0, p0, z1),
+ z0 = svqabs_m (z0, p0, z1))
+
+/*
+** qabs_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqabs z0\.b, p0/m, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s8_m_tied2, svint8_t,
+ z0 = svqabs_s8_m (z1, p0, z0),
+ z0 = svqabs_m (z1, p0, z0))
+
+/*
+** qabs_s8_m_untied:
+** movprfx z0, z2
+** sqabs z0\.b, p0/m, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s8_m_untied, svint8_t,
+ z0 = svqabs_s8_m (z2, p0, z1),
+ z0 = svqabs_m (z2, p0, z1))
+
+/*
+** qabs_s8_z_tied1:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.b, p0/z, \1\.b
+** sqabs z0\.b, p0/m, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s8_z_tied1, svint8_t,
+ z0 = svqabs_s8_z (p0, z0),
+ z0 = svqabs_z (p0, z0))
+
+/*
+** qabs_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** sqabs z0\.b, p0/m, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s8_z_untied, svint8_t,
+ z0 = svqabs_s8_z (p0, z1),
+ z0 = svqabs_z (p0, z1))
+
+/*
+** qabs_s8_x_tied1:
+** sqabs z0\.b, p0/m, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s8_x_tied1, svint8_t,
+ z0 = svqabs_s8_x (p0, z0),
+ z0 = svqabs_x (p0, z0))
+
+/*
+** qabs_s8_x_untied:
+** sqabs z0\.b, p0/m, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qabs_s8_x_untied, svint8_t,
+ z0 = svqabs_s8_x (p0, z1),
+ z0 = svqabs_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qadd_s16_tied1:
+** sqadd z0\.h, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_tied1, svint16_t,
+ z0 = svqadd_s16 (z0, z1),
+ z0 = svqadd (z0, z1))
+
+/*
+** qadd_s16_tied2:
+** sqadd z0\.h, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_tied2, svint16_t,
+ z0 = svqadd_s16 (z1, z0),
+ z0 = svqadd (z1, z0))
+
+/*
+** qadd_s16_untied:
+** sqadd z0\.h, (z1\.h, z2\.h|z2\.h, z1\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_untied, svint16_t,
+ z0 = svqadd_s16 (z1, z2),
+ z0 = svqadd (z1, z2))
+
+/*
+** qadd_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** sqadd z0\.h, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svqadd_n_s16 (z0, x0),
+ z0 = svqadd (z0, x0))
+
+/*
+** qadd_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** sqadd z0\.h, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s16_untied, svint16_t, int16_t,
+ z0 = svqadd_n_s16 (z1, x0),
+ z0 = svqadd (z1, x0))
+
+/*
+** qadd_1_s16_tied1:
+** sqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s16_tied1, svint16_t,
+ z0 = svqadd_n_s16 (z0, 1),
+ z0 = svqadd (z0, 1))
+
+/*
+** qadd_1_s16_untied:
+** movprfx z0, z1
+** sqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s16_untied, svint16_t,
+ z0 = svqadd_n_s16 (z1, 1),
+ z0 = svqadd (z1, 1))
+
+/*
+** qadd_127_s16:
+** sqadd z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s16, svint16_t,
+ z0 = svqadd_n_s16 (z0, 127),
+ z0 = svqadd (z0, 127))
+
+/*
+** qadd_128_s16:
+** sqadd z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s16, svint16_t,
+ z0 = svqadd_n_s16 (z0, 128),
+ z0 = svqadd (z0, 128))
+
+/*
+** qadd_255_s16:
+** sqadd z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s16, svint16_t,
+ z0 = svqadd_n_s16 (z0, 255),
+ z0 = svqadd (z0, 255))
+
+/*
+** qadd_m1_s16:
+** sqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s16, svint16_t,
+ z0 = svqadd_n_s16 (z0, -1),
+ z0 = svqadd (z0, -1))
+
+/*
+** qadd_m127_s16:
+** sqsub z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s16, svint16_t,
+ z0 = svqadd_n_s16 (z0, -127),
+ z0 = svqadd (z0, -127))
+
+/*
+** qadd_m128_s16:
+** sqsub z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s16, svint16_t,
+ z0 = svqadd_n_s16 (z0, -128),
+ z0 = svqadd (z0, -128))
+
+/*
+** qadd_s16_m_tied1:
+** sqadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_m_tied1, svint16_t,
+ z0 = svqadd_s16_m (p0, z0, z1),
+ z0 = svqadd_m (p0, z0, z1))
+
+/*
+** qadd_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_m_tied2, svint16_t,
+ z0 = svqadd_s16_m (p0, z1, z0),
+ z0 = svqadd_m (p0, z1, z0))
+
+/*
+** qadd_s16_m_untied:
+** movprfx z0, z1
+** sqadd z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_m_untied, svint16_t,
+ z0 = svqadd_s16_m (p0, z1, z2),
+ z0 = svqadd_m (p0, z1, z2))
+
+/*
+** qadd_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svqadd_n_s16_m (p0, z0, x0),
+ z0 = svqadd_m (p0, z0, x0))
+
+/*
+** qadd_w0_s16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svqadd_n_s16_m (p0, z1, x0),
+ z0 = svqadd_m (p0, z1, x0))
+
+/*
+** qadd_1_s16_m_tied1:
+** mov (z[0-9]+\.h), #1
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s16_m_tied1, svint16_t,
+ z0 = svqadd_n_s16_m (p0, z0, 1),
+ z0 = svqadd_m (p0, z0, 1))
+
+/*
+** qadd_1_s16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), #1
+** movprfx z0, z1
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s16_m_untied, svint16_t,
+ z0 = svqadd_n_s16_m (p0, z1, 1),
+ z0 = svqadd_m (p0, z1, 1))
+
+/*
+** qadd_127_s16_m:
+** mov (z[0-9]+\.h), #127
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s16_m, svint16_t,
+ z0 = svqadd_n_s16_m (p0, z0, 127),
+ z0 = svqadd_m (p0, z0, 127))
+
+/*
+** qadd_128_s16_m:
+** mov (z[0-9]+\.h), #128
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s16_m, svint16_t,
+ z0 = svqadd_n_s16_m (p0, z0, 128),
+ z0 = svqadd_m (p0, z0, 128))
+
+/*
+** qadd_255_s16_m:
+** mov (z[0-9]+\.h), #255
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s16_m, svint16_t,
+ z0 = svqadd_n_s16_m (p0, z0, 255),
+ z0 = svqadd_m (p0, z0, 255))
+
+/*
+** qadd_m1_s16_m:
+** mov (z[0-9]+)\.b, #-1
+** sqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s16_m, svint16_t,
+ z0 = svqadd_n_s16_m (p0, z0, -1),
+ z0 = svqadd_m (p0, z0, -1))
+
+/*
+** qadd_m127_s16_m:
+** mov (z[0-9]+\.h), #-127
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s16_m, svint16_t,
+ z0 = svqadd_n_s16_m (p0, z0, -127),
+ z0 = svqadd_m (p0, z0, -127))
+
+/*
+** qadd_m128_s16_m:
+** mov (z[0-9]+\.h), #-128
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s16_m, svint16_t,
+ z0 = svqadd_n_s16_m (p0, z0, -128),
+ z0 = svqadd_m (p0, z0, -128))
+
+/*
+** qadd_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_z_tied1, svint16_t,
+ z0 = svqadd_s16_z (p0, z0, z1),
+ z0 = svqadd_z (p0, z0, z1))
+
+/*
+** qadd_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_z_tied2, svint16_t,
+ z0 = svqadd_s16_z (p0, z1, z0),
+ z0 = svqadd_z (p0, z1, z0))
+
+/*
+** qadd_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** sqadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_z_untied, svint16_t,
+ z0 = svqadd_s16_z (p0, z1, z2),
+ z0 = svqadd_z (p0, z1, z2))
+
+/*
+** qadd_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svqadd_n_s16_z (p0, z0, x0),
+ z0 = svqadd_z (p0, z0, x0))
+
+/*
+** qadd_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** sqadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svqadd_n_s16_z (p0, z1, x0),
+ z0 = svqadd_z (p0, z1, x0))
+
+/*
+** qadd_1_s16_z_tied1:
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s16_z_tied1, svint16_t,
+ z0 = svqadd_n_s16_z (p0, z0, 1),
+ z0 = svqadd_z (p0, z0, 1))
+
+/*
+** qadd_1_s16_z_untied:
+** mov (z[0-9]+\.h), #1
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** sqadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s16_z_untied, svint16_t,
+ z0 = svqadd_n_s16_z (p0, z1, 1),
+ z0 = svqadd_z (p0, z1, 1))
+
+/*
+** qadd_127_s16_z:
+** mov (z[0-9]+\.h), #127
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s16_z, svint16_t,
+ z0 = svqadd_n_s16_z (p0, z0, 127),
+ z0 = svqadd_z (p0, z0, 127))
+
+/*
+** qadd_128_s16_z:
+** mov (z[0-9]+\.h), #128
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s16_z, svint16_t,
+ z0 = svqadd_n_s16_z (p0, z0, 128),
+ z0 = svqadd_z (p0, z0, 128))
+
+/*
+** qadd_255_s16_z:
+** mov (z[0-9]+\.h), #255
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s16_z, svint16_t,
+ z0 = svqadd_n_s16_z (p0, z0, 255),
+ z0 = svqadd_z (p0, z0, 255))
+
+/*
+** qadd_m1_s16_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s16_z, svint16_t,
+ z0 = svqadd_n_s16_z (p0, z0, -1),
+ z0 = svqadd_z (p0, z0, -1))
+
+/*
+** qadd_m127_s16_z:
+** mov (z[0-9]+\.h), #-127
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s16_z, svint16_t,
+ z0 = svqadd_n_s16_z (p0, z0, -127),
+ z0 = svqadd_z (p0, z0, -127))
+
+/*
+** qadd_m128_s16_z:
+** mov (z[0-9]+\.h), #-128
+** movprfx z0\.h, p0/z, z0\.h
+** sqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s16_z, svint16_t,
+ z0 = svqadd_n_s16_z (p0, z0, -128),
+ z0 = svqadd_z (p0, z0, -128))
+
+/*
+** qadd_s16_x_tied1:
+** sqadd z0\.h, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_x_tied1, svint16_t,
+ z0 = svqadd_s16_x (p0, z0, z1),
+ z0 = svqadd_x (p0, z0, z1))
+
+/*
+** qadd_s16_x_tied2:
+** sqadd z0\.h, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_x_tied2, svint16_t,
+ z0 = svqadd_s16_x (p0, z1, z0),
+ z0 = svqadd_x (p0, z1, z0))
+
+/*
+** qadd_s16_x_untied:
+** sqadd z0\.h, (z1\.h, z2\.h|z2\.h, z1\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s16_x_untied, svint16_t,
+ z0 = svqadd_s16_x (p0, z1, z2),
+ z0 = svqadd_x (p0, z1, z2))
+
+/*
+** qadd_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** sqadd z0\.h, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svqadd_n_s16_x (p0, z0, x0),
+ z0 = svqadd_x (p0, z0, x0))
+
+/*
+** qadd_w0_s16_x_untied:
+** mov (z[0-9]+\.h), w0
+** sqadd z0\.h, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svqadd_n_s16_x (p0, z1, x0),
+ z0 = svqadd_x (p0, z1, x0))
+
+/*
+** qadd_1_s16_x_tied1:
+** sqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s16_x_tied1, svint16_t,
+ z0 = svqadd_n_s16_x (p0, z0, 1),
+ z0 = svqadd_x (p0, z0, 1))
+
+/*
+** qadd_1_s16_x_untied:
+** movprfx z0, z1
+** sqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s16_x_untied, svint16_t,
+ z0 = svqadd_n_s16_x (p0, z1, 1),
+ z0 = svqadd_x (p0, z1, 1))
+
+/*
+** qadd_127_s16_x:
+** sqadd z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s16_x, svint16_t,
+ z0 = svqadd_n_s16_x (p0, z0, 127),
+ z0 = svqadd_x (p0, z0, 127))
+
+/*
+** qadd_128_s16_x:
+** sqadd z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s16_x, svint16_t,
+ z0 = svqadd_n_s16_x (p0, z0, 128),
+ z0 = svqadd_x (p0, z0, 128))
+
+/*
+** qadd_255_s16_x:
+** sqadd z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s16_x, svint16_t,
+ z0 = svqadd_n_s16_x (p0, z0, 255),
+ z0 = svqadd_x (p0, z0, 255))
+
+/*
+** qadd_m1_s16_x:
+** sqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s16_x, svint16_t,
+ z0 = svqadd_n_s16_x (p0, z0, -1),
+ z0 = svqadd_x (p0, z0, -1))
+
+/*
+** qadd_m127_s16_x:
+** sqsub z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s16_x, svint16_t,
+ z0 = svqadd_n_s16_x (p0, z0, -127),
+ z0 = svqadd_x (p0, z0, -127))
+
+/*
+** qadd_m128_s16_x:
+** sqsub z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s16_x, svint16_t,
+ z0 = svqadd_n_s16_x (p0, z0, -128),
+ z0 = svqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qadd_s32_tied1:
+** sqadd z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_tied1, svint32_t,
+ z0 = svqadd_s32 (z0, z1),
+ z0 = svqadd (z0, z1))
+
+/*
+** qadd_s32_tied2:
+** sqadd z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_tied2, svint32_t,
+ z0 = svqadd_s32 (z1, z0),
+ z0 = svqadd (z1, z0))
+
+/*
+** qadd_s32_untied:
+** sqadd z0\.s, (z1\.s, z2\.s|z2\.s, z1\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_untied, svint32_t,
+ z0 = svqadd_s32 (z1, z2),
+ z0 = svqadd (z1, z2))
+
+/*
+** qadd_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** sqadd z0\.s, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svqadd_n_s32 (z0, x0),
+ z0 = svqadd (z0, x0))
+
+/*
+** qadd_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** sqadd z0\.s, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s32_untied, svint32_t, int32_t,
+ z0 = svqadd_n_s32 (z1, x0),
+ z0 = svqadd (z1, x0))
+
+/*
+** qadd_1_s32_tied1:
+** sqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s32_tied1, svint32_t,
+ z0 = svqadd_n_s32 (z0, 1),
+ z0 = svqadd (z0, 1))
+
+/*
+** qadd_1_s32_untied:
+** movprfx z0, z1
+** sqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s32_untied, svint32_t,
+ z0 = svqadd_n_s32 (z1, 1),
+ z0 = svqadd (z1, 1))
+
+/*
+** qadd_127_s32:
+** sqadd z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s32, svint32_t,
+ z0 = svqadd_n_s32 (z0, 127),
+ z0 = svqadd (z0, 127))
+
+/*
+** qadd_128_s32:
+** sqadd z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s32, svint32_t,
+ z0 = svqadd_n_s32 (z0, 128),
+ z0 = svqadd (z0, 128))
+
+/*
+** qadd_255_s32:
+** sqadd z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s32, svint32_t,
+ z0 = svqadd_n_s32 (z0, 255),
+ z0 = svqadd (z0, 255))
+
+/*
+** qadd_m1_s32:
+** sqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s32, svint32_t,
+ z0 = svqadd_n_s32 (z0, -1),
+ z0 = svqadd (z0, -1))
+
+/*
+** qadd_m127_s32:
+** sqsub z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s32, svint32_t,
+ z0 = svqadd_n_s32 (z0, -127),
+ z0 = svqadd (z0, -127))
+
+/*
+** qadd_m128_s32:
+** sqsub z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s32, svint32_t,
+ z0 = svqadd_n_s32 (z0, -128),
+ z0 = svqadd (z0, -128))
+
+/*
+** qadd_s32_m_tied1:
+** sqadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_m_tied1, svint32_t,
+ z0 = svqadd_s32_m (p0, z0, z1),
+ z0 = svqadd_m (p0, z0, z1))
+
+/*
+** qadd_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_m_tied2, svint32_t,
+ z0 = svqadd_s32_m (p0, z1, z0),
+ z0 = svqadd_m (p0, z1, z0))
+
+/*
+** qadd_s32_m_untied:
+** movprfx z0, z1
+** sqadd z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_m_untied, svint32_t,
+ z0 = svqadd_s32_m (p0, z1, z2),
+ z0 = svqadd_m (p0, z1, z2))
+
+/*
+** qadd_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svqadd_n_s32_m (p0, z0, x0),
+ z0 = svqadd_m (p0, z0, x0))
+
+/*
+** qadd_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svqadd_n_s32_m (p0, z1, x0),
+ z0 = svqadd_m (p0, z1, x0))
+
+/*
+** qadd_1_s32_m_tied1:
+** mov (z[0-9]+\.s), #1
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s32_m_tied1, svint32_t,
+ z0 = svqadd_n_s32_m (p0, z0, 1),
+ z0 = svqadd_m (p0, z0, 1))
+
+/*
+** qadd_1_s32_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.s), #1
+** movprfx z0, z1
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s32_m_untied, svint32_t,
+ z0 = svqadd_n_s32_m (p0, z1, 1),
+ z0 = svqadd_m (p0, z1, 1))
+
+/*
+** qadd_127_s32_m:
+** mov (z[0-9]+\.s), #127
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s32_m, svint32_t,
+ z0 = svqadd_n_s32_m (p0, z0, 127),
+ z0 = svqadd_m (p0, z0, 127))
+
+/*
+** qadd_128_s32_m:
+** mov (z[0-9]+\.s), #128
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s32_m, svint32_t,
+ z0 = svqadd_n_s32_m (p0, z0, 128),
+ z0 = svqadd_m (p0, z0, 128))
+
+/*
+** qadd_255_s32_m:
+** mov (z[0-9]+\.s), #255
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s32_m, svint32_t,
+ z0 = svqadd_n_s32_m (p0, z0, 255),
+ z0 = svqadd_m (p0, z0, 255))
+
+/*
+** qadd_m1_s32_m:
+** mov (z[0-9]+)\.b, #-1
+** sqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s32_m, svint32_t,
+ z0 = svqadd_n_s32_m (p0, z0, -1),
+ z0 = svqadd_m (p0, z0, -1))
+
+/*
+** qadd_m127_s32_m:
+** mov (z[0-9]+\.s), #-127
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s32_m, svint32_t,
+ z0 = svqadd_n_s32_m (p0, z0, -127),
+ z0 = svqadd_m (p0, z0, -127))
+
+/*
+** qadd_m128_s32_m:
+** mov (z[0-9]+\.s), #-128
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s32_m, svint32_t,
+ z0 = svqadd_n_s32_m (p0, z0, -128),
+ z0 = svqadd_m (p0, z0, -128))
+
+/*
+** qadd_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_z_tied1, svint32_t,
+ z0 = svqadd_s32_z (p0, z0, z1),
+ z0 = svqadd_z (p0, z0, z1))
+
+/*
+** qadd_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_z_tied2, svint32_t,
+ z0 = svqadd_s32_z (p0, z1, z0),
+ z0 = svqadd_z (p0, z1, z0))
+
+/*
+** qadd_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** sqadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_z_untied, svint32_t,
+ z0 = svqadd_s32_z (p0, z1, z2),
+ z0 = svqadd_z (p0, z1, z2))
+
+/*
+** qadd_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svqadd_n_s32_z (p0, z0, x0),
+ z0 = svqadd_z (p0, z0, x0))
+
+/*
+** qadd_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** sqadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svqadd_n_s32_z (p0, z1, x0),
+ z0 = svqadd_z (p0, z1, x0))
+
+/*
+** qadd_1_s32_z_tied1:
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s32_z_tied1, svint32_t,
+ z0 = svqadd_n_s32_z (p0, z0, 1),
+ z0 = svqadd_z (p0, z0, 1))
+
+/*
+** qadd_1_s32_z_untied:
+** mov (z[0-9]+\.s), #1
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** sqadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s32_z_untied, svint32_t,
+ z0 = svqadd_n_s32_z (p0, z1, 1),
+ z0 = svqadd_z (p0, z1, 1))
+
+/*
+** qadd_127_s32_z:
+** mov (z[0-9]+\.s), #127
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s32_z, svint32_t,
+ z0 = svqadd_n_s32_z (p0, z0, 127),
+ z0 = svqadd_z (p0, z0, 127))
+
+/*
+** qadd_128_s32_z:
+** mov (z[0-9]+\.s), #128
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s32_z, svint32_t,
+ z0 = svqadd_n_s32_z (p0, z0, 128),
+ z0 = svqadd_z (p0, z0, 128))
+
+/*
+** qadd_255_s32_z:
+** mov (z[0-9]+\.s), #255
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s32_z, svint32_t,
+ z0 = svqadd_n_s32_z (p0, z0, 255),
+ z0 = svqadd_z (p0, z0, 255))
+
+/*
+** qadd_m1_s32_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s32_z, svint32_t,
+ z0 = svqadd_n_s32_z (p0, z0, -1),
+ z0 = svqadd_z (p0, z0, -1))
+
+/*
+** qadd_m127_s32_z:
+** mov (z[0-9]+\.s), #-127
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s32_z, svint32_t,
+ z0 = svqadd_n_s32_z (p0, z0, -127),
+ z0 = svqadd_z (p0, z0, -127))
+
+/*
+** qadd_m128_s32_z:
+** mov (z[0-9]+\.s), #-128
+** movprfx z0\.s, p0/z, z0\.s
+** sqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s32_z, svint32_t,
+ z0 = svqadd_n_s32_z (p0, z0, -128),
+ z0 = svqadd_z (p0, z0, -128))
+
+/*
+** qadd_s32_x_tied1:
+** sqadd z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_x_tied1, svint32_t,
+ z0 = svqadd_s32_x (p0, z0, z1),
+ z0 = svqadd_x (p0, z0, z1))
+
+/*
+** qadd_s32_x_tied2:
+** sqadd z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_x_tied2, svint32_t,
+ z0 = svqadd_s32_x (p0, z1, z0),
+ z0 = svqadd_x (p0, z1, z0))
+
+/*
+** qadd_s32_x_untied:
+** sqadd z0\.s, (z1\.s, z2\.s|z2\.s, z1\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s32_x_untied, svint32_t,
+ z0 = svqadd_s32_x (p0, z1, z2),
+ z0 = svqadd_x (p0, z1, z2))
+
+/*
+** qadd_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** sqadd z0\.s, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svqadd_n_s32_x (p0, z0, x0),
+ z0 = svqadd_x (p0, z0, x0))
+
+/*
+** qadd_w0_s32_x_untied:
+** mov (z[0-9]+\.s), w0
+** sqadd z0\.s, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svqadd_n_s32_x (p0, z1, x0),
+ z0 = svqadd_x (p0, z1, x0))
+
+/*
+** qadd_1_s32_x_tied1:
+** sqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s32_x_tied1, svint32_t,
+ z0 = svqadd_n_s32_x (p0, z0, 1),
+ z0 = svqadd_x (p0, z0, 1))
+
+/*
+** qadd_1_s32_x_untied:
+** movprfx z0, z1
+** sqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s32_x_untied, svint32_t,
+ z0 = svqadd_n_s32_x (p0, z1, 1),
+ z0 = svqadd_x (p0, z1, 1))
+
+/*
+** qadd_127_s32_x:
+** sqadd z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s32_x, svint32_t,
+ z0 = svqadd_n_s32_x (p0, z0, 127),
+ z0 = svqadd_x (p0, z0, 127))
+
+/*
+** qadd_128_s32_x:
+** sqadd z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s32_x, svint32_t,
+ z0 = svqadd_n_s32_x (p0, z0, 128),
+ z0 = svqadd_x (p0, z0, 128))
+
+/*
+** qadd_255_s32_x:
+** sqadd z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s32_x, svint32_t,
+ z0 = svqadd_n_s32_x (p0, z0, 255),
+ z0 = svqadd_x (p0, z0, 255))
+
+/*
+** qadd_m1_s32_x:
+** sqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s32_x, svint32_t,
+ z0 = svqadd_n_s32_x (p0, z0, -1),
+ z0 = svqadd_x (p0, z0, -1))
+
+/*
+** qadd_m127_s32_x:
+** sqsub z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s32_x, svint32_t,
+ z0 = svqadd_n_s32_x (p0, z0, -127),
+ z0 = svqadd_x (p0, z0, -127))
+
+/*
+** qadd_m128_s32_x:
+** sqsub z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s32_x, svint32_t,
+ z0 = svqadd_n_s32_x (p0, z0, -128),
+ z0 = svqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qadd_s64_tied1:
+** sqadd z0\.d, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_tied1, svint64_t,
+ z0 = svqadd_s64 (z0, z1),
+ z0 = svqadd (z0, z1))
+
+/*
+** qadd_s64_tied2:
+** sqadd z0\.d, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_tied2, svint64_t,
+ z0 = svqadd_s64 (z1, z0),
+ z0 = svqadd (z1, z0))
+
+/*
+** qadd_s64_untied:
+** sqadd z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_untied, svint64_t,
+ z0 = svqadd_s64 (z1, z2),
+ z0 = svqadd (z1, z2))
+
+/*
+** qadd_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** sqadd z0\.d, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svqadd_n_s64 (z0, x0),
+ z0 = svqadd (z0, x0))
+
+/*
+** qadd_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** sqadd z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_s64_untied, svint64_t, int64_t,
+ z0 = svqadd_n_s64 (z1, x0),
+ z0 = svqadd (z1, x0))
+
+/*
+** qadd_1_s64_tied1:
+** sqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s64_tied1, svint64_t,
+ z0 = svqadd_n_s64 (z0, 1),
+ z0 = svqadd (z0, 1))
+
+/*
+** qadd_1_s64_untied:
+** movprfx z0, z1
+** sqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s64_untied, svint64_t,
+ z0 = svqadd_n_s64 (z1, 1),
+ z0 = svqadd (z1, 1))
+
+/*
+** qadd_127_s64:
+** sqadd z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s64, svint64_t,
+ z0 = svqadd_n_s64 (z0, 127),
+ z0 = svqadd (z0, 127))
+
+/*
+** qadd_128_s64:
+** sqadd z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s64, svint64_t,
+ z0 = svqadd_n_s64 (z0, 128),
+ z0 = svqadd (z0, 128))
+
+/*
+** qadd_255_s64:
+** sqadd z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s64, svint64_t,
+ z0 = svqadd_n_s64 (z0, 255),
+ z0 = svqadd (z0, 255))
+
+/*
+** qadd_m1_s64:
+** sqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s64, svint64_t,
+ z0 = svqadd_n_s64 (z0, -1),
+ z0 = svqadd (z0, -1))
+
+/*
+** qadd_m127_s64:
+** sqsub z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s64, svint64_t,
+ z0 = svqadd_n_s64 (z0, -127),
+ z0 = svqadd (z0, -127))
+
+/*
+** qadd_m128_s64:
+** sqsub z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s64, svint64_t,
+ z0 = svqadd_n_s64 (z0, -128),
+ z0 = svqadd (z0, -128))
+
+/*
+** qadd_s64_m_tied1:
+** sqadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_m_tied1, svint64_t,
+ z0 = svqadd_s64_m (p0, z0, z1),
+ z0 = svqadd_m (p0, z0, z1))
+
+/*
+** qadd_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_m_tied2, svint64_t,
+ z0 = svqadd_s64_m (p0, z1, z0),
+ z0 = svqadd_m (p0, z1, z0))
+
+/*
+** qadd_s64_m_untied:
+** movprfx z0, z1
+** sqadd z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_m_untied, svint64_t,
+ z0 = svqadd_s64_m (p0, z1, z2),
+ z0 = svqadd_m (p0, z1, z2))
+
+/*
+** qadd_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svqadd_n_s64_m (p0, z0, x0),
+ z0 = svqadd_m (p0, z0, x0))
+
+/*
+** qadd_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svqadd_n_s64_m (p0, z1, x0),
+ z0 = svqadd_m (p0, z1, x0))
+
+/*
+** qadd_1_s64_m_tied1:
+** mov (z[0-9]+\.d), #1
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s64_m_tied1, svint64_t,
+ z0 = svqadd_n_s64_m (p0, z0, 1),
+ z0 = svqadd_m (p0, z0, 1))
+
+/*
+** qadd_1_s64_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.d), #1
+** movprfx z0, z1
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s64_m_untied, svint64_t,
+ z0 = svqadd_n_s64_m (p0, z1, 1),
+ z0 = svqadd_m (p0, z1, 1))
+
+/*
+** qadd_127_s64_m:
+** mov (z[0-9]+\.d), #127
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s64_m, svint64_t,
+ z0 = svqadd_n_s64_m (p0, z0, 127),
+ z0 = svqadd_m (p0, z0, 127))
+
+/*
+** qadd_128_s64_m:
+** mov (z[0-9]+\.d), #128
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s64_m, svint64_t,
+ z0 = svqadd_n_s64_m (p0, z0, 128),
+ z0 = svqadd_m (p0, z0, 128))
+
+/*
+** qadd_255_s64_m:
+** mov (z[0-9]+\.d), #255
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s64_m, svint64_t,
+ z0 = svqadd_n_s64_m (p0, z0, 255),
+ z0 = svqadd_m (p0, z0, 255))
+
+/*
+** qadd_m1_s64_m:
+** mov (z[0-9]+)\.b, #-1
+** sqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s64_m, svint64_t,
+ z0 = svqadd_n_s64_m (p0, z0, -1),
+ z0 = svqadd_m (p0, z0, -1))
+
+/*
+** qadd_m127_s64_m:
+** mov (z[0-9]+\.d), #-127
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s64_m, svint64_t,
+ z0 = svqadd_n_s64_m (p0, z0, -127),
+ z0 = svqadd_m (p0, z0, -127))
+
+/*
+** qadd_m128_s64_m:
+** mov (z[0-9]+\.d), #-128
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s64_m, svint64_t,
+ z0 = svqadd_n_s64_m (p0, z0, -128),
+ z0 = svqadd_m (p0, z0, -128))
+
+/*
+** qadd_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_z_tied1, svint64_t,
+ z0 = svqadd_s64_z (p0, z0, z1),
+ z0 = svqadd_z (p0, z0, z1))
+
+/*
+** qadd_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_z_tied2, svint64_t,
+ z0 = svqadd_s64_z (p0, z1, z0),
+ z0 = svqadd_z (p0, z1, z0))
+
+/*
+** qadd_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** sqadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_z_untied, svint64_t,
+ z0 = svqadd_s64_z (p0, z1, z2),
+ z0 = svqadd_z (p0, z1, z2))
+
+/*
+** qadd_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svqadd_n_s64_z (p0, z0, x0),
+ z0 = svqadd_z (p0, z0, x0))
+
+/*
+** qadd_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** sqadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svqadd_n_s64_z (p0, z1, x0),
+ z0 = svqadd_z (p0, z1, x0))
+
+/*
+** qadd_1_s64_z_tied1:
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s64_z_tied1, svint64_t,
+ z0 = svqadd_n_s64_z (p0, z0, 1),
+ z0 = svqadd_z (p0, z0, 1))
+
+/*
+** qadd_1_s64_z_untied:
+** mov (z[0-9]+\.d), #1
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** sqadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s64_z_untied, svint64_t,
+ z0 = svqadd_n_s64_z (p0, z1, 1),
+ z0 = svqadd_z (p0, z1, 1))
+
+/*
+** qadd_127_s64_z:
+** mov (z[0-9]+\.d), #127
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s64_z, svint64_t,
+ z0 = svqadd_n_s64_z (p0, z0, 127),
+ z0 = svqadd_z (p0, z0, 127))
+
+/*
+** qadd_128_s64_z:
+** mov (z[0-9]+\.d), #128
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s64_z, svint64_t,
+ z0 = svqadd_n_s64_z (p0, z0, 128),
+ z0 = svqadd_z (p0, z0, 128))
+
+/*
+** qadd_255_s64_z:
+** mov (z[0-9]+\.d), #255
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s64_z, svint64_t,
+ z0 = svqadd_n_s64_z (p0, z0, 255),
+ z0 = svqadd_z (p0, z0, 255))
+
+/*
+** qadd_m1_s64_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s64_z, svint64_t,
+ z0 = svqadd_n_s64_z (p0, z0, -1),
+ z0 = svqadd_z (p0, z0, -1))
+
+/*
+** qadd_m127_s64_z:
+** mov (z[0-9]+\.d), #-127
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s64_z, svint64_t,
+ z0 = svqadd_n_s64_z (p0, z0, -127),
+ z0 = svqadd_z (p0, z0, -127))
+
+/*
+** qadd_m128_s64_z:
+** mov (z[0-9]+\.d), #-128
+** movprfx z0\.d, p0/z, z0\.d
+** sqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s64_z, svint64_t,
+ z0 = svqadd_n_s64_z (p0, z0, -128),
+ z0 = svqadd_z (p0, z0, -128))
+
+/*
+** qadd_s64_x_tied1:
+** sqadd z0\.d, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_x_tied1, svint64_t,
+ z0 = svqadd_s64_x (p0, z0, z1),
+ z0 = svqadd_x (p0, z0, z1))
+
+/*
+** qadd_s64_x_tied2:
+** sqadd z0\.d, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_x_tied2, svint64_t,
+ z0 = svqadd_s64_x (p0, z1, z0),
+ z0 = svqadd_x (p0, z1, z0))
+
+/*
+** qadd_s64_x_untied:
+** sqadd z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s64_x_untied, svint64_t,
+ z0 = svqadd_s64_x (p0, z1, z2),
+ z0 = svqadd_x (p0, z1, z2))
+
+/*
+** qadd_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** sqadd z0\.d, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svqadd_n_s64_x (p0, z0, x0),
+ z0 = svqadd_x (p0, z0, x0))
+
+/*
+** qadd_x0_s64_x_untied:
+** mov (z[0-9]+\.d), x0
+** sqadd z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svqadd_n_s64_x (p0, z1, x0),
+ z0 = svqadd_x (p0, z1, x0))
+
+/*
+** qadd_1_s64_x_tied1:
+** sqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s64_x_tied1, svint64_t,
+ z0 = svqadd_n_s64_x (p0, z0, 1),
+ z0 = svqadd_x (p0, z0, 1))
+
+/*
+** qadd_1_s64_x_untied:
+** movprfx z0, z1
+** sqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s64_x_untied, svint64_t,
+ z0 = svqadd_n_s64_x (p0, z1, 1),
+ z0 = svqadd_x (p0, z1, 1))
+
+/*
+** qadd_127_s64_x:
+** sqadd z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s64_x, svint64_t,
+ z0 = svqadd_n_s64_x (p0, z0, 127),
+ z0 = svqadd_x (p0, z0, 127))
+
+/*
+** qadd_128_s64_x:
+** sqadd z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s64_x, svint64_t,
+ z0 = svqadd_n_s64_x (p0, z0, 128),
+ z0 = svqadd_x (p0, z0, 128))
+
+/*
+** qadd_255_s64_x:
+** sqadd z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s64_x, svint64_t,
+ z0 = svqadd_n_s64_x (p0, z0, 255),
+ z0 = svqadd_x (p0, z0, 255))
+
+/*
+** qadd_m1_s64_x:
+** sqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s64_x, svint64_t,
+ z0 = svqadd_n_s64_x (p0, z0, -1),
+ z0 = svqadd_x (p0, z0, -1))
+
+/*
+** qadd_m127_s64_x:
+** sqsub z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s64_x, svint64_t,
+ z0 = svqadd_n_s64_x (p0, z0, -127),
+ z0 = svqadd_x (p0, z0, -127))
+
+/*
+** qadd_m128_s64_x:
+** sqsub z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s64_x, svint64_t,
+ z0 = svqadd_n_s64_x (p0, z0, -128),
+ z0 = svqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qadd_s8_tied1:
+** sqadd z0\.b, (z0\.b, z1\.b|z1\.b, z0\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_tied1, svint8_t,
+ z0 = svqadd_s8 (z0, z1),
+ z0 = svqadd (z0, z1))
+
+/*
+** qadd_s8_tied2:
+** sqadd z0\.b, (z0\.b, z1\.b|z1\.b, z0\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_tied2, svint8_t,
+ z0 = svqadd_s8 (z1, z0),
+ z0 = svqadd (z1, z0))
+
+/*
+** qadd_s8_untied:
+** sqadd z0\.b, (z1\.b, z2\.b|z2\.b, z1\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_untied, svint8_t,
+ z0 = svqadd_s8 (z1, z2),
+ z0 = svqadd (z1, z2))
+
+/*
+** qadd_w0_s8_tied1:
+** mov (z[0-9]+\.b), w0
+** sqadd z0\.b, (z0\.b, \1|\1, z0\.b)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svqadd_n_s8 (z0, x0),
+ z0 = svqadd (z0, x0))
+
+/*
+** qadd_w0_s8_untied:
+** mov (z[0-9]+\.b), w0
+** sqadd z0\.b, (z1\.b, \1|\1, z1\.b)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s8_untied, svint8_t, int8_t,
+ z0 = svqadd_n_s8 (z1, x0),
+ z0 = svqadd (z1, x0))
+
+/*
+** qadd_1_s8_tied1:
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s8_tied1, svint8_t,
+ z0 = svqadd_n_s8 (z0, 1),
+ z0 = svqadd (z0, 1))
+
+/*
+** qadd_1_s8_untied:
+** movprfx z0, z1
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s8_untied, svint8_t,
+ z0 = svqadd_n_s8 (z1, 1),
+ z0 = svqadd (z1, 1))
+
+/*
+** qadd_127_s8:
+** sqadd z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s8, svint8_t,
+ z0 = svqadd_n_s8 (z0, 127),
+ z0 = svqadd (z0, 127))
+
+/*
+** qadd_128_s8:
+** sqsub z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s8, svint8_t,
+ z0 = svqadd_n_s8 (z0, 128),
+ z0 = svqadd (z0, 128))
+
+/*
+** qadd_255_s8:
+** sqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s8, svint8_t,
+ z0 = svqadd_n_s8 (z0, 255),
+ z0 = svqadd (z0, 255))
+
+/*
+** qadd_m1_s8:
+** sqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s8, svint8_t,
+ z0 = svqadd_n_s8 (z0, -1),
+ z0 = svqadd (z0, -1))
+
+/*
+** qadd_m127_s8:
+** sqsub z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s8, svint8_t,
+ z0 = svqadd_n_s8 (z0, -127),
+ z0 = svqadd (z0, -127))
+
+/*
+** qadd_m128_s8:
+** sqsub z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s8, svint8_t,
+ z0 = svqadd_n_s8 (z0, -128),
+ z0 = svqadd (z0, -128))
+
+/*
+** qadd_s8_m_tied1:
+** sqadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_m_tied1, svint8_t,
+ z0 = svqadd_s8_m (p0, z0, z1),
+ z0 = svqadd_m (p0, z0, z1))
+
+/*
+** qadd_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_m_tied2, svint8_t,
+ z0 = svqadd_s8_m (p0, z1, z0),
+ z0 = svqadd_m (p0, z1, z0))
+
+/*
+** qadd_s8_m_untied:
+** movprfx z0, z1
+** sqadd z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_m_untied, svint8_t,
+ z0 = svqadd_s8_m (p0, z1, z2),
+ z0 = svqadd_m (p0, z1, z2))
+
+/*
+** qadd_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svqadd_n_s8_m (p0, z0, x0),
+ z0 = svqadd_m (p0, z0, x0))
+
+/*
+** qadd_w0_s8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svqadd_n_s8_m (p0, z1, x0),
+ z0 = svqadd_m (p0, z1, x0))
+
+/*
+** qadd_1_s8_m_tied1:
+** mov (z[0-9]+\.b), #1
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s8_m_tied1, svint8_t,
+ z0 = svqadd_n_s8_m (p0, z0, 1),
+ z0 = svqadd_m (p0, z0, 1))
+
+/*
+** qadd_1_s8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), #1
+** movprfx z0, z1
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s8_m_untied, svint8_t,
+ z0 = svqadd_n_s8_m (p0, z1, 1),
+ z0 = svqadd_m (p0, z1, 1))
+
+/*
+** qadd_127_s8_m:
+** mov (z[0-9]+\.b), #127
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s8_m, svint8_t,
+ z0 = svqadd_n_s8_m (p0, z0, 127),
+ z0 = svqadd_m (p0, z0, 127))
+
+/*
+** qadd_128_s8_m:
+** mov (z[0-9]+\.b), #-128
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s8_m, svint8_t,
+ z0 = svqadd_n_s8_m (p0, z0, 128),
+ z0 = svqadd_m (p0, z0, 128))
+
+/*
+** qadd_255_s8_m:
+** mov (z[0-9]+\.b), #-1
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s8_m, svint8_t,
+ z0 = svqadd_n_s8_m (p0, z0, 255),
+ z0 = svqadd_m (p0, z0, 255))
+
+/*
+** qadd_m1_s8_m:
+** mov (z[0-9]+\.b), #-1
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s8_m, svint8_t,
+ z0 = svqadd_n_s8_m (p0, z0, -1),
+ z0 = svqadd_m (p0, z0, -1))
+
+/*
+** qadd_m127_s8_m:
+** mov (z[0-9]+\.b), #-127
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s8_m, svint8_t,
+ z0 = svqadd_n_s8_m (p0, z0, -127),
+ z0 = svqadd_m (p0, z0, -127))
+
+/*
+** qadd_m128_s8_m:
+** mov (z[0-9]+\.b), #-128
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s8_m, svint8_t,
+ z0 = svqadd_n_s8_m (p0, z0, -128),
+ z0 = svqadd_m (p0, z0, -128))
+
+/*
+** qadd_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_z_tied1, svint8_t,
+ z0 = svqadd_s8_z (p0, z0, z1),
+ z0 = svqadd_z (p0, z0, z1))
+
+/*
+** qadd_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_z_tied2, svint8_t,
+ z0 = svqadd_s8_z (p0, z1, z0),
+ z0 = svqadd_z (p0, z1, z0))
+
+/*
+** qadd_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** sqadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_z_untied, svint8_t,
+ z0 = svqadd_s8_z (p0, z1, z2),
+ z0 = svqadd_z (p0, z1, z2))
+
+/*
+** qadd_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svqadd_n_s8_z (p0, z0, x0),
+ z0 = svqadd_z (p0, z0, x0))
+
+/*
+** qadd_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** sqadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svqadd_n_s8_z (p0, z1, x0),
+ z0 = svqadd_z (p0, z1, x0))
+
+/*
+** qadd_1_s8_z_tied1:
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s8_z_tied1, svint8_t,
+ z0 = svqadd_n_s8_z (p0, z0, 1),
+ z0 = svqadd_z (p0, z0, 1))
+
+/*
+** qadd_1_s8_z_untied:
+** mov (z[0-9]+\.b), #1
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** sqadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s8_z_untied, svint8_t,
+ z0 = svqadd_n_s8_z (p0, z1, 1),
+ z0 = svqadd_z (p0, z1, 1))
+
+/*
+** qadd_127_s8_z:
+** mov (z[0-9]+\.b), #127
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s8_z, svint8_t,
+ z0 = svqadd_n_s8_z (p0, z0, 127),
+ z0 = svqadd_z (p0, z0, 127))
+
+/*
+** qadd_128_s8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s8_z, svint8_t,
+ z0 = svqadd_n_s8_z (p0, z0, 128),
+ z0 = svqadd_z (p0, z0, 128))
+
+/*
+** qadd_255_s8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s8_z, svint8_t,
+ z0 = svqadd_n_s8_z (p0, z0, 255),
+ z0 = svqadd_z (p0, z0, 255))
+
+/*
+** qadd_m1_s8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s8_z, svint8_t,
+ z0 = svqadd_n_s8_z (p0, z0, -1),
+ z0 = svqadd_z (p0, z0, -1))
+
+/*
+** qadd_m127_s8_z:
+** mov (z[0-9]+\.b), #-127
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s8_z, svint8_t,
+ z0 = svqadd_n_s8_z (p0, z0, -127),
+ z0 = svqadd_z (p0, z0, -127))
+
+/*
+** qadd_m128_s8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** sqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s8_z, svint8_t,
+ z0 = svqadd_n_s8_z (p0, z0, -128),
+ z0 = svqadd_z (p0, z0, -128))
+
+/*
+** qadd_s8_x_tied1:
+** sqadd z0\.b, (z0\.b, z1\.b|z1\.b, z0\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_x_tied1, svint8_t,
+ z0 = svqadd_s8_x (p0, z0, z1),
+ z0 = svqadd_x (p0, z0, z1))
+
+/*
+** qadd_s8_x_tied2:
+** sqadd z0\.b, (z0\.b, z1\.b|z1\.b, z0\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_x_tied2, svint8_t,
+ z0 = svqadd_s8_x (p0, z1, z0),
+ z0 = svqadd_x (p0, z1, z0))
+
+/*
+** qadd_s8_x_untied:
+** sqadd z0\.b, (z1\.b, z2\.b|z2\.b, z1\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_s8_x_untied, svint8_t,
+ z0 = svqadd_s8_x (p0, z1, z2),
+ z0 = svqadd_x (p0, z1, z2))
+
+/*
+** qadd_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** sqadd z0\.b, (z0\.b, \1|\1, z0\.b)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svqadd_n_s8_x (p0, z0, x0),
+ z0 = svqadd_x (p0, z0, x0))
+
+/*
+** qadd_w0_s8_x_untied:
+** mov (z[0-9]+\.b), w0
+** sqadd z0\.b, (z1\.b, \1|\1, z1\.b)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svqadd_n_s8_x (p0, z1, x0),
+ z0 = svqadd_x (p0, z1, x0))
+
+/*
+** qadd_1_s8_x_tied1:
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s8_x_tied1, svint8_t,
+ z0 = svqadd_n_s8_x (p0, z0, 1),
+ z0 = svqadd_x (p0, z0, 1))
+
+/*
+** qadd_1_s8_x_untied:
+** movprfx z0, z1
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_s8_x_untied, svint8_t,
+ z0 = svqadd_n_s8_x (p0, z1, 1),
+ z0 = svqadd_x (p0, z1, 1))
+
+/*
+** qadd_127_s8_x:
+** sqadd z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_s8_x, svint8_t,
+ z0 = svqadd_n_s8_x (p0, z0, 127),
+ z0 = svqadd_x (p0, z0, 127))
+
+/*
+** qadd_128_s8_x:
+** sqsub z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_s8_x, svint8_t,
+ z0 = svqadd_n_s8_x (p0, z0, 128),
+ z0 = svqadd_x (p0, z0, 128))
+
+/*
+** qadd_255_s8_x:
+** sqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_s8_x, svint8_t,
+ z0 = svqadd_n_s8_x (p0, z0, 255),
+ z0 = svqadd_x (p0, z0, 255))
+
+/*
+** qadd_m1_s8_x:
+** sqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_s8_x, svint8_t,
+ z0 = svqadd_n_s8_x (p0, z0, -1),
+ z0 = svqadd_x (p0, z0, -1))
+
+/*
+** qadd_m127_s8_x:
+** sqsub z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_s8_x, svint8_t,
+ z0 = svqadd_n_s8_x (p0, z0, -127),
+ z0 = svqadd_x (p0, z0, -127))
+
+/*
+** qadd_m128_s8_x:
+** sqsub z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_s8_x, svint8_t,
+ z0 = svqadd_n_s8_x (p0, z0, -128),
+ z0 = svqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qadd_u16_tied1:
+** uqadd z0\.h, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_tied1, svuint16_t,
+ z0 = svqadd_u16 (z0, z1),
+ z0 = svqadd (z0, z1))
+
+/*
+** qadd_u16_tied2:
+** uqadd z0\.h, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_tied2, svuint16_t,
+ z0 = svqadd_u16 (z1, z0),
+ z0 = svqadd (z1, z0))
+
+/*
+** qadd_u16_untied:
+** uqadd z0\.h, (z1\.h, z2\.h|z2\.h, z1\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_untied, svuint16_t,
+ z0 = svqadd_u16 (z1, z2),
+ z0 = svqadd (z1, z2))
+
+/*
+** qadd_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** uqadd z0\.h, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svqadd_n_u16 (z0, x0),
+ z0 = svqadd (z0, x0))
+
+/*
+** qadd_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** uqadd z0\.h, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svqadd_n_u16 (z1, x0),
+ z0 = svqadd (z1, x0))
+
+/*
+** qadd_1_u16_tied1:
+** uqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u16_tied1, svuint16_t,
+ z0 = svqadd_n_u16 (z0, 1),
+ z0 = svqadd (z0, 1))
+
+/*
+** qadd_1_u16_untied:
+** movprfx z0, z1
+** uqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u16_untied, svuint16_t,
+ z0 = svqadd_n_u16 (z1, 1),
+ z0 = svqadd (z1, 1))
+
+/*
+** qadd_127_u16:
+** uqadd z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u16, svuint16_t,
+ z0 = svqadd_n_u16 (z0, 127),
+ z0 = svqadd (z0, 127))
+
+/*
+** qadd_128_u16:
+** uqadd z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u16, svuint16_t,
+ z0 = svqadd_n_u16 (z0, 128),
+ z0 = svqadd (z0, 128))
+
+/*
+** qadd_255_u16:
+** uqadd z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u16, svuint16_t,
+ z0 = svqadd_n_u16 (z0, 255),
+ z0 = svqadd (z0, 255))
+
+/*
+** qadd_m1_u16:
+** mov (z[0-9]+)\.b, #-1
+** uqadd z0\.h, (z0\.h, \1\.h|\1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u16, svuint16_t,
+ z0 = svqadd_n_u16 (z0, -1),
+ z0 = svqadd (z0, -1))
+
+/*
+** qadd_m127_u16:
+** mov (z[0-9]+\.h), #-127
+** uqadd z0\.h, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u16, svuint16_t,
+ z0 = svqadd_n_u16 (z0, -127),
+ z0 = svqadd (z0, -127))
+
+/*
+** qadd_m128_u16:
+** mov (z[0-9]+\.h), #-128
+** uqadd z0\.h, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u16, svuint16_t,
+ z0 = svqadd_n_u16 (z0, -128),
+ z0 = svqadd (z0, -128))
+
+/*
+** qadd_u16_m_tied1:
+** uqadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_m_tied1, svuint16_t,
+ z0 = svqadd_u16_m (p0, z0, z1),
+ z0 = svqadd_m (p0, z0, z1))
+
+/*
+** qadd_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_m_tied2, svuint16_t,
+ z0 = svqadd_u16_m (p0, z1, z0),
+ z0 = svqadd_m (p0, z1, z0))
+
+/*
+** qadd_u16_m_untied:
+** movprfx z0, z1
+** uqadd z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_m_untied, svuint16_t,
+ z0 = svqadd_u16_m (p0, z1, z2),
+ z0 = svqadd_m (p0, z1, z2))
+
+/*
+** qadd_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u16_m_tied1, svuint16_t, uint16_t,
+ z0 = svqadd_n_u16_m (p0, z0, x0),
+ z0 = svqadd_m (p0, z0, x0))
+
+/*
+** qadd_w0_u16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u16_m_untied, svuint16_t, uint16_t,
+ z0 = svqadd_n_u16_m (p0, z1, x0),
+ z0 = svqadd_m (p0, z1, x0))
+
+/*
+** qadd_1_u16_m_tied1:
+** mov (z[0-9]+\.h), #1
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u16_m_tied1, svuint16_t,
+ z0 = svqadd_n_u16_m (p0, z0, 1),
+ z0 = svqadd_m (p0, z0, 1))
+
+/*
+** qadd_1_u16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), #1
+** movprfx z0, z1
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u16_m_untied, svuint16_t,
+ z0 = svqadd_n_u16_m (p0, z1, 1),
+ z0 = svqadd_m (p0, z1, 1))
+
+/*
+** qadd_127_u16_m:
+** mov (z[0-9]+\.h), #127
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u16_m, svuint16_t,
+ z0 = svqadd_n_u16_m (p0, z0, 127),
+ z0 = svqadd_m (p0, z0, 127))
+
+/*
+** qadd_128_u16_m:
+** mov (z[0-9]+\.h), #128
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u16_m, svuint16_t,
+ z0 = svqadd_n_u16_m (p0, z0, 128),
+ z0 = svqadd_m (p0, z0, 128))
+
+/*
+** qadd_255_u16_m:
+** mov (z[0-9]+\.h), #255
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u16_m, svuint16_t,
+ z0 = svqadd_n_u16_m (p0, z0, 255),
+ z0 = svqadd_m (p0, z0, 255))
+
+/*
+** qadd_m1_u16_m:
+** mov (z[0-9]+)\.b, #-1
+** uqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u16_m, svuint16_t,
+ z0 = svqadd_n_u16_m (p0, z0, -1),
+ z0 = svqadd_m (p0, z0, -1))
+
+/*
+** qadd_m127_u16_m:
+** mov (z[0-9]+\.h), #-127
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u16_m, svuint16_t,
+ z0 = svqadd_n_u16_m (p0, z0, -127),
+ z0 = svqadd_m (p0, z0, -127))
+
+/*
+** qadd_m128_u16_m:
+** mov (z[0-9]+\.h), #-128
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u16_m, svuint16_t,
+ z0 = svqadd_n_u16_m (p0, z0, -128),
+ z0 = svqadd_m (p0, z0, -128))
+
+/*
+** qadd_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_z_tied1, svuint16_t,
+ z0 = svqadd_u16_z (p0, z0, z1),
+ z0 = svqadd_z (p0, z0, z1))
+
+/*
+** qadd_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_z_tied2, svuint16_t,
+ z0 = svqadd_u16_z (p0, z1, z0),
+ z0 = svqadd_z (p0, z1, z0))
+
+/*
+** qadd_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** uqadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_z_untied, svuint16_t,
+ z0 = svqadd_u16_z (p0, z1, z2),
+ z0 = svqadd_z (p0, z1, z2))
+
+/*
+** qadd_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u16_z_tied1, svuint16_t, uint16_t,
+ z0 = svqadd_n_u16_z (p0, z0, x0),
+ z0 = svqadd_z (p0, z0, x0))
+
+/*
+** qadd_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uqadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u16_z_untied, svuint16_t, uint16_t,
+ z0 = svqadd_n_u16_z (p0, z1, x0),
+ z0 = svqadd_z (p0, z1, x0))
+
+/*
+** qadd_1_u16_z_tied1:
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u16_z_tied1, svuint16_t,
+ z0 = svqadd_n_u16_z (p0, z0, 1),
+ z0 = svqadd_z (p0, z0, 1))
+
+/*
+** qadd_1_u16_z_untied:
+** mov (z[0-9]+\.h), #1
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uqadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u16_z_untied, svuint16_t,
+ z0 = svqadd_n_u16_z (p0, z1, 1),
+ z0 = svqadd_z (p0, z1, 1))
+
+/*
+** qadd_127_u16_z:
+** mov (z[0-9]+\.h), #127
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u16_z, svuint16_t,
+ z0 = svqadd_n_u16_z (p0, z0, 127),
+ z0 = svqadd_z (p0, z0, 127))
+
+/*
+** qadd_128_u16_z:
+** mov (z[0-9]+\.h), #128
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u16_z, svuint16_t,
+ z0 = svqadd_n_u16_z (p0, z0, 128),
+ z0 = svqadd_z (p0, z0, 128))
+
+/*
+** qadd_255_u16_z:
+** mov (z[0-9]+\.h), #255
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u16_z, svuint16_t,
+ z0 = svqadd_n_u16_z (p0, z0, 255),
+ z0 = svqadd_z (p0, z0, 255))
+
+/*
+** qadd_m1_u16_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u16_z, svuint16_t,
+ z0 = svqadd_n_u16_z (p0, z0, -1),
+ z0 = svqadd_z (p0, z0, -1))
+
+/*
+** qadd_m127_u16_z:
+** mov (z[0-9]+\.h), #-127
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u16_z, svuint16_t,
+ z0 = svqadd_n_u16_z (p0, z0, -127),
+ z0 = svqadd_z (p0, z0, -127))
+
+/*
+** qadd_m128_u16_z:
+** mov (z[0-9]+\.h), #-128
+** movprfx z0\.h, p0/z, z0\.h
+** uqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u16_z, svuint16_t,
+ z0 = svqadd_n_u16_z (p0, z0, -128),
+ z0 = svqadd_z (p0, z0, -128))
+
+/*
+** qadd_u16_x_tied1:
+** uqadd z0\.h, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_x_tied1, svuint16_t,
+ z0 = svqadd_u16_x (p0, z0, z1),
+ z0 = svqadd_x (p0, z0, z1))
+
+/*
+** qadd_u16_x_tied2:
+** uqadd z0\.h, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_x_tied2, svuint16_t,
+ z0 = svqadd_u16_x (p0, z1, z0),
+ z0 = svqadd_x (p0, z1, z0))
+
+/*
+** qadd_u16_x_untied:
+** uqadd z0\.h, (z1\.h, z2\.h|z2\.h, z1\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u16_x_untied, svuint16_t,
+ z0 = svqadd_u16_x (p0, z1, z2),
+ z0 = svqadd_x (p0, z1, z2))
+
+/*
+** qadd_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** uqadd z0\.h, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u16_x_tied1, svuint16_t, uint16_t,
+ z0 = svqadd_n_u16_x (p0, z0, x0),
+ z0 = svqadd_x (p0, z0, x0))
+
+/*
+** qadd_w0_u16_x_untied:
+** mov (z[0-9]+\.h), w0
+** uqadd z0\.h, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u16_x_untied, svuint16_t, uint16_t,
+ z0 = svqadd_n_u16_x (p0, z1, x0),
+ z0 = svqadd_x (p0, z1, x0))
+
+/*
+** qadd_1_u16_x_tied1:
+** uqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u16_x_tied1, svuint16_t,
+ z0 = svqadd_n_u16_x (p0, z0, 1),
+ z0 = svqadd_x (p0, z0, 1))
+
+/*
+** qadd_1_u16_x_untied:
+** movprfx z0, z1
+** uqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u16_x_untied, svuint16_t,
+ z0 = svqadd_n_u16_x (p0, z1, 1),
+ z0 = svqadd_x (p0, z1, 1))
+
+/*
+** qadd_127_u16_x:
+** uqadd z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u16_x, svuint16_t,
+ z0 = svqadd_n_u16_x (p0, z0, 127),
+ z0 = svqadd_x (p0, z0, 127))
+
+/*
+** qadd_128_u16_x:
+** uqadd z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u16_x, svuint16_t,
+ z0 = svqadd_n_u16_x (p0, z0, 128),
+ z0 = svqadd_x (p0, z0, 128))
+
+/*
+** qadd_255_u16_x:
+** uqadd z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u16_x, svuint16_t,
+ z0 = svqadd_n_u16_x (p0, z0, 255),
+ z0 = svqadd_x (p0, z0, 255))
+
+/*
+** qadd_m1_u16_x:
+** mov (z[0-9]+)\.b, #-1
+** uqadd z0\.h, (z0\.h, \1\.h|\1\.h, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u16_x, svuint16_t,
+ z0 = svqadd_n_u16_x (p0, z0, -1),
+ z0 = svqadd_x (p0, z0, -1))
+
+/*
+** qadd_m127_u16_x:
+** mov (z[0-9]+\.h), #-127
+** uqadd z0\.h, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u16_x, svuint16_t,
+ z0 = svqadd_n_u16_x (p0, z0, -127),
+ z0 = svqadd_x (p0, z0, -127))
+
+/*
+** qadd_m128_u16_x:
+** mov (z[0-9]+\.h), #-128
+** uqadd z0\.h, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u16_x, svuint16_t,
+ z0 = svqadd_n_u16_x (p0, z0, -128),
+ z0 = svqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qadd_u32_tied1:
+** uqadd z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_tied1, svuint32_t,
+ z0 = svqadd_u32 (z0, z1),
+ z0 = svqadd (z0, z1))
+
+/*
+** qadd_u32_tied2:
+** uqadd z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_tied2, svuint32_t,
+ z0 = svqadd_u32 (z1, z0),
+ z0 = svqadd (z1, z0))
+
+/*
+** qadd_u32_untied:
+** uqadd z0\.s, (z1\.s, z2\.s|z2\.s, z1\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_untied, svuint32_t,
+ z0 = svqadd_u32 (z1, z2),
+ z0 = svqadd (z1, z2))
+
+/*
+** qadd_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** uqadd z0\.s, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svqadd_n_u32 (z0, x0),
+ z0 = svqadd (z0, x0))
+
+/*
+** qadd_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** uqadd z0\.s, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svqadd_n_u32 (z1, x0),
+ z0 = svqadd (z1, x0))
+
+/*
+** qadd_1_u32_tied1:
+** uqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u32_tied1, svuint32_t,
+ z0 = svqadd_n_u32 (z0, 1),
+ z0 = svqadd (z0, 1))
+
+/*
+** qadd_1_u32_untied:
+** movprfx z0, z1
+** uqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u32_untied, svuint32_t,
+ z0 = svqadd_n_u32 (z1, 1),
+ z0 = svqadd (z1, 1))
+
+/*
+** qadd_127_u32:
+** uqadd z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u32, svuint32_t,
+ z0 = svqadd_n_u32 (z0, 127),
+ z0 = svqadd (z0, 127))
+
+/*
+** qadd_128_u32:
+** uqadd z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u32, svuint32_t,
+ z0 = svqadd_n_u32 (z0, 128),
+ z0 = svqadd (z0, 128))
+
+/*
+** qadd_255_u32:
+** uqadd z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u32, svuint32_t,
+ z0 = svqadd_n_u32 (z0, 255),
+ z0 = svqadd (z0, 255))
+
+/*
+** qadd_m1_u32:
+** mov (z[0-9]+)\.b, #-1
+** uqadd z0\.s, (z0\.s, \1\.s|\1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u32, svuint32_t,
+ z0 = svqadd_n_u32 (z0, -1),
+ z0 = svqadd (z0, -1))
+
+/*
+** qadd_m127_u32:
+** mov (z[0-9]+\.s), #-127
+** uqadd z0\.s, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u32, svuint32_t,
+ z0 = svqadd_n_u32 (z0, -127),
+ z0 = svqadd (z0, -127))
+
+/*
+** qadd_m128_u32:
+** mov (z[0-9]+\.s), #-128
+** uqadd z0\.s, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u32, svuint32_t,
+ z0 = svqadd_n_u32 (z0, -128),
+ z0 = svqadd (z0, -128))
+
+/*
+** qadd_u32_m_tied1:
+** uqadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_m_tied1, svuint32_t,
+ z0 = svqadd_u32_m (p0, z0, z1),
+ z0 = svqadd_m (p0, z0, z1))
+
+/*
+** qadd_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_m_tied2, svuint32_t,
+ z0 = svqadd_u32_m (p0, z1, z0),
+ z0 = svqadd_m (p0, z1, z0))
+
+/*
+** qadd_u32_m_untied:
+** movprfx z0, z1
+** uqadd z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_m_untied, svuint32_t,
+ z0 = svqadd_u32_m (p0, z1, z2),
+ z0 = svqadd_m (p0, z1, z2))
+
+/*
+** qadd_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u32_m_tied1, svuint32_t, uint32_t,
+ z0 = svqadd_n_u32_m (p0, z0, x0),
+ z0 = svqadd_m (p0, z0, x0))
+
+/*
+** qadd_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u32_m_untied, svuint32_t, uint32_t,
+ z0 = svqadd_n_u32_m (p0, z1, x0),
+ z0 = svqadd_m (p0, z1, x0))
+
+/*
+** qadd_1_u32_m_tied1:
+** mov (z[0-9]+\.s), #1
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u32_m_tied1, svuint32_t,
+ z0 = svqadd_n_u32_m (p0, z0, 1),
+ z0 = svqadd_m (p0, z0, 1))
+
+/*
+** qadd_1_u32_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.s), #1
+** movprfx z0, z1
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u32_m_untied, svuint32_t,
+ z0 = svqadd_n_u32_m (p0, z1, 1),
+ z0 = svqadd_m (p0, z1, 1))
+
+/*
+** qadd_127_u32_m:
+** mov (z[0-9]+\.s), #127
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u32_m, svuint32_t,
+ z0 = svqadd_n_u32_m (p0, z0, 127),
+ z0 = svqadd_m (p0, z0, 127))
+
+/*
+** qadd_128_u32_m:
+** mov (z[0-9]+\.s), #128
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u32_m, svuint32_t,
+ z0 = svqadd_n_u32_m (p0, z0, 128),
+ z0 = svqadd_m (p0, z0, 128))
+
+/*
+** qadd_255_u32_m:
+** mov (z[0-9]+\.s), #255
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u32_m, svuint32_t,
+ z0 = svqadd_n_u32_m (p0, z0, 255),
+ z0 = svqadd_m (p0, z0, 255))
+
+/*
+** qadd_m1_u32_m:
+** mov (z[0-9]+)\.b, #-1
+** uqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u32_m, svuint32_t,
+ z0 = svqadd_n_u32_m (p0, z0, -1),
+ z0 = svqadd_m (p0, z0, -1))
+
+/*
+** qadd_m127_u32_m:
+** mov (z[0-9]+\.s), #-127
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u32_m, svuint32_t,
+ z0 = svqadd_n_u32_m (p0, z0, -127),
+ z0 = svqadd_m (p0, z0, -127))
+
+/*
+** qadd_m128_u32_m:
+** mov (z[0-9]+\.s), #-128
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u32_m, svuint32_t,
+ z0 = svqadd_n_u32_m (p0, z0, -128),
+ z0 = svqadd_m (p0, z0, -128))
+
+/*
+** qadd_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_z_tied1, svuint32_t,
+ z0 = svqadd_u32_z (p0, z0, z1),
+ z0 = svqadd_z (p0, z0, z1))
+
+/*
+** qadd_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_z_tied2, svuint32_t,
+ z0 = svqadd_u32_z (p0, z1, z0),
+ z0 = svqadd_z (p0, z1, z0))
+
+/*
+** qadd_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** uqadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_z_untied, svuint32_t,
+ z0 = svqadd_u32_z (p0, z1, z2),
+ z0 = svqadd_z (p0, z1, z2))
+
+/*
+** qadd_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u32_z_tied1, svuint32_t, uint32_t,
+ z0 = svqadd_n_u32_z (p0, z0, x0),
+ z0 = svqadd_z (p0, z0, x0))
+
+/*
+** qadd_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uqadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u32_z_untied, svuint32_t, uint32_t,
+ z0 = svqadd_n_u32_z (p0, z1, x0),
+ z0 = svqadd_z (p0, z1, x0))
+
+/*
+** qadd_1_u32_z_tied1:
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u32_z_tied1, svuint32_t,
+ z0 = svqadd_n_u32_z (p0, z0, 1),
+ z0 = svqadd_z (p0, z0, 1))
+
+/*
+** qadd_1_u32_z_untied:
+** mov (z[0-9]+\.s), #1
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uqadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u32_z_untied, svuint32_t,
+ z0 = svqadd_n_u32_z (p0, z1, 1),
+ z0 = svqadd_z (p0, z1, 1))
+
+/*
+** qadd_127_u32_z:
+** mov (z[0-9]+\.s), #127
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u32_z, svuint32_t,
+ z0 = svqadd_n_u32_z (p0, z0, 127),
+ z0 = svqadd_z (p0, z0, 127))
+
+/*
+** qadd_128_u32_z:
+** mov (z[0-9]+\.s), #128
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u32_z, svuint32_t,
+ z0 = svqadd_n_u32_z (p0, z0, 128),
+ z0 = svqadd_z (p0, z0, 128))
+
+/*
+** qadd_255_u32_z:
+** mov (z[0-9]+\.s), #255
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u32_z, svuint32_t,
+ z0 = svqadd_n_u32_z (p0, z0, 255),
+ z0 = svqadd_z (p0, z0, 255))
+
+/*
+** qadd_m1_u32_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u32_z, svuint32_t,
+ z0 = svqadd_n_u32_z (p0, z0, -1),
+ z0 = svqadd_z (p0, z0, -1))
+
+/*
+** qadd_m127_u32_z:
+** mov (z[0-9]+\.s), #-127
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u32_z, svuint32_t,
+ z0 = svqadd_n_u32_z (p0, z0, -127),
+ z0 = svqadd_z (p0, z0, -127))
+
+/*
+** qadd_m128_u32_z:
+** mov (z[0-9]+\.s), #-128
+** movprfx z0\.s, p0/z, z0\.s
+** uqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u32_z, svuint32_t,
+ z0 = svqadd_n_u32_z (p0, z0, -128),
+ z0 = svqadd_z (p0, z0, -128))
+
+/*
+** qadd_u32_x_tied1:
+** uqadd z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_x_tied1, svuint32_t,
+ z0 = svqadd_u32_x (p0, z0, z1),
+ z0 = svqadd_x (p0, z0, z1))
+
+/*
+** qadd_u32_x_tied2:
+** uqadd z0\.s, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_x_tied2, svuint32_t,
+ z0 = svqadd_u32_x (p0, z1, z0),
+ z0 = svqadd_x (p0, z1, z0))
+
+/*
+** qadd_u32_x_untied:
+** uqadd z0\.s, (z1\.s, z2\.s|z2\.s, z1\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u32_x_untied, svuint32_t,
+ z0 = svqadd_u32_x (p0, z1, z2),
+ z0 = svqadd_x (p0, z1, z2))
+
+/*
+** qadd_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** uqadd z0\.s, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u32_x_tied1, svuint32_t, uint32_t,
+ z0 = svqadd_n_u32_x (p0, z0, x0),
+ z0 = svqadd_x (p0, z0, x0))
+
+/*
+** qadd_w0_u32_x_untied:
+** mov (z[0-9]+\.s), w0
+** uqadd z0\.s, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u32_x_untied, svuint32_t, uint32_t,
+ z0 = svqadd_n_u32_x (p0, z1, x0),
+ z0 = svqadd_x (p0, z1, x0))
+
+/*
+** qadd_1_u32_x_tied1:
+** uqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u32_x_tied1, svuint32_t,
+ z0 = svqadd_n_u32_x (p0, z0, 1),
+ z0 = svqadd_x (p0, z0, 1))
+
+/*
+** qadd_1_u32_x_untied:
+** movprfx z0, z1
+** uqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u32_x_untied, svuint32_t,
+ z0 = svqadd_n_u32_x (p0, z1, 1),
+ z0 = svqadd_x (p0, z1, 1))
+
+/*
+** qadd_127_u32_x:
+** uqadd z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u32_x, svuint32_t,
+ z0 = svqadd_n_u32_x (p0, z0, 127),
+ z0 = svqadd_x (p0, z0, 127))
+
+/*
+** qadd_128_u32_x:
+** uqadd z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u32_x, svuint32_t,
+ z0 = svqadd_n_u32_x (p0, z0, 128),
+ z0 = svqadd_x (p0, z0, 128))
+
+/*
+** qadd_255_u32_x:
+** uqadd z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u32_x, svuint32_t,
+ z0 = svqadd_n_u32_x (p0, z0, 255),
+ z0 = svqadd_x (p0, z0, 255))
+
+/*
+** qadd_m1_u32_x:
+** mov (z[0-9]+)\.b, #-1
+** uqadd z0\.s, (z0\.s, \1\.s|\1\.s, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u32_x, svuint32_t,
+ z0 = svqadd_n_u32_x (p0, z0, -1),
+ z0 = svqadd_x (p0, z0, -1))
+
+/*
+** qadd_m127_u32_x:
+** mov (z[0-9]+\.s), #-127
+** uqadd z0\.s, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u32_x, svuint32_t,
+ z0 = svqadd_n_u32_x (p0, z0, -127),
+ z0 = svqadd_x (p0, z0, -127))
+
+/*
+** qadd_m128_u32_x:
+** mov (z[0-9]+\.s), #-128
+** uqadd z0\.s, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u32_x, svuint32_t,
+ z0 = svqadd_n_u32_x (p0, z0, -128),
+ z0 = svqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qadd_u64_tied1:
+** uqadd z0\.d, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_tied1, svuint64_t,
+ z0 = svqadd_u64 (z0, z1),
+ z0 = svqadd (z0, z1))
+
+/*
+** qadd_u64_tied2:
+** uqadd z0\.d, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_tied2, svuint64_t,
+ z0 = svqadd_u64 (z1, z0),
+ z0 = svqadd (z1, z0))
+
+/*
+** qadd_u64_untied:
+** uqadd z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_untied, svuint64_t,
+ z0 = svqadd_u64 (z1, z2),
+ z0 = svqadd (z1, z2))
+
+/*
+** qadd_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** uqadd z0\.d, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svqadd_n_u64 (z0, x0),
+ z0 = svqadd (z0, x0))
+
+/*
+** qadd_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** uqadd z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svqadd_n_u64 (z1, x0),
+ z0 = svqadd (z1, x0))
+
+/*
+** qadd_1_u64_tied1:
+** uqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u64_tied1, svuint64_t,
+ z0 = svqadd_n_u64 (z0, 1),
+ z0 = svqadd (z0, 1))
+
+/*
+** qadd_1_u64_untied:
+** movprfx z0, z1
+** uqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u64_untied, svuint64_t,
+ z0 = svqadd_n_u64 (z1, 1),
+ z0 = svqadd (z1, 1))
+
+/*
+** qadd_127_u64:
+** uqadd z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u64, svuint64_t,
+ z0 = svqadd_n_u64 (z0, 127),
+ z0 = svqadd (z0, 127))
+
+/*
+** qadd_128_u64:
+** uqadd z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u64, svuint64_t,
+ z0 = svqadd_n_u64 (z0, 128),
+ z0 = svqadd (z0, 128))
+
+/*
+** qadd_255_u64:
+** uqadd z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u64, svuint64_t,
+ z0 = svqadd_n_u64 (z0, 255),
+ z0 = svqadd (z0, 255))
+
+/*
+** qadd_m1_u64:
+** mov (z[0-9]+)\.b, #-1
+** uqadd z0\.d, (z0\.d, \1\.d|\1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u64, svuint64_t,
+ z0 = svqadd_n_u64 (z0, -1),
+ z0 = svqadd (z0, -1))
+
+/*
+** qadd_m127_u64:
+** mov (z[0-9]+\.d), #-127
+** uqadd z0\.d, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u64, svuint64_t,
+ z0 = svqadd_n_u64 (z0, -127),
+ z0 = svqadd (z0, -127))
+
+/*
+** qadd_m128_u64:
+** mov (z[0-9]+\.d), #-128
+** uqadd z0\.d, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u64, svuint64_t,
+ z0 = svqadd_n_u64 (z0, -128),
+ z0 = svqadd (z0, -128))
+
+/*
+** qadd_u64_m_tied1:
+** uqadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_m_tied1, svuint64_t,
+ z0 = svqadd_u64_m (p0, z0, z1),
+ z0 = svqadd_m (p0, z0, z1))
+
+/*
+** qadd_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_m_tied2, svuint64_t,
+ z0 = svqadd_u64_m (p0, z1, z0),
+ z0 = svqadd_m (p0, z1, z0))
+
+/*
+** qadd_u64_m_untied:
+** movprfx z0, z1
+** uqadd z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_m_untied, svuint64_t,
+ z0 = svqadd_u64_m (p0, z1, z2),
+ z0 = svqadd_m (p0, z1, z2))
+
+/*
+** qadd_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_u64_m_tied1, svuint64_t, uint64_t,
+ z0 = svqadd_n_u64_m (p0, z0, x0),
+ z0 = svqadd_m (p0, z0, x0))
+
+/*
+** qadd_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_u64_m_untied, svuint64_t, uint64_t,
+ z0 = svqadd_n_u64_m (p0, z1, x0),
+ z0 = svqadd_m (p0, z1, x0))
+
+/*
+** qadd_1_u64_m_tied1:
+** mov (z[0-9]+\.d), #1
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u64_m_tied1, svuint64_t,
+ z0 = svqadd_n_u64_m (p0, z0, 1),
+ z0 = svqadd_m (p0, z0, 1))
+
+/*
+** qadd_1_u64_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.d), #1
+** movprfx z0, z1
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u64_m_untied, svuint64_t,
+ z0 = svqadd_n_u64_m (p0, z1, 1),
+ z0 = svqadd_m (p0, z1, 1))
+
+/*
+** qadd_127_u64_m:
+** mov (z[0-9]+\.d), #127
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u64_m, svuint64_t,
+ z0 = svqadd_n_u64_m (p0, z0, 127),
+ z0 = svqadd_m (p0, z0, 127))
+
+/*
+** qadd_128_u64_m:
+** mov (z[0-9]+\.d), #128
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u64_m, svuint64_t,
+ z0 = svqadd_n_u64_m (p0, z0, 128),
+ z0 = svqadd_m (p0, z0, 128))
+
+/*
+** qadd_255_u64_m:
+** mov (z[0-9]+\.d), #255
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u64_m, svuint64_t,
+ z0 = svqadd_n_u64_m (p0, z0, 255),
+ z0 = svqadd_m (p0, z0, 255))
+
+/*
+** qadd_m1_u64_m:
+** mov (z[0-9]+)\.b, #-1
+** uqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u64_m, svuint64_t,
+ z0 = svqadd_n_u64_m (p0, z0, -1),
+ z0 = svqadd_m (p0, z0, -1))
+
+/*
+** qadd_m127_u64_m:
+** mov (z[0-9]+\.d), #-127
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u64_m, svuint64_t,
+ z0 = svqadd_n_u64_m (p0, z0, -127),
+ z0 = svqadd_m (p0, z0, -127))
+
+/*
+** qadd_m128_u64_m:
+** mov (z[0-9]+\.d), #-128
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u64_m, svuint64_t,
+ z0 = svqadd_n_u64_m (p0, z0, -128),
+ z0 = svqadd_m (p0, z0, -128))
+
+/*
+** qadd_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_z_tied1, svuint64_t,
+ z0 = svqadd_u64_z (p0, z0, z1),
+ z0 = svqadd_z (p0, z0, z1))
+
+/*
+** qadd_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_z_tied2, svuint64_t,
+ z0 = svqadd_u64_z (p0, z1, z0),
+ z0 = svqadd_z (p0, z1, z0))
+
+/*
+** qadd_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** uqadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_z_untied, svuint64_t,
+ z0 = svqadd_u64_z (p0, z1, z2),
+ z0 = svqadd_z (p0, z1, z2))
+
+/*
+** qadd_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_u64_z_tied1, svuint64_t, uint64_t,
+ z0 = svqadd_n_u64_z (p0, z0, x0),
+ z0 = svqadd_z (p0, z0, x0))
+
+/*
+** qadd_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uqadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_u64_z_untied, svuint64_t, uint64_t,
+ z0 = svqadd_n_u64_z (p0, z1, x0),
+ z0 = svqadd_z (p0, z1, x0))
+
+/*
+** qadd_1_u64_z_tied1:
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u64_z_tied1, svuint64_t,
+ z0 = svqadd_n_u64_z (p0, z0, 1),
+ z0 = svqadd_z (p0, z0, 1))
+
+/*
+** qadd_1_u64_z_untied:
+** mov (z[0-9]+\.d), #1
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uqadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u64_z_untied, svuint64_t,
+ z0 = svqadd_n_u64_z (p0, z1, 1),
+ z0 = svqadd_z (p0, z1, 1))
+
+/*
+** qadd_127_u64_z:
+** mov (z[0-9]+\.d), #127
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u64_z, svuint64_t,
+ z0 = svqadd_n_u64_z (p0, z0, 127),
+ z0 = svqadd_z (p0, z0, 127))
+
+/*
+** qadd_128_u64_z:
+** mov (z[0-9]+\.d), #128
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u64_z, svuint64_t,
+ z0 = svqadd_n_u64_z (p0, z0, 128),
+ z0 = svqadd_z (p0, z0, 128))
+
+/*
+** qadd_255_u64_z:
+** mov (z[0-9]+\.d), #255
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u64_z, svuint64_t,
+ z0 = svqadd_n_u64_z (p0, z0, 255),
+ z0 = svqadd_z (p0, z0, 255))
+
+/*
+** qadd_m1_u64_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u64_z, svuint64_t,
+ z0 = svqadd_n_u64_z (p0, z0, -1),
+ z0 = svqadd_z (p0, z0, -1))
+
+/*
+** qadd_m127_u64_z:
+** mov (z[0-9]+\.d), #-127
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u64_z, svuint64_t,
+ z0 = svqadd_n_u64_z (p0, z0, -127),
+ z0 = svqadd_z (p0, z0, -127))
+
+/*
+** qadd_m128_u64_z:
+** mov (z[0-9]+\.d), #-128
+** movprfx z0\.d, p0/z, z0\.d
+** uqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u64_z, svuint64_t,
+ z0 = svqadd_n_u64_z (p0, z0, -128),
+ z0 = svqadd_z (p0, z0, -128))
+
+/*
+** qadd_u64_x_tied1:
+** uqadd z0\.d, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_x_tied1, svuint64_t,
+ z0 = svqadd_u64_x (p0, z0, z1),
+ z0 = svqadd_x (p0, z0, z1))
+
+/*
+** qadd_u64_x_tied2:
+** uqadd z0\.d, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_x_tied2, svuint64_t,
+ z0 = svqadd_u64_x (p0, z1, z0),
+ z0 = svqadd_x (p0, z1, z0))
+
+/*
+** qadd_u64_x_untied:
+** uqadd z0\.d, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u64_x_untied, svuint64_t,
+ z0 = svqadd_u64_x (p0, z1, z2),
+ z0 = svqadd_x (p0, z1, z2))
+
+/*
+** qadd_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** uqadd z0\.d, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_u64_x_tied1, svuint64_t, uint64_t,
+ z0 = svqadd_n_u64_x (p0, z0, x0),
+ z0 = svqadd_x (p0, z0, x0))
+
+/*
+** qadd_x0_u64_x_untied:
+** mov (z[0-9]+\.d), x0
+** uqadd z0\.d, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_x0_u64_x_untied, svuint64_t, uint64_t,
+ z0 = svqadd_n_u64_x (p0, z1, x0),
+ z0 = svqadd_x (p0, z1, x0))
+
+/*
+** qadd_1_u64_x_tied1:
+** uqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u64_x_tied1, svuint64_t,
+ z0 = svqadd_n_u64_x (p0, z0, 1),
+ z0 = svqadd_x (p0, z0, 1))
+
+/*
+** qadd_1_u64_x_untied:
+** movprfx z0, z1
+** uqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u64_x_untied, svuint64_t,
+ z0 = svqadd_n_u64_x (p0, z1, 1),
+ z0 = svqadd_x (p0, z1, 1))
+
+/*
+** qadd_127_u64_x:
+** uqadd z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u64_x, svuint64_t,
+ z0 = svqadd_n_u64_x (p0, z0, 127),
+ z0 = svqadd_x (p0, z0, 127))
+
+/*
+** qadd_128_u64_x:
+** uqadd z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u64_x, svuint64_t,
+ z0 = svqadd_n_u64_x (p0, z0, 128),
+ z0 = svqadd_x (p0, z0, 128))
+
+/*
+** qadd_255_u64_x:
+** uqadd z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u64_x, svuint64_t,
+ z0 = svqadd_n_u64_x (p0, z0, 255),
+ z0 = svqadd_x (p0, z0, 255))
+
+/*
+** qadd_m1_u64_x:
+** mov (z[0-9]+)\.b, #-1
+** uqadd z0\.d, (z0\.d, \1\.d|\1\.d, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u64_x, svuint64_t,
+ z0 = svqadd_n_u64_x (p0, z0, -1),
+ z0 = svqadd_x (p0, z0, -1))
+
+/*
+** qadd_m127_u64_x:
+** mov (z[0-9]+\.d), #-127
+** uqadd z0\.d, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u64_x, svuint64_t,
+ z0 = svqadd_n_u64_x (p0, z0, -127),
+ z0 = svqadd_x (p0, z0, -127))
+
+/*
+** qadd_m128_u64_x:
+** mov (z[0-9]+\.d), #-128
+** uqadd z0\.d, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u64_x, svuint64_t,
+ z0 = svqadd_n_u64_x (p0, z0, -128),
+ z0 = svqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qadd_u8_tied1:
+** uqadd z0\.b, (z0\.b, z1\.b|z1\.b, z0\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_tied1, svuint8_t,
+ z0 = svqadd_u8 (z0, z1),
+ z0 = svqadd (z0, z1))
+
+/*
+** qadd_u8_tied2:
+** uqadd z0\.b, (z0\.b, z1\.b|z1\.b, z0\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_tied2, svuint8_t,
+ z0 = svqadd_u8 (z1, z0),
+ z0 = svqadd (z1, z0))
+
+/*
+** qadd_u8_untied:
+** uqadd z0\.b, (z1\.b, z2\.b|z2\.b, z1\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_untied, svuint8_t,
+ z0 = svqadd_u8 (z1, z2),
+ z0 = svqadd (z1, z2))
+
+/*
+** qadd_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** uqadd z0\.b, (z0\.b, \1|\1, z0\.b)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svqadd_n_u8 (z0, x0),
+ z0 = svqadd (z0, x0))
+
+/*
+** qadd_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** uqadd z0\.b, (z1\.b, \1|\1, z1\.b)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svqadd_n_u8 (z1, x0),
+ z0 = svqadd (z1, x0))
+
+/*
+** qadd_1_u8_tied1:
+** uqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u8_tied1, svuint8_t,
+ z0 = svqadd_n_u8 (z0, 1),
+ z0 = svqadd (z0, 1))
+
+/*
+** qadd_1_u8_untied:
+** movprfx z0, z1
+** uqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u8_untied, svuint8_t,
+ z0 = svqadd_n_u8 (z1, 1),
+ z0 = svqadd (z1, 1))
+
+/*
+** qadd_127_u8:
+** uqadd z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u8, svuint8_t,
+ z0 = svqadd_n_u8 (z0, 127),
+ z0 = svqadd (z0, 127))
+
+/*
+** qadd_128_u8:
+** uqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u8, svuint8_t,
+ z0 = svqadd_n_u8 (z0, 128),
+ z0 = svqadd (z0, 128))
+
+/*
+** qadd_255_u8:
+** uqadd z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u8, svuint8_t,
+ z0 = svqadd_n_u8 (z0, 255),
+ z0 = svqadd (z0, 255))
+
+/*
+** qadd_m1_u8:
+** uqadd z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u8, svuint8_t,
+ z0 = svqadd_n_u8 (z0, -1),
+ z0 = svqadd (z0, -1))
+
+/*
+** qadd_m127_u8:
+** uqadd z0\.b, z0\.b, #129
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u8, svuint8_t,
+ z0 = svqadd_n_u8 (z0, -127),
+ z0 = svqadd (z0, -127))
+
+/*
+** qadd_m128_u8:
+** uqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u8, svuint8_t,
+ z0 = svqadd_n_u8 (z0, -128),
+ z0 = svqadd (z0, -128))
+
+/*
+** qadd_u8_m_tied1:
+** uqadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_m_tied1, svuint8_t,
+ z0 = svqadd_u8_m (p0, z0, z1),
+ z0 = svqadd_m (p0, z0, z1))
+
+/*
+** qadd_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uqadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_m_tied2, svuint8_t,
+ z0 = svqadd_u8_m (p0, z1, z0),
+ z0 = svqadd_m (p0, z1, z0))
+
+/*
+** qadd_u8_m_untied:
+** movprfx z0, z1
+** uqadd z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_m_untied, svuint8_t,
+ z0 = svqadd_u8_m (p0, z1, z2),
+ z0 = svqadd_m (p0, z1, z2))
+
+/*
+** qadd_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u8_m_tied1, svuint8_t, uint8_t,
+ z0 = svqadd_n_u8_m (p0, z0, x0),
+ z0 = svqadd_m (p0, z0, x0))
+
+/*
+** qadd_w0_u8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u8_m_untied, svuint8_t, uint8_t,
+ z0 = svqadd_n_u8_m (p0, z1, x0),
+ z0 = svqadd_m (p0, z1, x0))
+
+/*
+** qadd_1_u8_m_tied1:
+** mov (z[0-9]+\.b), #1
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u8_m_tied1, svuint8_t,
+ z0 = svqadd_n_u8_m (p0, z0, 1),
+ z0 = svqadd_m (p0, z0, 1))
+
+/*
+** qadd_1_u8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), #1
+** movprfx z0, z1
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u8_m_untied, svuint8_t,
+ z0 = svqadd_n_u8_m (p0, z1, 1),
+ z0 = svqadd_m (p0, z1, 1))
+
+/*
+** qadd_127_u8_m:
+** mov (z[0-9]+\.b), #127
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u8_m, svuint8_t,
+ z0 = svqadd_n_u8_m (p0, z0, 127),
+ z0 = svqadd_m (p0, z0, 127))
+
+/*
+** qadd_128_u8_m:
+** mov (z[0-9]+\.b), #-128
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u8_m, svuint8_t,
+ z0 = svqadd_n_u8_m (p0, z0, 128),
+ z0 = svqadd_m (p0, z0, 128))
+
+/*
+** qadd_255_u8_m:
+** mov (z[0-9]+\.b), #-1
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u8_m, svuint8_t,
+ z0 = svqadd_n_u8_m (p0, z0, 255),
+ z0 = svqadd_m (p0, z0, 255))
+
+/*
+** qadd_m1_u8_m:
+** mov (z[0-9]+\.b), #-1
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u8_m, svuint8_t,
+ z0 = svqadd_n_u8_m (p0, z0, -1),
+ z0 = svqadd_m (p0, z0, -1))
+
+/*
+** qadd_m127_u8_m:
+** mov (z[0-9]+\.b), #-127
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u8_m, svuint8_t,
+ z0 = svqadd_n_u8_m (p0, z0, -127),
+ z0 = svqadd_m (p0, z0, -127))
+
+/*
+** qadd_m128_u8_m:
+** mov (z[0-9]+\.b), #-128
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u8_m, svuint8_t,
+ z0 = svqadd_n_u8_m (p0, z0, -128),
+ z0 = svqadd_m (p0, z0, -128))
+
+/*
+** qadd_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_z_tied1, svuint8_t,
+ z0 = svqadd_u8_z (p0, z0, z1),
+ z0 = svqadd_z (p0, z0, z1))
+
+/*
+** qadd_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_z_tied2, svuint8_t,
+ z0 = svqadd_u8_z (p0, z1, z0),
+ z0 = svqadd_z (p0, z1, z0))
+
+/*
+** qadd_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** uqadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_z_untied, svuint8_t,
+ z0 = svqadd_u8_z (p0, z1, z2),
+ z0 = svqadd_z (p0, z1, z2))
+
+/*
+** qadd_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u8_z_tied1, svuint8_t, uint8_t,
+ z0 = svqadd_n_u8_z (p0, z0, x0),
+ z0 = svqadd_z (p0, z0, x0))
+
+/*
+** qadd_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uqadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u8_z_untied, svuint8_t, uint8_t,
+ z0 = svqadd_n_u8_z (p0, z1, x0),
+ z0 = svqadd_z (p0, z1, x0))
+
+/*
+** qadd_1_u8_z_tied1:
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u8_z_tied1, svuint8_t,
+ z0 = svqadd_n_u8_z (p0, z0, 1),
+ z0 = svqadd_z (p0, z0, 1))
+
+/*
+** qadd_1_u8_z_untied:
+** mov (z[0-9]+\.b), #1
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uqadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u8_z_untied, svuint8_t,
+ z0 = svqadd_n_u8_z (p0, z1, 1),
+ z0 = svqadd_z (p0, z1, 1))
+
+/*
+** qadd_127_u8_z:
+** mov (z[0-9]+\.b), #127
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u8_z, svuint8_t,
+ z0 = svqadd_n_u8_z (p0, z0, 127),
+ z0 = svqadd_z (p0, z0, 127))
+
+/*
+** qadd_128_u8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u8_z, svuint8_t,
+ z0 = svqadd_n_u8_z (p0, z0, 128),
+ z0 = svqadd_z (p0, z0, 128))
+
+/*
+** qadd_255_u8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u8_z, svuint8_t,
+ z0 = svqadd_n_u8_z (p0, z0, 255),
+ z0 = svqadd_z (p0, z0, 255))
+
+/*
+** qadd_m1_u8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u8_z, svuint8_t,
+ z0 = svqadd_n_u8_z (p0, z0, -1),
+ z0 = svqadd_z (p0, z0, -1))
+
+/*
+** qadd_m127_u8_z:
+** mov (z[0-9]+\.b), #-127
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u8_z, svuint8_t,
+ z0 = svqadd_n_u8_z (p0, z0, -127),
+ z0 = svqadd_z (p0, z0, -127))
+
+/*
+** qadd_m128_u8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** uqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u8_z, svuint8_t,
+ z0 = svqadd_n_u8_z (p0, z0, -128),
+ z0 = svqadd_z (p0, z0, -128))
+
+/*
+** qadd_u8_x_tied1:
+** uqadd z0\.b, (z0\.b, z1\.b|z1\.b, z0\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_x_tied1, svuint8_t,
+ z0 = svqadd_u8_x (p0, z0, z1),
+ z0 = svqadd_x (p0, z0, z1))
+
+/*
+** qadd_u8_x_tied2:
+** uqadd z0\.b, (z0\.b, z1\.b|z1\.b, z0\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_x_tied2, svuint8_t,
+ z0 = svqadd_u8_x (p0, z1, z0),
+ z0 = svqadd_x (p0, z1, z0))
+
+/*
+** qadd_u8_x_untied:
+** uqadd z0\.b, (z1\.b, z2\.b|z2\.b, z1\.b)
+** ret
+*/
+TEST_UNIFORM_Z (qadd_u8_x_untied, svuint8_t,
+ z0 = svqadd_u8_x (p0, z1, z2),
+ z0 = svqadd_x (p0, z1, z2))
+
+/*
+** qadd_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** uqadd z0\.b, (z0\.b, \1|\1, z0\.b)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u8_x_tied1, svuint8_t, uint8_t,
+ z0 = svqadd_n_u8_x (p0, z0, x0),
+ z0 = svqadd_x (p0, z0, x0))
+
+/*
+** qadd_w0_u8_x_untied:
+** mov (z[0-9]+\.b), w0
+** uqadd z0\.b, (z1\.b, \1|\1, z1\.b)
+** ret
+*/
+TEST_UNIFORM_ZX (qadd_w0_u8_x_untied, svuint8_t, uint8_t,
+ z0 = svqadd_n_u8_x (p0, z1, x0),
+ z0 = svqadd_x (p0, z1, x0))
+
+/*
+** qadd_1_u8_x_tied1:
+** uqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u8_x_tied1, svuint8_t,
+ z0 = svqadd_n_u8_x (p0, z0, 1),
+ z0 = svqadd_x (p0, z0, 1))
+
+/*
+** qadd_1_u8_x_untied:
+** movprfx z0, z1
+** uqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qadd_1_u8_x_untied, svuint8_t,
+ z0 = svqadd_n_u8_x (p0, z1, 1),
+ z0 = svqadd_x (p0, z1, 1))
+
+/*
+** qadd_127_u8_x:
+** uqadd z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qadd_127_u8_x, svuint8_t,
+ z0 = svqadd_n_u8_x (p0, z0, 127),
+ z0 = svqadd_x (p0, z0, 127))
+
+/*
+** qadd_128_u8_x:
+** uqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_128_u8_x, svuint8_t,
+ z0 = svqadd_n_u8_x (p0, z0, 128),
+ z0 = svqadd_x (p0, z0, 128))
+
+/*
+** qadd_255_u8_x:
+** uqadd z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_255_u8_x, svuint8_t,
+ z0 = svqadd_n_u8_x (p0, z0, 255),
+ z0 = svqadd_x (p0, z0, 255))
+
+/*
+** qadd_m1_u8_x:
+** uqadd z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m1_u8_x, svuint8_t,
+ z0 = svqadd_n_u8_x (p0, z0, -1),
+ z0 = svqadd_x (p0, z0, -1))
+
+/*
+** qadd_m127_u8_x:
+** uqadd z0\.b, z0\.b, #129
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m127_u8_x, svuint8_t,
+ z0 = svqadd_n_u8_x (p0, z0, -127),
+ z0 = svqadd_x (p0, z0, -127))
+
+/*
+** qadd_m128_u8_x:
+** uqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qadd_m128_u8_x, svuint8_t,
+ z0 = svqadd_n_u8_x (p0, z0, -128),
+ z0 = svqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qcadd_90_s16_tied1:
+** sqcadd z0\.h, z0\.h, z1\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s16_tied1, svint16_t,
+ z0 = svqcadd_s16 (z0, z1, 90),
+ z0 = svqcadd (z0, z1, 90))
+
+/*
+** qcadd_90_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqcadd z0\.h, z0\.h, \1\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s16_tied2, svint16_t,
+ z0 = svqcadd_s16 (z1, z0, 90),
+ z0 = svqcadd (z1, z0, 90))
+
+/*
+** qcadd_90_s16_untied:
+** movprfx z0, z1
+** sqcadd z0\.h, z0\.h, z2\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s16_untied, svint16_t,
+ z0 = svqcadd_s16 (z1, z2, 90),
+ z0 = svqcadd (z1, z2, 90))
+
+/*
+** qcadd_270_s16_tied1:
+** sqcadd z0\.h, z0\.h, z1\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s16_tied1, svint16_t,
+ z0 = svqcadd_s16 (z0, z1, 270),
+ z0 = svqcadd (z0, z1, 270))
+
+/*
+** qcadd_270_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqcadd z0\.h, z0\.h, \1\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s16_tied2, svint16_t,
+ z0 = svqcadd_s16 (z1, z0, 270),
+ z0 = svqcadd (z1, z0, 270))
+
+/*
+** qcadd_270_s16_untied:
+** movprfx z0, z1
+** sqcadd z0\.h, z0\.h, z2\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s16_untied, svint16_t,
+ z0 = svqcadd_s16 (z1, z2, 270),
+ z0 = svqcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qcadd_90_s32_tied1:
+** sqcadd z0\.s, z0\.s, z1\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s32_tied1, svint32_t,
+ z0 = svqcadd_s32 (z0, z1, 90),
+ z0 = svqcadd (z0, z1, 90))
+
+/*
+** qcadd_90_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqcadd z0\.s, z0\.s, \1\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s32_tied2, svint32_t,
+ z0 = svqcadd_s32 (z1, z0, 90),
+ z0 = svqcadd (z1, z0, 90))
+
+/*
+** qcadd_90_s32_untied:
+** movprfx z0, z1
+** sqcadd z0\.s, z0\.s, z2\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s32_untied, svint32_t,
+ z0 = svqcadd_s32 (z1, z2, 90),
+ z0 = svqcadd (z1, z2, 90))
+
+/*
+** qcadd_270_s32_tied1:
+** sqcadd z0\.s, z0\.s, z1\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s32_tied1, svint32_t,
+ z0 = svqcadd_s32 (z0, z1, 270),
+ z0 = svqcadd (z0, z1, 270))
+
+/*
+** qcadd_270_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqcadd z0\.s, z0\.s, \1\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s32_tied2, svint32_t,
+ z0 = svqcadd_s32 (z1, z0, 270),
+ z0 = svqcadd (z1, z0, 270))
+
+/*
+** qcadd_270_s32_untied:
+** movprfx z0, z1
+** sqcadd z0\.s, z0\.s, z2\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s32_untied, svint32_t,
+ z0 = svqcadd_s32 (z1, z2, 270),
+ z0 = svqcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qcadd_90_s64_tied1:
+** sqcadd z0\.d, z0\.d, z1\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s64_tied1, svint64_t,
+ z0 = svqcadd_s64 (z0, z1, 90),
+ z0 = svqcadd (z0, z1, 90))
+
+/*
+** qcadd_90_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqcadd z0\.d, z0\.d, \1, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s64_tied2, svint64_t,
+ z0 = svqcadd_s64 (z1, z0, 90),
+ z0 = svqcadd (z1, z0, 90))
+
+/*
+** qcadd_90_s64_untied:
+** movprfx z0, z1
+** sqcadd z0\.d, z0\.d, z2\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s64_untied, svint64_t,
+ z0 = svqcadd_s64 (z1, z2, 90),
+ z0 = svqcadd (z1, z2, 90))
+
+/*
+** qcadd_270_s64_tied1:
+** sqcadd z0\.d, z0\.d, z1\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s64_tied1, svint64_t,
+ z0 = svqcadd_s64 (z0, z1, 270),
+ z0 = svqcadd (z0, z1, 270))
+
+/*
+** qcadd_270_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqcadd z0\.d, z0\.d, \1, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s64_tied2, svint64_t,
+ z0 = svqcadd_s64 (z1, z0, 270),
+ z0 = svqcadd (z1, z0, 270))
+
+/*
+** qcadd_270_s64_untied:
+** movprfx z0, z1
+** sqcadd z0\.d, z0\.d, z2\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s64_untied, svint64_t,
+ z0 = svqcadd_s64 (z1, z2, 270),
+ z0 = svqcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qcadd_90_s8_tied1:
+** sqcadd z0\.b, z0\.b, z1\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s8_tied1, svint8_t,
+ z0 = svqcadd_s8 (z0, z1, 90),
+ z0 = svqcadd (z0, z1, 90))
+
+/*
+** qcadd_90_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqcadd z0\.b, z0\.b, \1\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s8_tied2, svint8_t,
+ z0 = svqcadd_s8 (z1, z0, 90),
+ z0 = svqcadd (z1, z0, 90))
+
+/*
+** qcadd_90_s8_untied:
+** movprfx z0, z1
+** sqcadd z0\.b, z0\.b, z2\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_90_s8_untied, svint8_t,
+ z0 = svqcadd_s8 (z1, z2, 90),
+ z0 = svqcadd (z1, z2, 90))
+
+/*
+** qcadd_270_s8_tied1:
+** sqcadd z0\.b, z0\.b, z1\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s8_tied1, svint8_t,
+ z0 = svqcadd_s8 (z0, z1, 270),
+ z0 = svqcadd (z0, z1, 270))
+
+/*
+** qcadd_270_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqcadd z0\.b, z0\.b, \1\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s8_tied2, svint8_t,
+ z0 = svqcadd_s8 (z1, z0, 270),
+ z0 = svqcadd (z1, z0, 270))
+
+/*
+** qcadd_270_s8_untied:
+** movprfx z0, z1
+** sqcadd z0\.b, z0\.b, z2\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (qcadd_270_s8_untied, svint8_t,
+ z0 = svqcadd_s8 (z1, z2, 270),
+ z0 = svqcadd (z1, z2, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalb_lane_0_s32_tied1:
+** sqdmlalb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlalb_lane_s32 (z0, z4, z5, 0),
+ z0 = svqdmlalb_lane (z0, z4, z5, 0))
+
+/*
+** qdmlalb_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlalb_lane_s32 (z4, z0, z1, 0),
+ z0_res = svqdmlalb_lane (z4, z0, z1, 0))
+
+/*
+** qdmlalb_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_lane_0_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlalb_lane_s32 (z4, z1, z0, 0),
+ z0_res = svqdmlalb_lane (z4, z1, z0, 0))
+
+/*
+** qdmlalb_lane_0_s32_untied:
+** movprfx z0, z1
+** sqdmlalb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_lane_0_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlalb_lane_s32 (z1, z4, z5, 0),
+ z0 = svqdmlalb_lane (z1, z4, z5, 0))
+
+/*
+** qdmlalb_lane_1_s32:
+** sqdmlalb z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_lane_1_s32, svint32_t, svint16_t,
+ z0 = svqdmlalb_lane_s32 (z0, z4, z5, 1),
+ z0 = svqdmlalb_lane (z0, z4, z5, 1))
+
+/*
+** qdmlalb_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqdmlalb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlalb_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svqdmlalb_lane_s32 (z0, z1, z8, 1),
+ z0 = svqdmlalb_lane (z0, z1, z8, 1))
+
+/*
+** qdmlalb_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqdmlalb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlalb_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svqdmlalb_lane_s32 (z0, z1, z16, 1),
+ z0 = svqdmlalb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalb_lane_0_s64_tied1:
+** sqdmlalb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlalb_lane_s64 (z0, z4, z5, 0),
+ z0 = svqdmlalb_lane (z0, z4, z5, 0))
+
+/*
+** qdmlalb_lane_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlalb_lane_s64 (z4, z0, z1, 0),
+ z0_res = svqdmlalb_lane (z4, z0, z1, 0))
+
+/*
+** qdmlalb_lane_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_lane_0_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlalb_lane_s64 (z4, z1, z0, 0),
+ z0_res = svqdmlalb_lane (z4, z1, z0, 0))
+
+/*
+** qdmlalb_lane_0_s64_untied:
+** movprfx z0, z1
+** sqdmlalb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_lane_0_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlalb_lane_s64 (z1, z4, z5, 0),
+ z0 = svqdmlalb_lane (z1, z4, z5, 0))
+
+/*
+** qdmlalb_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqdmlalb z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlalb_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svqdmlalb_lane_s64 (z0, z1, z15, 1),
+ z0 = svqdmlalb_lane (z0, z1, z15, 1))
+
+/*
+** qdmlalb_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** sqdmlalb z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlalb_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svqdmlalb_lane_s64 (z0, z1, z16, 1),
+ z0 = svqdmlalb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalb_s16_tied1:
+** sqdmlalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlalb_s16 (z0, z4, z5),
+ z0 = svqdmlalb (z0, z4, z5))
+
+/*
+** qdmlalb_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svqdmlalb_s16 (z4, z0, z1),
+ z0_res = svqdmlalb (z4, z0, z1))
+
+/*
+** qdmlalb_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_s16_tied3, svint16_t, svint8_t,
+ z0_res = svqdmlalb_s16 (z4, z1, z0),
+ z0_res = svqdmlalb (z4, z1, z0))
+
+/*
+** qdmlalb_s16_untied:
+** movprfx z0, z1
+** sqdmlalb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlalb_s16 (z1, z4, z5),
+ z0 = svqdmlalb (z1, z4, z5))
+
+/*
+** qdmlalb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sqdmlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlalb_n_s16 (z0, z4, x0),
+ z0 = svqdmlalb (z0, z4, x0))
+
+/*
+** qdmlalb_w0_s16_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqdmlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlalb_n_s16 (z1, z4, x0),
+ z0 = svqdmlalb (z1, z4, x0))
+
+/*
+** qdmlalb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sqdmlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlalb_n_s16 (z0, z4, 11),
+ z0 = svqdmlalb (z0, z4, 11))
+
+/*
+** qdmlalb_11_s16_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sqdmlalb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_11_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlalb_n_s16 (z1, z4, 11),
+ z0 = svqdmlalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalb_s32_tied1:
+** sqdmlalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlalb_s32 (z0, z4, z5),
+ z0 = svqdmlalb (z0, z4, z5))
+
+/*
+** qdmlalb_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlalb_s32 (z4, z0, z1),
+ z0_res = svqdmlalb (z4, z0, z1))
+
+/*
+** qdmlalb_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlalb_s32 (z4, z1, z0),
+ z0_res = svqdmlalb (z4, z1, z0))
+
+/*
+** qdmlalb_s32_untied:
+** movprfx z0, z1
+** sqdmlalb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlalb_s32 (z1, z4, z5),
+ z0 = svqdmlalb (z1, z4, z5))
+
+/*
+** qdmlalb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sqdmlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlalb_n_s32 (z0, z4, x0),
+ z0 = svqdmlalb (z0, z4, x0))
+
+/*
+** qdmlalb_w0_s32_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqdmlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlalb_n_s32 (z1, z4, x0),
+ z0 = svqdmlalb (z1, z4, x0))
+
+/*
+** qdmlalb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sqdmlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlalb_n_s32 (z0, z4, 11),
+ z0 = svqdmlalb (z0, z4, 11))
+
+/*
+** qdmlalb_11_s32_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sqdmlalb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_11_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlalb_n_s32 (z1, z4, 11),
+ z0 = svqdmlalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalb_s64_tied1:
+** sqdmlalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlalb_s64 (z0, z4, z5),
+ z0 = svqdmlalb (z0, z4, z5))
+
+/*
+** qdmlalb_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlalb_s64 (z4, z0, z1),
+ z0_res = svqdmlalb (z4, z0, z1))
+
+/*
+** qdmlalb_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalb z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalb_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlalb_s64 (z4, z1, z0),
+ z0_res = svqdmlalb (z4, z1, z0))
+
+/*
+** qdmlalb_s64_untied:
+** movprfx z0, z1
+** sqdmlalb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlalb_s64 (z1, z4, z5),
+ z0 = svqdmlalb (z1, z4, z5))
+
+/*
+** qdmlalb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sqdmlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlalb_n_s64 (z0, z4, x0),
+ z0 = svqdmlalb (z0, z4, x0))
+
+/*
+** qdmlalb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqdmlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlalb_n_s64 (z1, z4, x0),
+ z0 = svqdmlalb (z1, z4, x0))
+
+/*
+** qdmlalb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sqdmlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlalb_n_s64 (z0, z4, 11),
+ z0 = svqdmlalb (z0, z4, 11))
+
+/*
+** qdmlalb_11_s64_untied: { xfail *-*-* }
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sqdmlalb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalb_11_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlalb_n_s64 (z1, z4, 11),
+ z0 = svqdmlalb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalbt_s16_tied1:
+** sqdmlalbt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlalbt_s16 (z0, z4, z5),
+ z0 = svqdmlalbt (z0, z4, z5))
+
+/*
+** qdmlalbt_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalbt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalbt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svqdmlalbt_s16 (z4, z0, z1),
+ z0_res = svqdmlalbt (z4, z0, z1))
+
+/*
+** qdmlalbt_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalbt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalbt_s16_tied3, svint16_t, svint8_t,
+ z0_res = svqdmlalbt_s16 (z4, z1, z0),
+ z0_res = svqdmlalbt (z4, z1, z0))
+
+/*
+** qdmlalbt_s16_untied:
+** movprfx z0, z1
+** sqdmlalbt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlalbt_s16 (z1, z4, z5),
+ z0 = svqdmlalbt (z1, z4, z5))
+
+/*
+** qdmlalbt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sqdmlalbt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalbt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlalbt_n_s16 (z0, z4, x0),
+ z0 = svqdmlalbt (z0, z4, x0))
+
+/*
+** qdmlalbt_w0_s16_untied: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqdmlalbt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalbt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlalbt_n_s16 (z1, z4, x0),
+ z0 = svqdmlalbt (z1, z4, x0))
+
+/*
+** qdmlalbt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sqdmlalbt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlalbt_n_s16 (z0, z4, 11),
+ z0 = svqdmlalbt (z0, z4, 11))
+
+/*
+** qdmlalbt_11_s16_untied: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sqdmlalbt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_11_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlalbt_n_s16 (z1, z4, 11),
+ z0 = svqdmlalbt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalbt_s32_tied1:
+** sqdmlalbt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlalbt_s32 (z0, z4, z5),
+ z0 = svqdmlalbt (z0, z4, z5))
+
+/*
+** qdmlalbt_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalbt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalbt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlalbt_s32 (z4, z0, z1),
+ z0_res = svqdmlalbt (z4, z0, z1))
+
+/*
+** qdmlalbt_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalbt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalbt_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlalbt_s32 (z4, z1, z0),
+ z0_res = svqdmlalbt (z4, z1, z0))
+
+/*
+** qdmlalbt_s32_untied:
+** movprfx z0, z1
+** sqdmlalbt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlalbt_s32 (z1, z4, z5),
+ z0 = svqdmlalbt (z1, z4, z5))
+
+/*
+** qdmlalbt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sqdmlalbt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalbt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlalbt_n_s32 (z0, z4, x0),
+ z0 = svqdmlalbt (z0, z4, x0))
+
+/*
+** qdmlalbt_w0_s32_untied: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqdmlalbt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalbt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlalbt_n_s32 (z1, z4, x0),
+ z0 = svqdmlalbt (z1, z4, x0))
+
+/*
+** qdmlalbt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sqdmlalbt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlalbt_n_s32 (z0, z4, 11),
+ z0 = svqdmlalbt (z0, z4, 11))
+
+/*
+** qdmlalbt_11_s32_untied: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sqdmlalbt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_11_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlalbt_n_s32 (z1, z4, 11),
+ z0 = svqdmlalbt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalbt_s64_tied1:
+** sqdmlalbt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlalbt_s64 (z0, z4, z5),
+ z0 = svqdmlalbt (z0, z4, z5))
+
+/*
+** qdmlalbt_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalbt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalbt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlalbt_s64 (z4, z0, z1),
+ z0_res = svqdmlalbt (z4, z0, z1))
+
+/*
+** qdmlalbt_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalbt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalbt_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlalbt_s64 (z4, z1, z0),
+ z0_res = svqdmlalbt (z4, z1, z0))
+
+/*
+** qdmlalbt_s64_untied:
+** movprfx z0, z1
+** sqdmlalbt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlalbt_s64 (z1, z4, z5),
+ z0 = svqdmlalbt (z1, z4, z5))
+
+/*
+** qdmlalbt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sqdmlalbt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalbt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlalbt_n_s64 (z0, z4, x0),
+ z0 = svqdmlalbt (z0, z4, x0))
+
+/*
+** qdmlalbt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqdmlalbt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalbt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlalbt_n_s64 (z1, z4, x0),
+ z0 = svqdmlalbt (z1, z4, x0))
+
+/*
+** qdmlalbt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sqdmlalbt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlalbt_n_s64 (z0, z4, 11),
+ z0 = svqdmlalbt (z0, z4, 11))
+
+/*
+** qdmlalbt_11_s64_untied: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sqdmlalbt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalbt_11_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlalbt_n_s64 (z1, z4, 11),
+ z0 = svqdmlalbt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalt_lane_0_s32_tied1:
+** sqdmlalt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlalt_lane_s32 (z0, z4, z5, 0),
+ z0 = svqdmlalt_lane (z0, z4, z5, 0))
+
+/*
+** qdmlalt_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlalt_lane_s32 (z4, z0, z1, 0),
+ z0_res = svqdmlalt_lane (z4, z0, z1, 0))
+
+/*
+** qdmlalt_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_lane_0_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlalt_lane_s32 (z4, z1, z0, 0),
+ z0_res = svqdmlalt_lane (z4, z1, z0, 0))
+
+/*
+** qdmlalt_lane_0_s32_untied:
+** movprfx z0, z1
+** sqdmlalt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_lane_0_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlalt_lane_s32 (z1, z4, z5, 0),
+ z0 = svqdmlalt_lane (z1, z4, z5, 0))
+
+/*
+** qdmlalt_lane_1_s32:
+** sqdmlalt z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_lane_1_s32, svint32_t, svint16_t,
+ z0 = svqdmlalt_lane_s32 (z0, z4, z5, 1),
+ z0 = svqdmlalt_lane (z0, z4, z5, 1))
+
+/*
+** qdmlalt_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqdmlalt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlalt_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svqdmlalt_lane_s32 (z0, z1, z8, 1),
+ z0 = svqdmlalt_lane (z0, z1, z8, 1))
+
+/*
+** qdmlalt_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqdmlalt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlalt_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svqdmlalt_lane_s32 (z0, z1, z16, 1),
+ z0 = svqdmlalt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalt_lane_0_s64_tied1:
+** sqdmlalt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlalt_lane_s64 (z0, z4, z5, 0),
+ z0 = svqdmlalt_lane (z0, z4, z5, 0))
+
+/*
+** qdmlalt_lane_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlalt_lane_s64 (z4, z0, z1, 0),
+ z0_res = svqdmlalt_lane (z4, z0, z1, 0))
+
+/*
+** qdmlalt_lane_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_lane_0_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlalt_lane_s64 (z4, z1, z0, 0),
+ z0_res = svqdmlalt_lane (z4, z1, z0, 0))
+
+/*
+** qdmlalt_lane_0_s64_untied:
+** movprfx z0, z1
+** sqdmlalt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_lane_0_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlalt_lane_s64 (z1, z4, z5, 0),
+ z0 = svqdmlalt_lane (z1, z4, z5, 0))
+
+/*
+** qdmlalt_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqdmlalt z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlalt_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svqdmlalt_lane_s64 (z0, z1, z15, 1),
+ z0 = svqdmlalt_lane (z0, z1, z15, 1))
+
+/*
+** qdmlalt_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** sqdmlalt z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlalt_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svqdmlalt_lane_s64 (z0, z1, z16, 1),
+ z0 = svqdmlalt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalt_s16_tied1:
+** sqdmlalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlalt_s16 (z0, z4, z5),
+ z0 = svqdmlalt (z0, z4, z5))
+
+/*
+** qdmlalt_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svqdmlalt_s16 (z4, z0, z1),
+ z0_res = svqdmlalt (z4, z0, z1))
+
+/*
+** qdmlalt_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_s16_tied3, svint16_t, svint8_t,
+ z0_res = svqdmlalt_s16 (z4, z1, z0),
+ z0_res = svqdmlalt (z4, z1, z0))
+
+/*
+** qdmlalt_s16_untied:
+** movprfx z0, z1
+** sqdmlalt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlalt_s16 (z1, z4, z5),
+ z0 = svqdmlalt (z1, z4, z5))
+
+/*
+** qdmlalt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sqdmlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlalt_n_s16 (z0, z4, x0),
+ z0 = svqdmlalt (z0, z4, x0))
+
+/*
+** qdmlalt_w0_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqdmlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlalt_n_s16 (z1, z4, x0),
+ z0 = svqdmlalt (z1, z4, x0))
+
+/*
+** qdmlalt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sqdmlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlalt_n_s16 (z0, z4, 11),
+ z0 = svqdmlalt (z0, z4, 11))
+
+/*
+** qdmlalt_11_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sqdmlalt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_11_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlalt_n_s16 (z1, z4, 11),
+ z0 = svqdmlalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalt_s32_tied1:
+** sqdmlalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlalt_s32 (z0, z4, z5),
+ z0 = svqdmlalt (z0, z4, z5))
+
+/*
+** qdmlalt_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlalt_s32 (z4, z0, z1),
+ z0_res = svqdmlalt (z4, z0, z1))
+
+/*
+** qdmlalt_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlalt_s32 (z4, z1, z0),
+ z0_res = svqdmlalt (z4, z1, z0))
+
+/*
+** qdmlalt_s32_untied:
+** movprfx z0, z1
+** sqdmlalt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlalt_s32 (z1, z4, z5),
+ z0 = svqdmlalt (z1, z4, z5))
+
+/*
+** qdmlalt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sqdmlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlalt_n_s32 (z0, z4, x0),
+ z0 = svqdmlalt (z0, z4, x0))
+
+/*
+** qdmlalt_w0_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqdmlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlalt_n_s32 (z1, z4, x0),
+ z0 = svqdmlalt (z1, z4, x0))
+
+/*
+** qdmlalt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sqdmlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlalt_n_s32 (z0, z4, 11),
+ z0 = svqdmlalt (z0, z4, 11))
+
+/*
+** qdmlalt_11_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sqdmlalt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_11_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlalt_n_s32 (z1, z4, 11),
+ z0 = svqdmlalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlalt_s64_tied1:
+** sqdmlalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlalt_s64 (z0, z4, z5),
+ z0 = svqdmlalt (z0, z4, z5))
+
+/*
+** qdmlalt_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlalt_s64 (z4, z0, z1),
+ z0_res = svqdmlalt (z4, z0, z1))
+
+/*
+** qdmlalt_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlalt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlalt_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlalt_s64 (z4, z1, z0),
+ z0_res = svqdmlalt (z4, z1, z0))
+
+/*
+** qdmlalt_s64_untied:
+** movprfx z0, z1
+** sqdmlalt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlalt_s64 (z1, z4, z5),
+ z0 = svqdmlalt (z1, z4, z5))
+
+/*
+** qdmlalt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sqdmlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlalt_n_s64 (z0, z4, x0),
+ z0 = svqdmlalt (z0, z4, x0))
+
+/*
+** qdmlalt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqdmlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlalt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlalt_n_s64 (z1, z4, x0),
+ z0 = svqdmlalt (z1, z4, x0))
+
+/*
+** qdmlalt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sqdmlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlalt_n_s64 (z0, z4, 11),
+ z0 = svqdmlalt (z0, z4, 11))
+
+/*
+** qdmlalt_11_s64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sqdmlalt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlalt_11_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlalt_n_s64 (z1, z4, 11),
+ z0 = svqdmlalt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslb_lane_0_s32_tied1:
+** sqdmlslb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlslb_lane_s32 (z0, z4, z5, 0),
+ z0 = svqdmlslb_lane (z0, z4, z5, 0))
+
+/*
+** qdmlslb_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlslb_lane_s32 (z4, z0, z1, 0),
+ z0_res = svqdmlslb_lane (z4, z0, z1, 0))
+
+/*
+** qdmlslb_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_lane_0_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlslb_lane_s32 (z4, z1, z0, 0),
+ z0_res = svqdmlslb_lane (z4, z1, z0, 0))
+
+/*
+** qdmlslb_lane_0_s32_untied:
+** movprfx z0, z1
+** sqdmlslb z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_lane_0_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlslb_lane_s32 (z1, z4, z5, 0),
+ z0 = svqdmlslb_lane (z1, z4, z5, 0))
+
+/*
+** qdmlslb_lane_1_s32:
+** sqdmlslb z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_lane_1_s32, svint32_t, svint16_t,
+ z0 = svqdmlslb_lane_s32 (z0, z4, z5, 1),
+ z0 = svqdmlslb_lane (z0, z4, z5, 1))
+
+/*
+** qdmlslb_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqdmlslb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlslb_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svqdmlslb_lane_s32 (z0, z1, z8, 1),
+ z0 = svqdmlslb_lane (z0, z1, z8, 1))
+
+/*
+** qdmlslb_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqdmlslb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlslb_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svqdmlslb_lane_s32 (z0, z1, z16, 1),
+ z0 = svqdmlslb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslb_lane_0_s64_tied1:
+** sqdmlslb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlslb_lane_s64 (z0, z4, z5, 0),
+ z0 = svqdmlslb_lane (z0, z4, z5, 0))
+
+/*
+** qdmlslb_lane_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlslb_lane_s64 (z4, z0, z1, 0),
+ z0_res = svqdmlslb_lane (z4, z0, z1, 0))
+
+/*
+** qdmlslb_lane_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_lane_0_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlslb_lane_s64 (z4, z1, z0, 0),
+ z0_res = svqdmlslb_lane (z4, z1, z0, 0))
+
+/*
+** qdmlslb_lane_0_s64_untied:
+** movprfx z0, z1
+** sqdmlslb z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_lane_0_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlslb_lane_s64 (z1, z4, z5, 0),
+ z0 = svqdmlslb_lane (z1, z4, z5, 0))
+
+/*
+** qdmlslb_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqdmlslb z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlslb_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svqdmlslb_lane_s64 (z0, z1, z15, 1),
+ z0 = svqdmlslb_lane (z0, z1, z15, 1))
+
+/*
+** qdmlslb_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** sqdmlslb z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlslb_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svqdmlslb_lane_s64 (z0, z1, z16, 1),
+ z0 = svqdmlslb_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslb_s16_tied1:
+** sqdmlslb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlslb_s16 (z0, z4, z5),
+ z0 = svqdmlslb (z0, z4, z5))
+
+/*
+** qdmlslb_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svqdmlslb_s16 (z4, z0, z1),
+ z0_res = svqdmlslb (z4, z0, z1))
+
+/*
+** qdmlslb_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_s16_tied3, svint16_t, svint8_t,
+ z0_res = svqdmlslb_s16 (z4, z1, z0),
+ z0_res = svqdmlslb (z4, z1, z0))
+
+/*
+** qdmlslb_s16_untied:
+** movprfx z0, z1
+** sqdmlslb z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlslb_s16 (z1, z4, z5),
+ z0 = svqdmlslb (z1, z4, z5))
+
+/*
+** qdmlslb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sqdmlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlslb_n_s16 (z0, z4, x0),
+ z0 = svqdmlslb (z0, z4, x0))
+
+/*
+** qdmlslb_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqdmlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlslb_n_s16 (z1, z4, x0),
+ z0 = svqdmlslb (z1, z4, x0))
+
+/*
+** qdmlslb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sqdmlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlslb_n_s16 (z0, z4, 11),
+ z0 = svqdmlslb (z0, z4, 11))
+
+/*
+** qdmlslb_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sqdmlslb z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_11_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlslb_n_s16 (z1, z4, 11),
+ z0 = svqdmlslb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslb_s32_tied1:
+** sqdmlslb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlslb_s32 (z0, z4, z5),
+ z0 = svqdmlslb (z0, z4, z5))
+
+/*
+** qdmlslb_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlslb_s32 (z4, z0, z1),
+ z0_res = svqdmlslb (z4, z0, z1))
+
+/*
+** qdmlslb_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlslb_s32 (z4, z1, z0),
+ z0_res = svqdmlslb (z4, z1, z0))
+
+/*
+** qdmlslb_s32_untied:
+** movprfx z0, z1
+** sqdmlslb z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlslb_s32 (z1, z4, z5),
+ z0 = svqdmlslb (z1, z4, z5))
+
+/*
+** qdmlslb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sqdmlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlslb_n_s32 (z0, z4, x0),
+ z0 = svqdmlslb (z0, z4, x0))
+
+/*
+** qdmlslb_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqdmlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlslb_n_s32 (z1, z4, x0),
+ z0 = svqdmlslb (z1, z4, x0))
+
+/*
+** qdmlslb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sqdmlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlslb_n_s32 (z0, z4, 11),
+ z0 = svqdmlslb (z0, z4, 11))
+
+/*
+** qdmlslb_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sqdmlslb z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_11_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlslb_n_s32 (z1, z4, 11),
+ z0 = svqdmlslb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslb_s64_tied1:
+** sqdmlslb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlslb_s64 (z0, z4, z5),
+ z0 = svqdmlslb (z0, z4, z5))
+
+/*
+** qdmlslb_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlslb_s64 (z4, z0, z1),
+ z0_res = svqdmlslb (z4, z0, z1))
+
+/*
+** qdmlslb_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslb z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslb_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlslb_s64 (z4, z1, z0),
+ z0_res = svqdmlslb (z4, z1, z0))
+
+/*
+** qdmlslb_s64_untied:
+** movprfx z0, z1
+** sqdmlslb z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlslb_s64 (z1, z4, z5),
+ z0 = svqdmlslb (z1, z4, z5))
+
+/*
+** qdmlslb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sqdmlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlslb_n_s64 (z0, z4, x0),
+ z0 = svqdmlslb (z0, z4, x0))
+
+/*
+** qdmlslb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqdmlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlslb_n_s64 (z1, z4, x0),
+ z0 = svqdmlslb (z1, z4, x0))
+
+/*
+** qdmlslb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sqdmlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlslb_n_s64 (z0, z4, 11),
+ z0 = svqdmlslb (z0, z4, 11))
+
+/*
+** qdmlslb_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sqdmlslb z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslb_11_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlslb_n_s64 (z1, z4, 11),
+ z0 = svqdmlslb (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslbt_s16_tied1:
+** sqdmlslbt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlslbt_s16 (z0, z4, z5),
+ z0 = svqdmlslbt (z0, z4, z5))
+
+/*
+** qdmlslbt_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslbt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslbt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svqdmlslbt_s16 (z4, z0, z1),
+ z0_res = svqdmlslbt (z4, z0, z1))
+
+/*
+** qdmlslbt_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslbt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslbt_s16_tied3, svint16_t, svint8_t,
+ z0_res = svqdmlslbt_s16 (z4, z1, z0),
+ z0_res = svqdmlslbt (z4, z1, z0))
+
+/*
+** qdmlslbt_s16_untied:
+** movprfx z0, z1
+** sqdmlslbt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlslbt_s16 (z1, z4, z5),
+ z0 = svqdmlslbt (z1, z4, z5))
+
+/*
+** qdmlslbt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sqdmlslbt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslbt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlslbt_n_s16 (z0, z4, x0),
+ z0 = svqdmlslbt (z0, z4, x0))
+
+/*
+** qdmlslbt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqdmlslbt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslbt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlslbt_n_s16 (z1, z4, x0),
+ z0 = svqdmlslbt (z1, z4, x0))
+
+/*
+** qdmlslbt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sqdmlslbt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlslbt_n_s16 (z0, z4, 11),
+ z0 = svqdmlslbt (z0, z4, 11))
+
+/*
+** qdmlslbt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sqdmlslbt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_11_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlslbt_n_s16 (z1, z4, 11),
+ z0 = svqdmlslbt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslbt_s32_tied1:
+** sqdmlslbt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlslbt_s32 (z0, z4, z5),
+ z0 = svqdmlslbt (z0, z4, z5))
+
+/*
+** qdmlslbt_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslbt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslbt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlslbt_s32 (z4, z0, z1),
+ z0_res = svqdmlslbt (z4, z0, z1))
+
+/*
+** qdmlslbt_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslbt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslbt_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlslbt_s32 (z4, z1, z0),
+ z0_res = svqdmlslbt (z4, z1, z0))
+
+/*
+** qdmlslbt_s32_untied:
+** movprfx z0, z1
+** sqdmlslbt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlslbt_s32 (z1, z4, z5),
+ z0 = svqdmlslbt (z1, z4, z5))
+
+/*
+** qdmlslbt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sqdmlslbt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslbt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlslbt_n_s32 (z0, z4, x0),
+ z0 = svqdmlslbt (z0, z4, x0))
+
+/*
+** qdmlslbt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqdmlslbt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslbt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlslbt_n_s32 (z1, z4, x0),
+ z0 = svqdmlslbt (z1, z4, x0))
+
+/*
+** qdmlslbt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sqdmlslbt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlslbt_n_s32 (z0, z4, 11),
+ z0 = svqdmlslbt (z0, z4, 11))
+
+/*
+** qdmlslbt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sqdmlslbt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_11_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlslbt_n_s32 (z1, z4, 11),
+ z0 = svqdmlslbt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslbt_s64_tied1:
+** sqdmlslbt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlslbt_s64 (z0, z4, z5),
+ z0 = svqdmlslbt (z0, z4, z5))
+
+/*
+** qdmlslbt_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslbt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslbt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlslbt_s64 (z4, z0, z1),
+ z0_res = svqdmlslbt (z4, z0, z1))
+
+/*
+** qdmlslbt_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslbt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslbt_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlslbt_s64 (z4, z1, z0),
+ z0_res = svqdmlslbt (z4, z1, z0))
+
+/*
+** qdmlslbt_s64_untied:
+** movprfx z0, z1
+** sqdmlslbt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlslbt_s64 (z1, z4, z5),
+ z0 = svqdmlslbt (z1, z4, z5))
+
+/*
+** qdmlslbt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sqdmlslbt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslbt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlslbt_n_s64 (z0, z4, x0),
+ z0 = svqdmlslbt (z0, z4, x0))
+
+/*
+** qdmlslbt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqdmlslbt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslbt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlslbt_n_s64 (z1, z4, x0),
+ z0 = svqdmlslbt (z1, z4, x0))
+
+/*
+** qdmlslbt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sqdmlslbt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlslbt_n_s64 (z0, z4, 11),
+ z0 = svqdmlslbt (z0, z4, 11))
+
+/*
+** qdmlslbt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sqdmlslbt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslbt_11_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlslbt_n_s64 (z1, z4, 11),
+ z0 = svqdmlslbt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslt_lane_0_s32_tied1:
+** sqdmlslt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlslt_lane_s32 (z0, z4, z5, 0),
+ z0 = svqdmlslt_lane (z0, z4, z5, 0))
+
+/*
+** qdmlslt_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.s, \1\.h, z1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlslt_lane_s32 (z4, z0, z1, 0),
+ z0_res = svqdmlslt_lane (z4, z0, z1, 0))
+
+/*
+** qdmlslt_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.s, z1\.h, \1\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_lane_0_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlslt_lane_s32 (z4, z1, z0, 0),
+ z0_res = svqdmlslt_lane (z4, z1, z0, 0))
+
+/*
+** qdmlslt_lane_0_s32_untied:
+** movprfx z0, z1
+** sqdmlslt z0\.s, z4\.h, z5\.h\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_lane_0_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlslt_lane_s32 (z1, z4, z5, 0),
+ z0 = svqdmlslt_lane (z1, z4, z5, 0))
+
+/*
+** qdmlslt_lane_1_s32:
+** sqdmlslt z0\.s, z4\.h, z5\.h\[1\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_lane_1_s32, svint32_t, svint16_t,
+ z0 = svqdmlslt_lane_s32 (z0, z4, z5, 1),
+ z0 = svqdmlslt_lane (z0, z4, z5, 1))
+
+/*
+** qdmlslt_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqdmlslt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlslt_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svqdmlslt_lane_s32 (z0, z1, z8, 1),
+ z0 = svqdmlslt_lane (z0, z1, z8, 1))
+
+/*
+** qdmlslt_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqdmlslt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlslt_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svqdmlslt_lane_s32 (z0, z1, z16, 1),
+ z0 = svqdmlslt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslt_lane_0_s64_tied1:
+** sqdmlslt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlslt_lane_s64 (z0, z4, z5, 0),
+ z0 = svqdmlslt_lane (z0, z4, z5, 0))
+
+/*
+** qdmlslt_lane_0_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.d, \1\.s, z1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlslt_lane_s64 (z4, z0, z1, 0),
+ z0_res = svqdmlslt_lane (z4, z0, z1, 0))
+
+/*
+** qdmlslt_lane_0_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.d, z1\.s, \1\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_lane_0_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlslt_lane_s64 (z4, z1, z0, 0),
+ z0_res = svqdmlslt_lane (z4, z1, z0, 0))
+
+/*
+** qdmlslt_lane_0_s64_untied:
+** movprfx z0, z1
+** sqdmlslt z0\.d, z4\.s, z5\.s\[0\]
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_lane_0_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlslt_lane_s64 (z1, z4, z5, 0),
+ z0 = svqdmlslt_lane (z1, z4, z5, 0))
+
+/*
+** qdmlslt_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqdmlslt z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlslt_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svqdmlslt_lane_s64 (z0, z1, z15, 1),
+ z0 = svqdmlslt_lane (z0, z1, z15, 1))
+
+/*
+** qdmlslt_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** sqdmlslt z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmlslt_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svqdmlslt_lane_s64 (z0, z1, z16, 1),
+ z0 = svqdmlslt_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslt_s16_tied1:
+** sqdmlslt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlslt_s16 (z0, z4, z5),
+ z0 = svqdmlslt (z0, z4, z5))
+
+/*
+** qdmlslt_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.h, \1\.b, z1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svqdmlslt_s16 (z4, z0, z1),
+ z0_res = svqdmlslt (z4, z0, z1))
+
+/*
+** qdmlslt_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.h, z1\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_s16_tied3, svint16_t, svint8_t,
+ z0_res = svqdmlslt_s16 (z4, z1, z0),
+ z0_res = svqdmlslt (z4, z1, z0))
+
+/*
+** qdmlslt_s16_untied:
+** movprfx z0, z1
+** sqdmlslt z0\.h, z4\.b, z5\.b
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlslt_s16 (z1, z4, z5),
+ z0 = svqdmlslt (z1, z4, z5))
+
+/*
+** qdmlslt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sqdmlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlslt_n_s16 (z0, z4, x0),
+ z0 = svqdmlslt (z0, z4, x0))
+
+/*
+** qdmlslt_w0_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqdmlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0 = svqdmlslt_n_s16 (z1, z4, x0),
+ z0 = svqdmlslt (z1, z4, x0))
+
+/*
+** qdmlslt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sqdmlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_11_s16_tied1, svint16_t, svint8_t,
+ z0 = svqdmlslt_n_s16 (z0, z4, 11),
+ z0 = svqdmlslt (z0, z4, 11))
+
+/*
+** qdmlslt_11_s16_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sqdmlslt z0\.h, z4\.b, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_11_s16_untied, svint16_t, svint8_t,
+ z0 = svqdmlslt_n_s16 (z1, z4, 11),
+ z0 = svqdmlslt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslt_s32_tied1:
+** sqdmlslt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlslt_s32 (z0, z4, z5),
+ z0 = svqdmlslt (z0, z4, z5))
+
+/*
+** qdmlslt_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.s, \1\.h, z1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmlslt_s32 (z4, z0, z1),
+ z0_res = svqdmlslt (z4, z0, z1))
+
+/*
+** qdmlslt_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.s, z1\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_s32_tied3, svint32_t, svint16_t,
+ z0_res = svqdmlslt_s32 (z4, z1, z0),
+ z0_res = svqdmlslt (z4, z1, z0))
+
+/*
+** qdmlslt_s32_untied:
+** movprfx z0, z1
+** sqdmlslt z0\.s, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlslt_s32 (z1, z4, z5),
+ z0 = svqdmlslt (z1, z4, z5))
+
+/*
+** qdmlslt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sqdmlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlslt_n_s32 (z0, z4, x0),
+ z0 = svqdmlslt (z0, z4, x0))
+
+/*
+** qdmlslt_w0_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqdmlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0 = svqdmlslt_n_s32 (z1, z4, x0),
+ z0 = svqdmlslt (z1, z4, x0))
+
+/*
+** qdmlslt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sqdmlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_11_s32_tied1, svint32_t, svint16_t,
+ z0 = svqdmlslt_n_s32 (z0, z4, 11),
+ z0 = svqdmlslt (z0, z4, 11))
+
+/*
+** qdmlslt_11_s32_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sqdmlslt z0\.s, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_11_s32_untied, svint32_t, svint16_t,
+ z0 = svqdmlslt_n_s32 (z1, z4, 11),
+ z0 = svqdmlslt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmlslt_s64_tied1:
+** sqdmlslt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlslt_s64 (z0, z4, z5),
+ z0 = svqdmlslt (z0, z4, z5))
+
+/*
+** qdmlslt_s64_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.d, \1\.s, z1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmlslt_s64 (z4, z0, z1),
+ z0_res = svqdmlslt (z4, z0, z1))
+
+/*
+** qdmlslt_s64_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqdmlslt z0\.d, z1\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qdmlslt_s64_tied3, svint64_t, svint32_t,
+ z0_res = svqdmlslt_s64 (z4, z1, z0),
+ z0_res = svqdmlslt (z4, z1, z0))
+
+/*
+** qdmlslt_s64_untied:
+** movprfx z0, z1
+** sqdmlslt z0\.d, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlslt_s64 (z1, z4, z5),
+ z0 = svqdmlslt (z1, z4, z5))
+
+/*
+** qdmlslt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sqdmlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlslt_n_s64 (z0, z4, x0),
+ z0 = svqdmlslt (z0, z4, x0))
+
+/*
+** qdmlslt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqdmlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (qdmlslt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0 = svqdmlslt_n_s64 (z1, z4, x0),
+ z0 = svqdmlslt (z1, z4, x0))
+
+/*
+** qdmlslt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sqdmlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_11_s64_tied1, svint64_t, svint32_t,
+ z0 = svqdmlslt_n_s64 (z0, z4, 11),
+ z0 = svqdmlslt (z0, z4, 11))
+
+/*
+** qdmlslt_11_s64_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sqdmlslt z0\.d, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (qdmlslt_11_s64_untied, svint64_t, svint32_t,
+ z0 = svqdmlslt_n_s64 (z1, z4, 11),
+ z0 = svqdmlslt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmulh_lane_0_s16_tied1:
+** sqdmulh z0\.h, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_0_s16_tied1, svint16_t,
+ z0 = svqdmulh_lane_s16 (z0, z1, 0),
+ z0 = svqdmulh_lane (z0, z1, 0))
+
+/*
+** qdmulh_lane_0_s16_tied2:
+** sqdmulh z0\.h, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_0_s16_tied2, svint16_t,
+ z0 = svqdmulh_lane_s16 (z1, z0, 0),
+ z0 = svqdmulh_lane (z1, z0, 0))
+
+/*
+** qdmulh_lane_0_s16_untied:
+** sqdmulh z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_0_s16_untied, svint16_t,
+ z0 = svqdmulh_lane_s16 (z1, z2, 0),
+ z0 = svqdmulh_lane (z1, z2, 0))
+
+/*
+** qdmulh_lane_1_s16:
+** sqdmulh z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_1_s16, svint16_t,
+ z0 = svqdmulh_lane_s16 (z1, z2, 1),
+ z0 = svqdmulh_lane (z1, z2, 1))
+
+/*
+** qdmulh_lane_2_s16:
+** sqdmulh z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_2_s16, svint16_t,
+ z0 = svqdmulh_lane_s16 (z1, z2, 2),
+ z0 = svqdmulh_lane (z1, z2, 2))
+
+/*
+** qdmulh_lane_3_s16:
+** sqdmulh z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_3_s16, svint16_t,
+ z0 = svqdmulh_lane_s16 (z1, z2, 3),
+ z0 = svqdmulh_lane (z1, z2, 3))
+
+/*
+** qdmulh_lane_4_s16:
+** sqdmulh z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_4_s16, svint16_t,
+ z0 = svqdmulh_lane_s16 (z1, z2, 4),
+ z0 = svqdmulh_lane (z1, z2, 4))
+
+/*
+** qdmulh_lane_5_s16:
+** sqdmulh z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_5_s16, svint16_t,
+ z0 = svqdmulh_lane_s16 (z1, z2, 5),
+ z0 = svqdmulh_lane (z1, z2, 5))
+
+/*
+** qdmulh_lane_6_s16:
+** sqdmulh z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_6_s16, svint16_t,
+ z0 = svqdmulh_lane_s16 (z1, z2, 6),
+ z0 = svqdmulh_lane (z1, z2, 6))
+
+/*
+** qdmulh_lane_7_s16:
+** sqdmulh z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_7_s16, svint16_t,
+ z0 = svqdmulh_lane_s16 (z1, z2, 7),
+ z0 = svqdmulh_lane (z1, z2, 7))
+
+/*
+** qdmulh_lane_z8_s16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqdmulh z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmulh_lane_z8_s16, svint16_t, svint16_t, z8,
+ z0 = svqdmulh_lane_s16 (z1, z8, 1),
+ z0 = svqdmulh_lane (z1, z8, 1))
+
+/*
+** qdmulh_lane_z16_s16:
+** mov (z[0-7])\.d, z16\.d
+** sqdmulh z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmulh_lane_z16_s16, svint16_t, svint16_t, z16,
+ z0 = svqdmulh_lane_s16 (z1, z16, 1),
+ z0 = svqdmulh_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmulh_lane_0_s32_tied1:
+** sqdmulh z0\.s, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_0_s32_tied1, svint32_t,
+ z0 = svqdmulh_lane_s32 (z0, z1, 0),
+ z0 = svqdmulh_lane (z0, z1, 0))
+
+/*
+** qdmulh_lane_0_s32_tied2:
+** sqdmulh z0\.s, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_0_s32_tied2, svint32_t,
+ z0 = svqdmulh_lane_s32 (z1, z0, 0),
+ z0 = svqdmulh_lane (z1, z0, 0))
+
+/*
+** qdmulh_lane_0_s32_untied:
+** sqdmulh z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_0_s32_untied, svint32_t,
+ z0 = svqdmulh_lane_s32 (z1, z2, 0),
+ z0 = svqdmulh_lane (z1, z2, 0))
+
+/*
+** qdmulh_lane_1_s32:
+** sqdmulh z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_1_s32, svint32_t,
+ z0 = svqdmulh_lane_s32 (z1, z2, 1),
+ z0 = svqdmulh_lane (z1, z2, 1))
+
+/*
+** qdmulh_lane_2_s32:
+** sqdmulh z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_2_s32, svint32_t,
+ z0 = svqdmulh_lane_s32 (z1, z2, 2),
+ z0 = svqdmulh_lane (z1, z2, 2))
+
+/*
+** qdmulh_lane_3_s32:
+** sqdmulh z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_3_s32, svint32_t,
+ z0 = svqdmulh_lane_s32 (z1, z2, 3),
+ z0 = svqdmulh_lane (z1, z2, 3))
+
+/*
+** qdmulh_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqdmulh z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmulh_lane_z8_s32, svint32_t, svint32_t, z8,
+ z0 = svqdmulh_lane_s32 (z1, z8, 1),
+ z0 = svqdmulh_lane (z1, z8, 1))
+
+/*
+** qdmulh_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqdmulh z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmulh_lane_z16_s32, svint32_t, svint32_t, z16,
+ z0 = svqdmulh_lane_s32 (z1, z16, 1),
+ z0 = svqdmulh_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmulh_lane_0_s64_tied1:
+** sqdmulh z0\.d, z0\.d, z1\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_0_s64_tied1, svint64_t,
+ z0 = svqdmulh_lane_s64 (z0, z1, 0),
+ z0 = svqdmulh_lane (z0, z1, 0))
+
+/*
+** qdmulh_lane_0_s64_tied2:
+** sqdmulh z0\.d, z1\.d, z0\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_0_s64_tied2, svint64_t,
+ z0 = svqdmulh_lane_s64 (z1, z0, 0),
+ z0 = svqdmulh_lane (z1, z0, 0))
+
+/*
+** qdmulh_lane_0_s64_untied:
+** sqdmulh z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_0_s64_untied, svint64_t,
+ z0 = svqdmulh_lane_s64 (z1, z2, 0),
+ z0 = svqdmulh_lane (z1, z2, 0))
+
+/*
+** qdmulh_lane_1_s64:
+** sqdmulh z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_lane_1_s64, svint64_t,
+ z0 = svqdmulh_lane_s64 (z1, z2, 1),
+ z0 = svqdmulh_lane (z1, z2, 1))
+
+/*
+** qdmulh_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqdmulh z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmulh_lane_z15_s64, svint64_t, svint64_t, z15,
+ z0 = svqdmulh_lane_s64 (z1, z15, 1),
+ z0 = svqdmulh_lane (z1, z15, 1))
+
+/*
+** qdmulh_lane_z16_s64:
+** mov (z[0-7])\.d, z16\.d
+** sqdmulh z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmulh_lane_z16_s64, svint64_t, svint64_t, z16,
+ z0 = svqdmulh_lane_s64 (z1, z16, 1),
+ z0 = svqdmulh_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmulh_s16_tied1:
+** sqdmulh z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s16_tied1, svint16_t,
+ z0 = svqdmulh_s16 (z0, z1),
+ z0 = svqdmulh (z0, z1))
+
+/*
+** qdmulh_s16_tied2:
+** sqdmulh z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s16_tied2, svint16_t,
+ z0 = svqdmulh_s16 (z1, z0),
+ z0 = svqdmulh (z1, z0))
+
+/*
+** qdmulh_s16_untied:
+** sqdmulh z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s16_untied, svint16_t,
+ z0 = svqdmulh_s16 (z1, z2),
+ z0 = svqdmulh (z1, z2))
+
+/*
+** qdmulh_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** sqdmulh z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qdmulh_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svqdmulh_n_s16 (z0, x0),
+ z0 = svqdmulh (z0, x0))
+
+/*
+** qdmulh_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** sqdmulh z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qdmulh_w0_s16_untied, svint16_t, int16_t,
+ z0 = svqdmulh_n_s16 (z1, x0),
+ z0 = svqdmulh (z1, x0))
+
+/*
+** qdmulh_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** sqdmulh z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_11_s16_tied1, svint16_t,
+ z0 = svqdmulh_n_s16 (z0, 11),
+ z0 = svqdmulh (z0, 11))
+
+/*
+** qdmulh_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** sqdmulh z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_11_s16_untied, svint16_t,
+ z0 = svqdmulh_n_s16 (z1, 11),
+ z0 = svqdmulh (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmulh_s32_tied1:
+** sqdmulh z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s32_tied1, svint32_t,
+ z0 = svqdmulh_s32 (z0, z1),
+ z0 = svqdmulh (z0, z1))
+
+/*
+** qdmulh_s32_tied2:
+** sqdmulh z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s32_tied2, svint32_t,
+ z0 = svqdmulh_s32 (z1, z0),
+ z0 = svqdmulh (z1, z0))
+
+/*
+** qdmulh_s32_untied:
+** sqdmulh z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s32_untied, svint32_t,
+ z0 = svqdmulh_s32 (z1, z2),
+ z0 = svqdmulh (z1, z2))
+
+/*
+** qdmulh_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** sqdmulh z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qdmulh_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svqdmulh_n_s32 (z0, x0),
+ z0 = svqdmulh (z0, x0))
+
+/*
+** qdmulh_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** sqdmulh z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qdmulh_w0_s32_untied, svint32_t, int32_t,
+ z0 = svqdmulh_n_s32 (z1, x0),
+ z0 = svqdmulh (z1, x0))
+
+/*
+** qdmulh_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** sqdmulh z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_11_s32_tied1, svint32_t,
+ z0 = svqdmulh_n_s32 (z0, 11),
+ z0 = svqdmulh (z0, 11))
+
+/*
+** qdmulh_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** sqdmulh z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_11_s32_untied, svint32_t,
+ z0 = svqdmulh_n_s32 (z1, 11),
+ z0 = svqdmulh (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmulh_s64_tied1:
+** sqdmulh z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s64_tied1, svint64_t,
+ z0 = svqdmulh_s64 (z0, z1),
+ z0 = svqdmulh (z0, z1))
+
+/*
+** qdmulh_s64_tied2:
+** sqdmulh z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s64_tied2, svint64_t,
+ z0 = svqdmulh_s64 (z1, z0),
+ z0 = svqdmulh (z1, z0))
+
+/*
+** qdmulh_s64_untied:
+** sqdmulh z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s64_untied, svint64_t,
+ z0 = svqdmulh_s64 (z1, z2),
+ z0 = svqdmulh (z1, z2))
+
+/*
+** qdmulh_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** sqdmulh z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qdmulh_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svqdmulh_n_s64 (z0, x0),
+ z0 = svqdmulh (z0, x0))
+
+/*
+** qdmulh_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** sqdmulh z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qdmulh_x0_s64_untied, svint64_t, int64_t,
+ z0 = svqdmulh_n_s64 (z1, x0),
+ z0 = svqdmulh (z1, x0))
+
+/*
+** qdmulh_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** sqdmulh z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_11_s64_tied1, svint64_t,
+ z0 = svqdmulh_n_s64 (z0, 11),
+ z0 = svqdmulh (z0, 11))
+
+/*
+** qdmulh_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** sqdmulh z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_11_s64_untied, svint64_t,
+ z0 = svqdmulh_n_s64 (z1, 11),
+ z0 = svqdmulh (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmulh_s8_tied1:
+** sqdmulh z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s8_tied1, svint8_t,
+ z0 = svqdmulh_s8 (z0, z1),
+ z0 = svqdmulh (z0, z1))
+
+/*
+** qdmulh_s8_tied2:
+** sqdmulh z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s8_tied2, svint8_t,
+ z0 = svqdmulh_s8 (z1, z0),
+ z0 = svqdmulh (z1, z0))
+
+/*
+** qdmulh_s8_untied:
+** sqdmulh z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_s8_untied, svint8_t,
+ z0 = svqdmulh_s8 (z1, z2),
+ z0 = svqdmulh (z1, z2))
+
+/*
+** qdmulh_w0_s8_tied1:
+** mov (z[0-9]+\.b), w0
+** sqdmulh z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qdmulh_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svqdmulh_n_s8 (z0, x0),
+ z0 = svqdmulh (z0, x0))
+
+/*
+** qdmulh_w0_s8_untied:
+** mov (z[0-9]+\.b), w0
+** sqdmulh z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qdmulh_w0_s8_untied, svint8_t, int8_t,
+ z0 = svqdmulh_n_s8 (z1, x0),
+ z0 = svqdmulh (z1, x0))
+
+/*
+** qdmulh_11_s8_tied1:
+** mov (z[0-9]+\.b), #11
+** sqdmulh z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_11_s8_tied1, svint8_t,
+ z0 = svqdmulh_n_s8 (z0, 11),
+ z0 = svqdmulh (z0, 11))
+
+/*
+** qdmulh_11_s8_untied:
+** mov (z[0-9]+\.b), #11
+** sqdmulh z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qdmulh_11_s8_untied, svint8_t,
+ z0 = svqdmulh_n_s8 (z1, 11),
+ z0 = svqdmulh (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullb_lane_0_s32_tied1:
+** sqdmullb z0\.s, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z0, z1, 0),
+ z0_res = svqdmullb_lane (z0, z1, 0))
+
+/*
+** qdmullb_lane_0_s32_tied2:
+** sqdmullb z0\.s, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z1, z0, 0),
+ z0_res = svqdmullb_lane (z1, z0, 0))
+
+/*
+** qdmullb_lane_0_s32_untied:
+** sqdmullb z0\.s, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_0_s32_untied, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z1, z2, 0),
+ z0_res = svqdmullb_lane (z1, z2, 0))
+
+/*
+** qdmullb_lane_1_s32:
+** sqdmullb z0\.s, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_1_s32, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z1, z2, 1),
+ z0_res = svqdmullb_lane (z1, z2, 1))
+
+/*
+** qdmullb_lane_2_s32:
+** sqdmullb z0\.s, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_2_s32, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z1, z2, 2),
+ z0_res = svqdmullb_lane (z1, z2, 2))
+
+/*
+** qdmullb_lane_3_s32:
+** sqdmullb z0\.s, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_3_s32, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z1, z2, 3),
+ z0_res = svqdmullb_lane (z1, z2, 3))
+
+/*
+** qdmullb_lane_4_s32:
+** sqdmullb z0\.s, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_4_s32, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z1, z2, 4),
+ z0_res = svqdmullb_lane (z1, z2, 4))
+
+/*
+** qdmullb_lane_5_s32:
+** sqdmullb z0\.s, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_5_s32, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z1, z2, 5),
+ z0_res = svqdmullb_lane (z1, z2, 5))
+
+/*
+** qdmullb_lane_6_s32:
+** sqdmullb z0\.s, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_6_s32, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z1, z2, 6),
+ z0_res = svqdmullb_lane (z1, z2, 6))
+
+/*
+** qdmullb_lane_7_s32:
+** sqdmullb z0\.s, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_7_s32, svint32_t, svint16_t,
+ z0_res = svqdmullb_lane_s32 (z1, z2, 7),
+ z0_res = svqdmullb_lane (z1, z2, 7))
+
+/*
+** qdmullb_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqdmullb z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmullb_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svqdmullb_lane_s32 (z1, z8, 1),
+ z0 = svqdmullb_lane (z1, z8, 1))
+
+/*
+** qdmullb_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqdmullb z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmullb_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svqdmullb_lane_s32 (z1, z16, 1),
+ z0 = svqdmullb_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullb_lane_0_s64_tied1:
+** sqdmullb z0\.d, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0_res = svqdmullb_lane_s64 (z0, z1, 0),
+ z0_res = svqdmullb_lane (z0, z1, 0))
+
+/*
+** qdmullb_lane_0_s64_tied2:
+** sqdmullb z0\.d, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmullb_lane_s64 (z1, z0, 0),
+ z0_res = svqdmullb_lane (z1, z0, 0))
+
+/*
+** qdmullb_lane_0_s64_untied:
+** sqdmullb z0\.d, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_0_s64_untied, svint64_t, svint32_t,
+ z0_res = svqdmullb_lane_s64 (z1, z2, 0),
+ z0_res = svqdmullb_lane (z1, z2, 0))
+
+/*
+** qdmullb_lane_1_s64:
+** sqdmullb z0\.d, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_1_s64, svint64_t, svint32_t,
+ z0_res = svqdmullb_lane_s64 (z1, z2, 1),
+ z0_res = svqdmullb_lane (z1, z2, 1))
+
+/*
+** qdmullb_lane_2_s64:
+** sqdmullb z0\.d, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_2_s64, svint64_t, svint32_t,
+ z0_res = svqdmullb_lane_s64 (z1, z2, 2),
+ z0_res = svqdmullb_lane (z1, z2, 2))
+
+/*
+** qdmullb_lane_3_s64:
+** sqdmullb z0\.d, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_lane_3_s64, svint64_t, svint32_t,
+ z0_res = svqdmullb_lane_s64 (z1, z2, 3),
+ z0_res = svqdmullb_lane (z1, z2, 3))
+
+/*
+** qdmullb_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqdmullb z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmullb_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svqdmullb_lane_s64 (z1, z15, 1),
+ z0 = svqdmullb_lane (z1, z15, 1))
+
+/*
+** qdmullb_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** sqdmullb z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmullb_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svqdmullb_lane_s64 (z1, z16, 1),
+ z0 = svqdmullb_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullb_s16_tied1:
+** sqdmullb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_s16_tied1, svint16_t, svint8_t,
+ z0_res = svqdmullb_s16 (z0, z1),
+ z0_res = svqdmullb (z0, z1))
+
+/*
+** qdmullb_s16_tied2:
+** sqdmullb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svqdmullb_s16 (z1, z0),
+ z0_res = svqdmullb (z1, z0))
+
+/*
+** qdmullb_s16_untied:
+** sqdmullb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_s16_untied, svint16_t, svint8_t,
+ z0_res = svqdmullb_s16 (z1, z2),
+ z0_res = svqdmullb (z1, z2))
+
+/*
+** qdmullb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sqdmullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svqdmullb_n_s16 (z0, x0),
+ z0_res = svqdmullb (z0, x0))
+
+/*
+** qdmullb_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** sqdmullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svqdmullb_n_s16 (z1, x0),
+ z0_res = svqdmullb (z1, x0))
+
+/*
+** qdmullb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sqdmullb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svqdmullb_n_s16 (z0, 11),
+ z0_res = svqdmullb (z0, 11))
+
+/*
+** qdmullb_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** sqdmullb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svqdmullb_n_s16 (z1, 11),
+ z0_res = svqdmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullb_s32_tied1:
+** sqdmullb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_s32_tied1, svint32_t, svint16_t,
+ z0_res = svqdmullb_s32 (z0, z1),
+ z0_res = svqdmullb (z0, z1))
+
+/*
+** qdmullb_s32_tied2:
+** sqdmullb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmullb_s32 (z1, z0),
+ z0_res = svqdmullb (z1, z0))
+
+/*
+** qdmullb_s32_untied:
+** sqdmullb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_s32_untied, svint32_t, svint16_t,
+ z0_res = svqdmullb_s32 (z1, z2),
+ z0_res = svqdmullb (z1, z2))
+
+/*
+** qdmullb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sqdmullb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svqdmullb_n_s32 (z0, x0),
+ z0_res = svqdmullb (z0, x0))
+
+/*
+** qdmullb_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** sqdmullb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svqdmullb_n_s32 (z1, x0),
+ z0_res = svqdmullb (z1, x0))
+
+/*
+** qdmullb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sqdmullb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svqdmullb_n_s32 (z0, 11),
+ z0_res = svqdmullb (z0, 11))
+
+/*
+** qdmullb_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** sqdmullb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svqdmullb_n_s32 (z1, 11),
+ z0_res = svqdmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullb_s64_tied1:
+** sqdmullb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_s64_tied1, svint64_t, svint32_t,
+ z0_res = svqdmullb_s64 (z0, z1),
+ z0_res = svqdmullb (z0, z1))
+
+/*
+** qdmullb_s64_tied2:
+** sqdmullb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmullb_s64 (z1, z0),
+ z0_res = svqdmullb (z1, z0))
+
+/*
+** qdmullb_s64_untied:
+** sqdmullb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_s64_untied, svint64_t, svint32_t,
+ z0_res = svqdmullb_s64 (z1, z2),
+ z0_res = svqdmullb (z1, z2))
+
+/*
+** qdmullb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sqdmullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svqdmullb_n_s64 (z0, x0),
+ z0_res = svqdmullb (z0, x0))
+
+/*
+** qdmullb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** sqdmullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svqdmullb_n_s64 (z1, x0),
+ z0_res = svqdmullb (z1, x0))
+
+/*
+** qdmullb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sqdmullb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svqdmullb_n_s64 (z0, 11),
+ z0_res = svqdmullb (z0, 11))
+
+/*
+** qdmullb_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** sqdmullb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullb_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svqdmullb_n_s64 (z1, 11),
+ z0_res = svqdmullb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullt_lane_0_s32_tied1:
+** sqdmullt z0\.s, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_0_s32_tied1, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z0, z1, 0),
+ z0_res = svqdmullt_lane (z0, z1, 0))
+
+/*
+** qdmullt_lane_0_s32_tied2:
+** sqdmullt z0\.s, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_0_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z1, z0, 0),
+ z0_res = svqdmullt_lane (z1, z0, 0))
+
+/*
+** qdmullt_lane_0_s32_untied:
+** sqdmullt z0\.s, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_0_s32_untied, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z1, z2, 0),
+ z0_res = svqdmullt_lane (z1, z2, 0))
+
+/*
+** qdmullt_lane_1_s32:
+** sqdmullt z0\.s, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_1_s32, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z1, z2, 1),
+ z0_res = svqdmullt_lane (z1, z2, 1))
+
+/*
+** qdmullt_lane_2_s32:
+** sqdmullt z0\.s, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_2_s32, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z1, z2, 2),
+ z0_res = svqdmullt_lane (z1, z2, 2))
+
+/*
+** qdmullt_lane_3_s32:
+** sqdmullt z0\.s, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_3_s32, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z1, z2, 3),
+ z0_res = svqdmullt_lane (z1, z2, 3))
+
+/*
+** qdmullt_lane_4_s32:
+** sqdmullt z0\.s, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_4_s32, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z1, z2, 4),
+ z0_res = svqdmullt_lane (z1, z2, 4))
+
+/*
+** qdmullt_lane_5_s32:
+** sqdmullt z0\.s, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_5_s32, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z1, z2, 5),
+ z0_res = svqdmullt_lane (z1, z2, 5))
+
+/*
+** qdmullt_lane_6_s32:
+** sqdmullt z0\.s, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_6_s32, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z1, z2, 6),
+ z0_res = svqdmullt_lane (z1, z2, 6))
+
+/*
+** qdmullt_lane_7_s32:
+** sqdmullt z0\.s, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_7_s32, svint32_t, svint16_t,
+ z0_res = svqdmullt_lane_s32 (z1, z2, 7),
+ z0_res = svqdmullt_lane (z1, z2, 7))
+
+/*
+** qdmullt_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqdmullt z0\.s, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmullt_lane_z8_s32, svint32_t, svint16_t, z8,
+ z0 = svqdmullt_lane_s32 (z1, z8, 1),
+ z0 = svqdmullt_lane (z1, z8, 1))
+
+/*
+** qdmullt_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqdmullt z0\.s, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmullt_lane_z16_s32, svint32_t, svint16_t, z16,
+ z0 = svqdmullt_lane_s32 (z1, z16, 1),
+ z0 = svqdmullt_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullt_lane_0_s64_tied1:
+** sqdmullt z0\.d, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_0_s64_tied1, svint64_t, svint32_t,
+ z0_res = svqdmullt_lane_s64 (z0, z1, 0),
+ z0_res = svqdmullt_lane (z0, z1, 0))
+
+/*
+** qdmullt_lane_0_s64_tied2:
+** sqdmullt z0\.d, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_0_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmullt_lane_s64 (z1, z0, 0),
+ z0_res = svqdmullt_lane (z1, z0, 0))
+
+/*
+** qdmullt_lane_0_s64_untied:
+** sqdmullt z0\.d, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_0_s64_untied, svint64_t, svint32_t,
+ z0_res = svqdmullt_lane_s64 (z1, z2, 0),
+ z0_res = svqdmullt_lane (z1, z2, 0))
+
+/*
+** qdmullt_lane_1_s64:
+** sqdmullt z0\.d, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_1_s64, svint64_t, svint32_t,
+ z0_res = svqdmullt_lane_s64 (z1, z2, 1),
+ z0_res = svqdmullt_lane (z1, z2, 1))
+
+/*
+** qdmullt_lane_2_s64:
+** sqdmullt z0\.d, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_2_s64, svint64_t, svint32_t,
+ z0_res = svqdmullt_lane_s64 (z1, z2, 2),
+ z0_res = svqdmullt_lane (z1, z2, 2))
+
+/*
+** qdmullt_lane_3_s64:
+** sqdmullt z0\.d, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_lane_3_s64, svint64_t, svint32_t,
+ z0_res = svqdmullt_lane_s64 (z1, z2, 3),
+ z0_res = svqdmullt_lane (z1, z2, 3))
+
+/*
+** qdmullt_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqdmullt z0\.d, z1\.s, z15\.s\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmullt_lane_z15_s64, svint64_t, svint32_t, z15,
+ z0 = svqdmullt_lane_s64 (z1, z15, 1),
+ z0 = svqdmullt_lane (z1, z15, 1))
+
+/*
+** qdmullt_lane_z16_s64:
+** mov (z[0-9]|z1[0-5])\.d, z16\.d
+** sqdmullt z0\.d, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qdmullt_lane_z16_s64, svint64_t, svint32_t, z16,
+ z0 = svqdmullt_lane_s64 (z1, z16, 1),
+ z0 = svqdmullt_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullt_s16_tied1:
+** sqdmullt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_s16_tied1, svint16_t, svint8_t,
+ z0_res = svqdmullt_s16 (z0, z1),
+ z0_res = svqdmullt (z0, z1))
+
+/*
+** qdmullt_s16_tied2:
+** sqdmullt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svqdmullt_s16 (z1, z0),
+ z0_res = svqdmullt (z1, z0))
+
+/*
+** qdmullt_s16_untied:
+** sqdmullt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_s16_untied, svint16_t, svint8_t,
+ z0_res = svqdmullt_s16 (z1, z2),
+ z0_res = svqdmullt (z1, z2))
+
+/*
+** qdmullt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** sqdmullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svqdmullt_n_s16 (z0, x0),
+ z0_res = svqdmullt (z0, x0))
+
+/*
+** qdmullt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** sqdmullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svqdmullt_n_s16 (z1, x0),
+ z0_res = svqdmullt (z1, x0))
+
+/*
+** qdmullt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** sqdmullt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svqdmullt_n_s16 (z0, 11),
+ z0_res = svqdmullt (z0, 11))
+
+/*
+** qdmullt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** sqdmullt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svqdmullt_n_s16 (z1, 11),
+ z0_res = svqdmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullt_s32_tied1:
+** sqdmullt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_s32_tied1, svint32_t, svint16_t,
+ z0_res = svqdmullt_s32 (z0, z1),
+ z0_res = svqdmullt (z0, z1))
+
+/*
+** qdmullt_s32_tied2:
+** sqdmullt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svqdmullt_s32 (z1, z0),
+ z0_res = svqdmullt (z1, z0))
+
+/*
+** qdmullt_s32_untied:
+** sqdmullt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_s32_untied, svint32_t, svint16_t,
+ z0_res = svqdmullt_s32 (z1, z2),
+ z0_res = svqdmullt (z1, z2))
+
+/*
+** qdmullt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** sqdmullt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svqdmullt_n_s32 (z0, x0),
+ z0_res = svqdmullt (z0, x0))
+
+/*
+** qdmullt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** sqdmullt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svqdmullt_n_s32 (z1, x0),
+ z0_res = svqdmullt (z1, x0))
+
+/*
+** qdmullt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** sqdmullt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svqdmullt_n_s32 (z0, 11),
+ z0_res = svqdmullt (z0, 11))
+
+/*
+** qdmullt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** sqdmullt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svqdmullt_n_s32 (z1, 11),
+ z0_res = svqdmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qdmullt_s64_tied1:
+** sqdmullt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_s64_tied1, svint64_t, svint32_t,
+ z0_res = svqdmullt_s64 (z0, z1),
+ z0_res = svqdmullt (z0, z1))
+
+/*
+** qdmullt_s64_tied2:
+** sqdmullt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svqdmullt_s64 (z1, z0),
+ z0_res = svqdmullt (z1, z0))
+
+/*
+** qdmullt_s64_untied:
+** sqdmullt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_s64_untied, svint64_t, svint32_t,
+ z0_res = svqdmullt_s64 (z1, z2),
+ z0_res = svqdmullt (z1, z2))
+
+/*
+** qdmullt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** sqdmullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svqdmullt_n_s64 (z0, x0),
+ z0_res = svqdmullt (z0, x0))
+
+/*
+** qdmullt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** sqdmullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (qdmullt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svqdmullt_n_s64 (z1, x0),
+ z0_res = svqdmullt (z1, x0))
+
+/*
+** qdmullt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** sqdmullt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svqdmullt_n_s64 (z0, 11),
+ z0_res = svqdmullt (z0, 11))
+
+/*
+** qdmullt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** sqdmullt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qdmullt_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svqdmullt_n_s64 (z1, 11),
+ z0_res = svqdmullt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qneg_s16_m_tied12:
+** sqneg z0\.h, p0/m, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s16_m_tied12, svint16_t,
+ z0 = svqneg_s16_m (z0, p0, z0),
+ z0 = svqneg_m (z0, p0, z0))
+
+/*
+** qneg_s16_m_tied1:
+** sqneg z0\.h, p0/m, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s16_m_tied1, svint16_t,
+ z0 = svqneg_s16_m (z0, p0, z1),
+ z0 = svqneg_m (z0, p0, z1))
+
+/*
+** qneg_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqneg z0\.h, p0/m, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s16_m_tied2, svint16_t,
+ z0 = svqneg_s16_m (z1, p0, z0),
+ z0 = svqneg_m (z1, p0, z0))
+
+/*
+** qneg_s16_m_untied:
+** movprfx z0, z2
+** sqneg z0\.h, p0/m, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s16_m_untied, svint16_t,
+ z0 = svqneg_s16_m (z2, p0, z1),
+ z0 = svqneg_m (z2, p0, z1))
+
+/*
+** qneg_s16_z_tied1:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.h, p0/z, \1\.h
+** sqneg z0\.h, p0/m, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s16_z_tied1, svint16_t,
+ z0 = svqneg_s16_z (p0, z0),
+ z0 = svqneg_z (p0, z0))
+
+/*
+** qneg_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** sqneg z0\.h, p0/m, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s16_z_untied, svint16_t,
+ z0 = svqneg_s16_z (p0, z1),
+ z0 = svqneg_z (p0, z1))
+
+/*
+** qneg_s16_x_tied1:
+** sqneg z0\.h, p0/m, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s16_x_tied1, svint16_t,
+ z0 = svqneg_s16_x (p0, z0),
+ z0 = svqneg_x (p0, z0))
+
+/*
+** qneg_s16_x_untied:
+** sqneg z0\.h, p0/m, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s16_x_untied, svint16_t,
+ z0 = svqneg_s16_x (p0, z1),
+ z0 = svqneg_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qneg_s32_m_tied12:
+** sqneg z0\.s, p0/m, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s32_m_tied12, svint32_t,
+ z0 = svqneg_s32_m (z0, p0, z0),
+ z0 = svqneg_m (z0, p0, z0))
+
+/*
+** qneg_s32_m_tied1:
+** sqneg z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s32_m_tied1, svint32_t,
+ z0 = svqneg_s32_m (z0, p0, z1),
+ z0 = svqneg_m (z0, p0, z1))
+
+/*
+** qneg_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqneg z0\.s, p0/m, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s32_m_tied2, svint32_t,
+ z0 = svqneg_s32_m (z1, p0, z0),
+ z0 = svqneg_m (z1, p0, z0))
+
+/*
+** qneg_s32_m_untied:
+** movprfx z0, z2
+** sqneg z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s32_m_untied, svint32_t,
+ z0 = svqneg_s32_m (z2, p0, z1),
+ z0 = svqneg_m (z2, p0, z1))
+
+/*
+** qneg_s32_z_tied1:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.s, p0/z, \1\.s
+** sqneg z0\.s, p0/m, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s32_z_tied1, svint32_t,
+ z0 = svqneg_s32_z (p0, z0),
+ z0 = svqneg_z (p0, z0))
+
+/*
+** qneg_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** sqneg z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s32_z_untied, svint32_t,
+ z0 = svqneg_s32_z (p0, z1),
+ z0 = svqneg_z (p0, z1))
+
+/*
+** qneg_s32_x_tied1:
+** sqneg z0\.s, p0/m, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s32_x_tied1, svint32_t,
+ z0 = svqneg_s32_x (p0, z0),
+ z0 = svqneg_x (p0, z0))
+
+/*
+** qneg_s32_x_untied:
+** sqneg z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s32_x_untied, svint32_t,
+ z0 = svqneg_s32_x (p0, z1),
+ z0 = svqneg_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qneg_s64_m_tied12:
+** sqneg z0\.d, p0/m, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s64_m_tied12, svint64_t,
+ z0 = svqneg_s64_m (z0, p0, z0),
+ z0 = svqneg_m (z0, p0, z0))
+
+/*
+** qneg_s64_m_tied1:
+** sqneg z0\.d, p0/m, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s64_m_tied1, svint64_t,
+ z0 = svqneg_s64_m (z0, p0, z1),
+ z0 = svqneg_m (z0, p0, z1))
+
+/*
+** qneg_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqneg z0\.d, p0/m, \1
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s64_m_tied2, svint64_t,
+ z0 = svqneg_s64_m (z1, p0, z0),
+ z0 = svqneg_m (z1, p0, z0))
+
+/*
+** qneg_s64_m_untied:
+** movprfx z0, z2
+** sqneg z0\.d, p0/m, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s64_m_untied, svint64_t,
+ z0 = svqneg_s64_m (z2, p0, z1),
+ z0 = svqneg_m (z2, p0, z1))
+
+/*
+** qneg_s64_z_tied1:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0\.d, p0/z, \1
+** sqneg z0\.d, p0/m, \1
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s64_z_tied1, svint64_t,
+ z0 = svqneg_s64_z (p0, z0),
+ z0 = svqneg_z (p0, z0))
+
+/*
+** qneg_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** sqneg z0\.d, p0/m, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s64_z_untied, svint64_t,
+ z0 = svqneg_s64_z (p0, z1),
+ z0 = svqneg_z (p0, z1))
+
+/*
+** qneg_s64_x_tied1:
+** sqneg z0\.d, p0/m, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s64_x_tied1, svint64_t,
+ z0 = svqneg_s64_x (p0, z0),
+ z0 = svqneg_x (p0, z0))
+
+/*
+** qneg_s64_x_untied:
+** sqneg z0\.d, p0/m, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s64_x_untied, svint64_t,
+ z0 = svqneg_s64_x (p0, z1),
+ z0 = svqneg_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qneg_s8_m_tied12:
+** sqneg z0\.b, p0/m, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s8_m_tied12, svint8_t,
+ z0 = svqneg_s8_m (z0, p0, z0),
+ z0 = svqneg_m (z0, p0, z0))
+
+/*
+** qneg_s8_m_tied1:
+** sqneg z0\.b, p0/m, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s8_m_tied1, svint8_t,
+ z0 = svqneg_s8_m (z0, p0, z1),
+ z0 = svqneg_m (z0, p0, z1))
+
+/*
+** qneg_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqneg z0\.b, p0/m, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s8_m_tied2, svint8_t,
+ z0 = svqneg_s8_m (z1, p0, z0),
+ z0 = svqneg_m (z1, p0, z0))
+
+/*
+** qneg_s8_m_untied:
+** movprfx z0, z2
+** sqneg z0\.b, p0/m, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s8_m_untied, svint8_t,
+ z0 = svqneg_s8_m (z2, p0, z1),
+ z0 = svqneg_m (z2, p0, z1))
+
+/*
+** qneg_s8_z_tied1:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.b, p0/z, \1\.b
+** sqneg z0\.b, p0/m, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s8_z_tied1, svint8_t,
+ z0 = svqneg_s8_z (p0, z0),
+ z0 = svqneg_z (p0, z0))
+
+/*
+** qneg_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** sqneg z0\.b, p0/m, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s8_z_untied, svint8_t,
+ z0 = svqneg_s8_z (p0, z1),
+ z0 = svqneg_z (p0, z1))
+
+/*
+** qneg_s8_x_tied1:
+** sqneg z0\.b, p0/m, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s8_x_tied1, svint8_t,
+ z0 = svqneg_s8_x (p0, z0),
+ z0 = svqneg_x (p0, z0))
+
+/*
+** qneg_s8_x_untied:
+** sqneg z0\.b, p0/m, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qneg_s8_x_untied, svint8_t,
+ z0 = svqneg_s8_x (p0, z1),
+ z0 = svqneg_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdcmlah_lane_0_0_s16_tied1:
+** sqrdcmlah z0\.h, z1\.h, z2\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_0_s16_tied1, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z0, z1, z2, 0, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 0, 0))
+
+/*
+** qrdcmlah_lane_0_0_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, \1\.h, z2\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_0_s16_tied2, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z0, z2, 0, 0),
+ z0 = svqrdcmlah_lane (z1, z0, z2, 0, 0))
+
+/*
+** qrdcmlah_lane_0_0_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, \1\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_0_s16_tied3, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z2, z0, 0, 0),
+ z0 = svqrdcmlah_lane (z1, z2, z0, 0, 0))
+
+/*
+** qrdcmlah_lane_0_0_s16_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, z3\.h\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_0_s16_untied, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z2, z3, 0, 0),
+ z0 = svqrdcmlah_lane (z1, z2, z3, 0, 0))
+
+/*
+** qrdcmlah_lane_0_90_s16_tied1:
+** sqrdcmlah z0\.h, z1\.h, z2\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_90_s16_tied1, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z0, z1, z2, 0, 90),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 0, 90))
+
+/*
+** qrdcmlah_lane_0_90_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, \1\.h, z2\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_90_s16_tied2, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z0, z2, 0, 90),
+ z0 = svqrdcmlah_lane (z1, z0, z2, 0, 90))
+
+/*
+** qrdcmlah_lane_0_90_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, \1\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_90_s16_tied3, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z2, z0, 0, 90),
+ z0 = svqrdcmlah_lane (z1, z2, z0, 0, 90))
+
+/*
+** qrdcmlah_lane_0_90_s16_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, z3\.h\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_90_s16_untied, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z2, z3, 0, 90),
+ z0 = svqrdcmlah_lane (z1, z2, z3, 0, 90))
+
+/*
+** qrdcmlah_lane_0_180_s16_tied1:
+** sqrdcmlah z0\.h, z1\.h, z2\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_180_s16_tied1, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z0, z1, z2, 0, 180),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 0, 180))
+
+/*
+** qrdcmlah_lane_0_180_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, \1\.h, z2\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_180_s16_tied2, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z0, z2, 0, 180),
+ z0 = svqrdcmlah_lane (z1, z0, z2, 0, 180))
+
+/*
+** qrdcmlah_lane_0_180_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, \1\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_180_s16_tied3, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z2, z0, 0, 180),
+ z0 = svqrdcmlah_lane (z1, z2, z0, 0, 180))
+
+/*
+** qrdcmlah_lane_0_180_s16_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, z3\.h\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_180_s16_untied, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z2, z3, 0, 180),
+ z0 = svqrdcmlah_lane (z1, z2, z3, 0, 180))
+
+/*
+** qrdcmlah_lane_0_270_s16_tied1:
+** sqrdcmlah z0\.h, z1\.h, z2\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_270_s16_tied1, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z0, z1, z2, 0, 270),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 0, 270))
+
+/*
+** qrdcmlah_lane_0_270_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, \1\.h, z2\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_270_s16_tied2, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z0, z2, 0, 270),
+ z0 = svqrdcmlah_lane (z1, z0, z2, 0, 270))
+
+/*
+** qrdcmlah_lane_0_270_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, \1\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_270_s16_tied3, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z2, z0, 0, 270),
+ z0 = svqrdcmlah_lane (z1, z2, z0, 0, 270))
+
+/*
+** qrdcmlah_lane_0_270_s16_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, z3\.h\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_270_s16_untied, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z1, z2, z3, 0, 270),
+ z0 = svqrdcmlah_lane (z1, z2, z3, 0, 270))
+
+/*
+** qrdcmlah_lane_1_s16:
+** sqrdcmlah z0\.h, z1\.h, z2\.h\[1\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_1_s16, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z0, z1, z2, 1, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 1, 0))
+
+/*
+** qrdcmlah_lane_2_s16:
+** sqrdcmlah z0\.h, z1\.h, z2\.h\[2\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_2_s16, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z0, z1, z2, 2, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 2, 0))
+
+/*
+** qrdcmlah_lane_3_s16:
+** sqrdcmlah z0\.h, z1\.h, z2\.h\[3\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_3_s16, svint16_t,
+ z0 = svqrdcmlah_lane_s16 (z0, z1, z2, 3, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 3, 0))
+
+/*
+** qrdcmlah_lane_z8_s16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqrdcmlah z0\.h, z1\.h, \1\.h\[1\], #0
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdcmlah_lane_z8_s16, svint16_t, svint16_t, z8,
+ z0 = svqrdcmlah_lane_s16 (z0, z1, z8, 1, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z8, 1, 0))
+
+/*
+** qrdcmlah_lane_z16_s16:
+** mov (z[0-7])\.d, z16\.d
+** sqrdcmlah z0\.h, z1\.h, \1\.h\[1\], #0
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdcmlah_lane_z16_s16, svint16_t, svint16_t, z16,
+ z0 = svqrdcmlah_lane_s16 (z0, z1, z16, 1, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z16, 1, 0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdcmlah_lane_0_0_s32_tied1:
+** sqrdcmlah z0\.s, z1\.s, z2\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_0_s32_tied1, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z0, z1, z2, 0, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 0, 0))
+
+/*
+** qrdcmlah_lane_0_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, \1\.s, z2\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_0_s32_tied2, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z0, z2, 0, 0),
+ z0 = svqrdcmlah_lane (z1, z0, z2, 0, 0))
+
+/*
+** qrdcmlah_lane_0_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, \1\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_0_s32_tied3, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z2, z0, 0, 0),
+ z0 = svqrdcmlah_lane (z1, z2, z0, 0, 0))
+
+/*
+** qrdcmlah_lane_0_0_s32_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, z3\.s\[0\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_0_s32_untied, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z2, z3, 0, 0),
+ z0 = svqrdcmlah_lane (z1, z2, z3, 0, 0))
+
+/*
+** qrdcmlah_lane_0_90_s32_tied1:
+** sqrdcmlah z0\.s, z1\.s, z2\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_90_s32_tied1, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z0, z1, z2, 0, 90),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 0, 90))
+
+/*
+** qrdcmlah_lane_0_90_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, \1\.s, z2\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_90_s32_tied2, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z0, z2, 0, 90),
+ z0 = svqrdcmlah_lane (z1, z0, z2, 0, 90))
+
+/*
+** qrdcmlah_lane_0_90_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, \1\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_90_s32_tied3, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z2, z0, 0, 90),
+ z0 = svqrdcmlah_lane (z1, z2, z0, 0, 90))
+
+/*
+** qrdcmlah_lane_0_90_s32_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, z3\.s\[0\], #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_90_s32_untied, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z2, z3, 0, 90),
+ z0 = svqrdcmlah_lane (z1, z2, z3, 0, 90))
+
+/*
+** qrdcmlah_lane_0_180_s32_tied1:
+** sqrdcmlah z0\.s, z1\.s, z2\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_180_s32_tied1, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z0, z1, z2, 0, 180),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 0, 180))
+
+/*
+** qrdcmlah_lane_0_180_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, \1\.s, z2\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_180_s32_tied2, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z0, z2, 0, 180),
+ z0 = svqrdcmlah_lane (z1, z0, z2, 0, 180))
+
+/*
+** qrdcmlah_lane_0_180_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, \1\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_180_s32_tied3, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z2, z0, 0, 180),
+ z0 = svqrdcmlah_lane (z1, z2, z0, 0, 180))
+
+/*
+** qrdcmlah_lane_0_180_s32_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, z3\.s\[0\], #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_180_s32_untied, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z2, z3, 0, 180),
+ z0 = svqrdcmlah_lane (z1, z2, z3, 0, 180))
+
+/*
+** qrdcmlah_lane_0_270_s32_tied1:
+** sqrdcmlah z0\.s, z1\.s, z2\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_270_s32_tied1, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z0, z1, z2, 0, 270),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 0, 270))
+
+/*
+** qrdcmlah_lane_0_270_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, \1\.s, z2\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_270_s32_tied2, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z0, z2, 0, 270),
+ z0 = svqrdcmlah_lane (z1, z0, z2, 0, 270))
+
+/*
+** qrdcmlah_lane_0_270_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, \1\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_270_s32_tied3, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z2, z0, 0, 270),
+ z0 = svqrdcmlah_lane (z1, z2, z0, 0, 270))
+
+/*
+** qrdcmlah_lane_0_270_s32_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, z3\.s\[0\], #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_0_270_s32_untied, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z1, z2, z3, 0, 270),
+ z0 = svqrdcmlah_lane (z1, z2, z3, 0, 270))
+
+/*
+** qrdcmlah_lane_1_s32:
+** sqrdcmlah z0\.s, z1\.s, z2\.s\[1\], #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_lane_1_s32, svint32_t,
+ z0 = svqrdcmlah_lane_s32 (z0, z1, z2, 1, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z2, 1, 0))
+
+/*
+** qrdcmlah_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqrdcmlah z0\.s, z1\.s, \1\.s\[1\], #0
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdcmlah_lane_z8_s32, svint32_t, svint32_t, z8,
+ z0 = svqrdcmlah_lane_s32 (z0, z1, z8, 1, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z8, 1, 0))
+
+/*
+** qrdcmlah_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqrdcmlah z0\.s, z1\.s, \1\.s\[1\], #0
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdcmlah_lane_z16_s32, svint32_t, svint32_t, z16,
+ z0 = svqrdcmlah_lane_s32 (z0, z1, z16, 1, 0),
+ z0 = svqrdcmlah_lane (z0, z1, z16, 1, 0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdcmlah_0_s16_tied1:
+** sqrdcmlah z0\.h, z1\.h, z2\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s16_tied1, svint16_t,
+ z0 = svqrdcmlah_s16 (z0, z1, z2, 0),
+ z0 = svqrdcmlah (z0, z1, z2, 0))
+
+/*
+** qrdcmlah_0_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, \1\.h, z2\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s16_tied2, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z0, z2, 0),
+ z0 = svqrdcmlah (z1, z0, z2, 0))
+
+/*
+** qrdcmlah_0_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, \1\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s16_tied3, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z2, z0, 0),
+ z0 = svqrdcmlah (z1, z2, z0, 0))
+
+/*
+** qrdcmlah_0_s16_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, z3\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s16_untied, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z2, z3, 0),
+ z0 = svqrdcmlah (z1, z2, z3, 0))
+
+/*
+** qrdcmlah_90_s16_tied1:
+** sqrdcmlah z0\.h, z1\.h, z2\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s16_tied1, svint16_t,
+ z0 = svqrdcmlah_s16 (z0, z1, z2, 90),
+ z0 = svqrdcmlah (z0, z1, z2, 90))
+
+/*
+** qrdcmlah_90_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, \1\.h, z2\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s16_tied2, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z0, z2, 90),
+ z0 = svqrdcmlah (z1, z0, z2, 90))
+
+/*
+** qrdcmlah_90_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, \1\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s16_tied3, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z2, z0, 90),
+ z0 = svqrdcmlah (z1, z2, z0, 90))
+
+/*
+** qrdcmlah_90_s16_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, z3\.h, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s16_untied, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z2, z3, 90),
+ z0 = svqrdcmlah (z1, z2, z3, 90))
+
+/*
+** qrdcmlah_180_s16_tied1:
+** sqrdcmlah z0\.h, z1\.h, z2\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s16_tied1, svint16_t,
+ z0 = svqrdcmlah_s16 (z0, z1, z2, 180),
+ z0 = svqrdcmlah (z0, z1, z2, 180))
+
+/*
+** qrdcmlah_180_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, \1\.h, z2\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s16_tied2, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z0, z2, 180),
+ z0 = svqrdcmlah (z1, z0, z2, 180))
+
+/*
+** qrdcmlah_180_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, \1\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s16_tied3, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z2, z0, 180),
+ z0 = svqrdcmlah (z1, z2, z0, 180))
+
+/*
+** qrdcmlah_180_s16_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, z3\.h, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s16_untied, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z2, z3, 180),
+ z0 = svqrdcmlah (z1, z2, z3, 180))
+
+/*
+** qrdcmlah_270_s16_tied1:
+** sqrdcmlah z0\.h, z1\.h, z2\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s16_tied1, svint16_t,
+ z0 = svqrdcmlah_s16 (z0, z1, z2, 270),
+ z0 = svqrdcmlah (z0, z1, z2, 270))
+
+/*
+** qrdcmlah_270_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, \1\.h, z2\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s16_tied2, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z0, z2, 270),
+ z0 = svqrdcmlah (z1, z0, z2, 270))
+
+/*
+** qrdcmlah_270_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, \1\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s16_tied3, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z2, z0, 270),
+ z0 = svqrdcmlah (z1, z2, z0, 270))
+
+/*
+** qrdcmlah_270_s16_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.h, z2\.h, z3\.h, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s16_untied, svint16_t,
+ z0 = svqrdcmlah_s16 (z1, z2, z3, 270),
+ z0 = svqrdcmlah (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdcmlah_0_s32_tied1:
+** sqrdcmlah z0\.s, z1\.s, z2\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s32_tied1, svint32_t,
+ z0 = svqrdcmlah_s32 (z0, z1, z2, 0),
+ z0 = svqrdcmlah (z0, z1, z2, 0))
+
+/*
+** qrdcmlah_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, \1\.s, z2\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s32_tied2, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z0, z2, 0),
+ z0 = svqrdcmlah (z1, z0, z2, 0))
+
+/*
+** qrdcmlah_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, \1\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s32_tied3, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z2, z0, 0),
+ z0 = svqrdcmlah (z1, z2, z0, 0))
+
+/*
+** qrdcmlah_0_s32_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, z3\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s32_untied, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z2, z3, 0),
+ z0 = svqrdcmlah (z1, z2, z3, 0))
+
+/*
+** qrdcmlah_90_s32_tied1:
+** sqrdcmlah z0\.s, z1\.s, z2\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s32_tied1, svint32_t,
+ z0 = svqrdcmlah_s32 (z0, z1, z2, 90),
+ z0 = svqrdcmlah (z0, z1, z2, 90))
+
+/*
+** qrdcmlah_90_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, \1\.s, z2\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s32_tied2, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z0, z2, 90),
+ z0 = svqrdcmlah (z1, z0, z2, 90))
+
+/*
+** qrdcmlah_90_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, \1\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s32_tied3, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z2, z0, 90),
+ z0 = svqrdcmlah (z1, z2, z0, 90))
+
+/*
+** qrdcmlah_90_s32_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, z3\.s, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s32_untied, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z2, z3, 90),
+ z0 = svqrdcmlah (z1, z2, z3, 90))
+
+/*
+** qrdcmlah_180_s32_tied1:
+** sqrdcmlah z0\.s, z1\.s, z2\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s32_tied1, svint32_t,
+ z0 = svqrdcmlah_s32 (z0, z1, z2, 180),
+ z0 = svqrdcmlah (z0, z1, z2, 180))
+
+/*
+** qrdcmlah_180_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, \1\.s, z2\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s32_tied2, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z0, z2, 180),
+ z0 = svqrdcmlah (z1, z0, z2, 180))
+
+/*
+** qrdcmlah_180_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, \1\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s32_tied3, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z2, z0, 180),
+ z0 = svqrdcmlah (z1, z2, z0, 180))
+
+/*
+** qrdcmlah_180_s32_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, z3\.s, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s32_untied, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z2, z3, 180),
+ z0 = svqrdcmlah (z1, z2, z3, 180))
+
+/*
+** qrdcmlah_270_s32_tied1:
+** sqrdcmlah z0\.s, z1\.s, z2\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s32_tied1, svint32_t,
+ z0 = svqrdcmlah_s32 (z0, z1, z2, 270),
+ z0 = svqrdcmlah (z0, z1, z2, 270))
+
+/*
+** qrdcmlah_270_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, \1\.s, z2\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s32_tied2, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z0, z2, 270),
+ z0 = svqrdcmlah (z1, z0, z2, 270))
+
+/*
+** qrdcmlah_270_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, \1\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s32_tied3, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z2, z0, 270),
+ z0 = svqrdcmlah (z1, z2, z0, 270))
+
+/*
+** qrdcmlah_270_s32_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.s, z2\.s, z3\.s, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s32_untied, svint32_t,
+ z0 = svqrdcmlah_s32 (z1, z2, z3, 270),
+ z0 = svqrdcmlah (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdcmlah_0_s64_tied1:
+** sqrdcmlah z0\.d, z1\.d, z2\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s64_tied1, svint64_t,
+ z0 = svqrdcmlah_s64 (z0, z1, z2, 0),
+ z0 = svqrdcmlah (z0, z1, z2, 0))
+
+/*
+** qrdcmlah_0_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.d, \1, z2\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s64_tied2, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z0, z2, 0),
+ z0 = svqrdcmlah (z1, z0, z2, 0))
+
+/*
+** qrdcmlah_0_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.d, z2\.d, \1, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s64_tied3, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z2, z0, 0),
+ z0 = svqrdcmlah (z1, z2, z0, 0))
+
+/*
+** qrdcmlah_0_s64_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.d, z2\.d, z3\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s64_untied, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z2, z3, 0),
+ z0 = svqrdcmlah (z1, z2, z3, 0))
+
+/*
+** qrdcmlah_90_s64_tied1:
+** sqrdcmlah z0\.d, z1\.d, z2\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s64_tied1, svint64_t,
+ z0 = svqrdcmlah_s64 (z0, z1, z2, 90),
+ z0 = svqrdcmlah (z0, z1, z2, 90))
+
+/*
+** qrdcmlah_90_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.d, \1, z2\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s64_tied2, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z0, z2, 90),
+ z0 = svqrdcmlah (z1, z0, z2, 90))
+
+/*
+** qrdcmlah_90_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.d, z2\.d, \1, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s64_tied3, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z2, z0, 90),
+ z0 = svqrdcmlah (z1, z2, z0, 90))
+
+/*
+** qrdcmlah_90_s64_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.d, z2\.d, z3\.d, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s64_untied, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z2, z3, 90),
+ z0 = svqrdcmlah (z1, z2, z3, 90))
+
+/*
+** qrdcmlah_180_s64_tied1:
+** sqrdcmlah z0\.d, z1\.d, z2\.d, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s64_tied1, svint64_t,
+ z0 = svqrdcmlah_s64 (z0, z1, z2, 180),
+ z0 = svqrdcmlah (z0, z1, z2, 180))
+
+/*
+** qrdcmlah_180_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.d, \1, z2\.d, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s64_tied2, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z0, z2, 180),
+ z0 = svqrdcmlah (z1, z0, z2, 180))
+
+/*
+** qrdcmlah_180_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.d, z2\.d, \1, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s64_tied3, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z2, z0, 180),
+ z0 = svqrdcmlah (z1, z2, z0, 180))
+
+/*
+** qrdcmlah_180_s64_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.d, z2\.d, z3\.d, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s64_untied, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z2, z3, 180),
+ z0 = svqrdcmlah (z1, z2, z3, 180))
+
+/*
+** qrdcmlah_270_s64_tied1:
+** sqrdcmlah z0\.d, z1\.d, z2\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s64_tied1, svint64_t,
+ z0 = svqrdcmlah_s64 (z0, z1, z2, 270),
+ z0 = svqrdcmlah (z0, z1, z2, 270))
+
+/*
+** qrdcmlah_270_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.d, \1, z2\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s64_tied2, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z0, z2, 270),
+ z0 = svqrdcmlah (z1, z0, z2, 270))
+
+/*
+** qrdcmlah_270_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.d, z2\.d, \1, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s64_tied3, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z2, z0, 270),
+ z0 = svqrdcmlah (z1, z2, z0, 270))
+
+/*
+** qrdcmlah_270_s64_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.d, z2\.d, z3\.d, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s64_untied, svint64_t,
+ z0 = svqrdcmlah_s64 (z1, z2, z3, 270),
+ z0 = svqrdcmlah (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdcmlah_0_s8_tied1:
+** sqrdcmlah z0\.b, z1\.b, z2\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s8_tied1, svint8_t,
+ z0 = svqrdcmlah_s8 (z0, z1, z2, 0),
+ z0 = svqrdcmlah (z0, z1, z2, 0))
+
+/*
+** qrdcmlah_0_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.b, \1\.b, z2\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s8_tied2, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z0, z2, 0),
+ z0 = svqrdcmlah (z1, z0, z2, 0))
+
+/*
+** qrdcmlah_0_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.b, z2\.b, \1\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s8_tied3, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z2, z0, 0),
+ z0 = svqrdcmlah (z1, z2, z0, 0))
+
+/*
+** qrdcmlah_0_s8_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.b, z2\.b, z3\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_0_s8_untied, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z2, z3, 0),
+ z0 = svqrdcmlah (z1, z2, z3, 0))
+
+/*
+** qrdcmlah_90_s8_tied1:
+** sqrdcmlah z0\.b, z1\.b, z2\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s8_tied1, svint8_t,
+ z0 = svqrdcmlah_s8 (z0, z1, z2, 90),
+ z0 = svqrdcmlah (z0, z1, z2, 90))
+
+/*
+** qrdcmlah_90_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.b, \1\.b, z2\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s8_tied2, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z0, z2, 90),
+ z0 = svqrdcmlah (z1, z0, z2, 90))
+
+/*
+** qrdcmlah_90_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.b, z2\.b, \1\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s8_tied3, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z2, z0, 90),
+ z0 = svqrdcmlah (z1, z2, z0, 90))
+
+/*
+** qrdcmlah_90_s8_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.b, z2\.b, z3\.b, #90
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_90_s8_untied, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z2, z3, 90),
+ z0 = svqrdcmlah (z1, z2, z3, 90))
+
+/*
+** qrdcmlah_180_s8_tied1:
+** sqrdcmlah z0\.b, z1\.b, z2\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s8_tied1, svint8_t,
+ z0 = svqrdcmlah_s8 (z0, z1, z2, 180),
+ z0 = svqrdcmlah (z0, z1, z2, 180))
+
+/*
+** qrdcmlah_180_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.b, \1\.b, z2\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s8_tied2, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z0, z2, 180),
+ z0 = svqrdcmlah (z1, z0, z2, 180))
+
+/*
+** qrdcmlah_180_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.b, z2\.b, \1\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s8_tied3, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z2, z0, 180),
+ z0 = svqrdcmlah (z1, z2, z0, 180))
+
+/*
+** qrdcmlah_180_s8_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.b, z2\.b, z3\.b, #180
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_180_s8_untied, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z2, z3, 180),
+ z0 = svqrdcmlah (z1, z2, z3, 180))
+
+/*
+** qrdcmlah_270_s8_tied1:
+** sqrdcmlah z0\.b, z1\.b, z2\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s8_tied1, svint8_t,
+ z0 = svqrdcmlah_s8 (z0, z1, z2, 270),
+ z0 = svqrdcmlah (z0, z1, z2, 270))
+
+/*
+** qrdcmlah_270_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.b, \1\.b, z2\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s8_tied2, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z0, z2, 270),
+ z0 = svqrdcmlah (z1, z0, z2, 270))
+
+/*
+** qrdcmlah_270_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdcmlah z0\.b, z2\.b, \1\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s8_tied3, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z2, z0, 270),
+ z0 = svqrdcmlah (z1, z2, z0, 270))
+
+/*
+** qrdcmlah_270_s8_untied:
+** movprfx z0, z1
+** sqrdcmlah z0\.b, z2\.b, z3\.b, #270
+** ret
+*/
+TEST_UNIFORM_Z (qrdcmlah_270_s8_untied, svint8_t,
+ z0 = svqrdcmlah_s8 (z1, z2, z3, 270),
+ z0 = svqrdcmlah (z1, z2, z3, 270))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlah_lane_0_s16_tied1:
+** sqrdmlah z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s16_tied1, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z2, 0),
+ z0 = svqrdmlah_lane (z0, z1, z2, 0))
+
+/*
+** qrdmlah_lane_0_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.h, \1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s16_tied2, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z1, z0, z2, 0),
+ z0 = svqrdmlah_lane (z1, z0, z2, 0))
+
+/*
+** qrdmlah_lane_0_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.h, z2\.h, \1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s16_tied3, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z1, z2, z0, 0),
+ z0 = svqrdmlah_lane (z1, z2, z0, 0))
+
+/*
+** qrdmlah_lane_0_s16_untied:
+** movprfx z0, z1
+** sqrdmlah z0\.h, z2\.h, z3\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s16_untied, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z1, z2, z3, 0),
+ z0 = svqrdmlah_lane (z1, z2, z3, 0))
+
+/*
+** qrdmlah_lane_1_s16:
+** sqrdmlah z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_1_s16, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z2, 1),
+ z0 = svqrdmlah_lane (z0, z1, z2, 1))
+
+/*
+** qrdmlah_lane_2_s16:
+** sqrdmlah z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_2_s16, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z2, 2),
+ z0 = svqrdmlah_lane (z0, z1, z2, 2))
+
+/*
+** qrdmlah_lane_3_s16:
+** sqrdmlah z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_3_s16, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z2, 3),
+ z0 = svqrdmlah_lane (z0, z1, z2, 3))
+
+/*
+** qrdmlah_lane_4_s16:
+** sqrdmlah z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_4_s16, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z2, 4),
+ z0 = svqrdmlah_lane (z0, z1, z2, 4))
+
+/*
+** qrdmlah_lane_5_s16:
+** sqrdmlah z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_5_s16, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z2, 5),
+ z0 = svqrdmlah_lane (z0, z1, z2, 5))
+
+/*
+** qrdmlah_lane_6_s16:
+** sqrdmlah z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_6_s16, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z2, 6),
+ z0 = svqrdmlah_lane (z0, z1, z2, 6))
+
+/*
+** qrdmlah_lane_7_s16:
+** sqrdmlah z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_7_s16, svint16_t,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z2, 7),
+ z0 = svqrdmlah_lane (z0, z1, z2, 7))
+
+/*
+** qrdmlah_lane_z8_s16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqrdmlah z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlah_lane_z8_s16, svint16_t, svint16_t, z8,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z8, 1),
+ z0 = svqrdmlah_lane (z0, z1, z8, 1))
+
+/*
+** qrdmlah_lane_z16_s16:
+** mov (z[0-7])\.d, z16\.d
+** sqrdmlah z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlah_lane_z16_s16, svint16_t, svint16_t, z16,
+ z0 = svqrdmlah_lane_s16 (z0, z1, z16, 1),
+ z0 = svqrdmlah_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlah_lane_0_s32_tied1:
+** sqrdmlah z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s32_tied1, svint32_t,
+ z0 = svqrdmlah_lane_s32 (z0, z1, z2, 0),
+ z0 = svqrdmlah_lane (z0, z1, z2, 0))
+
+/*
+** qrdmlah_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.s, \1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s32_tied2, svint32_t,
+ z0 = svqrdmlah_lane_s32 (z1, z0, z2, 0),
+ z0 = svqrdmlah_lane (z1, z0, z2, 0))
+
+/*
+** qrdmlah_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.s, z2\.s, \1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s32_tied3, svint32_t,
+ z0 = svqrdmlah_lane_s32 (z1, z2, z0, 0),
+ z0 = svqrdmlah_lane (z1, z2, z0, 0))
+
+/*
+** qrdmlah_lane_0_s32_untied:
+** movprfx z0, z1
+** sqrdmlah z0\.s, z2\.s, z3\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s32_untied, svint32_t,
+ z0 = svqrdmlah_lane_s32 (z1, z2, z3, 0),
+ z0 = svqrdmlah_lane (z1, z2, z3, 0))
+
+/*
+** qrdmlah_lane_1_s32:
+** sqrdmlah z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_1_s32, svint32_t,
+ z0 = svqrdmlah_lane_s32 (z0, z1, z2, 1),
+ z0 = svqrdmlah_lane (z0, z1, z2, 1))
+
+/*
+** qrdmlah_lane_2_s32:
+** sqrdmlah z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_2_s32, svint32_t,
+ z0 = svqrdmlah_lane_s32 (z0, z1, z2, 2),
+ z0 = svqrdmlah_lane (z0, z1, z2, 2))
+
+/*
+** qrdmlah_lane_3_s32:
+** sqrdmlah z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_3_s32, svint32_t,
+ z0 = svqrdmlah_lane_s32 (z0, z1, z2, 3),
+ z0 = svqrdmlah_lane (z0, z1, z2, 3))
+
+/*
+** qrdmlah_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqrdmlah z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlah_lane_z8_s32, svint32_t, svint32_t, z8,
+ z0 = svqrdmlah_lane_s32 (z0, z1, z8, 1),
+ z0 = svqrdmlah_lane (z0, z1, z8, 1))
+
+/*
+** qrdmlah_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqrdmlah z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlah_lane_z16_s32, svint32_t, svint32_t, z16,
+ z0 = svqrdmlah_lane_s32 (z0, z1, z16, 1),
+ z0 = svqrdmlah_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlah_lane_0_s64_tied1:
+** sqrdmlah z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s64_tied1, svint64_t,
+ z0 = svqrdmlah_lane_s64 (z0, z1, z2, 0),
+ z0 = svqrdmlah_lane (z0, z1, z2, 0))
+
+/*
+** qrdmlah_lane_0_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.d, \1, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s64_tied2, svint64_t,
+ z0 = svqrdmlah_lane_s64 (z1, z0, z2, 0),
+ z0 = svqrdmlah_lane (z1, z0, z2, 0))
+
+/*
+** qrdmlah_lane_0_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.d, z2\.d, \1\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s64_tied3, svint64_t,
+ z0 = svqrdmlah_lane_s64 (z1, z2, z0, 0),
+ z0 = svqrdmlah_lane (z1, z2, z0, 0))
+
+/*
+** qrdmlah_lane_0_s64_untied:
+** movprfx z0, z1
+** sqrdmlah z0\.d, z2\.d, z3\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_0_s64_untied, svint64_t,
+ z0 = svqrdmlah_lane_s64 (z1, z2, z3, 0),
+ z0 = svqrdmlah_lane (z1, z2, z3, 0))
+
+/*
+** qrdmlah_lane_1_s64:
+** sqrdmlah z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_lane_1_s64, svint64_t,
+ z0 = svqrdmlah_lane_s64 (z0, z1, z2, 1),
+ z0 = svqrdmlah_lane (z0, z1, z2, 1))
+
+/*
+** qrdmlah_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqrdmlah z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlah_lane_z15_s64, svint64_t, svint64_t, z15,
+ z0 = svqrdmlah_lane_s64 (z0, z1, z15, 1),
+ z0 = svqrdmlah_lane (z0, z1, z15, 1))
+
+/*
+** qrdmlah_lane_z16_s64:
+** mov (z[0-7])\.d, z16\.d
+** sqrdmlah z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlah_lane_z16_s64, svint64_t, svint64_t, z16,
+ z0 = svqrdmlah_lane_s64 (z0, z1, z16, 1),
+ z0 = svqrdmlah_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlah_s16_tied1:
+** sqrdmlah z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s16_tied1, svint16_t,
+ z0 = svqrdmlah_s16 (z0, z1, z2),
+ z0 = svqrdmlah (z0, z1, z2))
+
+/*
+** qrdmlah_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.h, \1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s16_tied2, svint16_t,
+ z0 = svqrdmlah_s16 (z1, z0, z2),
+ z0 = svqrdmlah (z1, z0, z2))
+
+/*
+** qrdmlah_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.h, z2\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s16_tied3, svint16_t,
+ z0 = svqrdmlah_s16 (z1, z2, z0),
+ z0 = svqrdmlah (z1, z2, z0))
+
+/*
+** qrdmlah_s16_untied:
+** movprfx z0, z1
+** sqrdmlah z0\.h, z2\.h, z3\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s16_untied, svint16_t,
+ z0 = svqrdmlah_s16 (z1, z2, z3),
+ z0 = svqrdmlah (z1, z2, z3))
+
+/*
+** qrdmlah_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** sqrdmlah z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svqrdmlah_n_s16 (z0, z1, x0),
+ z0 = svqrdmlah (z0, z1, x0))
+
+/*
+** qrdmlah_w0_s16_tied2:
+** mov (z[0-9]+\.h), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_w0_s16_tied2, svint16_t, int16_t,
+ z0 = svqrdmlah_n_s16 (z1, z0, x0),
+ z0 = svqrdmlah (z1, z0, x0))
+
+/*
+** qrdmlah_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqrdmlah z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_w0_s16_untied, svint16_t, int16_t,
+ z0 = svqrdmlah_n_s16 (z1, z2, x0),
+ z0 = svqrdmlah (z1, z2, x0))
+
+/*
+** qrdmlah_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** sqrdmlah z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s16_tied1, svint16_t,
+ z0 = svqrdmlah_n_s16 (z0, z1, 11),
+ z0 = svqrdmlah (z0, z1, 11))
+
+/*
+** qrdmlah_11_s16_tied2:
+** mov (z[0-9]+\.h), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s16_tied2, svint16_t,
+ z0 = svqrdmlah_n_s16 (z1, z0, 11),
+ z0 = svqrdmlah (z1, z0, 11))
+
+/*
+** qrdmlah_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sqrdmlah z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s16_untied, svint16_t,
+ z0 = svqrdmlah_n_s16 (z1, z2, 11),
+ z0 = svqrdmlah (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlah_s32_tied1:
+** sqrdmlah z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s32_tied1, svint32_t,
+ z0 = svqrdmlah_s32 (z0, z1, z2),
+ z0 = svqrdmlah (z0, z1, z2))
+
+/*
+** qrdmlah_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s32_tied2, svint32_t,
+ z0 = svqrdmlah_s32 (z1, z0, z2),
+ z0 = svqrdmlah (z1, z0, z2))
+
+/*
+** qrdmlah_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s32_tied3, svint32_t,
+ z0 = svqrdmlah_s32 (z1, z2, z0),
+ z0 = svqrdmlah (z1, z2, z0))
+
+/*
+** qrdmlah_s32_untied:
+** movprfx z0, z1
+** sqrdmlah z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s32_untied, svint32_t,
+ z0 = svqrdmlah_s32 (z1, z2, z3),
+ z0 = svqrdmlah (z1, z2, z3))
+
+/*
+** qrdmlah_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** sqrdmlah z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svqrdmlah_n_s32 (z0, z1, x0),
+ z0 = svqrdmlah (z0, z1, x0))
+
+/*
+** qrdmlah_w0_s32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_w0_s32_tied2, svint32_t, int32_t,
+ z0 = svqrdmlah_n_s32 (z1, z0, x0),
+ z0 = svqrdmlah (z1, z0, x0))
+
+/*
+** qrdmlah_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqrdmlah z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_w0_s32_untied, svint32_t, int32_t,
+ z0 = svqrdmlah_n_s32 (z1, z2, x0),
+ z0 = svqrdmlah (z1, z2, x0))
+
+/*
+** qrdmlah_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** sqrdmlah z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s32_tied1, svint32_t,
+ z0 = svqrdmlah_n_s32 (z0, z1, 11),
+ z0 = svqrdmlah (z0, z1, 11))
+
+/*
+** qrdmlah_11_s32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s32_tied2, svint32_t,
+ z0 = svqrdmlah_n_s32 (z1, z0, 11),
+ z0 = svqrdmlah (z1, z0, 11))
+
+/*
+** qrdmlah_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sqrdmlah z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s32_untied, svint32_t,
+ z0 = svqrdmlah_n_s32 (z1, z2, 11),
+ z0 = svqrdmlah (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlah_s64_tied1:
+** sqrdmlah z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s64_tied1, svint64_t,
+ z0 = svqrdmlah_s64 (z0, z1, z2),
+ z0 = svqrdmlah (z0, z1, z2))
+
+/*
+** qrdmlah_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s64_tied2, svint64_t,
+ z0 = svqrdmlah_s64 (z1, z0, z2),
+ z0 = svqrdmlah (z1, z0, z2))
+
+/*
+** qrdmlah_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s64_tied3, svint64_t,
+ z0 = svqrdmlah_s64 (z1, z2, z0),
+ z0 = svqrdmlah (z1, z2, z0))
+
+/*
+** qrdmlah_s64_untied:
+** movprfx z0, z1
+** sqrdmlah z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s64_untied, svint64_t,
+ z0 = svqrdmlah_s64 (z1, z2, z3),
+ z0 = svqrdmlah (z1, z2, z3))
+
+/*
+** qrdmlah_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** sqrdmlah z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svqrdmlah_n_s64 (z0, z1, x0),
+ z0 = svqrdmlah (z0, z1, x0))
+
+/*
+** qrdmlah_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_x0_s64_tied2, svint64_t, int64_t,
+ z0 = svqrdmlah_n_s64 (z1, z0, x0),
+ z0 = svqrdmlah (z1, z0, x0))
+
+/*
+** qrdmlah_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** sqrdmlah z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_x0_s64_untied, svint64_t, int64_t,
+ z0 = svqrdmlah_n_s64 (z1, z2, x0),
+ z0 = svqrdmlah (z1, z2, x0))
+
+/*
+** qrdmlah_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** sqrdmlah z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s64_tied1, svint64_t,
+ z0 = svqrdmlah_n_s64 (z0, z1, 11),
+ z0 = svqrdmlah (z0, z1, 11))
+
+/*
+** qrdmlah_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s64_tied2, svint64_t,
+ z0 = svqrdmlah_n_s64 (z1, z0, 11),
+ z0 = svqrdmlah (z1, z0, 11))
+
+/*
+** qrdmlah_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** sqrdmlah z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s64_untied, svint64_t,
+ z0 = svqrdmlah_n_s64 (z1, z2, 11),
+ z0 = svqrdmlah (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlah_s8_tied1:
+** sqrdmlah z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s8_tied1, svint8_t,
+ z0 = svqrdmlah_s8 (z0, z1, z2),
+ z0 = svqrdmlah (z0, z1, z2))
+
+/*
+** qrdmlah_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.b, \1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s8_tied2, svint8_t,
+ z0 = svqrdmlah_s8 (z1, z0, z2),
+ z0 = svqrdmlah (z1, z0, z2))
+
+/*
+** qrdmlah_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.b, z2\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s8_tied3, svint8_t,
+ z0 = svqrdmlah_s8 (z1, z2, z0),
+ z0 = svqrdmlah (z1, z2, z0))
+
+/*
+** qrdmlah_s8_untied:
+** movprfx z0, z1
+** sqrdmlah z0\.b, z2\.b, z3\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_s8_untied, svint8_t,
+ z0 = svqrdmlah_s8 (z1, z2, z3),
+ z0 = svqrdmlah (z1, z2, z3))
+
+/*
+** qrdmlah_w0_s8_tied1:
+** mov (z[0-9]+\.b), w0
+** sqrdmlah z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svqrdmlah_n_s8 (z0, z1, x0),
+ z0 = svqrdmlah (z0, z1, x0))
+
+/*
+** qrdmlah_w0_s8_tied2:
+** mov (z[0-9]+\.b), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_w0_s8_tied2, svint8_t, int8_t,
+ z0 = svqrdmlah_n_s8 (z1, z0, x0),
+ z0 = svqrdmlah (z1, z0, x0))
+
+/*
+** qrdmlah_w0_s8_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqrdmlah z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlah_w0_s8_untied, svint8_t, int8_t,
+ z0 = svqrdmlah_n_s8 (z1, z2, x0),
+ z0 = svqrdmlah (z1, z2, x0))
+
+/*
+** qrdmlah_11_s8_tied1:
+** mov (z[0-9]+\.b), #11
+** sqrdmlah z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s8_tied1, svint8_t,
+ z0 = svqrdmlah_n_s8 (z0, z1, 11),
+ z0 = svqrdmlah (z0, z1, 11))
+
+/*
+** qrdmlah_11_s8_tied2:
+** mov (z[0-9]+\.b), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlah z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s8_tied2, svint8_t,
+ z0 = svqrdmlah_n_s8 (z1, z0, 11),
+ z0 = svqrdmlah (z1, z0, 11))
+
+/*
+** qrdmlah_11_s8_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sqrdmlah z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlah_11_s8_untied, svint8_t,
+ z0 = svqrdmlah_n_s8 (z1, z2, 11),
+ z0 = svqrdmlah (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlsh_lane_0_s16_tied1:
+** sqrdmlsh z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s16_tied1, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z2, 0),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 0))
+
+/*
+** qrdmlsh_lane_0_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.h, \1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s16_tied2, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z1, z0, z2, 0),
+ z0 = svqrdmlsh_lane (z1, z0, z2, 0))
+
+/*
+** qrdmlsh_lane_0_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.h, z2\.h, \1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s16_tied3, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z1, z2, z0, 0),
+ z0 = svqrdmlsh_lane (z1, z2, z0, 0))
+
+/*
+** qrdmlsh_lane_0_s16_untied:
+** movprfx z0, z1
+** sqrdmlsh z0\.h, z2\.h, z3\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s16_untied, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z1, z2, z3, 0),
+ z0 = svqrdmlsh_lane (z1, z2, z3, 0))
+
+/*
+** qrdmlsh_lane_1_s16:
+** sqrdmlsh z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_1_s16, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z2, 1),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 1))
+
+/*
+** qrdmlsh_lane_2_s16:
+** sqrdmlsh z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_2_s16, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z2, 2),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 2))
+
+/*
+** qrdmlsh_lane_3_s16:
+** sqrdmlsh z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_3_s16, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z2, 3),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 3))
+
+/*
+** qrdmlsh_lane_4_s16:
+** sqrdmlsh z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_4_s16, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z2, 4),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 4))
+
+/*
+** qrdmlsh_lane_5_s16:
+** sqrdmlsh z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_5_s16, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z2, 5),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 5))
+
+/*
+** qrdmlsh_lane_6_s16:
+** sqrdmlsh z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_6_s16, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z2, 6),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 6))
+
+/*
+** qrdmlsh_lane_7_s16:
+** sqrdmlsh z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_7_s16, svint16_t,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z2, 7),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 7))
+
+/*
+** qrdmlsh_lane_z8_s16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqrdmlsh z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlsh_lane_z8_s16, svint16_t, svint16_t, z8,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z8, 1),
+ z0 = svqrdmlsh_lane (z0, z1, z8, 1))
+
+/*
+** qrdmlsh_lane_z16_s16:
+** mov (z[0-7])\.d, z16\.d
+** sqrdmlsh z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlsh_lane_z16_s16, svint16_t, svint16_t, z16,
+ z0 = svqrdmlsh_lane_s16 (z0, z1, z16, 1),
+ z0 = svqrdmlsh_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlsh_lane_0_s32_tied1:
+** sqrdmlsh z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s32_tied1, svint32_t,
+ z0 = svqrdmlsh_lane_s32 (z0, z1, z2, 0),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 0))
+
+/*
+** qrdmlsh_lane_0_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.s, \1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s32_tied2, svint32_t,
+ z0 = svqrdmlsh_lane_s32 (z1, z0, z2, 0),
+ z0 = svqrdmlsh_lane (z1, z0, z2, 0))
+
+/*
+** qrdmlsh_lane_0_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.s, z2\.s, \1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s32_tied3, svint32_t,
+ z0 = svqrdmlsh_lane_s32 (z1, z2, z0, 0),
+ z0 = svqrdmlsh_lane (z1, z2, z0, 0))
+
+/*
+** qrdmlsh_lane_0_s32_untied:
+** movprfx z0, z1
+** sqrdmlsh z0\.s, z2\.s, z3\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s32_untied, svint32_t,
+ z0 = svqrdmlsh_lane_s32 (z1, z2, z3, 0),
+ z0 = svqrdmlsh_lane (z1, z2, z3, 0))
+
+/*
+** qrdmlsh_lane_1_s32:
+** sqrdmlsh z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_1_s32, svint32_t,
+ z0 = svqrdmlsh_lane_s32 (z0, z1, z2, 1),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 1))
+
+/*
+** qrdmlsh_lane_2_s32:
+** sqrdmlsh z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_2_s32, svint32_t,
+ z0 = svqrdmlsh_lane_s32 (z0, z1, z2, 2),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 2))
+
+/*
+** qrdmlsh_lane_3_s32:
+** sqrdmlsh z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_3_s32, svint32_t,
+ z0 = svqrdmlsh_lane_s32 (z0, z1, z2, 3),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 3))
+
+/*
+** qrdmlsh_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqrdmlsh z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlsh_lane_z8_s32, svint32_t, svint32_t, z8,
+ z0 = svqrdmlsh_lane_s32 (z0, z1, z8, 1),
+ z0 = svqrdmlsh_lane (z0, z1, z8, 1))
+
+/*
+** qrdmlsh_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqrdmlsh z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlsh_lane_z16_s32, svint32_t, svint32_t, z16,
+ z0 = svqrdmlsh_lane_s32 (z0, z1, z16, 1),
+ z0 = svqrdmlsh_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlsh_lane_0_s64_tied1:
+** sqrdmlsh z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s64_tied1, svint64_t,
+ z0 = svqrdmlsh_lane_s64 (z0, z1, z2, 0),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 0))
+
+/*
+** qrdmlsh_lane_0_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.d, \1, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s64_tied2, svint64_t,
+ z0 = svqrdmlsh_lane_s64 (z1, z0, z2, 0),
+ z0 = svqrdmlsh_lane (z1, z0, z2, 0))
+
+/*
+** qrdmlsh_lane_0_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.d, z2\.d, \1\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s64_tied3, svint64_t,
+ z0 = svqrdmlsh_lane_s64 (z1, z2, z0, 0),
+ z0 = svqrdmlsh_lane (z1, z2, z0, 0))
+
+/*
+** qrdmlsh_lane_0_s64_untied:
+** movprfx z0, z1
+** sqrdmlsh z0\.d, z2\.d, z3\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_0_s64_untied, svint64_t,
+ z0 = svqrdmlsh_lane_s64 (z1, z2, z3, 0),
+ z0 = svqrdmlsh_lane (z1, z2, z3, 0))
+
+/*
+** qrdmlsh_lane_1_s64:
+** sqrdmlsh z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_lane_1_s64, svint64_t,
+ z0 = svqrdmlsh_lane_s64 (z0, z1, z2, 1),
+ z0 = svqrdmlsh_lane (z0, z1, z2, 1))
+
+/*
+** qrdmlsh_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqrdmlsh z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlsh_lane_z15_s64, svint64_t, svint64_t, z15,
+ z0 = svqrdmlsh_lane_s64 (z0, z1, z15, 1),
+ z0 = svqrdmlsh_lane (z0, z1, z15, 1))
+
+/*
+** qrdmlsh_lane_z16_s64:
+** mov (z[0-7])\.d, z16\.d
+** sqrdmlsh z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmlsh_lane_z16_s64, svint64_t, svint64_t, z16,
+ z0 = svqrdmlsh_lane_s64 (z0, z1, z16, 1),
+ z0 = svqrdmlsh_lane (z0, z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlsh_s16_tied1:
+** sqrdmlsh z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s16_tied1, svint16_t,
+ z0 = svqrdmlsh_s16 (z0, z1, z2),
+ z0 = svqrdmlsh (z0, z1, z2))
+
+/*
+** qrdmlsh_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.h, \1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s16_tied2, svint16_t,
+ z0 = svqrdmlsh_s16 (z1, z0, z2),
+ z0 = svqrdmlsh (z1, z0, z2))
+
+/*
+** qrdmlsh_s16_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.h, z2\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s16_tied3, svint16_t,
+ z0 = svqrdmlsh_s16 (z1, z2, z0),
+ z0 = svqrdmlsh (z1, z2, z0))
+
+/*
+** qrdmlsh_s16_untied:
+** movprfx z0, z1
+** sqrdmlsh z0\.h, z2\.h, z3\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s16_untied, svint16_t,
+ z0 = svqrdmlsh_s16 (z1, z2, z3),
+ z0 = svqrdmlsh (z1, z2, z3))
+
+/*
+** qrdmlsh_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** sqrdmlsh z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svqrdmlsh_n_s16 (z0, z1, x0),
+ z0 = svqrdmlsh (z0, z1, x0))
+
+/*
+** qrdmlsh_w0_s16_tied2:
+** mov (z[0-9]+\.h), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_w0_s16_tied2, svint16_t, int16_t,
+ z0 = svqrdmlsh_n_s16 (z1, z0, x0),
+ z0 = svqrdmlsh (z1, z0, x0))
+
+/*
+** qrdmlsh_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqrdmlsh z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_w0_s16_untied, svint16_t, int16_t,
+ z0 = svqrdmlsh_n_s16 (z1, z2, x0),
+ z0 = svqrdmlsh (z1, z2, x0))
+
+/*
+** qrdmlsh_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** sqrdmlsh z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s16_tied1, svint16_t,
+ z0 = svqrdmlsh_n_s16 (z0, z1, 11),
+ z0 = svqrdmlsh (z0, z1, 11))
+
+/*
+** qrdmlsh_11_s16_tied2:
+** mov (z[0-9]+\.h), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.h, \2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s16_tied2, svint16_t,
+ z0 = svqrdmlsh_n_s16 (z1, z0, 11),
+ z0 = svqrdmlsh (z1, z0, 11))
+
+/*
+** qrdmlsh_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** sqrdmlsh z0\.h, z2\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s16_untied, svint16_t,
+ z0 = svqrdmlsh_n_s16 (z1, z2, 11),
+ z0 = svqrdmlsh (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlsh_s32_tied1:
+** sqrdmlsh z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s32_tied1, svint32_t,
+ z0 = svqrdmlsh_s32 (z0, z1, z2),
+ z0 = svqrdmlsh (z0, z1, z2))
+
+/*
+** qrdmlsh_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s32_tied2, svint32_t,
+ z0 = svqrdmlsh_s32 (z1, z0, z2),
+ z0 = svqrdmlsh (z1, z0, z2))
+
+/*
+** qrdmlsh_s32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s32_tied3, svint32_t,
+ z0 = svqrdmlsh_s32 (z1, z2, z0),
+ z0 = svqrdmlsh (z1, z2, z0))
+
+/*
+** qrdmlsh_s32_untied:
+** movprfx z0, z1
+** sqrdmlsh z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s32_untied, svint32_t,
+ z0 = svqrdmlsh_s32 (z1, z2, z3),
+ z0 = svqrdmlsh (z1, z2, z3))
+
+/*
+** qrdmlsh_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** sqrdmlsh z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svqrdmlsh_n_s32 (z0, z1, x0),
+ z0 = svqrdmlsh (z0, z1, x0))
+
+/*
+** qrdmlsh_w0_s32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_w0_s32_tied2, svint32_t, int32_t,
+ z0 = svqrdmlsh_n_s32 (z1, z0, x0),
+ z0 = svqrdmlsh (z1, z0, x0))
+
+/*
+** qrdmlsh_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqrdmlsh z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_w0_s32_untied, svint32_t, int32_t,
+ z0 = svqrdmlsh_n_s32 (z1, z2, x0),
+ z0 = svqrdmlsh (z1, z2, x0))
+
+/*
+** qrdmlsh_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** sqrdmlsh z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s32_tied1, svint32_t,
+ z0 = svqrdmlsh_n_s32 (z0, z1, 11),
+ z0 = svqrdmlsh (z0, z1, 11))
+
+/*
+** qrdmlsh_11_s32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s32_tied2, svint32_t,
+ z0 = svqrdmlsh_n_s32 (z1, z0, 11),
+ z0 = svqrdmlsh (z1, z0, 11))
+
+/*
+** qrdmlsh_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sqrdmlsh z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s32_untied, svint32_t,
+ z0 = svqrdmlsh_n_s32 (z1, z2, 11),
+ z0 = svqrdmlsh (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlsh_s64_tied1:
+** sqrdmlsh z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s64_tied1, svint64_t,
+ z0 = svqrdmlsh_s64 (z0, z1, z2),
+ z0 = svqrdmlsh (z0, z1, z2))
+
+/*
+** qrdmlsh_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s64_tied2, svint64_t,
+ z0 = svqrdmlsh_s64 (z1, z0, z2),
+ z0 = svqrdmlsh (z1, z0, z2))
+
+/*
+** qrdmlsh_s64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s64_tied3, svint64_t,
+ z0 = svqrdmlsh_s64 (z1, z2, z0),
+ z0 = svqrdmlsh (z1, z2, z0))
+
+/*
+** qrdmlsh_s64_untied:
+** movprfx z0, z1
+** sqrdmlsh z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s64_untied, svint64_t,
+ z0 = svqrdmlsh_s64 (z1, z2, z3),
+ z0 = svqrdmlsh (z1, z2, z3))
+
+/*
+** qrdmlsh_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** sqrdmlsh z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svqrdmlsh_n_s64 (z0, z1, x0),
+ z0 = svqrdmlsh (z0, z1, x0))
+
+/*
+** qrdmlsh_x0_s64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_x0_s64_tied2, svint64_t, int64_t,
+ z0 = svqrdmlsh_n_s64 (z1, z0, x0),
+ z0 = svqrdmlsh (z1, z0, x0))
+
+/*
+** qrdmlsh_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** sqrdmlsh z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_x0_s64_untied, svint64_t, int64_t,
+ z0 = svqrdmlsh_n_s64 (z1, z2, x0),
+ z0 = svqrdmlsh (z1, z2, x0))
+
+/*
+** qrdmlsh_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** sqrdmlsh z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s64_tied1, svint64_t,
+ z0 = svqrdmlsh_n_s64 (z0, z1, 11),
+ z0 = svqrdmlsh (z0, z1, 11))
+
+/*
+** qrdmlsh_11_s64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s64_tied2, svint64_t,
+ z0 = svqrdmlsh_n_s64 (z1, z0, 11),
+ z0 = svqrdmlsh (z1, z0, 11))
+
+/*
+** qrdmlsh_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** sqrdmlsh z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s64_untied, svint64_t,
+ z0 = svqrdmlsh_n_s64 (z1, z2, 11),
+ z0 = svqrdmlsh (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmlsh_s8_tied1:
+** sqrdmlsh z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s8_tied1, svint8_t,
+ z0 = svqrdmlsh_s8 (z0, z1, z2),
+ z0 = svqrdmlsh (z0, z1, z2))
+
+/*
+** qrdmlsh_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.b, \1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s8_tied2, svint8_t,
+ z0 = svqrdmlsh_s8 (z1, z0, z2),
+ z0 = svqrdmlsh (z1, z0, z2))
+
+/*
+** qrdmlsh_s8_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.b, z2\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s8_tied3, svint8_t,
+ z0 = svqrdmlsh_s8 (z1, z2, z0),
+ z0 = svqrdmlsh (z1, z2, z0))
+
+/*
+** qrdmlsh_s8_untied:
+** movprfx z0, z1
+** sqrdmlsh z0\.b, z2\.b, z3\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_s8_untied, svint8_t,
+ z0 = svqrdmlsh_s8 (z1, z2, z3),
+ z0 = svqrdmlsh (z1, z2, z3))
+
+/*
+** qrdmlsh_w0_s8_tied1:
+** mov (z[0-9]+\.b), w0
+** sqrdmlsh z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svqrdmlsh_n_s8 (z0, z1, x0),
+ z0 = svqrdmlsh (z0, z1, x0))
+
+/*
+** qrdmlsh_w0_s8_tied2:
+** mov (z[0-9]+\.b), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_w0_s8_tied2, svint8_t, int8_t,
+ z0 = svqrdmlsh_n_s8 (z1, z0, x0),
+ z0 = svqrdmlsh (z1, z0, x0))
+
+/*
+** qrdmlsh_w0_s8_untied:
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqrdmlsh z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmlsh_w0_s8_untied, svint8_t, int8_t,
+ z0 = svqrdmlsh_n_s8 (z1, z2, x0),
+ z0 = svqrdmlsh (z1, z2, x0))
+
+/*
+** qrdmlsh_11_s8_tied1:
+** mov (z[0-9]+\.b), #11
+** sqrdmlsh z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s8_tied1, svint8_t,
+ z0 = svqrdmlsh_n_s8 (z0, z1, 11),
+ z0 = svqrdmlsh (z0, z1, 11))
+
+/*
+** qrdmlsh_11_s8_tied2:
+** mov (z[0-9]+\.b), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqrdmlsh z0\.b, \2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s8_tied2, svint8_t,
+ z0 = svqrdmlsh_n_s8 (z1, z0, 11),
+ z0 = svqrdmlsh (z1, z0, 11))
+
+/*
+** qrdmlsh_11_s8_untied:
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** sqrdmlsh z0\.b, z2\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmlsh_11_s8_untied, svint8_t,
+ z0 = svqrdmlsh_n_s8 (z1, z2, 11),
+ z0 = svqrdmlsh (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmulh_lane_0_s16_tied1:
+** sqrdmulh z0\.h, z0\.h, z1\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_0_s16_tied1, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z0, z1, 0),
+ z0 = svqrdmulh_lane (z0, z1, 0))
+
+/*
+** qrdmulh_lane_0_s16_tied2:
+** sqrdmulh z0\.h, z1\.h, z0\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_0_s16_tied2, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z1, z0, 0),
+ z0 = svqrdmulh_lane (z1, z0, 0))
+
+/*
+** qrdmulh_lane_0_s16_untied:
+** sqrdmulh z0\.h, z1\.h, z2\.h\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_0_s16_untied, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z1, z2, 0),
+ z0 = svqrdmulh_lane (z1, z2, 0))
+
+/*
+** qrdmulh_lane_1_s16:
+** sqrdmulh z0\.h, z1\.h, z2\.h\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_1_s16, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z1, z2, 1),
+ z0 = svqrdmulh_lane (z1, z2, 1))
+
+/*
+** qrdmulh_lane_2_s16:
+** sqrdmulh z0\.h, z1\.h, z2\.h\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_2_s16, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z1, z2, 2),
+ z0 = svqrdmulh_lane (z1, z2, 2))
+
+/*
+** qrdmulh_lane_3_s16:
+** sqrdmulh z0\.h, z1\.h, z2\.h\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_3_s16, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z1, z2, 3),
+ z0 = svqrdmulh_lane (z1, z2, 3))
+
+/*
+** qrdmulh_lane_4_s16:
+** sqrdmulh z0\.h, z1\.h, z2\.h\[4\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_4_s16, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z1, z2, 4),
+ z0 = svqrdmulh_lane (z1, z2, 4))
+
+/*
+** qrdmulh_lane_5_s16:
+** sqrdmulh z0\.h, z1\.h, z2\.h\[5\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_5_s16, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z1, z2, 5),
+ z0 = svqrdmulh_lane (z1, z2, 5))
+
+/*
+** qrdmulh_lane_6_s16:
+** sqrdmulh z0\.h, z1\.h, z2\.h\[6\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_6_s16, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z1, z2, 6),
+ z0 = svqrdmulh_lane (z1, z2, 6))
+
+/*
+** qrdmulh_lane_7_s16:
+** sqrdmulh z0\.h, z1\.h, z2\.h\[7\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_7_s16, svint16_t,
+ z0 = svqrdmulh_lane_s16 (z1, z2, 7),
+ z0 = svqrdmulh_lane (z1, z2, 7))
+
+/*
+** qrdmulh_lane_z8_s16:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqrdmulh z0\.h, z1\.h, \1\.h\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmulh_lane_z8_s16, svint16_t, svint16_t, z8,
+ z0 = svqrdmulh_lane_s16 (z1, z8, 1),
+ z0 = svqrdmulh_lane (z1, z8, 1))
+
+/*
+** qrdmulh_lane_z16_s16:
+** mov (z[0-7])\.d, z16\.d
+** sqrdmulh z0\.h, z1\.h, \1\.h\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmulh_lane_z16_s16, svint16_t, svint16_t, z16,
+ z0 = svqrdmulh_lane_s16 (z1, z16, 1),
+ z0 = svqrdmulh_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmulh_lane_0_s32_tied1:
+** sqrdmulh z0\.s, z0\.s, z1\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_0_s32_tied1, svint32_t,
+ z0 = svqrdmulh_lane_s32 (z0, z1, 0),
+ z0 = svqrdmulh_lane (z0, z1, 0))
+
+/*
+** qrdmulh_lane_0_s32_tied2:
+** sqrdmulh z0\.s, z1\.s, z0\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_0_s32_tied2, svint32_t,
+ z0 = svqrdmulh_lane_s32 (z1, z0, 0),
+ z0 = svqrdmulh_lane (z1, z0, 0))
+
+/*
+** qrdmulh_lane_0_s32_untied:
+** sqrdmulh z0\.s, z1\.s, z2\.s\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_0_s32_untied, svint32_t,
+ z0 = svqrdmulh_lane_s32 (z1, z2, 0),
+ z0 = svqrdmulh_lane (z1, z2, 0))
+
+/*
+** qrdmulh_lane_1_s32:
+** sqrdmulh z0\.s, z1\.s, z2\.s\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_1_s32, svint32_t,
+ z0 = svqrdmulh_lane_s32 (z1, z2, 1),
+ z0 = svqrdmulh_lane (z1, z2, 1))
+
+/*
+** qrdmulh_lane_2_s32:
+** sqrdmulh z0\.s, z1\.s, z2\.s\[2\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_2_s32, svint32_t,
+ z0 = svqrdmulh_lane_s32 (z1, z2, 2),
+ z0 = svqrdmulh_lane (z1, z2, 2))
+
+/*
+** qrdmulh_lane_3_s32:
+** sqrdmulh z0\.s, z1\.s, z2\.s\[3\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_3_s32, svint32_t,
+ z0 = svqrdmulh_lane_s32 (z1, z2, 3),
+ z0 = svqrdmulh_lane (z1, z2, 3))
+
+/*
+** qrdmulh_lane_z8_s32:
+** str d8, \[sp, -16\]!
+** mov (z[0-7])\.d, z8\.d
+** sqrdmulh z0\.s, z1\.s, \1\.s\[1\]
+** ldr d8, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmulh_lane_z8_s32, svint32_t, svint32_t, z8,
+ z0 = svqrdmulh_lane_s32 (z1, z8, 1),
+ z0 = svqrdmulh_lane (z1, z8, 1))
+
+/*
+** qrdmulh_lane_z16_s32:
+** mov (z[0-7])\.d, z16\.d
+** sqrdmulh z0\.s, z1\.s, \1\.s\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmulh_lane_z16_s32, svint32_t, svint32_t, z16,
+ z0 = svqrdmulh_lane_s32 (z1, z16, 1),
+ z0 = svqrdmulh_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmulh_lane_0_s64_tied1:
+** sqrdmulh z0\.d, z0\.d, z1\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_0_s64_tied1, svint64_t,
+ z0 = svqrdmulh_lane_s64 (z0, z1, 0),
+ z0 = svqrdmulh_lane (z0, z1, 0))
+
+/*
+** qrdmulh_lane_0_s64_tied2:
+** sqrdmulh z0\.d, z1\.d, z0\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_0_s64_tied2, svint64_t,
+ z0 = svqrdmulh_lane_s64 (z1, z0, 0),
+ z0 = svqrdmulh_lane (z1, z0, 0))
+
+/*
+** qrdmulh_lane_0_s64_untied:
+** sqrdmulh z0\.d, z1\.d, z2\.d\[0\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_0_s64_untied, svint64_t,
+ z0 = svqrdmulh_lane_s64 (z1, z2, 0),
+ z0 = svqrdmulh_lane (z1, z2, 0))
+
+/*
+** qrdmulh_lane_1_s64:
+** sqrdmulh z0\.d, z1\.d, z2\.d\[1\]
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_lane_1_s64, svint64_t,
+ z0 = svqrdmulh_lane_s64 (z1, z2, 1),
+ z0 = svqrdmulh_lane (z1, z2, 1))
+
+/*
+** qrdmulh_lane_z15_s64:
+** str d15, \[sp, -16\]!
+** sqrdmulh z0\.d, z1\.d, z15\.d\[1\]
+** ldr d15, \[sp\], 16
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmulh_lane_z15_s64, svint64_t, svint64_t, z15,
+ z0 = svqrdmulh_lane_s64 (z1, z15, 1),
+ z0 = svqrdmulh_lane (z1, z15, 1))
+
+/*
+** qrdmulh_lane_z16_s64:
+** mov (z[0-7])\.d, z16\.d
+** sqrdmulh z0\.d, z1\.d, \1\.d\[1\]
+** ret
+*/
+TEST_DUAL_LANE_REG (qrdmulh_lane_z16_s64, svint64_t, svint64_t, z16,
+ z0 = svqrdmulh_lane_s64 (z1, z16, 1),
+ z0 = svqrdmulh_lane (z1, z16, 1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmulh_s16_tied1:
+** sqrdmulh z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s16_tied1, svint16_t,
+ z0 = svqrdmulh_s16 (z0, z1),
+ z0 = svqrdmulh (z0, z1))
+
+/*
+** qrdmulh_s16_tied2:
+** sqrdmulh z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s16_tied2, svint16_t,
+ z0 = svqrdmulh_s16 (z1, z0),
+ z0 = svqrdmulh (z1, z0))
+
+/*
+** qrdmulh_s16_untied:
+** sqrdmulh z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s16_untied, svint16_t,
+ z0 = svqrdmulh_s16 (z1, z2),
+ z0 = svqrdmulh (z1, z2))
+
+/*
+** qrdmulh_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** sqrdmulh z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmulh_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svqrdmulh_n_s16 (z0, x0),
+ z0 = svqrdmulh (z0, x0))
+
+/*
+** qrdmulh_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** sqrdmulh z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmulh_w0_s16_untied, svint16_t, int16_t,
+ z0 = svqrdmulh_n_s16 (z1, x0),
+ z0 = svqrdmulh (z1, x0))
+
+/*
+** qrdmulh_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** sqrdmulh z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_11_s16_tied1, svint16_t,
+ z0 = svqrdmulh_n_s16 (z0, 11),
+ z0 = svqrdmulh (z0, 11))
+
+/*
+** qrdmulh_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** sqrdmulh z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_11_s16_untied, svint16_t,
+ z0 = svqrdmulh_n_s16 (z1, 11),
+ z0 = svqrdmulh (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmulh_s32_tied1:
+** sqrdmulh z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s32_tied1, svint32_t,
+ z0 = svqrdmulh_s32 (z0, z1),
+ z0 = svqrdmulh (z0, z1))
+
+/*
+** qrdmulh_s32_tied2:
+** sqrdmulh z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s32_tied2, svint32_t,
+ z0 = svqrdmulh_s32 (z1, z0),
+ z0 = svqrdmulh (z1, z0))
+
+/*
+** qrdmulh_s32_untied:
+** sqrdmulh z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s32_untied, svint32_t,
+ z0 = svqrdmulh_s32 (z1, z2),
+ z0 = svqrdmulh (z1, z2))
+
+/*
+** qrdmulh_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** sqrdmulh z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmulh_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svqrdmulh_n_s32 (z0, x0),
+ z0 = svqrdmulh (z0, x0))
+
+/*
+** qrdmulh_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** sqrdmulh z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmulh_w0_s32_untied, svint32_t, int32_t,
+ z0 = svqrdmulh_n_s32 (z1, x0),
+ z0 = svqrdmulh (z1, x0))
+
+/*
+** qrdmulh_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** sqrdmulh z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_11_s32_tied1, svint32_t,
+ z0 = svqrdmulh_n_s32 (z0, 11),
+ z0 = svqrdmulh (z0, 11))
+
+/*
+** qrdmulh_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** sqrdmulh z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_11_s32_untied, svint32_t,
+ z0 = svqrdmulh_n_s32 (z1, 11),
+ z0 = svqrdmulh (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmulh_s64_tied1:
+** sqrdmulh z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s64_tied1, svint64_t,
+ z0 = svqrdmulh_s64 (z0, z1),
+ z0 = svqrdmulh (z0, z1))
+
+/*
+** qrdmulh_s64_tied2:
+** sqrdmulh z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s64_tied2, svint64_t,
+ z0 = svqrdmulh_s64 (z1, z0),
+ z0 = svqrdmulh (z1, z0))
+
+/*
+** qrdmulh_s64_untied:
+** sqrdmulh z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s64_untied, svint64_t,
+ z0 = svqrdmulh_s64 (z1, z2),
+ z0 = svqrdmulh (z1, z2))
+
+/*
+** qrdmulh_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** sqrdmulh z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmulh_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svqrdmulh_n_s64 (z0, x0),
+ z0 = svqrdmulh (z0, x0))
+
+/*
+** qrdmulh_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** sqrdmulh z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmulh_x0_s64_untied, svint64_t, int64_t,
+ z0 = svqrdmulh_n_s64 (z1, x0),
+ z0 = svqrdmulh (z1, x0))
+
+/*
+** qrdmulh_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** sqrdmulh z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_11_s64_tied1, svint64_t,
+ z0 = svqrdmulh_n_s64 (z0, 11),
+ z0 = svqrdmulh (z0, 11))
+
+/*
+** qrdmulh_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** sqrdmulh z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_11_s64_untied, svint64_t,
+ z0 = svqrdmulh_n_s64 (z1, 11),
+ z0 = svqrdmulh (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrdmulh_s8_tied1:
+** sqrdmulh z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s8_tied1, svint8_t,
+ z0 = svqrdmulh_s8 (z0, z1),
+ z0 = svqrdmulh (z0, z1))
+
+/*
+** qrdmulh_s8_tied2:
+** sqrdmulh z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s8_tied2, svint8_t,
+ z0 = svqrdmulh_s8 (z1, z0),
+ z0 = svqrdmulh (z1, z0))
+
+/*
+** qrdmulh_s8_untied:
+** sqrdmulh z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_s8_untied, svint8_t,
+ z0 = svqrdmulh_s8 (z1, z2),
+ z0 = svqrdmulh (z1, z2))
+
+/*
+** qrdmulh_w0_s8_tied1:
+** mov (z[0-9]+\.b), w0
+** sqrdmulh z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmulh_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svqrdmulh_n_s8 (z0, x0),
+ z0 = svqrdmulh (z0, x0))
+
+/*
+** qrdmulh_w0_s8_untied:
+** mov (z[0-9]+\.b), w0
+** sqrdmulh z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrdmulh_w0_s8_untied, svint8_t, int8_t,
+ z0 = svqrdmulh_n_s8 (z1, x0),
+ z0 = svqrdmulh (z1, x0))
+
+/*
+** qrdmulh_11_s8_tied1:
+** mov (z[0-9]+\.b), #11
+** sqrdmulh z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_11_s8_tied1, svint8_t,
+ z0 = svqrdmulh_n_s8 (z0, 11),
+ z0 = svqrdmulh (z0, 11))
+
+/*
+** qrdmulh_11_s8_untied:
+** mov (z[0-9]+\.b), #11
+** sqrdmulh z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qrdmulh_11_s8_untied, svint8_t,
+ z0 = svqrdmulh_n_s8 (z1, 11),
+ z0 = svqrdmulh (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshl_s16_m_tied1:
+** sqrshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qrshl_s16_m_tied1, svint16_t, svint16_t,
+ z0 = svqrshl_s16_m (p0, z0, z4),
+ z0 = svqrshl_m (p0, z0, z4))
+
+/*
+** qrshl_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqrshl z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s16_m_tied2, svint16_t, svint16_t,
+ z0_res = svqrshl_s16_m (p0, z4, z0),
+ z0_res = svqrshl_m (p0, z4, z0))
+
+/*
+** qrshl_s16_m_untied:
+** movprfx z0, z1
+** sqrshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qrshl_s16_m_untied, svint16_t, svint16_t,
+ z0 = svqrshl_s16_m (p0, z1, z4),
+ z0 = svqrshl_m (p0, z1, z4))
+
+/*
+** qrshl_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** sqrshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svqrshl_n_s16_m (p0, z0, x0),
+ z0 = svqrshl_m (p0, z0, x0))
+
+/*
+** qrshl_w0_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqrshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svqrshl_n_s16_m (p0, z1, x0),
+ z0 = svqrshl_m (p0, z1, x0))
+
+/*
+** qrshl_m16_s16_m:
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m16_s16_m, svint16_t,
+ z0 = svqrshl_n_s16_m (p0, z0, -16),
+ z0 = svqrshl_m (p0, z0, -16))
+
+/*
+** qrshl_m2_s16_m:
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s16_m, svint16_t,
+ z0 = svqrshl_n_s16_m (p0, z0, -2),
+ z0 = svqrshl_m (p0, z0, -2))
+
+/*
+** qrshl_m1_s16_m_tied1:
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s16_m_tied1, svint16_t,
+ z0 = svqrshl_n_s16_m (p0, z0, -1),
+ z0 = svqrshl_m (p0, z0, -1))
+
+/*
+** qrshl_m1_s16_m_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s16_m_untied, svint16_t,
+ z0 = svqrshl_n_s16_m (p0, z1, -1),
+ z0 = svqrshl_m (p0, z1, -1))
+
+/*
+** qrshl_1_s16_m_tied1:
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s16_m_tied1, svint16_t,
+ z0 = svqrshl_n_s16_m (p0, z0, 1),
+ z0 = svqrshl_m (p0, z0, 1))
+
+/*
+** qrshl_1_s16_m_untied:
+** movprfx z0, z1
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s16_m_untied, svint16_t,
+ z0 = svqrshl_n_s16_m (p0, z1, 1),
+ z0 = svqrshl_m (p0, z1, 1))
+
+/*
+** qrshl_2_s16_m:
+** sqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s16_m, svint16_t,
+ z0 = svqrshl_n_s16_m (p0, z0, 2),
+ z0 = svqrshl_m (p0, z0, 2))
+
+/*
+** qrshl_15_s16_m:
+** sqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_15_s16_m, svint16_t,
+ z0 = svqrshl_n_s16_m (p0, z0, 15),
+ z0 = svqrshl_m (p0, z0, 15))
+
+/*
+** qrshl_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqrshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qrshl_s16_z_tied1, svint16_t, svint16_t,
+ z0 = svqrshl_s16_z (p0, z0, z4),
+ z0 = svqrshl_z (p0, z0, z4))
+
+/*
+** qrshl_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** sqrshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s16_z_tied2, svint16_t, svint16_t,
+ z0_res = svqrshl_s16_z (p0, z4, z0),
+ z0_res = svqrshl_z (p0, z4, z0))
+
+/*
+** qrshl_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqrshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0\.h, p0/z, z4\.h
+** sqrshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_s16_z_untied, svint16_t, svint16_t,
+ z0 = svqrshl_s16_z (p0, z1, z4),
+ z0 = svqrshl_z (p0, z1, z4))
+
+/*
+** qrshl_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** sqrshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svqrshl_n_s16_z (p0, z0, x0),
+ z0 = svqrshl_z (p0, z0, x0))
+
+/*
+** qrshl_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqrshl z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** sqrshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svqrshl_n_s16_z (p0, z1, x0),
+ z0 = svqrshl_z (p0, z1, x0))
+
+/*
+** qrshl_m16_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m16_s16_z, svint16_t,
+ z0 = svqrshl_n_s16_z (p0, z0, -16),
+ z0 = svqrshl_z (p0, z0, -16))
+
+/*
+** qrshl_m2_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s16_z, svint16_t,
+ z0 = svqrshl_n_s16_z (p0, z0, -2),
+ z0 = svqrshl_z (p0, z0, -2))
+
+/*
+** qrshl_m1_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s16_z_tied1, svint16_t,
+ z0 = svqrshl_n_s16_z (p0, z0, -1),
+ z0 = svqrshl_z (p0, z0, -1))
+
+/*
+** qrshl_m1_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s16_z_untied, svint16_t,
+ z0 = svqrshl_n_s16_z (p0, z1, -1),
+ z0 = svqrshl_z (p0, z1, -1))
+
+/*
+** qrshl_1_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s16_z_tied1, svint16_t,
+ z0 = svqrshl_n_s16_z (p0, z0, 1),
+ z0 = svqrshl_z (p0, z0, 1))
+
+/*
+** qrshl_1_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s16_z_untied, svint16_t,
+ z0 = svqrshl_n_s16_z (p0, z1, 1),
+ z0 = svqrshl_z (p0, z1, 1))
+
+/*
+** qrshl_2_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s16_z, svint16_t,
+ z0 = svqrshl_n_s16_z (p0, z0, 2),
+ z0 = svqrshl_z (p0, z0, 2))
+
+/*
+** qrshl_15_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_15_s16_z, svint16_t,
+ z0 = svqrshl_n_s16_z (p0, z0, 15),
+ z0 = svqrshl_z (p0, z0, 15))
+
+/*
+** qrshl_s16_x_tied1:
+** sqrshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qrshl_s16_x_tied1, svint16_t, svint16_t,
+ z0 = svqrshl_s16_x (p0, z0, z4),
+ z0 = svqrshl_x (p0, z0, z4))
+
+/*
+** qrshl_s16_x_tied2:
+** sqrshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s16_x_tied2, svint16_t, svint16_t,
+ z0_res = svqrshl_s16_x (p0, z4, z0),
+ z0_res = svqrshl_x (p0, z4, z0))
+
+/*
+** qrshl_s16_x_untied:
+** (
+** movprfx z0, z1
+** sqrshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0, z4
+** sqrshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_s16_x_untied, svint16_t, svint16_t,
+ z0 = svqrshl_s16_x (p0, z1, z4),
+ z0 = svqrshl_x (p0, z1, z4))
+
+/*
+** qrshl_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** sqrshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svqrshl_n_s16_x (p0, z0, x0),
+ z0 = svqrshl_x (p0, z0, x0))
+
+/*
+** qrshl_w0_s16_x_untied:
+** mov z0\.h, w0
+** sqrshlr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svqrshl_n_s16_x (p0, z1, x0),
+ z0 = svqrshl_x (p0, z1, x0))
+
+/*
+** qrshl_m16_s16_x:
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m16_s16_x, svint16_t,
+ z0 = svqrshl_n_s16_x (p0, z0, -16),
+ z0 = svqrshl_x (p0, z0, -16))
+
+/*
+** qrshl_m2_s16_x:
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s16_x, svint16_t,
+ z0 = svqrshl_n_s16_x (p0, z0, -2),
+ z0 = svqrshl_x (p0, z0, -2))
+
+/*
+** qrshl_m1_s16_x_tied1:
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s16_x_tied1, svint16_t,
+ z0 = svqrshl_n_s16_x (p0, z0, -1),
+ z0 = svqrshl_x (p0, z0, -1))
+
+/*
+** qrshl_m1_s16_x_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s16_x_untied, svint16_t,
+ z0 = svqrshl_n_s16_x (p0, z1, -1),
+ z0 = svqrshl_x (p0, z1, -1))
+
+/*
+** qrshl_1_s16_x_tied1:
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s16_x_tied1, svint16_t,
+ z0 = svqrshl_n_s16_x (p0, z0, 1),
+ z0 = svqrshl_x (p0, z0, 1))
+
+/*
+** qrshl_1_s16_x_untied:
+** movprfx z0, z1
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s16_x_untied, svint16_t,
+ z0 = svqrshl_n_s16_x (p0, z1, 1),
+ z0 = svqrshl_x (p0, z1, 1))
+
+/*
+** qrshl_2_s16_x:
+** sqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s16_x, svint16_t,
+ z0 = svqrshl_n_s16_x (p0, z0, 2),
+ z0 = svqrshl_x (p0, z0, 2))
+
+/*
+** qrshl_15_s16_x:
+** sqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_15_s16_x, svint16_t,
+ z0 = svqrshl_n_s16_x (p0, z0, 15),
+ z0 = svqrshl_x (p0, z0, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshl_s32_m_tied1:
+** sqrshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qrshl_s32_m_tied1, svint32_t, svint32_t,
+ z0 = svqrshl_s32_m (p0, z0, z4),
+ z0 = svqrshl_m (p0, z0, z4))
+
+/*
+** qrshl_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqrshl z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s32_m_tied2, svint32_t, svint32_t,
+ z0_res = svqrshl_s32_m (p0, z4, z0),
+ z0_res = svqrshl_m (p0, z4, z0))
+
+/*
+** qrshl_s32_m_untied:
+** movprfx z0, z1
+** sqrshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qrshl_s32_m_untied, svint32_t, svint32_t,
+ z0 = svqrshl_s32_m (p0, z1, z4),
+ z0 = svqrshl_m (p0, z1, z4))
+
+/*
+** qrshl_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** sqrshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svqrshl_n_s32_m (p0, z0, x0),
+ z0 = svqrshl_m (p0, z0, x0))
+
+/*
+** qrshl_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqrshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svqrshl_n_s32_m (p0, z1, x0),
+ z0 = svqrshl_m (p0, z1, x0))
+
+/*
+** qrshl_m32_s32_m:
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m32_s32_m, svint32_t,
+ z0 = svqrshl_n_s32_m (p0, z0, -32),
+ z0 = svqrshl_m (p0, z0, -32))
+
+/*
+** qrshl_m2_s32_m:
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s32_m, svint32_t,
+ z0 = svqrshl_n_s32_m (p0, z0, -2),
+ z0 = svqrshl_m (p0, z0, -2))
+
+/*
+** qrshl_m1_s32_m_tied1:
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s32_m_tied1, svint32_t,
+ z0 = svqrshl_n_s32_m (p0, z0, -1),
+ z0 = svqrshl_m (p0, z0, -1))
+
+/*
+** qrshl_m1_s32_m_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s32_m_untied, svint32_t,
+ z0 = svqrshl_n_s32_m (p0, z1, -1),
+ z0 = svqrshl_m (p0, z1, -1))
+
+/*
+** qrshl_1_s32_m_tied1:
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s32_m_tied1, svint32_t,
+ z0 = svqrshl_n_s32_m (p0, z0, 1),
+ z0 = svqrshl_m (p0, z0, 1))
+
+/*
+** qrshl_1_s32_m_untied:
+** movprfx z0, z1
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s32_m_untied, svint32_t,
+ z0 = svqrshl_n_s32_m (p0, z1, 1),
+ z0 = svqrshl_m (p0, z1, 1))
+
+/*
+** qrshl_2_s32_m:
+** sqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s32_m, svint32_t,
+ z0 = svqrshl_n_s32_m (p0, z0, 2),
+ z0 = svqrshl_m (p0, z0, 2))
+
+/*
+** qrshl_31_s32_m:
+** sqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_31_s32_m, svint32_t,
+ z0 = svqrshl_n_s32_m (p0, z0, 31),
+ z0 = svqrshl_m (p0, z0, 31))
+
+/*
+** qrshl_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqrshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qrshl_s32_z_tied1, svint32_t, svint32_t,
+ z0 = svqrshl_s32_z (p0, z0, z4),
+ z0 = svqrshl_z (p0, z0, z4))
+
+/*
+** qrshl_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** sqrshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s32_z_tied2, svint32_t, svint32_t,
+ z0_res = svqrshl_s32_z (p0, z4, z0),
+ z0_res = svqrshl_z (p0, z4, z0))
+
+/*
+** qrshl_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqrshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0\.s, p0/z, z4\.s
+** sqrshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_s32_z_untied, svint32_t, svint32_t,
+ z0 = svqrshl_s32_z (p0, z1, z4),
+ z0 = svqrshl_z (p0, z1, z4))
+
+/*
+** qrshl_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** sqrshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svqrshl_n_s32_z (p0, z0, x0),
+ z0 = svqrshl_z (p0, z0, x0))
+
+/*
+** qrshl_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqrshl z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** sqrshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svqrshl_n_s32_z (p0, z1, x0),
+ z0 = svqrshl_z (p0, z1, x0))
+
+/*
+** qrshl_m32_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m32_s32_z, svint32_t,
+ z0 = svqrshl_n_s32_z (p0, z0, -32),
+ z0 = svqrshl_z (p0, z0, -32))
+
+/*
+** qrshl_m2_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s32_z, svint32_t,
+ z0 = svqrshl_n_s32_z (p0, z0, -2),
+ z0 = svqrshl_z (p0, z0, -2))
+
+/*
+** qrshl_m1_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s32_z_tied1, svint32_t,
+ z0 = svqrshl_n_s32_z (p0, z0, -1),
+ z0 = svqrshl_z (p0, z0, -1))
+
+/*
+** qrshl_m1_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s32_z_untied, svint32_t,
+ z0 = svqrshl_n_s32_z (p0, z1, -1),
+ z0 = svqrshl_z (p0, z1, -1))
+
+/*
+** qrshl_1_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s32_z_tied1, svint32_t,
+ z0 = svqrshl_n_s32_z (p0, z0, 1),
+ z0 = svqrshl_z (p0, z0, 1))
+
+/*
+** qrshl_1_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s32_z_untied, svint32_t,
+ z0 = svqrshl_n_s32_z (p0, z1, 1),
+ z0 = svqrshl_z (p0, z1, 1))
+
+/*
+** qrshl_2_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s32_z, svint32_t,
+ z0 = svqrshl_n_s32_z (p0, z0, 2),
+ z0 = svqrshl_z (p0, z0, 2))
+
+/*
+** qrshl_31_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_31_s32_z, svint32_t,
+ z0 = svqrshl_n_s32_z (p0, z0, 31),
+ z0 = svqrshl_z (p0, z0, 31))
+
+/*
+** qrshl_s32_x_tied1:
+** sqrshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qrshl_s32_x_tied1, svint32_t, svint32_t,
+ z0 = svqrshl_s32_x (p0, z0, z4),
+ z0 = svqrshl_x (p0, z0, z4))
+
+/*
+** qrshl_s32_x_tied2:
+** sqrshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s32_x_tied2, svint32_t, svint32_t,
+ z0_res = svqrshl_s32_x (p0, z4, z0),
+ z0_res = svqrshl_x (p0, z4, z0))
+
+/*
+** qrshl_s32_x_untied:
+** (
+** movprfx z0, z1
+** sqrshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0, z4
+** sqrshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_s32_x_untied, svint32_t, svint32_t,
+ z0 = svqrshl_s32_x (p0, z1, z4),
+ z0 = svqrshl_x (p0, z1, z4))
+
+/*
+** qrshl_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** sqrshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svqrshl_n_s32_x (p0, z0, x0),
+ z0 = svqrshl_x (p0, z0, x0))
+
+/*
+** qrshl_w0_s32_x_untied:
+** mov z0\.s, w0
+** sqrshlr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svqrshl_n_s32_x (p0, z1, x0),
+ z0 = svqrshl_x (p0, z1, x0))
+
+/*
+** qrshl_m32_s32_x:
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m32_s32_x, svint32_t,
+ z0 = svqrshl_n_s32_x (p0, z0, -32),
+ z0 = svqrshl_x (p0, z0, -32))
+
+/*
+** qrshl_m2_s32_x:
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s32_x, svint32_t,
+ z0 = svqrshl_n_s32_x (p0, z0, -2),
+ z0 = svqrshl_x (p0, z0, -2))
+
+/*
+** qrshl_m1_s32_x_tied1:
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s32_x_tied1, svint32_t,
+ z0 = svqrshl_n_s32_x (p0, z0, -1),
+ z0 = svqrshl_x (p0, z0, -1))
+
+/*
+** qrshl_m1_s32_x_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s32_x_untied, svint32_t,
+ z0 = svqrshl_n_s32_x (p0, z1, -1),
+ z0 = svqrshl_x (p0, z1, -1))
+
+/*
+** qrshl_1_s32_x_tied1:
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s32_x_tied1, svint32_t,
+ z0 = svqrshl_n_s32_x (p0, z0, 1),
+ z0 = svqrshl_x (p0, z0, 1))
+
+/*
+** qrshl_1_s32_x_untied:
+** movprfx z0, z1
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s32_x_untied, svint32_t,
+ z0 = svqrshl_n_s32_x (p0, z1, 1),
+ z0 = svqrshl_x (p0, z1, 1))
+
+/*
+** qrshl_2_s32_x:
+** sqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s32_x, svint32_t,
+ z0 = svqrshl_n_s32_x (p0, z0, 2),
+ z0 = svqrshl_x (p0, z0, 2))
+
+/*
+** qrshl_31_s32_x:
+** sqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_31_s32_x, svint32_t,
+ z0 = svqrshl_n_s32_x (p0, z0, 31),
+ z0 = svqrshl_x (p0, z0, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshl_s64_m_tied1:
+** sqrshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qrshl_s64_m_tied1, svint64_t, svint64_t,
+ z0 = svqrshl_s64_m (p0, z0, z4),
+ z0 = svqrshl_m (p0, z0, z4))
+
+/*
+** qrshl_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** sqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s64_m_tied2, svint64_t, svint64_t,
+ z0_res = svqrshl_s64_m (p0, z4, z0),
+ z0_res = svqrshl_m (p0, z4, z0))
+
+/*
+** qrshl_s64_m_untied:
+** movprfx z0, z1
+** sqrshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qrshl_s64_m_untied, svint64_t, svint64_t,
+ z0 = svqrshl_s64_m (p0, z1, z4),
+ z0 = svqrshl_m (p0, z1, z4))
+
+/*
+** qrshl_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** sqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svqrshl_n_s64_m (p0, z0, x0),
+ z0 = svqrshl_m (p0, z0, x0))
+
+/*
+** qrshl_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** sqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svqrshl_n_s64_m (p0, z1, x0),
+ z0 = svqrshl_m (p0, z1, x0))
+
+/*
+** qrshl_m64_s64_m:
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m64_s64_m, svint64_t,
+ z0 = svqrshl_n_s64_m (p0, z0, -64),
+ z0 = svqrshl_m (p0, z0, -64))
+
+/*
+** qrshl_m2_s64_m:
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s64_m, svint64_t,
+ z0 = svqrshl_n_s64_m (p0, z0, -2),
+ z0 = svqrshl_m (p0, z0, -2))
+
+/*
+** qrshl_m1_s64_m_tied1:
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s64_m_tied1, svint64_t,
+ z0 = svqrshl_n_s64_m (p0, z0, -1),
+ z0 = svqrshl_m (p0, z0, -1))
+
+/*
+** qrshl_m1_s64_m_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s64_m_untied, svint64_t,
+ z0 = svqrshl_n_s64_m (p0, z1, -1),
+ z0 = svqrshl_m (p0, z1, -1))
+
+/*
+** qrshl_1_s64_m_tied1:
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s64_m_tied1, svint64_t,
+ z0 = svqrshl_n_s64_m (p0, z0, 1),
+ z0 = svqrshl_m (p0, z0, 1))
+
+/*
+** qrshl_1_s64_m_untied:
+** movprfx z0, z1
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s64_m_untied, svint64_t,
+ z0 = svqrshl_n_s64_m (p0, z1, 1),
+ z0 = svqrshl_m (p0, z1, 1))
+
+/*
+** qrshl_2_s64_m:
+** sqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s64_m, svint64_t,
+ z0 = svqrshl_n_s64_m (p0, z0, 2),
+ z0 = svqrshl_m (p0, z0, 2))
+
+/*
+** qrshl_63_s64_m:
+** sqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_63_s64_m, svint64_t,
+ z0 = svqrshl_n_s64_m (p0, z0, 63),
+ z0 = svqrshl_m (p0, z0, 63))
+
+/*
+** qrshl_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqrshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qrshl_s64_z_tied1, svint64_t, svint64_t,
+ z0 = svqrshl_s64_z (p0, z0, z4),
+ z0 = svqrshl_z (p0, z0, z4))
+
+/*
+** qrshl_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** sqrshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s64_z_tied2, svint64_t, svint64_t,
+ z0_res = svqrshl_s64_z (p0, z4, z0),
+ z0_res = svqrshl_z (p0, z4, z0))
+
+/*
+** qrshl_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqrshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0\.d, p0/z, z4\.d
+** sqrshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_s64_z_untied, svint64_t, svint64_t,
+ z0 = svqrshl_s64_z (p0, z1, z4),
+ z0 = svqrshl_z (p0, z1, z4))
+
+/*
+** qrshl_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** sqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svqrshl_n_s64_z (p0, z0, x0),
+ z0 = svqrshl_z (p0, z0, x0))
+
+/*
+** qrshl_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqrshl z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** sqrshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svqrshl_n_s64_z (p0, z1, x0),
+ z0 = svqrshl_z (p0, z1, x0))
+
+/*
+** qrshl_m64_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m64_s64_z, svint64_t,
+ z0 = svqrshl_n_s64_z (p0, z0, -64),
+ z0 = svqrshl_z (p0, z0, -64))
+
+/*
+** qrshl_m2_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s64_z, svint64_t,
+ z0 = svqrshl_n_s64_z (p0, z0, -2),
+ z0 = svqrshl_z (p0, z0, -2))
+
+/*
+** qrshl_m1_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s64_z_tied1, svint64_t,
+ z0 = svqrshl_n_s64_z (p0, z0, -1),
+ z0 = svqrshl_z (p0, z0, -1))
+
+/*
+** qrshl_m1_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s64_z_untied, svint64_t,
+ z0 = svqrshl_n_s64_z (p0, z1, -1),
+ z0 = svqrshl_z (p0, z1, -1))
+
+/*
+** qrshl_1_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s64_z_tied1, svint64_t,
+ z0 = svqrshl_n_s64_z (p0, z0, 1),
+ z0 = svqrshl_z (p0, z0, 1))
+
+/*
+** qrshl_1_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s64_z_untied, svint64_t,
+ z0 = svqrshl_n_s64_z (p0, z1, 1),
+ z0 = svqrshl_z (p0, z1, 1))
+
+/*
+** qrshl_2_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s64_z, svint64_t,
+ z0 = svqrshl_n_s64_z (p0, z0, 2),
+ z0 = svqrshl_z (p0, z0, 2))
+
+/*
+** qrshl_63_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_63_s64_z, svint64_t,
+ z0 = svqrshl_n_s64_z (p0, z0, 63),
+ z0 = svqrshl_z (p0, z0, 63))
+
+/*
+** qrshl_s64_x_tied1:
+** sqrshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qrshl_s64_x_tied1, svint64_t, svint64_t,
+ z0 = svqrshl_s64_x (p0, z0, z4),
+ z0 = svqrshl_x (p0, z0, z4))
+
+/*
+** qrshl_s64_x_tied2:
+** sqrshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s64_x_tied2, svint64_t, svint64_t,
+ z0_res = svqrshl_s64_x (p0, z4, z0),
+ z0_res = svqrshl_x (p0, z4, z0))
+
+/*
+** qrshl_s64_x_untied:
+** (
+** movprfx z0, z1
+** sqrshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0, z4
+** sqrshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_s64_x_untied, svint64_t, svint64_t,
+ z0 = svqrshl_s64_x (p0, z1, z4),
+ z0 = svqrshl_x (p0, z1, z4))
+
+/*
+** qrshl_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** sqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svqrshl_n_s64_x (p0, z0, x0),
+ z0 = svqrshl_x (p0, z0, x0))
+
+/*
+** qrshl_x0_s64_x_untied:
+** mov z0\.d, x0
+** sqrshlr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svqrshl_n_s64_x (p0, z1, x0),
+ z0 = svqrshl_x (p0, z1, x0))
+
+/*
+** qrshl_m64_s64_x:
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m64_s64_x, svint64_t,
+ z0 = svqrshl_n_s64_x (p0, z0, -64),
+ z0 = svqrshl_x (p0, z0, -64))
+
+/*
+** qrshl_m2_s64_x:
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s64_x, svint64_t,
+ z0 = svqrshl_n_s64_x (p0, z0, -2),
+ z0 = svqrshl_x (p0, z0, -2))
+
+/*
+** qrshl_m1_s64_x_tied1:
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s64_x_tied1, svint64_t,
+ z0 = svqrshl_n_s64_x (p0, z0, -1),
+ z0 = svqrshl_x (p0, z0, -1))
+
+/*
+** qrshl_m1_s64_x_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s64_x_untied, svint64_t,
+ z0 = svqrshl_n_s64_x (p0, z1, -1),
+ z0 = svqrshl_x (p0, z1, -1))
+
+/*
+** qrshl_1_s64_x_tied1:
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s64_x_tied1, svint64_t,
+ z0 = svqrshl_n_s64_x (p0, z0, 1),
+ z0 = svqrshl_x (p0, z0, 1))
+
+/*
+** qrshl_1_s64_x_untied:
+** movprfx z0, z1
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s64_x_untied, svint64_t,
+ z0 = svqrshl_n_s64_x (p0, z1, 1),
+ z0 = svqrshl_x (p0, z1, 1))
+
+/*
+** qrshl_2_s64_x:
+** sqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s64_x, svint64_t,
+ z0 = svqrshl_n_s64_x (p0, z0, 2),
+ z0 = svqrshl_x (p0, z0, 2))
+
+/*
+** qrshl_63_s64_x:
+** sqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_63_s64_x, svint64_t,
+ z0 = svqrshl_n_s64_x (p0, z0, 63),
+ z0 = svqrshl_x (p0, z0, 63))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshl_s8_m_tied1:
+** sqrshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qrshl_s8_m_tied1, svint8_t, svint8_t,
+ z0 = svqrshl_s8_m (p0, z0, z4),
+ z0 = svqrshl_m (p0, z0, z4))
+
+/*
+** qrshl_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqrshl z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s8_m_tied2, svint8_t, svint8_t,
+ z0_res = svqrshl_s8_m (p0, z4, z0),
+ z0_res = svqrshl_m (p0, z4, z0))
+
+/*
+** qrshl_s8_m_untied:
+** movprfx z0, z1
+** sqrshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qrshl_s8_m_untied, svint8_t, svint8_t,
+ z0 = svqrshl_s8_m (p0, z1, z4),
+ z0 = svqrshl_m (p0, z1, z4))
+
+/*
+** qrshl_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** sqrshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svqrshl_n_s8_m (p0, z0, x0),
+ z0 = svqrshl_m (p0, z0, x0))
+
+/*
+** qrshl_w0_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqrshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svqrshl_n_s8_m (p0, z1, x0),
+ z0 = svqrshl_m (p0, z1, x0))
+
+/*
+** qrshl_m8_s8_m:
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m8_s8_m, svint8_t,
+ z0 = svqrshl_n_s8_m (p0, z0, -8),
+ z0 = svqrshl_m (p0, z0, -8))
+
+/*
+** qrshl_m2_s8_m:
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s8_m, svint8_t,
+ z0 = svqrshl_n_s8_m (p0, z0, -2),
+ z0 = svqrshl_m (p0, z0, -2))
+
+/*
+** qrshl_m1_s8_m_tied1:
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s8_m_tied1, svint8_t,
+ z0 = svqrshl_n_s8_m (p0, z0, -1),
+ z0 = svqrshl_m (p0, z0, -1))
+
+/*
+** qrshl_m1_s8_m_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s8_m_untied, svint8_t,
+ z0 = svqrshl_n_s8_m (p0, z1, -1),
+ z0 = svqrshl_m (p0, z1, -1))
+
+/*
+** qrshl_1_s8_m_tied1:
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s8_m_tied1, svint8_t,
+ z0 = svqrshl_n_s8_m (p0, z0, 1),
+ z0 = svqrshl_m (p0, z0, 1))
+
+/*
+** qrshl_1_s8_m_untied:
+** movprfx z0, z1
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s8_m_untied, svint8_t,
+ z0 = svqrshl_n_s8_m (p0, z1, 1),
+ z0 = svqrshl_m (p0, z1, 1))
+
+/*
+** qrshl_2_s8_m:
+** sqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s8_m, svint8_t,
+ z0 = svqrshl_n_s8_m (p0, z0, 2),
+ z0 = svqrshl_m (p0, z0, 2))
+
+/*
+** qrshl_7_s8_m:
+** sqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_7_s8_m, svint8_t,
+ z0 = svqrshl_n_s8_m (p0, z0, 7),
+ z0 = svqrshl_m (p0, z0, 7))
+
+/*
+** qrshl_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqrshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qrshl_s8_z_tied1, svint8_t, svint8_t,
+ z0 = svqrshl_s8_z (p0, z0, z4),
+ z0 = svqrshl_z (p0, z0, z4))
+
+/*
+** qrshl_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** sqrshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s8_z_tied2, svint8_t, svint8_t,
+ z0_res = svqrshl_s8_z (p0, z4, z0),
+ z0_res = svqrshl_z (p0, z4, z0))
+
+/*
+** qrshl_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqrshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0\.b, p0/z, z4\.b
+** sqrshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_s8_z_untied, svint8_t, svint8_t,
+ z0 = svqrshl_s8_z (p0, z1, z4),
+ z0 = svqrshl_z (p0, z1, z4))
+
+/*
+** qrshl_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** sqrshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svqrshl_n_s8_z (p0, z0, x0),
+ z0 = svqrshl_z (p0, z0, x0))
+
+/*
+** qrshl_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqrshl z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** sqrshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svqrshl_n_s8_z (p0, z1, x0),
+ z0 = svqrshl_z (p0, z1, x0))
+
+/*
+** qrshl_m8_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m8_s8_z, svint8_t,
+ z0 = svqrshl_n_s8_z (p0, z0, -8),
+ z0 = svqrshl_z (p0, z0, -8))
+
+/*
+** qrshl_m2_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s8_z, svint8_t,
+ z0 = svqrshl_n_s8_z (p0, z0, -2),
+ z0 = svqrshl_z (p0, z0, -2))
+
+/*
+** qrshl_m1_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s8_z_tied1, svint8_t,
+ z0 = svqrshl_n_s8_z (p0, z0, -1),
+ z0 = svqrshl_z (p0, z0, -1))
+
+/*
+** qrshl_m1_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s8_z_untied, svint8_t,
+ z0 = svqrshl_n_s8_z (p0, z1, -1),
+ z0 = svqrshl_z (p0, z1, -1))
+
+/*
+** qrshl_1_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s8_z_tied1, svint8_t,
+ z0 = svqrshl_n_s8_z (p0, z0, 1),
+ z0 = svqrshl_z (p0, z0, 1))
+
+/*
+** qrshl_1_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s8_z_untied, svint8_t,
+ z0 = svqrshl_n_s8_z (p0, z1, 1),
+ z0 = svqrshl_z (p0, z1, 1))
+
+/*
+** qrshl_2_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s8_z, svint8_t,
+ z0 = svqrshl_n_s8_z (p0, z0, 2),
+ z0 = svqrshl_z (p0, z0, 2))
+
+/*
+** qrshl_7_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_7_s8_z, svint8_t,
+ z0 = svqrshl_n_s8_z (p0, z0, 7),
+ z0 = svqrshl_z (p0, z0, 7))
+
+/*
+** qrshl_s8_x_tied1:
+** sqrshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qrshl_s8_x_tied1, svint8_t, svint8_t,
+ z0 = svqrshl_s8_x (p0, z0, z4),
+ z0 = svqrshl_x (p0, z0, z4))
+
+/*
+** qrshl_s8_x_tied2:
+** sqrshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_s8_x_tied2, svint8_t, svint8_t,
+ z0_res = svqrshl_s8_x (p0, z4, z0),
+ z0_res = svqrshl_x (p0, z4, z0))
+
+/*
+** qrshl_s8_x_untied:
+** (
+** movprfx z0, z1
+** sqrshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0, z4
+** sqrshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_s8_x_untied, svint8_t, svint8_t,
+ z0 = svqrshl_s8_x (p0, z1, z4),
+ z0 = svqrshl_x (p0, z1, z4))
+
+/*
+** qrshl_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** sqrshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svqrshl_n_s8_x (p0, z0, x0),
+ z0 = svqrshl_x (p0, z0, x0))
+
+/*
+** qrshl_w0_s8_x_untied:
+** mov z0\.b, w0
+** sqrshlr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svqrshl_n_s8_x (p0, z1, x0),
+ z0 = svqrshl_x (p0, z1, x0))
+
+/*
+** qrshl_m8_s8_x:
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m8_s8_x, svint8_t,
+ z0 = svqrshl_n_s8_x (p0, z0, -8),
+ z0 = svqrshl_x (p0, z0, -8))
+
+/*
+** qrshl_m2_s8_x:
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_s8_x, svint8_t,
+ z0 = svqrshl_n_s8_x (p0, z0, -2),
+ z0 = svqrshl_x (p0, z0, -2))
+
+/*
+** qrshl_m1_s8_x_tied1:
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s8_x_tied1, svint8_t,
+ z0 = svqrshl_n_s8_x (p0, z0, -1),
+ z0 = svqrshl_x (p0, z0, -1))
+
+/*
+** qrshl_m1_s8_x_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_s8_x_untied, svint8_t,
+ z0 = svqrshl_n_s8_x (p0, z1, -1),
+ z0 = svqrshl_x (p0, z1, -1))
+
+/*
+** qrshl_1_s8_x_tied1:
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s8_x_tied1, svint8_t,
+ z0 = svqrshl_n_s8_x (p0, z0, 1),
+ z0 = svqrshl_x (p0, z0, 1))
+
+/*
+** qrshl_1_s8_x_untied:
+** movprfx z0, z1
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_s8_x_untied, svint8_t,
+ z0 = svqrshl_n_s8_x (p0, z1, 1),
+ z0 = svqrshl_x (p0, z1, 1))
+
+/*
+** qrshl_2_s8_x:
+** sqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_s8_x, svint8_t,
+ z0 = svqrshl_n_s8_x (p0, z0, 2),
+ z0 = svqrshl_x (p0, z0, 2))
+
+/*
+** qrshl_7_s8_x:
+** sqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_7_s8_x, svint8_t,
+ z0 = svqrshl_n_s8_x (p0, z0, 7),
+ z0 = svqrshl_x (p0, z0, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshl_u16_m_tied1:
+** uqrshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qrshl_u16_m_tied1, svuint16_t, svint16_t,
+ z0 = svqrshl_u16_m (p0, z0, z4),
+ z0 = svqrshl_m (p0, z0, z4))
+
+/*
+** qrshl_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uqrshl z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u16_m_tied2, svuint16_t, svint16_t,
+ z0_res = svqrshl_u16_m (p0, z4, z0),
+ z0_res = svqrshl_m (p0, z4, z0))
+
+/*
+** qrshl_u16_m_untied:
+** movprfx z0, z1
+** uqrshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qrshl_u16_m_untied, svuint16_t, svint16_t,
+ z0 = svqrshl_u16_m (p0, z1, z4),
+ z0 = svqrshl_m (p0, z1, z4))
+
+/*
+** qrshl_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** uqrshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u16_m_tied1, svuint16_t, int16_t,
+ z0 = svqrshl_n_u16_m (p0, z0, x0),
+ z0 = svqrshl_m (p0, z0, x0))
+
+/*
+** qrshl_w0_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uqrshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u16_m_untied, svuint16_t, int16_t,
+ z0 = svqrshl_n_u16_m (p0, z1, x0),
+ z0 = svqrshl_m (p0, z1, x0))
+
+/*
+** qrshl_m16_u16_m:
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m16_u16_m, svuint16_t,
+ z0 = svqrshl_n_u16_m (p0, z0, -16),
+ z0 = svqrshl_m (p0, z0, -16))
+
+/*
+** qrshl_m2_u16_m:
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u16_m, svuint16_t,
+ z0 = svqrshl_n_u16_m (p0, z0, -2),
+ z0 = svqrshl_m (p0, z0, -2))
+
+/*
+** qrshl_m1_u16_m_tied1:
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u16_m_tied1, svuint16_t,
+ z0 = svqrshl_n_u16_m (p0, z0, -1),
+ z0 = svqrshl_m (p0, z0, -1))
+
+/*
+** qrshl_m1_u16_m_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u16_m_untied, svuint16_t,
+ z0 = svqrshl_n_u16_m (p0, z1, -1),
+ z0 = svqrshl_m (p0, z1, -1))
+
+/*
+** qrshl_1_u16_m_tied1:
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u16_m_tied1, svuint16_t,
+ z0 = svqrshl_n_u16_m (p0, z0, 1),
+ z0 = svqrshl_m (p0, z0, 1))
+
+/*
+** qrshl_1_u16_m_untied:
+** movprfx z0, z1
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u16_m_untied, svuint16_t,
+ z0 = svqrshl_n_u16_m (p0, z1, 1),
+ z0 = svqrshl_m (p0, z1, 1))
+
+/*
+** qrshl_2_u16_m:
+** uqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u16_m, svuint16_t,
+ z0 = svqrshl_n_u16_m (p0, z0, 2),
+ z0 = svqrshl_m (p0, z0, 2))
+
+/*
+** qrshl_15_u16_m:
+** uqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_15_u16_m, svuint16_t,
+ z0 = svqrshl_n_u16_m (p0, z0, 15),
+ z0 = svqrshl_m (p0, z0, 15))
+
+/*
+** qrshl_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uqrshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qrshl_u16_z_tied1, svuint16_t, svint16_t,
+ z0 = svqrshl_u16_z (p0, z0, z4),
+ z0 = svqrshl_z (p0, z0, z4))
+
+/*
+** qrshl_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** uqrshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u16_z_tied2, svuint16_t, svint16_t,
+ z0_res = svqrshl_u16_z (p0, z4, z0),
+ z0_res = svqrshl_z (p0, z4, z0))
+
+/*
+** qrshl_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqrshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0\.h, p0/z, z4\.h
+** uqrshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_u16_z_untied, svuint16_t, svint16_t,
+ z0 = svqrshl_u16_z (p0, z1, z4),
+ z0 = svqrshl_z (p0, z1, z4))
+
+/*
+** qrshl_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** uqrshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u16_z_tied1, svuint16_t, int16_t,
+ z0 = svqrshl_n_u16_z (p0, z0, x0),
+ z0 = svqrshl_z (p0, z0, x0))
+
+/*
+** qrshl_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqrshl z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uqrshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u16_z_untied, svuint16_t, int16_t,
+ z0 = svqrshl_n_u16_z (p0, z1, x0),
+ z0 = svqrshl_z (p0, z1, x0))
+
+/*
+** qrshl_m16_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m16_u16_z, svuint16_t,
+ z0 = svqrshl_n_u16_z (p0, z0, -16),
+ z0 = svqrshl_z (p0, z0, -16))
+
+/*
+** qrshl_m2_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u16_z, svuint16_t,
+ z0 = svqrshl_n_u16_z (p0, z0, -2),
+ z0 = svqrshl_z (p0, z0, -2))
+
+/*
+** qrshl_m1_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u16_z_tied1, svuint16_t,
+ z0 = svqrshl_n_u16_z (p0, z0, -1),
+ z0 = svqrshl_z (p0, z0, -1))
+
+/*
+** qrshl_m1_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u16_z_untied, svuint16_t,
+ z0 = svqrshl_n_u16_z (p0, z1, -1),
+ z0 = svqrshl_z (p0, z1, -1))
+
+/*
+** qrshl_1_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u16_z_tied1, svuint16_t,
+ z0 = svqrshl_n_u16_z (p0, z0, 1),
+ z0 = svqrshl_z (p0, z0, 1))
+
+/*
+** qrshl_1_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u16_z_untied, svuint16_t,
+ z0 = svqrshl_n_u16_z (p0, z1, 1),
+ z0 = svqrshl_z (p0, z1, 1))
+
+/*
+** qrshl_2_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** uqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u16_z, svuint16_t,
+ z0 = svqrshl_n_u16_z (p0, z0, 2),
+ z0 = svqrshl_z (p0, z0, 2))
+
+/*
+** qrshl_15_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** uqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_15_u16_z, svuint16_t,
+ z0 = svqrshl_n_u16_z (p0, z0, 15),
+ z0 = svqrshl_z (p0, z0, 15))
+
+/*
+** qrshl_u16_x_tied1:
+** uqrshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qrshl_u16_x_tied1, svuint16_t, svint16_t,
+ z0 = svqrshl_u16_x (p0, z0, z4),
+ z0 = svqrshl_x (p0, z0, z4))
+
+/*
+** qrshl_u16_x_tied2:
+** uqrshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u16_x_tied2, svuint16_t, svint16_t,
+ z0_res = svqrshl_u16_x (p0, z4, z0),
+ z0_res = svqrshl_x (p0, z4, z0))
+
+/*
+** qrshl_u16_x_untied:
+** (
+** movprfx z0, z1
+** uqrshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0, z4
+** uqrshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_u16_x_untied, svuint16_t, svint16_t,
+ z0 = svqrshl_u16_x (p0, z1, z4),
+ z0 = svqrshl_x (p0, z1, z4))
+
+/*
+** qrshl_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** uqrshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u16_x_tied1, svuint16_t, int16_t,
+ z0 = svqrshl_n_u16_x (p0, z0, x0),
+ z0 = svqrshl_x (p0, z0, x0))
+
+/*
+** qrshl_w0_u16_x_untied:
+** mov z0\.h, w0
+** uqrshlr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u16_x_untied, svuint16_t, int16_t,
+ z0 = svqrshl_n_u16_x (p0, z1, x0),
+ z0 = svqrshl_x (p0, z1, x0))
+
+/*
+** qrshl_m16_u16_x:
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m16_u16_x, svuint16_t,
+ z0 = svqrshl_n_u16_x (p0, z0, -16),
+ z0 = svqrshl_x (p0, z0, -16))
+
+/*
+** qrshl_m2_u16_x:
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u16_x, svuint16_t,
+ z0 = svqrshl_n_u16_x (p0, z0, -2),
+ z0 = svqrshl_x (p0, z0, -2))
+
+/*
+** qrshl_m1_u16_x_tied1:
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u16_x_tied1, svuint16_t,
+ z0 = svqrshl_n_u16_x (p0, z0, -1),
+ z0 = svqrshl_x (p0, z0, -1))
+
+/*
+** qrshl_m1_u16_x_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u16_x_untied, svuint16_t,
+ z0 = svqrshl_n_u16_x (p0, z1, -1),
+ z0 = svqrshl_x (p0, z1, -1))
+
+/*
+** qrshl_1_u16_x_tied1:
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u16_x_tied1, svuint16_t,
+ z0 = svqrshl_n_u16_x (p0, z0, 1),
+ z0 = svqrshl_x (p0, z0, 1))
+
+/*
+** qrshl_1_u16_x_untied:
+** movprfx z0, z1
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u16_x_untied, svuint16_t,
+ z0 = svqrshl_n_u16_x (p0, z1, 1),
+ z0 = svqrshl_x (p0, z1, 1))
+
+/*
+** qrshl_2_u16_x:
+** uqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u16_x, svuint16_t,
+ z0 = svqrshl_n_u16_x (p0, z0, 2),
+ z0 = svqrshl_x (p0, z0, 2))
+
+/*
+** qrshl_15_u16_x:
+** uqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_15_u16_x, svuint16_t,
+ z0 = svqrshl_n_u16_x (p0, z0, 15),
+ z0 = svqrshl_x (p0, z0, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshl_u32_m_tied1:
+** uqrshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qrshl_u32_m_tied1, svuint32_t, svint32_t,
+ z0 = svqrshl_u32_m (p0, z0, z4),
+ z0 = svqrshl_m (p0, z0, z4))
+
+/*
+** qrshl_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uqrshl z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u32_m_tied2, svuint32_t, svint32_t,
+ z0_res = svqrshl_u32_m (p0, z4, z0),
+ z0_res = svqrshl_m (p0, z4, z0))
+
+/*
+** qrshl_u32_m_untied:
+** movprfx z0, z1
+** uqrshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qrshl_u32_m_untied, svuint32_t, svint32_t,
+ z0 = svqrshl_u32_m (p0, z1, z4),
+ z0 = svqrshl_m (p0, z1, z4))
+
+/*
+** qrshl_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** uqrshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u32_m_tied1, svuint32_t, int32_t,
+ z0 = svqrshl_n_u32_m (p0, z0, x0),
+ z0 = svqrshl_m (p0, z0, x0))
+
+/*
+** qrshl_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uqrshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u32_m_untied, svuint32_t, int32_t,
+ z0 = svqrshl_n_u32_m (p0, z1, x0),
+ z0 = svqrshl_m (p0, z1, x0))
+
+/*
+** qrshl_m32_u32_m:
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m32_u32_m, svuint32_t,
+ z0 = svqrshl_n_u32_m (p0, z0, -32),
+ z0 = svqrshl_m (p0, z0, -32))
+
+/*
+** qrshl_m2_u32_m:
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u32_m, svuint32_t,
+ z0 = svqrshl_n_u32_m (p0, z0, -2),
+ z0 = svqrshl_m (p0, z0, -2))
+
+/*
+** qrshl_m1_u32_m_tied1:
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u32_m_tied1, svuint32_t,
+ z0 = svqrshl_n_u32_m (p0, z0, -1),
+ z0 = svqrshl_m (p0, z0, -1))
+
+/*
+** qrshl_m1_u32_m_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u32_m_untied, svuint32_t,
+ z0 = svqrshl_n_u32_m (p0, z1, -1),
+ z0 = svqrshl_m (p0, z1, -1))
+
+/*
+** qrshl_1_u32_m_tied1:
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u32_m_tied1, svuint32_t,
+ z0 = svqrshl_n_u32_m (p0, z0, 1),
+ z0 = svqrshl_m (p0, z0, 1))
+
+/*
+** qrshl_1_u32_m_untied:
+** movprfx z0, z1
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u32_m_untied, svuint32_t,
+ z0 = svqrshl_n_u32_m (p0, z1, 1),
+ z0 = svqrshl_m (p0, z1, 1))
+
+/*
+** qrshl_2_u32_m:
+** uqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u32_m, svuint32_t,
+ z0 = svqrshl_n_u32_m (p0, z0, 2),
+ z0 = svqrshl_m (p0, z0, 2))
+
+/*
+** qrshl_31_u32_m:
+** uqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_31_u32_m, svuint32_t,
+ z0 = svqrshl_n_u32_m (p0, z0, 31),
+ z0 = svqrshl_m (p0, z0, 31))
+
+/*
+** qrshl_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uqrshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qrshl_u32_z_tied1, svuint32_t, svint32_t,
+ z0 = svqrshl_u32_z (p0, z0, z4),
+ z0 = svqrshl_z (p0, z0, z4))
+
+/*
+** qrshl_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** uqrshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u32_z_tied2, svuint32_t, svint32_t,
+ z0_res = svqrshl_u32_z (p0, z4, z0),
+ z0_res = svqrshl_z (p0, z4, z0))
+
+/*
+** qrshl_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqrshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0\.s, p0/z, z4\.s
+** uqrshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_u32_z_untied, svuint32_t, svint32_t,
+ z0 = svqrshl_u32_z (p0, z1, z4),
+ z0 = svqrshl_z (p0, z1, z4))
+
+/*
+** qrshl_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** uqrshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u32_z_tied1, svuint32_t, int32_t,
+ z0 = svqrshl_n_u32_z (p0, z0, x0),
+ z0 = svqrshl_z (p0, z0, x0))
+
+/*
+** qrshl_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqrshl z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uqrshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u32_z_untied, svuint32_t, int32_t,
+ z0 = svqrshl_n_u32_z (p0, z1, x0),
+ z0 = svqrshl_z (p0, z1, x0))
+
+/*
+** qrshl_m32_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m32_u32_z, svuint32_t,
+ z0 = svqrshl_n_u32_z (p0, z0, -32),
+ z0 = svqrshl_z (p0, z0, -32))
+
+/*
+** qrshl_m2_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u32_z, svuint32_t,
+ z0 = svqrshl_n_u32_z (p0, z0, -2),
+ z0 = svqrshl_z (p0, z0, -2))
+
+/*
+** qrshl_m1_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u32_z_tied1, svuint32_t,
+ z0 = svqrshl_n_u32_z (p0, z0, -1),
+ z0 = svqrshl_z (p0, z0, -1))
+
+/*
+** qrshl_m1_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u32_z_untied, svuint32_t,
+ z0 = svqrshl_n_u32_z (p0, z1, -1),
+ z0 = svqrshl_z (p0, z1, -1))
+
+/*
+** qrshl_1_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u32_z_tied1, svuint32_t,
+ z0 = svqrshl_n_u32_z (p0, z0, 1),
+ z0 = svqrshl_z (p0, z0, 1))
+
+/*
+** qrshl_1_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u32_z_untied, svuint32_t,
+ z0 = svqrshl_n_u32_z (p0, z1, 1),
+ z0 = svqrshl_z (p0, z1, 1))
+
+/*
+** qrshl_2_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** uqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u32_z, svuint32_t,
+ z0 = svqrshl_n_u32_z (p0, z0, 2),
+ z0 = svqrshl_z (p0, z0, 2))
+
+/*
+** qrshl_31_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** uqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_31_u32_z, svuint32_t,
+ z0 = svqrshl_n_u32_z (p0, z0, 31),
+ z0 = svqrshl_z (p0, z0, 31))
+
+/*
+** qrshl_u32_x_tied1:
+** uqrshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qrshl_u32_x_tied1, svuint32_t, svint32_t,
+ z0 = svqrshl_u32_x (p0, z0, z4),
+ z0 = svqrshl_x (p0, z0, z4))
+
+/*
+** qrshl_u32_x_tied2:
+** uqrshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u32_x_tied2, svuint32_t, svint32_t,
+ z0_res = svqrshl_u32_x (p0, z4, z0),
+ z0_res = svqrshl_x (p0, z4, z0))
+
+/*
+** qrshl_u32_x_untied:
+** (
+** movprfx z0, z1
+** uqrshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0, z4
+** uqrshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_u32_x_untied, svuint32_t, svint32_t,
+ z0 = svqrshl_u32_x (p0, z1, z4),
+ z0 = svqrshl_x (p0, z1, z4))
+
+/*
+** qrshl_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** uqrshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u32_x_tied1, svuint32_t, int32_t,
+ z0 = svqrshl_n_u32_x (p0, z0, x0),
+ z0 = svqrshl_x (p0, z0, x0))
+
+/*
+** qrshl_w0_u32_x_untied:
+** mov z0\.s, w0
+** uqrshlr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u32_x_untied, svuint32_t, int32_t,
+ z0 = svqrshl_n_u32_x (p0, z1, x0),
+ z0 = svqrshl_x (p0, z1, x0))
+
+/*
+** qrshl_m32_u32_x:
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m32_u32_x, svuint32_t,
+ z0 = svqrshl_n_u32_x (p0, z0, -32),
+ z0 = svqrshl_x (p0, z0, -32))
+
+/*
+** qrshl_m2_u32_x:
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u32_x, svuint32_t,
+ z0 = svqrshl_n_u32_x (p0, z0, -2),
+ z0 = svqrshl_x (p0, z0, -2))
+
+/*
+** qrshl_m1_u32_x_tied1:
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u32_x_tied1, svuint32_t,
+ z0 = svqrshl_n_u32_x (p0, z0, -1),
+ z0 = svqrshl_x (p0, z0, -1))
+
+/*
+** qrshl_m1_u32_x_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u32_x_untied, svuint32_t,
+ z0 = svqrshl_n_u32_x (p0, z1, -1),
+ z0 = svqrshl_x (p0, z1, -1))
+
+/*
+** qrshl_1_u32_x_tied1:
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u32_x_tied1, svuint32_t,
+ z0 = svqrshl_n_u32_x (p0, z0, 1),
+ z0 = svqrshl_x (p0, z0, 1))
+
+/*
+** qrshl_1_u32_x_untied:
+** movprfx z0, z1
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u32_x_untied, svuint32_t,
+ z0 = svqrshl_n_u32_x (p0, z1, 1),
+ z0 = svqrshl_x (p0, z1, 1))
+
+/*
+** qrshl_2_u32_x:
+** uqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u32_x, svuint32_t,
+ z0 = svqrshl_n_u32_x (p0, z0, 2),
+ z0 = svqrshl_x (p0, z0, 2))
+
+/*
+** qrshl_31_u32_x:
+** uqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_31_u32_x, svuint32_t,
+ z0 = svqrshl_n_u32_x (p0, z0, 31),
+ z0 = svqrshl_x (p0, z0, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshl_u64_m_tied1:
+** uqrshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qrshl_u64_m_tied1, svuint64_t, svint64_t,
+ z0 = svqrshl_u64_m (p0, z0, z4),
+ z0 = svqrshl_m (p0, z0, z4))
+
+/*
+** qrshl_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** uqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u64_m_tied2, svuint64_t, svint64_t,
+ z0_res = svqrshl_u64_m (p0, z4, z0),
+ z0_res = svqrshl_m (p0, z4, z0))
+
+/*
+** qrshl_u64_m_untied:
+** movprfx z0, z1
+** uqrshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qrshl_u64_m_untied, svuint64_t, svint64_t,
+ z0 = svqrshl_u64_m (p0, z1, z4),
+ z0 = svqrshl_m (p0, z1, z4))
+
+/*
+** qrshl_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** uqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_u64_m_tied1, svuint64_t, int64_t,
+ z0 = svqrshl_n_u64_m (p0, z0, x0),
+ z0 = svqrshl_m (p0, z0, x0))
+
+/*
+** qrshl_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** uqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_u64_m_untied, svuint64_t, int64_t,
+ z0 = svqrshl_n_u64_m (p0, z1, x0),
+ z0 = svqrshl_m (p0, z1, x0))
+
+/*
+** qrshl_m64_u64_m:
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m64_u64_m, svuint64_t,
+ z0 = svqrshl_n_u64_m (p0, z0, -64),
+ z0 = svqrshl_m (p0, z0, -64))
+
+/*
+** qrshl_m2_u64_m:
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u64_m, svuint64_t,
+ z0 = svqrshl_n_u64_m (p0, z0, -2),
+ z0 = svqrshl_m (p0, z0, -2))
+
+/*
+** qrshl_m1_u64_m_tied1:
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u64_m_tied1, svuint64_t,
+ z0 = svqrshl_n_u64_m (p0, z0, -1),
+ z0 = svqrshl_m (p0, z0, -1))
+
+/*
+** qrshl_m1_u64_m_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u64_m_untied, svuint64_t,
+ z0 = svqrshl_n_u64_m (p0, z1, -1),
+ z0 = svqrshl_m (p0, z1, -1))
+
+/*
+** qrshl_1_u64_m_tied1:
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u64_m_tied1, svuint64_t,
+ z0 = svqrshl_n_u64_m (p0, z0, 1),
+ z0 = svqrshl_m (p0, z0, 1))
+
+/*
+** qrshl_1_u64_m_untied:
+** movprfx z0, z1
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u64_m_untied, svuint64_t,
+ z0 = svqrshl_n_u64_m (p0, z1, 1),
+ z0 = svqrshl_m (p0, z1, 1))
+
+/*
+** qrshl_2_u64_m:
+** uqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u64_m, svuint64_t,
+ z0 = svqrshl_n_u64_m (p0, z0, 2),
+ z0 = svqrshl_m (p0, z0, 2))
+
+/*
+** qrshl_63_u64_m:
+** uqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_63_u64_m, svuint64_t,
+ z0 = svqrshl_n_u64_m (p0, z0, 63),
+ z0 = svqrshl_m (p0, z0, 63))
+
+/*
+** qrshl_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uqrshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qrshl_u64_z_tied1, svuint64_t, svint64_t,
+ z0 = svqrshl_u64_z (p0, z0, z4),
+ z0 = svqrshl_z (p0, z0, z4))
+
+/*
+** qrshl_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** uqrshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u64_z_tied2, svuint64_t, svint64_t,
+ z0_res = svqrshl_u64_z (p0, z4, z0),
+ z0_res = svqrshl_z (p0, z4, z0))
+
+/*
+** qrshl_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqrshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0\.d, p0/z, z4\.d
+** uqrshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_u64_z_untied, svuint64_t, svint64_t,
+ z0 = svqrshl_u64_z (p0, z1, z4),
+ z0 = svqrshl_z (p0, z1, z4))
+
+/*
+** qrshl_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** uqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_u64_z_tied1, svuint64_t, int64_t,
+ z0 = svqrshl_n_u64_z (p0, z0, x0),
+ z0 = svqrshl_z (p0, z0, x0))
+
+/*
+** qrshl_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqrshl z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uqrshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_u64_z_untied, svuint64_t, int64_t,
+ z0 = svqrshl_n_u64_z (p0, z1, x0),
+ z0 = svqrshl_z (p0, z1, x0))
+
+/*
+** qrshl_m64_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m64_u64_z, svuint64_t,
+ z0 = svqrshl_n_u64_z (p0, z0, -64),
+ z0 = svqrshl_z (p0, z0, -64))
+
+/*
+** qrshl_m2_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u64_z, svuint64_t,
+ z0 = svqrshl_n_u64_z (p0, z0, -2),
+ z0 = svqrshl_z (p0, z0, -2))
+
+/*
+** qrshl_m1_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u64_z_tied1, svuint64_t,
+ z0 = svqrshl_n_u64_z (p0, z0, -1),
+ z0 = svqrshl_z (p0, z0, -1))
+
+/*
+** qrshl_m1_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u64_z_untied, svuint64_t,
+ z0 = svqrshl_n_u64_z (p0, z1, -1),
+ z0 = svqrshl_z (p0, z1, -1))
+
+/*
+** qrshl_1_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u64_z_tied1, svuint64_t,
+ z0 = svqrshl_n_u64_z (p0, z0, 1),
+ z0 = svqrshl_z (p0, z0, 1))
+
+/*
+** qrshl_1_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u64_z_untied, svuint64_t,
+ z0 = svqrshl_n_u64_z (p0, z1, 1),
+ z0 = svqrshl_z (p0, z1, 1))
+
+/*
+** qrshl_2_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** uqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u64_z, svuint64_t,
+ z0 = svqrshl_n_u64_z (p0, z0, 2),
+ z0 = svqrshl_z (p0, z0, 2))
+
+/*
+** qrshl_63_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** uqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_63_u64_z, svuint64_t,
+ z0 = svqrshl_n_u64_z (p0, z0, 63),
+ z0 = svqrshl_z (p0, z0, 63))
+
+/*
+** qrshl_u64_x_tied1:
+** uqrshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qrshl_u64_x_tied1, svuint64_t, svint64_t,
+ z0 = svqrshl_u64_x (p0, z0, z4),
+ z0 = svqrshl_x (p0, z0, z4))
+
+/*
+** qrshl_u64_x_tied2:
+** uqrshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u64_x_tied2, svuint64_t, svint64_t,
+ z0_res = svqrshl_u64_x (p0, z4, z0),
+ z0_res = svqrshl_x (p0, z4, z0))
+
+/*
+** qrshl_u64_x_untied:
+** (
+** movprfx z0, z1
+** uqrshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0, z4
+** uqrshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_u64_x_untied, svuint64_t, svint64_t,
+ z0 = svqrshl_u64_x (p0, z1, z4),
+ z0 = svqrshl_x (p0, z1, z4))
+
+/*
+** qrshl_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** uqrshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_u64_x_tied1, svuint64_t, int64_t,
+ z0 = svqrshl_n_u64_x (p0, z0, x0),
+ z0 = svqrshl_x (p0, z0, x0))
+
+/*
+** qrshl_x0_u64_x_untied:
+** mov z0\.d, x0
+** uqrshlr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_x0_u64_x_untied, svuint64_t, int64_t,
+ z0 = svqrshl_n_u64_x (p0, z1, x0),
+ z0 = svqrshl_x (p0, z1, x0))
+
+/*
+** qrshl_m64_u64_x:
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m64_u64_x, svuint64_t,
+ z0 = svqrshl_n_u64_x (p0, z0, -64),
+ z0 = svqrshl_x (p0, z0, -64))
+
+/*
+** qrshl_m2_u64_x:
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u64_x, svuint64_t,
+ z0 = svqrshl_n_u64_x (p0, z0, -2),
+ z0 = svqrshl_x (p0, z0, -2))
+
+/*
+** qrshl_m1_u64_x_tied1:
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u64_x_tied1, svuint64_t,
+ z0 = svqrshl_n_u64_x (p0, z0, -1),
+ z0 = svqrshl_x (p0, z0, -1))
+
+/*
+** qrshl_m1_u64_x_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u64_x_untied, svuint64_t,
+ z0 = svqrshl_n_u64_x (p0, z1, -1),
+ z0 = svqrshl_x (p0, z1, -1))
+
+/*
+** qrshl_1_u64_x_tied1:
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u64_x_tied1, svuint64_t,
+ z0 = svqrshl_n_u64_x (p0, z0, 1),
+ z0 = svqrshl_x (p0, z0, 1))
+
+/*
+** qrshl_1_u64_x_untied:
+** movprfx z0, z1
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u64_x_untied, svuint64_t,
+ z0 = svqrshl_n_u64_x (p0, z1, 1),
+ z0 = svqrshl_x (p0, z1, 1))
+
+/*
+** qrshl_2_u64_x:
+** uqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u64_x, svuint64_t,
+ z0 = svqrshl_n_u64_x (p0, z0, 2),
+ z0 = svqrshl_x (p0, z0, 2))
+
+/*
+** qrshl_63_u64_x:
+** uqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_63_u64_x, svuint64_t,
+ z0 = svqrshl_n_u64_x (p0, z0, 63),
+ z0 = svqrshl_x (p0, z0, 63))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshl_u8_m_tied1:
+** uqrshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qrshl_u8_m_tied1, svuint8_t, svint8_t,
+ z0 = svqrshl_u8_m (p0, z0, z4),
+ z0 = svqrshl_m (p0, z0, z4))
+
+/*
+** qrshl_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uqrshl z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u8_m_tied2, svuint8_t, svint8_t,
+ z0_res = svqrshl_u8_m (p0, z4, z0),
+ z0_res = svqrshl_m (p0, z4, z0))
+
+/*
+** qrshl_u8_m_untied:
+** movprfx z0, z1
+** uqrshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qrshl_u8_m_untied, svuint8_t, svint8_t,
+ z0 = svqrshl_u8_m (p0, z1, z4),
+ z0 = svqrshl_m (p0, z1, z4))
+
+/*
+** qrshl_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** uqrshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u8_m_tied1, svuint8_t, int8_t,
+ z0 = svqrshl_n_u8_m (p0, z0, x0),
+ z0 = svqrshl_m (p0, z0, x0))
+
+/*
+** qrshl_w0_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uqrshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u8_m_untied, svuint8_t, int8_t,
+ z0 = svqrshl_n_u8_m (p0, z1, x0),
+ z0 = svqrshl_m (p0, z1, x0))
+
+/*
+** qrshl_m8_u8_m:
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m8_u8_m, svuint8_t,
+ z0 = svqrshl_n_u8_m (p0, z0, -8),
+ z0 = svqrshl_m (p0, z0, -8))
+
+/*
+** qrshl_m2_u8_m:
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u8_m, svuint8_t,
+ z0 = svqrshl_n_u8_m (p0, z0, -2),
+ z0 = svqrshl_m (p0, z0, -2))
+
+/*
+** qrshl_m1_u8_m_tied1:
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u8_m_tied1, svuint8_t,
+ z0 = svqrshl_n_u8_m (p0, z0, -1),
+ z0 = svqrshl_m (p0, z0, -1))
+
+/*
+** qrshl_m1_u8_m_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u8_m_untied, svuint8_t,
+ z0 = svqrshl_n_u8_m (p0, z1, -1),
+ z0 = svqrshl_m (p0, z1, -1))
+
+/*
+** qrshl_1_u8_m_tied1:
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u8_m_tied1, svuint8_t,
+ z0 = svqrshl_n_u8_m (p0, z0, 1),
+ z0 = svqrshl_m (p0, z0, 1))
+
+/*
+** qrshl_1_u8_m_untied:
+** movprfx z0, z1
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u8_m_untied, svuint8_t,
+ z0 = svqrshl_n_u8_m (p0, z1, 1),
+ z0 = svqrshl_m (p0, z1, 1))
+
+/*
+** qrshl_2_u8_m:
+** uqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u8_m, svuint8_t,
+ z0 = svqrshl_n_u8_m (p0, z0, 2),
+ z0 = svqrshl_m (p0, z0, 2))
+
+/*
+** qrshl_7_u8_m:
+** uqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_7_u8_m, svuint8_t,
+ z0 = svqrshl_n_u8_m (p0, z0, 7),
+ z0 = svqrshl_m (p0, z0, 7))
+
+/*
+** qrshl_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uqrshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qrshl_u8_z_tied1, svuint8_t, svint8_t,
+ z0 = svqrshl_u8_z (p0, z0, z4),
+ z0 = svqrshl_z (p0, z0, z4))
+
+/*
+** qrshl_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** uqrshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u8_z_tied2, svuint8_t, svint8_t,
+ z0_res = svqrshl_u8_z (p0, z4, z0),
+ z0_res = svqrshl_z (p0, z4, z0))
+
+/*
+** qrshl_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqrshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0\.b, p0/z, z4\.b
+** uqrshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_u8_z_untied, svuint8_t, svint8_t,
+ z0 = svqrshl_u8_z (p0, z1, z4),
+ z0 = svqrshl_z (p0, z1, z4))
+
+/*
+** qrshl_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** uqrshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u8_z_tied1, svuint8_t, int8_t,
+ z0 = svqrshl_n_u8_z (p0, z0, x0),
+ z0 = svqrshl_z (p0, z0, x0))
+
+/*
+** qrshl_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqrshl z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uqrshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u8_z_untied, svuint8_t, int8_t,
+ z0 = svqrshl_n_u8_z (p0, z1, x0),
+ z0 = svqrshl_z (p0, z1, x0))
+
+/*
+** qrshl_m8_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m8_u8_z, svuint8_t,
+ z0 = svqrshl_n_u8_z (p0, z0, -8),
+ z0 = svqrshl_z (p0, z0, -8))
+
+/*
+** qrshl_m2_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u8_z, svuint8_t,
+ z0 = svqrshl_n_u8_z (p0, z0, -2),
+ z0 = svqrshl_z (p0, z0, -2))
+
+/*
+** qrshl_m1_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u8_z_tied1, svuint8_t,
+ z0 = svqrshl_n_u8_z (p0, z0, -1),
+ z0 = svqrshl_z (p0, z0, -1))
+
+/*
+** qrshl_m1_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u8_z_untied, svuint8_t,
+ z0 = svqrshl_n_u8_z (p0, z1, -1),
+ z0 = svqrshl_z (p0, z1, -1))
+
+/*
+** qrshl_1_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u8_z_tied1, svuint8_t,
+ z0 = svqrshl_n_u8_z (p0, z0, 1),
+ z0 = svqrshl_z (p0, z0, 1))
+
+/*
+** qrshl_1_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u8_z_untied, svuint8_t,
+ z0 = svqrshl_n_u8_z (p0, z1, 1),
+ z0 = svqrshl_z (p0, z1, 1))
+
+/*
+** qrshl_2_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** uqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u8_z, svuint8_t,
+ z0 = svqrshl_n_u8_z (p0, z0, 2),
+ z0 = svqrshl_z (p0, z0, 2))
+
+/*
+** qrshl_7_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** uqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_7_u8_z, svuint8_t,
+ z0 = svqrshl_n_u8_z (p0, z0, 7),
+ z0 = svqrshl_z (p0, z0, 7))
+
+/*
+** qrshl_u8_x_tied1:
+** uqrshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qrshl_u8_x_tied1, svuint8_t, svint8_t,
+ z0 = svqrshl_u8_x (p0, z0, z4),
+ z0 = svqrshl_x (p0, z0, z4))
+
+/*
+** qrshl_u8_x_tied2:
+** uqrshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qrshl_u8_x_tied2, svuint8_t, svint8_t,
+ z0_res = svqrshl_u8_x (p0, z4, z0),
+ z0_res = svqrshl_x (p0, z4, z0))
+
+/*
+** qrshl_u8_x_untied:
+** (
+** movprfx z0, z1
+** uqrshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0, z4
+** uqrshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshl_u8_x_untied, svuint8_t, svint8_t,
+ z0 = svqrshl_u8_x (p0, z1, z4),
+ z0 = svqrshl_x (p0, z1, z4))
+
+/*
+** qrshl_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** uqrshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u8_x_tied1, svuint8_t, int8_t,
+ z0 = svqrshl_n_u8_x (p0, z0, x0),
+ z0 = svqrshl_x (p0, z0, x0))
+
+/*
+** qrshl_w0_u8_x_untied:
+** mov z0\.b, w0
+** uqrshlr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (qrshl_w0_u8_x_untied, svuint8_t, int8_t,
+ z0 = svqrshl_n_u8_x (p0, z1, x0),
+ z0 = svqrshl_x (p0, z1, x0))
+
+/*
+** qrshl_m8_u8_x:
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m8_u8_x, svuint8_t,
+ z0 = svqrshl_n_u8_x (p0, z0, -8),
+ z0 = svqrshl_x (p0, z0, -8))
+
+/*
+** qrshl_m2_u8_x:
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m2_u8_x, svuint8_t,
+ z0 = svqrshl_n_u8_x (p0, z0, -2),
+ z0 = svqrshl_x (p0, z0, -2))
+
+/*
+** qrshl_m1_u8_x_tied1:
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u8_x_tied1, svuint8_t,
+ z0 = svqrshl_n_u8_x (p0, z0, -1),
+ z0 = svqrshl_x (p0, z0, -1))
+
+/*
+** qrshl_m1_u8_x_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_m1_u8_x_untied, svuint8_t,
+ z0 = svqrshl_n_u8_x (p0, z1, -1),
+ z0 = svqrshl_x (p0, z1, -1))
+
+/*
+** qrshl_1_u8_x_tied1:
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u8_x_tied1, svuint8_t,
+ z0 = svqrshl_n_u8_x (p0, z0, 1),
+ z0 = svqrshl_x (p0, z0, 1))
+
+/*
+** qrshl_1_u8_x_untied:
+** movprfx z0, z1
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_1_u8_x_untied, svuint8_t,
+ z0 = svqrshl_n_u8_x (p0, z1, 1),
+ z0 = svqrshl_x (p0, z1, 1))
+
+/*
+** qrshl_2_u8_x:
+** uqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_2_u8_x, svuint8_t,
+ z0 = svqrshl_n_u8_x (p0, z0, 2),
+ z0 = svqrshl_x (p0, z0, 2))
+
+/*
+** qrshl_7_u8_x:
+** uqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qrshl_7_u8_x, svuint8_t,
+ z0 = svqrshl_n_u8_x (p0, z0, 7),
+ z0 = svqrshl_x (p0, z0, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnb_1_s16:
+** sqrshrnb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_1_s16, svint8_t, svint16_t,
+ z0_res = svqrshrnb_n_s16 (z0, 1),
+ z0_res = svqrshrnb (z0, 1))
+
+/*
+** qrshrnb_2_s16:
+** sqrshrnb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_2_s16, svint8_t, svint16_t,
+ z0_res = svqrshrnb_n_s16 (z0, 2),
+ z0_res = svqrshrnb (z0, 2))
+
+/*
+** qrshrnb_8_s16_tied1:
+** sqrshrnb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_8_s16_tied1, svint8_t, svint16_t,
+ z0_res = svqrshrnb_n_s16 (z0, 8),
+ z0_res = svqrshrnb (z0, 8))
+
+/*
+** qrshrnb_8_s16_untied:
+** sqrshrnb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_8_s16_untied, svint8_t, svint16_t,
+ z0_res = svqrshrnb_n_s16 (z1, 8),
+ z0_res = svqrshrnb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnb_1_s32:
+** sqrshrnb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_1_s32, svint16_t, svint32_t,
+ z0_res = svqrshrnb_n_s32 (z0, 1),
+ z0_res = svqrshrnb (z0, 1))
+
+/*
+** qrshrnb_2_s32:
+** sqrshrnb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_2_s32, svint16_t, svint32_t,
+ z0_res = svqrshrnb_n_s32 (z0, 2),
+ z0_res = svqrshrnb (z0, 2))
+
+/*
+** qrshrnb_16_s32_tied1:
+** sqrshrnb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_16_s32_tied1, svint16_t, svint32_t,
+ z0_res = svqrshrnb_n_s32 (z0, 16),
+ z0_res = svqrshrnb (z0, 16))
+
+/*
+** qrshrnb_16_s32_untied:
+** sqrshrnb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_16_s32_untied, svint16_t, svint32_t,
+ z0_res = svqrshrnb_n_s32 (z1, 16),
+ z0_res = svqrshrnb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnb_1_s64:
+** sqrshrnb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_1_s64, svint32_t, svint64_t,
+ z0_res = svqrshrnb_n_s64 (z0, 1),
+ z0_res = svqrshrnb (z0, 1))
+
+/*
+** qrshrnb_2_s64:
+** sqrshrnb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_2_s64, svint32_t, svint64_t,
+ z0_res = svqrshrnb_n_s64 (z0, 2),
+ z0_res = svqrshrnb (z0, 2))
+
+/*
+** qrshrnb_32_s64_tied1:
+** sqrshrnb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_32_s64_tied1, svint32_t, svint64_t,
+ z0_res = svqrshrnb_n_s64 (z0, 32),
+ z0_res = svqrshrnb (z0, 32))
+
+/*
+** qrshrnb_32_s64_untied:
+** sqrshrnb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_32_s64_untied, svint32_t, svint64_t,
+ z0_res = svqrshrnb_n_s64 (z1, 32),
+ z0_res = svqrshrnb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnb_1_u16:
+** uqrshrnb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_1_u16, svuint8_t, svuint16_t,
+ z0_res = svqrshrnb_n_u16 (z0, 1),
+ z0_res = svqrshrnb (z0, 1))
+
+/*
+** qrshrnb_2_u16:
+** uqrshrnb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_2_u16, svuint8_t, svuint16_t,
+ z0_res = svqrshrnb_n_u16 (z0, 2),
+ z0_res = svqrshrnb (z0, 2))
+
+/*
+** qrshrnb_8_u16_tied1:
+** uqrshrnb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_8_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svqrshrnb_n_u16 (z0, 8),
+ z0_res = svqrshrnb (z0, 8))
+
+/*
+** qrshrnb_8_u16_untied:
+** uqrshrnb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_8_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svqrshrnb_n_u16 (z1, 8),
+ z0_res = svqrshrnb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnb_1_u32:
+** uqrshrnb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_1_u32, svuint16_t, svuint32_t,
+ z0_res = svqrshrnb_n_u32 (z0, 1),
+ z0_res = svqrshrnb (z0, 1))
+
+/*
+** qrshrnb_2_u32:
+** uqrshrnb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_2_u32, svuint16_t, svuint32_t,
+ z0_res = svqrshrnb_n_u32 (z0, 2),
+ z0_res = svqrshrnb (z0, 2))
+
+/*
+** qrshrnb_16_u32_tied1:
+** uqrshrnb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_16_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svqrshrnb_n_u32 (z0, 16),
+ z0_res = svqrshrnb (z0, 16))
+
+/*
+** qrshrnb_16_u32_untied:
+** uqrshrnb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_16_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svqrshrnb_n_u32 (z1, 16),
+ z0_res = svqrshrnb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnb_1_u64:
+** uqrshrnb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_1_u64, svuint32_t, svuint64_t,
+ z0_res = svqrshrnb_n_u64 (z0, 1),
+ z0_res = svqrshrnb (z0, 1))
+
+/*
+** qrshrnb_2_u64:
+** uqrshrnb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_2_u64, svuint32_t, svuint64_t,
+ z0_res = svqrshrnb_n_u64 (z0, 2),
+ z0_res = svqrshrnb (z0, 2))
+
+/*
+** qrshrnb_32_u64_tied1:
+** uqrshrnb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_32_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svqrshrnb_n_u64 (z0, 32),
+ z0_res = svqrshrnb (z0, 32))
+
+/*
+** qrshrnb_32_u64_untied:
+** uqrshrnb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrnb_32_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svqrshrnb_n_u64 (z1, 32),
+ z0_res = svqrshrnb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnt_1_s16:
+** sqrshrnt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_1_s16, svint8_t, svint16_t,
+ z0 = svqrshrnt_n_s16 (z0, z4, 1),
+ z0 = svqrshrnt (z0, z4, 1))
+
+/*
+** qrshrnt_2_s16:
+** sqrshrnt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_2_s16, svint8_t, svint16_t,
+ z0 = svqrshrnt_n_s16 (z0, z4, 2),
+ z0 = svqrshrnt (z0, z4, 2))
+
+/*
+** qrshrnt_8_s16_tied1:
+** sqrshrnt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_8_s16_tied1, svint8_t, svint16_t,
+ z0 = svqrshrnt_n_s16 (z0, z4, 8),
+ z0 = svqrshrnt (z0, z4, 8))
+
+/*
+** qrshrnt_8_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** sqrshrnt z0\.b, z4\.h, #8
+** |
+** sqrshrnt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_8_s16_untied, svint8_t, svint16_t,
+ z0 = svqrshrnt_n_s16 (z1, z4, 8),
+ z0 = svqrshrnt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnt_1_s32:
+** sqrshrnt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_1_s32, svint16_t, svint32_t,
+ z0 = svqrshrnt_n_s32 (z0, z4, 1),
+ z0 = svqrshrnt (z0, z4, 1))
+
+/*
+** qrshrnt_2_s32:
+** sqrshrnt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_2_s32, svint16_t, svint32_t,
+ z0 = svqrshrnt_n_s32 (z0, z4, 2),
+ z0 = svqrshrnt (z0, z4, 2))
+
+/*
+** qrshrnt_16_s32_tied1:
+** sqrshrnt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_16_s32_tied1, svint16_t, svint32_t,
+ z0 = svqrshrnt_n_s32 (z0, z4, 16),
+ z0 = svqrshrnt (z0, z4, 16))
+
+/*
+** qrshrnt_16_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** sqrshrnt z0\.h, z4\.s, #16
+** |
+** sqrshrnt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_16_s32_untied, svint16_t, svint32_t,
+ z0 = svqrshrnt_n_s32 (z1, z4, 16),
+ z0 = svqrshrnt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnt_1_s64:
+** sqrshrnt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_1_s64, svint32_t, svint64_t,
+ z0 = svqrshrnt_n_s64 (z0, z4, 1),
+ z0 = svqrshrnt (z0, z4, 1))
+
+/*
+** qrshrnt_2_s64:
+** sqrshrnt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_2_s64, svint32_t, svint64_t,
+ z0 = svqrshrnt_n_s64 (z0, z4, 2),
+ z0 = svqrshrnt (z0, z4, 2))
+
+/*
+** qrshrnt_32_s64_tied1:
+** sqrshrnt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_32_s64_tied1, svint32_t, svint64_t,
+ z0 = svqrshrnt_n_s64 (z0, z4, 32),
+ z0 = svqrshrnt (z0, z4, 32))
+
+/*
+** qrshrnt_32_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** sqrshrnt z0\.s, z4\.d, #32
+** |
+** sqrshrnt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_32_s64_untied, svint32_t, svint64_t,
+ z0 = svqrshrnt_n_s64 (z1, z4, 32),
+ z0 = svqrshrnt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnt_1_u16:
+** uqrshrnt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_1_u16, svuint8_t, svuint16_t,
+ z0 = svqrshrnt_n_u16 (z0, z4, 1),
+ z0 = svqrshrnt (z0, z4, 1))
+
+/*
+** qrshrnt_2_u16:
+** uqrshrnt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_2_u16, svuint8_t, svuint16_t,
+ z0 = svqrshrnt_n_u16 (z0, z4, 2),
+ z0 = svqrshrnt (z0, z4, 2))
+
+/*
+** qrshrnt_8_u16_tied1:
+** uqrshrnt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_8_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svqrshrnt_n_u16 (z0, z4, 8),
+ z0 = svqrshrnt (z0, z4, 8))
+
+/*
+** qrshrnt_8_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** uqrshrnt z0\.b, z4\.h, #8
+** |
+** uqrshrnt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_8_u16_untied, svuint8_t, svuint16_t,
+ z0 = svqrshrnt_n_u16 (z1, z4, 8),
+ z0 = svqrshrnt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnt_1_u32:
+** uqrshrnt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_1_u32, svuint16_t, svuint32_t,
+ z0 = svqrshrnt_n_u32 (z0, z4, 1),
+ z0 = svqrshrnt (z0, z4, 1))
+
+/*
+** qrshrnt_2_u32:
+** uqrshrnt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_2_u32, svuint16_t, svuint32_t,
+ z0 = svqrshrnt_n_u32 (z0, z4, 2),
+ z0 = svqrshrnt (z0, z4, 2))
+
+/*
+** qrshrnt_16_u32_tied1:
+** uqrshrnt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_16_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svqrshrnt_n_u32 (z0, z4, 16),
+ z0 = svqrshrnt (z0, z4, 16))
+
+/*
+** qrshrnt_16_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** uqrshrnt z0\.h, z4\.s, #16
+** |
+** uqrshrnt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_16_u32_untied, svuint16_t, svuint32_t,
+ z0 = svqrshrnt_n_u32 (z1, z4, 16),
+ z0 = svqrshrnt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrnt_1_u64:
+** uqrshrnt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_1_u64, svuint32_t, svuint64_t,
+ z0 = svqrshrnt_n_u64 (z0, z4, 1),
+ z0 = svqrshrnt (z0, z4, 1))
+
+/*
+** qrshrnt_2_u64:
+** uqrshrnt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_2_u64, svuint32_t, svuint64_t,
+ z0 = svqrshrnt_n_u64 (z0, z4, 2),
+ z0 = svqrshrnt (z0, z4, 2))
+
+/*
+** qrshrnt_32_u64_tied1:
+** uqrshrnt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_32_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svqrshrnt_n_u64 (z0, z4, 32),
+ z0 = svqrshrnt (z0, z4, 32))
+
+/*
+** qrshrnt_32_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** uqrshrnt z0\.s, z4\.d, #32
+** |
+** uqrshrnt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshrnt_32_u64_untied, svuint32_t, svuint64_t,
+ z0 = svqrshrnt_n_u64 (z1, z4, 32),
+ z0 = svqrshrnt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrunb_1_s16:
+** sqrshrunb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_1_s16, svuint8_t, svint16_t,
+ z0_res = svqrshrunb_n_s16 (z0, 1),
+ z0_res = svqrshrunb (z0, 1))
+
+/*
+** qrshrunb_2_s16:
+** sqrshrunb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_2_s16, svuint8_t, svint16_t,
+ z0_res = svqrshrunb_n_s16 (z0, 2),
+ z0_res = svqrshrunb (z0, 2))
+
+/*
+** qrshrunb_8_s16_tied1:
+** sqrshrunb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_8_s16_tied1, svuint8_t, svint16_t,
+ z0_res = svqrshrunb_n_s16 (z0, 8),
+ z0_res = svqrshrunb (z0, 8))
+
+/*
+** qrshrunb_8_s16_untied:
+** sqrshrunb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_8_s16_untied, svuint8_t, svint16_t,
+ z0_res = svqrshrunb_n_s16 (z1, 8),
+ z0_res = svqrshrunb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrunb_1_s32:
+** sqrshrunb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_1_s32, svuint16_t, svint32_t,
+ z0_res = svqrshrunb_n_s32 (z0, 1),
+ z0_res = svqrshrunb (z0, 1))
+
+/*
+** qrshrunb_2_s32:
+** sqrshrunb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_2_s32, svuint16_t, svint32_t,
+ z0_res = svqrshrunb_n_s32 (z0, 2),
+ z0_res = svqrshrunb (z0, 2))
+
+/*
+** qrshrunb_16_s32_tied1:
+** sqrshrunb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_16_s32_tied1, svuint16_t, svint32_t,
+ z0_res = svqrshrunb_n_s32 (z0, 16),
+ z0_res = svqrshrunb (z0, 16))
+
+/*
+** qrshrunb_16_s32_untied:
+** sqrshrunb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_16_s32_untied, svuint16_t, svint32_t,
+ z0_res = svqrshrunb_n_s32 (z1, 16),
+ z0_res = svqrshrunb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrunb_1_s64:
+** sqrshrunb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_1_s64, svuint32_t, svint64_t,
+ z0_res = svqrshrunb_n_s64 (z0, 1),
+ z0_res = svqrshrunb (z0, 1))
+
+/*
+** qrshrunb_2_s64:
+** sqrshrunb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_2_s64, svuint32_t, svint64_t,
+ z0_res = svqrshrunb_n_s64 (z0, 2),
+ z0_res = svqrshrunb (z0, 2))
+
+/*
+** qrshrunb_32_s64_tied1:
+** sqrshrunb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_32_s64_tied1, svuint32_t, svint64_t,
+ z0_res = svqrshrunb_n_s64 (z0, 32),
+ z0_res = svqrshrunb (z0, 32))
+
+/*
+** qrshrunb_32_s64_untied:
+** sqrshrunb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qrshrunb_32_s64_untied, svuint32_t, svint64_t,
+ z0_res = svqrshrunb_n_s64 (z1, 32),
+ z0_res = svqrshrunb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrunt_1_s16:
+** sqrshrunt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_1_s16, svuint8_t, svint16_t,
+ z0 = svqrshrunt_n_s16 (z0, z4, 1),
+ z0 = svqrshrunt (z0, z4, 1))
+
+/*
+** qrshrunt_2_s16:
+** sqrshrunt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_2_s16, svuint8_t, svint16_t,
+ z0 = svqrshrunt_n_s16 (z0, z4, 2),
+ z0 = svqrshrunt (z0, z4, 2))
+
+/*
+** qrshrunt_8_s16_tied1:
+** sqrshrunt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_8_s16_tied1, svuint8_t, svint16_t,
+ z0 = svqrshrunt_n_s16 (z0, z4, 8),
+ z0 = svqrshrunt (z0, z4, 8))
+
+/*
+** qrshrunt_8_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** sqrshrunt z0\.b, z4\.h, #8
+** |
+** sqrshrunt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_8_s16_untied, svuint8_t, svint16_t,
+ z0 = svqrshrunt_n_s16 (z1, z4, 8),
+ z0 = svqrshrunt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrunt_1_s32:
+** sqrshrunt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_1_s32, svuint16_t, svint32_t,
+ z0 = svqrshrunt_n_s32 (z0, z4, 1),
+ z0 = svqrshrunt (z0, z4, 1))
+
+/*
+** qrshrunt_2_s32:
+** sqrshrunt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_2_s32, svuint16_t, svint32_t,
+ z0 = svqrshrunt_n_s32 (z0, z4, 2),
+ z0 = svqrshrunt (z0, z4, 2))
+
+/*
+** qrshrunt_16_s32_tied1:
+** sqrshrunt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_16_s32_tied1, svuint16_t, svint32_t,
+ z0 = svqrshrunt_n_s32 (z0, z4, 16),
+ z0 = svqrshrunt (z0, z4, 16))
+
+/*
+** qrshrunt_16_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** sqrshrunt z0\.h, z4\.s, #16
+** |
+** sqrshrunt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_16_s32_untied, svuint16_t, svint32_t,
+ z0 = svqrshrunt_n_s32 (z1, z4, 16),
+ z0 = svqrshrunt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qrshrunt_1_s64:
+** sqrshrunt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_1_s64, svuint32_t, svint64_t,
+ z0 = svqrshrunt_n_s64 (z0, z4, 1),
+ z0 = svqrshrunt (z0, z4, 1))
+
+/*
+** qrshrunt_2_s64:
+** sqrshrunt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_2_s64, svuint32_t, svint64_t,
+ z0 = svqrshrunt_n_s64 (z0, z4, 2),
+ z0 = svqrshrunt (z0, z4, 2))
+
+/*
+** qrshrunt_32_s64_tied1:
+** sqrshrunt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_32_s64_tied1, svuint32_t, svint64_t,
+ z0 = svqrshrunt_n_s64 (z0, z4, 32),
+ z0 = svqrshrunt (z0, z4, 32))
+
+/*
+** qrshrunt_32_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** sqrshrunt z0\.s, z4\.d, #32
+** |
+** sqrshrunt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qrshrunt_32_s64_untied, svuint32_t, svint64_t,
+ z0 = svqrshrunt_n_s64 (z1, z4, 32),
+ z0 = svqrshrunt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshl_s16_m_tied1:
+** sqshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qshl_s16_m_tied1, svint16_t, svint16_t,
+ z0 = svqshl_s16_m (p0, z0, z4),
+ z0 = svqshl_m (p0, z0, z4))
+
+/*
+** qshl_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqshl z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s16_m_tied2, svint16_t, svint16_t,
+ z0_res = svqshl_s16_m (p0, z4, z0),
+ z0_res = svqshl_m (p0, z4, z0))
+
+/*
+** qshl_s16_m_untied:
+** movprfx z0, z1
+** sqshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qshl_s16_m_untied, svint16_t, svint16_t,
+ z0 = svqshl_s16_m (p0, z1, z4),
+ z0 = svqshl_m (p0, z1, z4))
+
+/*
+** qshl_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** sqshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svqshl_n_s16_m (p0, z0, x0),
+ z0 = svqshl_m (p0, z0, x0))
+
+/*
+** qshl_w0_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svqshl_n_s16_m (p0, z1, x0),
+ z0 = svqshl_m (p0, z1, x0))
+
+/*
+** qshl_m16_s16_m:
+** asr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m16_s16_m, svint16_t,
+ z0 = svqshl_n_s16_m (p0, z0, -16),
+ z0 = svqshl_m (p0, z0, -16))
+
+/*
+** qshl_m2_s16_m:
+** asr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s16_m, svint16_t,
+ z0 = svqshl_n_s16_m (p0, z0, -2),
+ z0 = svqshl_m (p0, z0, -2))
+
+/*
+** qshl_m1_s16_m_tied1:
+** asr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s16_m_tied1, svint16_t,
+ z0 = svqshl_n_s16_m (p0, z0, -1),
+ z0 = svqshl_m (p0, z0, -1))
+
+/*
+** qshl_m1_s16_m_untied:
+** movprfx z0, z1
+** asr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s16_m_untied, svint16_t,
+ z0 = svqshl_n_s16_m (p0, z1, -1),
+ z0 = svqshl_m (p0, z1, -1))
+
+/*
+** qshl_1_s16_m_tied1:
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s16_m_tied1, svint16_t,
+ z0 = svqshl_n_s16_m (p0, z0, 1),
+ z0 = svqshl_m (p0, z0, 1))
+
+/*
+** qshl_1_s16_m_untied:
+** movprfx z0, z1
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s16_m_untied, svint16_t,
+ z0 = svqshl_n_s16_m (p0, z1, 1),
+ z0 = svqshl_m (p0, z1, 1))
+
+/*
+** qshl_2_s16_m:
+** sqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s16_m, svint16_t,
+ z0 = svqshl_n_s16_m (p0, z0, 2),
+ z0 = svqshl_m (p0, z0, 2))
+
+/*
+** qshl_15_s16_m:
+** sqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qshl_15_s16_m, svint16_t,
+ z0 = svqshl_n_s16_m (p0, z0, 15),
+ z0 = svqshl_m (p0, z0, 15))
+
+/*
+** qshl_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qshl_s16_z_tied1, svint16_t, svint16_t,
+ z0 = svqshl_s16_z (p0, z0, z4),
+ z0 = svqshl_z (p0, z0, z4))
+
+/*
+** qshl_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s16_z_tied2, svint16_t, svint16_t,
+ z0_res = svqshl_s16_z (p0, z4, z0),
+ z0_res = svqshl_z (p0, z4, z0))
+
+/*
+** qshl_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0\.h, p0/z, z4\.h
+** sqshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_s16_z_untied, svint16_t, svint16_t,
+ z0 = svqshl_s16_z (p0, z1, z4),
+ z0 = svqshl_z (p0, z1, z4))
+
+/*
+** qshl_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** sqshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svqshl_n_s16_z (p0, z0, x0),
+ z0 = svqshl_z (p0, z0, x0))
+
+/*
+** qshl_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqshl z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** sqshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svqshl_n_s16_z (p0, z1, x0),
+ z0 = svqshl_z (p0, z1, x0))
+
+/*
+** qshl_m16_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** asr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m16_s16_z, svint16_t,
+ z0 = svqshl_n_s16_z (p0, z0, -16),
+ z0 = svqshl_z (p0, z0, -16))
+
+/*
+** qshl_m2_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** asr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s16_z, svint16_t,
+ z0 = svqshl_n_s16_z (p0, z0, -2),
+ z0 = svqshl_z (p0, z0, -2))
+
+/*
+** qshl_m1_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** asr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s16_z_tied1, svint16_t,
+ z0 = svqshl_n_s16_z (p0, z0, -1),
+ z0 = svqshl_z (p0, z0, -1))
+
+/*
+** qshl_m1_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** asr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s16_z_untied, svint16_t,
+ z0 = svqshl_n_s16_z (p0, z1, -1),
+ z0 = svqshl_z (p0, z1, -1))
+
+/*
+** qshl_1_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s16_z_tied1, svint16_t,
+ z0 = svqshl_n_s16_z (p0, z0, 1),
+ z0 = svqshl_z (p0, z0, 1))
+
+/*
+** qshl_1_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s16_z_untied, svint16_t,
+ z0 = svqshl_n_s16_z (p0, z1, 1),
+ z0 = svqshl_z (p0, z1, 1))
+
+/*
+** qshl_2_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s16_z, svint16_t,
+ z0 = svqshl_n_s16_z (p0, z0, 2),
+ z0 = svqshl_z (p0, z0, 2))
+
+/*
+** qshl_15_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qshl_15_s16_z, svint16_t,
+ z0 = svqshl_n_s16_z (p0, z0, 15),
+ z0 = svqshl_z (p0, z0, 15))
+
+/*
+** qshl_s16_x_tied1:
+** sqshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qshl_s16_x_tied1, svint16_t, svint16_t,
+ z0 = svqshl_s16_x (p0, z0, z4),
+ z0 = svqshl_x (p0, z0, z4))
+
+/*
+** qshl_s16_x_tied2:
+** sqshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s16_x_tied2, svint16_t, svint16_t,
+ z0_res = svqshl_s16_x (p0, z4, z0),
+ z0_res = svqshl_x (p0, z4, z0))
+
+/*
+** qshl_s16_x_untied:
+** (
+** movprfx z0, z1
+** sqshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0, z4
+** sqshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_s16_x_untied, svint16_t, svint16_t,
+ z0 = svqshl_s16_x (p0, z1, z4),
+ z0 = svqshl_x (p0, z1, z4))
+
+/*
+** qshl_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** sqshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svqshl_n_s16_x (p0, z0, x0),
+ z0 = svqshl_x (p0, z0, x0))
+
+/*
+** qshl_w0_s16_x_untied:
+** mov z0\.h, w0
+** sqshlr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svqshl_n_s16_x (p0, z1, x0),
+ z0 = svqshl_x (p0, z1, x0))
+
+/*
+** qshl_m16_s16_x:
+** asr z0\.h, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m16_s16_x, svint16_t,
+ z0 = svqshl_n_s16_x (p0, z0, -16),
+ z0 = svqshl_x (p0, z0, -16))
+
+/*
+** qshl_m2_s16_x:
+** asr z0\.h, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s16_x, svint16_t,
+ z0 = svqshl_n_s16_x (p0, z0, -2),
+ z0 = svqshl_x (p0, z0, -2))
+
+/*
+** qshl_m1_s16_x_tied1:
+** asr z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s16_x_tied1, svint16_t,
+ z0 = svqshl_n_s16_x (p0, z0, -1),
+ z0 = svqshl_x (p0, z0, -1))
+
+/*
+** qshl_m1_s16_x_untied:
+** asr z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s16_x_untied, svint16_t,
+ z0 = svqshl_n_s16_x (p0, z1, -1),
+ z0 = svqshl_x (p0, z1, -1))
+
+/*
+** qshl_1_s16_x_tied1:
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s16_x_tied1, svint16_t,
+ z0 = svqshl_n_s16_x (p0, z0, 1),
+ z0 = svqshl_x (p0, z0, 1))
+
+/*
+** qshl_1_s16_x_untied:
+** movprfx z0, z1
+** sqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s16_x_untied, svint16_t,
+ z0 = svqshl_n_s16_x (p0, z1, 1),
+ z0 = svqshl_x (p0, z1, 1))
+
+/*
+** qshl_2_s16_x:
+** sqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s16_x, svint16_t,
+ z0 = svqshl_n_s16_x (p0, z0, 2),
+ z0 = svqshl_x (p0, z0, 2))
+
+/*
+** qshl_15_s16_x:
+** sqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qshl_15_s16_x, svint16_t,
+ z0 = svqshl_n_s16_x (p0, z0, 15),
+ z0 = svqshl_x (p0, z0, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshl_s32_m_tied1:
+** sqshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qshl_s32_m_tied1, svint32_t, svint32_t,
+ z0 = svqshl_s32_m (p0, z0, z4),
+ z0 = svqshl_m (p0, z0, z4))
+
+/*
+** qshl_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqshl z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s32_m_tied2, svint32_t, svint32_t,
+ z0_res = svqshl_s32_m (p0, z4, z0),
+ z0_res = svqshl_m (p0, z4, z0))
+
+/*
+** qshl_s32_m_untied:
+** movprfx z0, z1
+** sqshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qshl_s32_m_untied, svint32_t, svint32_t,
+ z0 = svqshl_s32_m (p0, z1, z4),
+ z0 = svqshl_m (p0, z1, z4))
+
+/*
+** qshl_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** sqshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svqshl_n_s32_m (p0, z0, x0),
+ z0 = svqshl_m (p0, z0, x0))
+
+/*
+** qshl_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svqshl_n_s32_m (p0, z1, x0),
+ z0 = svqshl_m (p0, z1, x0))
+
+/*
+** qshl_m32_s32_m:
+** asr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m32_s32_m, svint32_t,
+ z0 = svqshl_n_s32_m (p0, z0, -32),
+ z0 = svqshl_m (p0, z0, -32))
+
+/*
+** qshl_m2_s32_m:
+** asr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s32_m, svint32_t,
+ z0 = svqshl_n_s32_m (p0, z0, -2),
+ z0 = svqshl_m (p0, z0, -2))
+
+/*
+** qshl_m1_s32_m_tied1:
+** asr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s32_m_tied1, svint32_t,
+ z0 = svqshl_n_s32_m (p0, z0, -1),
+ z0 = svqshl_m (p0, z0, -1))
+
+/*
+** qshl_m1_s32_m_untied:
+** movprfx z0, z1
+** asr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s32_m_untied, svint32_t,
+ z0 = svqshl_n_s32_m (p0, z1, -1),
+ z0 = svqshl_m (p0, z1, -1))
+
+/*
+** qshl_1_s32_m_tied1:
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s32_m_tied1, svint32_t,
+ z0 = svqshl_n_s32_m (p0, z0, 1),
+ z0 = svqshl_m (p0, z0, 1))
+
+/*
+** qshl_1_s32_m_untied:
+** movprfx z0, z1
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s32_m_untied, svint32_t,
+ z0 = svqshl_n_s32_m (p0, z1, 1),
+ z0 = svqshl_m (p0, z1, 1))
+
+/*
+** qshl_2_s32_m:
+** sqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s32_m, svint32_t,
+ z0 = svqshl_n_s32_m (p0, z0, 2),
+ z0 = svqshl_m (p0, z0, 2))
+
+/*
+** qshl_31_s32_m:
+** sqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qshl_31_s32_m, svint32_t,
+ z0 = svqshl_n_s32_m (p0, z0, 31),
+ z0 = svqshl_m (p0, z0, 31))
+
+/*
+** qshl_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qshl_s32_z_tied1, svint32_t, svint32_t,
+ z0 = svqshl_s32_z (p0, z0, z4),
+ z0 = svqshl_z (p0, z0, z4))
+
+/*
+** qshl_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s32_z_tied2, svint32_t, svint32_t,
+ z0_res = svqshl_s32_z (p0, z4, z0),
+ z0_res = svqshl_z (p0, z4, z0))
+
+/*
+** qshl_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0\.s, p0/z, z4\.s
+** sqshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_s32_z_untied, svint32_t, svint32_t,
+ z0 = svqshl_s32_z (p0, z1, z4),
+ z0 = svqshl_z (p0, z1, z4))
+
+/*
+** qshl_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** sqshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svqshl_n_s32_z (p0, z0, x0),
+ z0 = svqshl_z (p0, z0, x0))
+
+/*
+** qshl_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqshl z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** sqshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svqshl_n_s32_z (p0, z1, x0),
+ z0 = svqshl_z (p0, z1, x0))
+
+/*
+** qshl_m32_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** asr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m32_s32_z, svint32_t,
+ z0 = svqshl_n_s32_z (p0, z0, -32),
+ z0 = svqshl_z (p0, z0, -32))
+
+/*
+** qshl_m2_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** asr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s32_z, svint32_t,
+ z0 = svqshl_n_s32_z (p0, z0, -2),
+ z0 = svqshl_z (p0, z0, -2))
+
+/*
+** qshl_m1_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** asr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s32_z_tied1, svint32_t,
+ z0 = svqshl_n_s32_z (p0, z0, -1),
+ z0 = svqshl_z (p0, z0, -1))
+
+/*
+** qshl_m1_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** asr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s32_z_untied, svint32_t,
+ z0 = svqshl_n_s32_z (p0, z1, -1),
+ z0 = svqshl_z (p0, z1, -1))
+
+/*
+** qshl_1_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s32_z_tied1, svint32_t,
+ z0 = svqshl_n_s32_z (p0, z0, 1),
+ z0 = svqshl_z (p0, z0, 1))
+
+/*
+** qshl_1_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s32_z_untied, svint32_t,
+ z0 = svqshl_n_s32_z (p0, z1, 1),
+ z0 = svqshl_z (p0, z1, 1))
+
+/*
+** qshl_2_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s32_z, svint32_t,
+ z0 = svqshl_n_s32_z (p0, z0, 2),
+ z0 = svqshl_z (p0, z0, 2))
+
+/*
+** qshl_31_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qshl_31_s32_z, svint32_t,
+ z0 = svqshl_n_s32_z (p0, z0, 31),
+ z0 = svqshl_z (p0, z0, 31))
+
+/*
+** qshl_s32_x_tied1:
+** sqshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qshl_s32_x_tied1, svint32_t, svint32_t,
+ z0 = svqshl_s32_x (p0, z0, z4),
+ z0 = svqshl_x (p0, z0, z4))
+
+/*
+** qshl_s32_x_tied2:
+** sqshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s32_x_tied2, svint32_t, svint32_t,
+ z0_res = svqshl_s32_x (p0, z4, z0),
+ z0_res = svqshl_x (p0, z4, z0))
+
+/*
+** qshl_s32_x_untied:
+** (
+** movprfx z0, z1
+** sqshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0, z4
+** sqshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_s32_x_untied, svint32_t, svint32_t,
+ z0 = svqshl_s32_x (p0, z1, z4),
+ z0 = svqshl_x (p0, z1, z4))
+
+/*
+** qshl_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** sqshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svqshl_n_s32_x (p0, z0, x0),
+ z0 = svqshl_x (p0, z0, x0))
+
+/*
+** qshl_w0_s32_x_untied:
+** mov z0\.s, w0
+** sqshlr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svqshl_n_s32_x (p0, z1, x0),
+ z0 = svqshl_x (p0, z1, x0))
+
+/*
+** qshl_m32_s32_x:
+** asr z0\.s, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m32_s32_x, svint32_t,
+ z0 = svqshl_n_s32_x (p0, z0, -32),
+ z0 = svqshl_x (p0, z0, -32))
+
+/*
+** qshl_m2_s32_x:
+** asr z0\.s, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s32_x, svint32_t,
+ z0 = svqshl_n_s32_x (p0, z0, -2),
+ z0 = svqshl_x (p0, z0, -2))
+
+/*
+** qshl_m1_s32_x_tied1:
+** asr z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s32_x_tied1, svint32_t,
+ z0 = svqshl_n_s32_x (p0, z0, -1),
+ z0 = svqshl_x (p0, z0, -1))
+
+/*
+** qshl_m1_s32_x_untied:
+** asr z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s32_x_untied, svint32_t,
+ z0 = svqshl_n_s32_x (p0, z1, -1),
+ z0 = svqshl_x (p0, z1, -1))
+
+/*
+** qshl_1_s32_x_tied1:
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s32_x_tied1, svint32_t,
+ z0 = svqshl_n_s32_x (p0, z0, 1),
+ z0 = svqshl_x (p0, z0, 1))
+
+/*
+** qshl_1_s32_x_untied:
+** movprfx z0, z1
+** sqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s32_x_untied, svint32_t,
+ z0 = svqshl_n_s32_x (p0, z1, 1),
+ z0 = svqshl_x (p0, z1, 1))
+
+/*
+** qshl_2_s32_x:
+** sqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s32_x, svint32_t,
+ z0 = svqshl_n_s32_x (p0, z0, 2),
+ z0 = svqshl_x (p0, z0, 2))
+
+/*
+** qshl_31_s32_x:
+** sqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qshl_31_s32_x, svint32_t,
+ z0 = svqshl_n_s32_x (p0, z0, 31),
+ z0 = svqshl_x (p0, z0, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshl_s64_m_tied1:
+** sqshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qshl_s64_m_tied1, svint64_t, svint64_t,
+ z0 = svqshl_s64_m (p0, z0, z4),
+ z0 = svqshl_m (p0, z0, z4))
+
+/*
+** qshl_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** sqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s64_m_tied2, svint64_t, svint64_t,
+ z0_res = svqshl_s64_m (p0, z4, z0),
+ z0_res = svqshl_m (p0, z4, z0))
+
+/*
+** qshl_s64_m_untied:
+** movprfx z0, z1
+** sqshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qshl_s64_m_untied, svint64_t, svint64_t,
+ z0 = svqshl_s64_m (p0, z1, z4),
+ z0 = svqshl_m (p0, z1, z4))
+
+/*
+** qshl_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** sqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svqshl_n_s64_m (p0, z0, x0),
+ z0 = svqshl_m (p0, z0, x0))
+
+/*
+** qshl_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** sqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svqshl_n_s64_m (p0, z1, x0),
+ z0 = svqshl_m (p0, z1, x0))
+
+/*
+** qshl_m64_s64_m:
+** asr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m64_s64_m, svint64_t,
+ z0 = svqshl_n_s64_m (p0, z0, -64),
+ z0 = svqshl_m (p0, z0, -64))
+
+/*
+** qshl_m2_s64_m:
+** asr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s64_m, svint64_t,
+ z0 = svqshl_n_s64_m (p0, z0, -2),
+ z0 = svqshl_m (p0, z0, -2))
+
+/*
+** qshl_m1_s64_m_tied1:
+** asr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s64_m_tied1, svint64_t,
+ z0 = svqshl_n_s64_m (p0, z0, -1),
+ z0 = svqshl_m (p0, z0, -1))
+
+/*
+** qshl_m1_s64_m_untied:
+** movprfx z0, z1
+** asr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s64_m_untied, svint64_t,
+ z0 = svqshl_n_s64_m (p0, z1, -1),
+ z0 = svqshl_m (p0, z1, -1))
+
+/*
+** qshl_1_s64_m_tied1:
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s64_m_tied1, svint64_t,
+ z0 = svqshl_n_s64_m (p0, z0, 1),
+ z0 = svqshl_m (p0, z0, 1))
+
+/*
+** qshl_1_s64_m_untied:
+** movprfx z0, z1
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s64_m_untied, svint64_t,
+ z0 = svqshl_n_s64_m (p0, z1, 1),
+ z0 = svqshl_m (p0, z1, 1))
+
+/*
+** qshl_2_s64_m:
+** sqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s64_m, svint64_t,
+ z0 = svqshl_n_s64_m (p0, z0, 2),
+ z0 = svqshl_m (p0, z0, 2))
+
+/*
+** qshl_63_s64_m:
+** sqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qshl_63_s64_m, svint64_t,
+ z0 = svqshl_n_s64_m (p0, z0, 63),
+ z0 = svqshl_m (p0, z0, 63))
+
+/*
+** qshl_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qshl_s64_z_tied1, svint64_t, svint64_t,
+ z0 = svqshl_s64_z (p0, z0, z4),
+ z0 = svqshl_z (p0, z0, z4))
+
+/*
+** qshl_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s64_z_tied2, svint64_t, svint64_t,
+ z0_res = svqshl_s64_z (p0, z4, z0),
+ z0_res = svqshl_z (p0, z4, z0))
+
+/*
+** qshl_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0\.d, p0/z, z4\.d
+** sqshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_s64_z_untied, svint64_t, svint64_t,
+ z0 = svqshl_s64_z (p0, z1, z4),
+ z0 = svqshl_z (p0, z1, z4))
+
+/*
+** qshl_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** sqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svqshl_n_s64_z (p0, z0, x0),
+ z0 = svqshl_z (p0, z0, x0))
+
+/*
+** qshl_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqshl z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** sqshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svqshl_n_s64_z (p0, z1, x0),
+ z0 = svqshl_z (p0, z1, x0))
+
+/*
+** qshl_m64_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** asr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m64_s64_z, svint64_t,
+ z0 = svqshl_n_s64_z (p0, z0, -64),
+ z0 = svqshl_z (p0, z0, -64))
+
+/*
+** qshl_m2_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** asr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s64_z, svint64_t,
+ z0 = svqshl_n_s64_z (p0, z0, -2),
+ z0 = svqshl_z (p0, z0, -2))
+
+/*
+** qshl_m1_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** asr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s64_z_tied1, svint64_t,
+ z0 = svqshl_n_s64_z (p0, z0, -1),
+ z0 = svqshl_z (p0, z0, -1))
+
+/*
+** qshl_m1_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** asr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s64_z_untied, svint64_t,
+ z0 = svqshl_n_s64_z (p0, z1, -1),
+ z0 = svqshl_z (p0, z1, -1))
+
+/*
+** qshl_1_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s64_z_tied1, svint64_t,
+ z0 = svqshl_n_s64_z (p0, z0, 1),
+ z0 = svqshl_z (p0, z0, 1))
+
+/*
+** qshl_1_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s64_z_untied, svint64_t,
+ z0 = svqshl_n_s64_z (p0, z1, 1),
+ z0 = svqshl_z (p0, z1, 1))
+
+/*
+** qshl_2_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s64_z, svint64_t,
+ z0 = svqshl_n_s64_z (p0, z0, 2),
+ z0 = svqshl_z (p0, z0, 2))
+
+/*
+** qshl_63_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qshl_63_s64_z, svint64_t,
+ z0 = svqshl_n_s64_z (p0, z0, 63),
+ z0 = svqshl_z (p0, z0, 63))
+
+/*
+** qshl_s64_x_tied1:
+** sqshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qshl_s64_x_tied1, svint64_t, svint64_t,
+ z0 = svqshl_s64_x (p0, z0, z4),
+ z0 = svqshl_x (p0, z0, z4))
+
+/*
+** qshl_s64_x_tied2:
+** sqshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s64_x_tied2, svint64_t, svint64_t,
+ z0_res = svqshl_s64_x (p0, z4, z0),
+ z0_res = svqshl_x (p0, z4, z0))
+
+/*
+** qshl_s64_x_untied:
+** (
+** movprfx z0, z1
+** sqshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0, z4
+** sqshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_s64_x_untied, svint64_t, svint64_t,
+ z0 = svqshl_s64_x (p0, z1, z4),
+ z0 = svqshl_x (p0, z1, z4))
+
+/*
+** qshl_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** sqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svqshl_n_s64_x (p0, z0, x0),
+ z0 = svqshl_x (p0, z0, x0))
+
+/*
+** qshl_x0_s64_x_untied:
+** mov z0\.d, x0
+** sqshlr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svqshl_n_s64_x (p0, z1, x0),
+ z0 = svqshl_x (p0, z1, x0))
+
+/*
+** qshl_m64_s64_x:
+** asr z0\.d, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m64_s64_x, svint64_t,
+ z0 = svqshl_n_s64_x (p0, z0, -64),
+ z0 = svqshl_x (p0, z0, -64))
+
+/*
+** qshl_m2_s64_x:
+** asr z0\.d, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s64_x, svint64_t,
+ z0 = svqshl_n_s64_x (p0, z0, -2),
+ z0 = svqshl_x (p0, z0, -2))
+
+/*
+** qshl_m1_s64_x_tied1:
+** asr z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s64_x_tied1, svint64_t,
+ z0 = svqshl_n_s64_x (p0, z0, -1),
+ z0 = svqshl_x (p0, z0, -1))
+
+/*
+** qshl_m1_s64_x_untied:
+** asr z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s64_x_untied, svint64_t,
+ z0 = svqshl_n_s64_x (p0, z1, -1),
+ z0 = svqshl_x (p0, z1, -1))
+
+/*
+** qshl_1_s64_x_tied1:
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s64_x_tied1, svint64_t,
+ z0 = svqshl_n_s64_x (p0, z0, 1),
+ z0 = svqshl_x (p0, z0, 1))
+
+/*
+** qshl_1_s64_x_untied:
+** movprfx z0, z1
+** sqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s64_x_untied, svint64_t,
+ z0 = svqshl_n_s64_x (p0, z1, 1),
+ z0 = svqshl_x (p0, z1, 1))
+
+/*
+** qshl_2_s64_x:
+** sqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s64_x, svint64_t,
+ z0 = svqshl_n_s64_x (p0, z0, 2),
+ z0 = svqshl_x (p0, z0, 2))
+
+/*
+** qshl_63_s64_x:
+** sqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qshl_63_s64_x, svint64_t,
+ z0 = svqshl_n_s64_x (p0, z0, 63),
+ z0 = svqshl_x (p0, z0, 63))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshl_s8_m_tied1:
+** sqshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qshl_s8_m_tied1, svint8_t, svint8_t,
+ z0 = svqshl_s8_m (p0, z0, z4),
+ z0 = svqshl_m (p0, z0, z4))
+
+/*
+** qshl_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** sqshl z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s8_m_tied2, svint8_t, svint8_t,
+ z0_res = svqshl_s8_m (p0, z4, z0),
+ z0_res = svqshl_m (p0, z4, z0))
+
+/*
+** qshl_s8_m_untied:
+** movprfx z0, z1
+** sqshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qshl_s8_m_untied, svint8_t, svint8_t,
+ z0 = svqshl_s8_m (p0, z1, z4),
+ z0 = svqshl_m (p0, z1, z4))
+
+/*
+** qshl_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** sqshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svqshl_n_s8_m (p0, z0, x0),
+ z0 = svqshl_m (p0, z0, x0))
+
+/*
+** qshl_w0_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svqshl_n_s8_m (p0, z1, x0),
+ z0 = svqshl_m (p0, z1, x0))
+
+/*
+** qshl_m8_s8_m:
+** asr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m8_s8_m, svint8_t,
+ z0 = svqshl_n_s8_m (p0, z0, -8),
+ z0 = svqshl_m (p0, z0, -8))
+
+/*
+** qshl_m2_s8_m:
+** asr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s8_m, svint8_t,
+ z0 = svqshl_n_s8_m (p0, z0, -2),
+ z0 = svqshl_m (p0, z0, -2))
+
+/*
+** qshl_m1_s8_m_tied1:
+** asr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s8_m_tied1, svint8_t,
+ z0 = svqshl_n_s8_m (p0, z0, -1),
+ z0 = svqshl_m (p0, z0, -1))
+
+/*
+** qshl_m1_s8_m_untied:
+** movprfx z0, z1
+** asr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s8_m_untied, svint8_t,
+ z0 = svqshl_n_s8_m (p0, z1, -1),
+ z0 = svqshl_m (p0, z1, -1))
+
+/*
+** qshl_1_s8_m_tied1:
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s8_m_tied1, svint8_t,
+ z0 = svqshl_n_s8_m (p0, z0, 1),
+ z0 = svqshl_m (p0, z0, 1))
+
+/*
+** qshl_1_s8_m_untied:
+** movprfx z0, z1
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s8_m_untied, svint8_t,
+ z0 = svqshl_n_s8_m (p0, z1, 1),
+ z0 = svqshl_m (p0, z1, 1))
+
+/*
+** qshl_2_s8_m:
+** sqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s8_m, svint8_t,
+ z0 = svqshl_n_s8_m (p0, z0, 2),
+ z0 = svqshl_m (p0, z0, 2))
+
+/*
+** qshl_7_s8_m:
+** sqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qshl_7_s8_m, svint8_t,
+ z0 = svqshl_n_s8_m (p0, z0, 7),
+ z0 = svqshl_m (p0, z0, 7))
+
+/*
+** qshl_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qshl_s8_z_tied1, svint8_t, svint8_t,
+ z0 = svqshl_s8_z (p0, z0, z4),
+ z0 = svqshl_z (p0, z0, z4))
+
+/*
+** qshl_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s8_z_tied2, svint8_t, svint8_t,
+ z0_res = svqshl_s8_z (p0, z4, z0),
+ z0_res = svqshl_z (p0, z4, z0))
+
+/*
+** qshl_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0\.b, p0/z, z4\.b
+** sqshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_s8_z_untied, svint8_t, svint8_t,
+ z0 = svqshl_s8_z (p0, z1, z4),
+ z0 = svqshl_z (p0, z1, z4))
+
+/*
+** qshl_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** sqshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svqshl_n_s8_z (p0, z0, x0),
+ z0 = svqshl_z (p0, z0, x0))
+
+/*
+** qshl_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqshl z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** sqshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svqshl_n_s8_z (p0, z1, x0),
+ z0 = svqshl_z (p0, z1, x0))
+
+/*
+** qshl_m8_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** asr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m8_s8_z, svint8_t,
+ z0 = svqshl_n_s8_z (p0, z0, -8),
+ z0 = svqshl_z (p0, z0, -8))
+
+/*
+** qshl_m2_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** asr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s8_z, svint8_t,
+ z0 = svqshl_n_s8_z (p0, z0, -2),
+ z0 = svqshl_z (p0, z0, -2))
+
+/*
+** qshl_m1_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** asr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s8_z_tied1, svint8_t,
+ z0 = svqshl_n_s8_z (p0, z0, -1),
+ z0 = svqshl_z (p0, z0, -1))
+
+/*
+** qshl_m1_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** asr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s8_z_untied, svint8_t,
+ z0 = svqshl_n_s8_z (p0, z1, -1),
+ z0 = svqshl_z (p0, z1, -1))
+
+/*
+** qshl_1_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s8_z_tied1, svint8_t,
+ z0 = svqshl_n_s8_z (p0, z0, 1),
+ z0 = svqshl_z (p0, z0, 1))
+
+/*
+** qshl_1_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s8_z_untied, svint8_t,
+ z0 = svqshl_n_s8_z (p0, z1, 1),
+ z0 = svqshl_z (p0, z1, 1))
+
+/*
+** qshl_2_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s8_z, svint8_t,
+ z0 = svqshl_n_s8_z (p0, z0, 2),
+ z0 = svqshl_z (p0, z0, 2))
+
+/*
+** qshl_7_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qshl_7_s8_z, svint8_t,
+ z0 = svqshl_n_s8_z (p0, z0, 7),
+ z0 = svqshl_z (p0, z0, 7))
+
+/*
+** qshl_s8_x_tied1:
+** sqshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qshl_s8_x_tied1, svint8_t, svint8_t,
+ z0 = svqshl_s8_x (p0, z0, z4),
+ z0 = svqshl_x (p0, z0, z4))
+
+/*
+** qshl_s8_x_tied2:
+** sqshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_s8_x_tied2, svint8_t, svint8_t,
+ z0_res = svqshl_s8_x (p0, z4, z0),
+ z0_res = svqshl_x (p0, z4, z0))
+
+/*
+** qshl_s8_x_untied:
+** (
+** movprfx z0, z1
+** sqshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0, z4
+** sqshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_s8_x_untied, svint8_t, svint8_t,
+ z0 = svqshl_s8_x (p0, z1, z4),
+ z0 = svqshl_x (p0, z1, z4))
+
+/*
+** qshl_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** sqshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svqshl_n_s8_x (p0, z0, x0),
+ z0 = svqshl_x (p0, z0, x0))
+
+/*
+** qshl_w0_s8_x_untied:
+** mov z0\.b, w0
+** sqshlr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svqshl_n_s8_x (p0, z1, x0),
+ z0 = svqshl_x (p0, z1, x0))
+
+/*
+** qshl_m8_s8_x:
+** asr z0\.b, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m8_s8_x, svint8_t,
+ z0 = svqshl_n_s8_x (p0, z0, -8),
+ z0 = svqshl_x (p0, z0, -8))
+
+/*
+** qshl_m2_s8_x:
+** asr z0\.b, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_s8_x, svint8_t,
+ z0 = svqshl_n_s8_x (p0, z0, -2),
+ z0 = svqshl_x (p0, z0, -2))
+
+/*
+** qshl_m1_s8_x_tied1:
+** asr z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s8_x_tied1, svint8_t,
+ z0 = svqshl_n_s8_x (p0, z0, -1),
+ z0 = svqshl_x (p0, z0, -1))
+
+/*
+** qshl_m1_s8_x_untied:
+** asr z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_s8_x_untied, svint8_t,
+ z0 = svqshl_n_s8_x (p0, z1, -1),
+ z0 = svqshl_x (p0, z1, -1))
+
+/*
+** qshl_1_s8_x_tied1:
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s8_x_tied1, svint8_t,
+ z0 = svqshl_n_s8_x (p0, z0, 1),
+ z0 = svqshl_x (p0, z0, 1))
+
+/*
+** qshl_1_s8_x_untied:
+** movprfx z0, z1
+** sqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_s8_x_untied, svint8_t,
+ z0 = svqshl_n_s8_x (p0, z1, 1),
+ z0 = svqshl_x (p0, z1, 1))
+
+/*
+** qshl_2_s8_x:
+** sqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_s8_x, svint8_t,
+ z0 = svqshl_n_s8_x (p0, z0, 2),
+ z0 = svqshl_x (p0, z0, 2))
+
+/*
+** qshl_7_s8_x:
+** sqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qshl_7_s8_x, svint8_t,
+ z0 = svqshl_n_s8_x (p0, z0, 7),
+ z0 = svqshl_x (p0, z0, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshl_u16_m_tied1:
+** uqshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qshl_u16_m_tied1, svuint16_t, svint16_t,
+ z0 = svqshl_u16_m (p0, z0, z4),
+ z0 = svqshl_m (p0, z0, z4))
+
+/*
+** qshl_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uqshl z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u16_m_tied2, svuint16_t, svint16_t,
+ z0_res = svqshl_u16_m (p0, z4, z0),
+ z0_res = svqshl_m (p0, z4, z0))
+
+/*
+** qshl_u16_m_untied:
+** movprfx z0, z1
+** uqshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qshl_u16_m_untied, svuint16_t, svint16_t,
+ z0 = svqshl_u16_m (p0, z1, z4),
+ z0 = svqshl_m (p0, z1, z4))
+
+/*
+** qshl_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** uqshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u16_m_tied1, svuint16_t, int16_t,
+ z0 = svqshl_n_u16_m (p0, z0, x0),
+ z0 = svqshl_m (p0, z0, x0))
+
+/*
+** qshl_w0_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uqshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u16_m_untied, svuint16_t, int16_t,
+ z0 = svqshl_n_u16_m (p0, z1, x0),
+ z0 = svqshl_m (p0, z1, x0))
+
+/*
+** qshl_m16_u16_m:
+** lsr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m16_u16_m, svuint16_t,
+ z0 = svqshl_n_u16_m (p0, z0, -16),
+ z0 = svqshl_m (p0, z0, -16))
+
+/*
+** qshl_m2_u16_m:
+** lsr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u16_m, svuint16_t,
+ z0 = svqshl_n_u16_m (p0, z0, -2),
+ z0 = svqshl_m (p0, z0, -2))
+
+/*
+** qshl_m1_u16_m_tied1:
+** lsr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u16_m_tied1, svuint16_t,
+ z0 = svqshl_n_u16_m (p0, z0, -1),
+ z0 = svqshl_m (p0, z0, -1))
+
+/*
+** qshl_m1_u16_m_untied:
+** movprfx z0, z1
+** lsr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u16_m_untied, svuint16_t,
+ z0 = svqshl_n_u16_m (p0, z1, -1),
+ z0 = svqshl_m (p0, z1, -1))
+
+/*
+** qshl_1_u16_m_tied1:
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u16_m_tied1, svuint16_t,
+ z0 = svqshl_n_u16_m (p0, z0, 1),
+ z0 = svqshl_m (p0, z0, 1))
+
+/*
+** qshl_1_u16_m_untied:
+** movprfx z0, z1
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u16_m_untied, svuint16_t,
+ z0 = svqshl_n_u16_m (p0, z1, 1),
+ z0 = svqshl_m (p0, z1, 1))
+
+/*
+** qshl_2_u16_m:
+** uqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u16_m, svuint16_t,
+ z0 = svqshl_n_u16_m (p0, z0, 2),
+ z0 = svqshl_m (p0, z0, 2))
+
+/*
+** qshl_15_u16_m:
+** uqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qshl_15_u16_m, svuint16_t,
+ z0 = svqshl_n_u16_m (p0, z0, 15),
+ z0 = svqshl_m (p0, z0, 15))
+
+/*
+** qshl_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uqshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qshl_u16_z_tied1, svuint16_t, svint16_t,
+ z0 = svqshl_u16_z (p0, z0, z4),
+ z0 = svqshl_z (p0, z0, z4))
+
+/*
+** qshl_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** uqshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u16_z_tied2, svuint16_t, svint16_t,
+ z0_res = svqshl_u16_z (p0, z4, z0),
+ z0_res = svqshl_z (p0, z4, z0))
+
+/*
+** qshl_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0\.h, p0/z, z4\.h
+** uqshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_u16_z_untied, svuint16_t, svint16_t,
+ z0 = svqshl_u16_z (p0, z1, z4),
+ z0 = svqshl_z (p0, z1, z4))
+
+/*
+** qshl_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** uqshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u16_z_tied1, svuint16_t, int16_t,
+ z0 = svqshl_n_u16_z (p0, z0, x0),
+ z0 = svqshl_z (p0, z0, x0))
+
+/*
+** qshl_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqshl z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uqshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u16_z_untied, svuint16_t, int16_t,
+ z0 = svqshl_n_u16_z (p0, z1, x0),
+ z0 = svqshl_z (p0, z1, x0))
+
+/*
+** qshl_m16_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** lsr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m16_u16_z, svuint16_t,
+ z0 = svqshl_n_u16_z (p0, z0, -16),
+ z0 = svqshl_z (p0, z0, -16))
+
+/*
+** qshl_m2_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** lsr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u16_z, svuint16_t,
+ z0 = svqshl_n_u16_z (p0, z0, -2),
+ z0 = svqshl_z (p0, z0, -2))
+
+/*
+** qshl_m1_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** lsr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u16_z_tied1, svuint16_t,
+ z0 = svqshl_n_u16_z (p0, z0, -1),
+ z0 = svqshl_z (p0, z0, -1))
+
+/*
+** qshl_m1_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** lsr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u16_z_untied, svuint16_t,
+ z0 = svqshl_n_u16_z (p0, z1, -1),
+ z0 = svqshl_z (p0, z1, -1))
+
+/*
+** qshl_1_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u16_z_tied1, svuint16_t,
+ z0 = svqshl_n_u16_z (p0, z0, 1),
+ z0 = svqshl_z (p0, z0, 1))
+
+/*
+** qshl_1_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u16_z_untied, svuint16_t,
+ z0 = svqshl_n_u16_z (p0, z1, 1),
+ z0 = svqshl_z (p0, z1, 1))
+
+/*
+** qshl_2_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** uqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u16_z, svuint16_t,
+ z0 = svqshl_n_u16_z (p0, z0, 2),
+ z0 = svqshl_z (p0, z0, 2))
+
+/*
+** qshl_15_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** uqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qshl_15_u16_z, svuint16_t,
+ z0 = svqshl_n_u16_z (p0, z0, 15),
+ z0 = svqshl_z (p0, z0, 15))
+
+/*
+** qshl_u16_x_tied1:
+** uqshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qshl_u16_x_tied1, svuint16_t, svint16_t,
+ z0 = svqshl_u16_x (p0, z0, z4),
+ z0 = svqshl_x (p0, z0, z4))
+
+/*
+** qshl_u16_x_tied2:
+** uqshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u16_x_tied2, svuint16_t, svint16_t,
+ z0_res = svqshl_u16_x (p0, z4, z0),
+ z0_res = svqshl_x (p0, z4, z0))
+
+/*
+** qshl_u16_x_untied:
+** (
+** movprfx z0, z1
+** uqshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0, z4
+** uqshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_u16_x_untied, svuint16_t, svint16_t,
+ z0 = svqshl_u16_x (p0, z1, z4),
+ z0 = svqshl_x (p0, z1, z4))
+
+/*
+** qshl_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** uqshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u16_x_tied1, svuint16_t, int16_t,
+ z0 = svqshl_n_u16_x (p0, z0, x0),
+ z0 = svqshl_x (p0, z0, x0))
+
+/*
+** qshl_w0_u16_x_untied:
+** mov z0\.h, w0
+** uqshlr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u16_x_untied, svuint16_t, int16_t,
+ z0 = svqshl_n_u16_x (p0, z1, x0),
+ z0 = svqshl_x (p0, z1, x0))
+
+/*
+** qshl_m16_u16_x:
+** lsr z0\.h, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m16_u16_x, svuint16_t,
+ z0 = svqshl_n_u16_x (p0, z0, -16),
+ z0 = svqshl_x (p0, z0, -16))
+
+/*
+** qshl_m2_u16_x:
+** lsr z0\.h, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u16_x, svuint16_t,
+ z0 = svqshl_n_u16_x (p0, z0, -2),
+ z0 = svqshl_x (p0, z0, -2))
+
+/*
+** qshl_m1_u16_x_tied1:
+** lsr z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u16_x_tied1, svuint16_t,
+ z0 = svqshl_n_u16_x (p0, z0, -1),
+ z0 = svqshl_x (p0, z0, -1))
+
+/*
+** qshl_m1_u16_x_untied:
+** lsr z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u16_x_untied, svuint16_t,
+ z0 = svqshl_n_u16_x (p0, z1, -1),
+ z0 = svqshl_x (p0, z1, -1))
+
+/*
+** qshl_1_u16_x_tied1:
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u16_x_tied1, svuint16_t,
+ z0 = svqshl_n_u16_x (p0, z0, 1),
+ z0 = svqshl_x (p0, z0, 1))
+
+/*
+** qshl_1_u16_x_untied:
+** movprfx z0, z1
+** uqshl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u16_x_untied, svuint16_t,
+ z0 = svqshl_n_u16_x (p0, z1, 1),
+ z0 = svqshl_x (p0, z1, 1))
+
+/*
+** qshl_2_u16_x:
+** uqshl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u16_x, svuint16_t,
+ z0 = svqshl_n_u16_x (p0, z0, 2),
+ z0 = svqshl_x (p0, z0, 2))
+
+/*
+** qshl_15_u16_x:
+** uqshl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (qshl_15_u16_x, svuint16_t,
+ z0 = svqshl_n_u16_x (p0, z0, 15),
+ z0 = svqshl_x (p0, z0, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshl_u32_m_tied1:
+** uqshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qshl_u32_m_tied1, svuint32_t, svint32_t,
+ z0 = svqshl_u32_m (p0, z0, z4),
+ z0 = svqshl_m (p0, z0, z4))
+
+/*
+** qshl_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uqshl z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u32_m_tied2, svuint32_t, svint32_t,
+ z0_res = svqshl_u32_m (p0, z4, z0),
+ z0_res = svqshl_m (p0, z4, z0))
+
+/*
+** qshl_u32_m_untied:
+** movprfx z0, z1
+** uqshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qshl_u32_m_untied, svuint32_t, svint32_t,
+ z0 = svqshl_u32_m (p0, z1, z4),
+ z0 = svqshl_m (p0, z1, z4))
+
+/*
+** qshl_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** uqshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u32_m_tied1, svuint32_t, int32_t,
+ z0 = svqshl_n_u32_m (p0, z0, x0),
+ z0 = svqshl_m (p0, z0, x0))
+
+/*
+** qshl_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uqshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u32_m_untied, svuint32_t, int32_t,
+ z0 = svqshl_n_u32_m (p0, z1, x0),
+ z0 = svqshl_m (p0, z1, x0))
+
+/*
+** qshl_m32_u32_m:
+** lsr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m32_u32_m, svuint32_t,
+ z0 = svqshl_n_u32_m (p0, z0, -32),
+ z0 = svqshl_m (p0, z0, -32))
+
+/*
+** qshl_m2_u32_m:
+** lsr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u32_m, svuint32_t,
+ z0 = svqshl_n_u32_m (p0, z0, -2),
+ z0 = svqshl_m (p0, z0, -2))
+
+/*
+** qshl_m1_u32_m_tied1:
+** lsr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u32_m_tied1, svuint32_t,
+ z0 = svqshl_n_u32_m (p0, z0, -1),
+ z0 = svqshl_m (p0, z0, -1))
+
+/*
+** qshl_m1_u32_m_untied:
+** movprfx z0, z1
+** lsr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u32_m_untied, svuint32_t,
+ z0 = svqshl_n_u32_m (p0, z1, -1),
+ z0 = svqshl_m (p0, z1, -1))
+
+/*
+** qshl_1_u32_m_tied1:
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u32_m_tied1, svuint32_t,
+ z0 = svqshl_n_u32_m (p0, z0, 1),
+ z0 = svqshl_m (p0, z0, 1))
+
+/*
+** qshl_1_u32_m_untied:
+** movprfx z0, z1
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u32_m_untied, svuint32_t,
+ z0 = svqshl_n_u32_m (p0, z1, 1),
+ z0 = svqshl_m (p0, z1, 1))
+
+/*
+** qshl_2_u32_m:
+** uqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u32_m, svuint32_t,
+ z0 = svqshl_n_u32_m (p0, z0, 2),
+ z0 = svqshl_m (p0, z0, 2))
+
+/*
+** qshl_31_u32_m:
+** uqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qshl_31_u32_m, svuint32_t,
+ z0 = svqshl_n_u32_m (p0, z0, 31),
+ z0 = svqshl_m (p0, z0, 31))
+
+/*
+** qshl_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uqshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qshl_u32_z_tied1, svuint32_t, svint32_t,
+ z0 = svqshl_u32_z (p0, z0, z4),
+ z0 = svqshl_z (p0, z0, z4))
+
+/*
+** qshl_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** uqshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u32_z_tied2, svuint32_t, svint32_t,
+ z0_res = svqshl_u32_z (p0, z4, z0),
+ z0_res = svqshl_z (p0, z4, z0))
+
+/*
+** qshl_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0\.s, p0/z, z4\.s
+** uqshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_u32_z_untied, svuint32_t, svint32_t,
+ z0 = svqshl_u32_z (p0, z1, z4),
+ z0 = svqshl_z (p0, z1, z4))
+
+/*
+** qshl_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** uqshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u32_z_tied1, svuint32_t, int32_t,
+ z0 = svqshl_n_u32_z (p0, z0, x0),
+ z0 = svqshl_z (p0, z0, x0))
+
+/*
+** qshl_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqshl z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uqshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u32_z_untied, svuint32_t, int32_t,
+ z0 = svqshl_n_u32_z (p0, z1, x0),
+ z0 = svqshl_z (p0, z1, x0))
+
+/*
+** qshl_m32_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** lsr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m32_u32_z, svuint32_t,
+ z0 = svqshl_n_u32_z (p0, z0, -32),
+ z0 = svqshl_z (p0, z0, -32))
+
+/*
+** qshl_m2_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** lsr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u32_z, svuint32_t,
+ z0 = svqshl_n_u32_z (p0, z0, -2),
+ z0 = svqshl_z (p0, z0, -2))
+
+/*
+** qshl_m1_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** lsr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u32_z_tied1, svuint32_t,
+ z0 = svqshl_n_u32_z (p0, z0, -1),
+ z0 = svqshl_z (p0, z0, -1))
+
+/*
+** qshl_m1_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** lsr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u32_z_untied, svuint32_t,
+ z0 = svqshl_n_u32_z (p0, z1, -1),
+ z0 = svqshl_z (p0, z1, -1))
+
+/*
+** qshl_1_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u32_z_tied1, svuint32_t,
+ z0 = svqshl_n_u32_z (p0, z0, 1),
+ z0 = svqshl_z (p0, z0, 1))
+
+/*
+** qshl_1_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u32_z_untied, svuint32_t,
+ z0 = svqshl_n_u32_z (p0, z1, 1),
+ z0 = svqshl_z (p0, z1, 1))
+
+/*
+** qshl_2_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** uqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u32_z, svuint32_t,
+ z0 = svqshl_n_u32_z (p0, z0, 2),
+ z0 = svqshl_z (p0, z0, 2))
+
+/*
+** qshl_31_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** uqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qshl_31_u32_z, svuint32_t,
+ z0 = svqshl_n_u32_z (p0, z0, 31),
+ z0 = svqshl_z (p0, z0, 31))
+
+/*
+** qshl_u32_x_tied1:
+** uqshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qshl_u32_x_tied1, svuint32_t, svint32_t,
+ z0 = svqshl_u32_x (p0, z0, z4),
+ z0 = svqshl_x (p0, z0, z4))
+
+/*
+** qshl_u32_x_tied2:
+** uqshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u32_x_tied2, svuint32_t, svint32_t,
+ z0_res = svqshl_u32_x (p0, z4, z0),
+ z0_res = svqshl_x (p0, z4, z0))
+
+/*
+** qshl_u32_x_untied:
+** (
+** movprfx z0, z1
+** uqshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0, z4
+** uqshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_u32_x_untied, svuint32_t, svint32_t,
+ z0 = svqshl_u32_x (p0, z1, z4),
+ z0 = svqshl_x (p0, z1, z4))
+
+/*
+** qshl_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** uqshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u32_x_tied1, svuint32_t, int32_t,
+ z0 = svqshl_n_u32_x (p0, z0, x0),
+ z0 = svqshl_x (p0, z0, x0))
+
+/*
+** qshl_w0_u32_x_untied:
+** mov z0\.s, w0
+** uqshlr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u32_x_untied, svuint32_t, int32_t,
+ z0 = svqshl_n_u32_x (p0, z1, x0),
+ z0 = svqshl_x (p0, z1, x0))
+
+/*
+** qshl_m32_u32_x:
+** lsr z0\.s, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m32_u32_x, svuint32_t,
+ z0 = svqshl_n_u32_x (p0, z0, -32),
+ z0 = svqshl_x (p0, z0, -32))
+
+/*
+** qshl_m2_u32_x:
+** lsr z0\.s, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u32_x, svuint32_t,
+ z0 = svqshl_n_u32_x (p0, z0, -2),
+ z0 = svqshl_x (p0, z0, -2))
+
+/*
+** qshl_m1_u32_x_tied1:
+** lsr z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u32_x_tied1, svuint32_t,
+ z0 = svqshl_n_u32_x (p0, z0, -1),
+ z0 = svqshl_x (p0, z0, -1))
+
+/*
+** qshl_m1_u32_x_untied:
+** lsr z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u32_x_untied, svuint32_t,
+ z0 = svqshl_n_u32_x (p0, z1, -1),
+ z0 = svqshl_x (p0, z1, -1))
+
+/*
+** qshl_1_u32_x_tied1:
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u32_x_tied1, svuint32_t,
+ z0 = svqshl_n_u32_x (p0, z0, 1),
+ z0 = svqshl_x (p0, z0, 1))
+
+/*
+** qshl_1_u32_x_untied:
+** movprfx z0, z1
+** uqshl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u32_x_untied, svuint32_t,
+ z0 = svqshl_n_u32_x (p0, z1, 1),
+ z0 = svqshl_x (p0, z1, 1))
+
+/*
+** qshl_2_u32_x:
+** uqshl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u32_x, svuint32_t,
+ z0 = svqshl_n_u32_x (p0, z0, 2),
+ z0 = svqshl_x (p0, z0, 2))
+
+/*
+** qshl_31_u32_x:
+** uqshl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (qshl_31_u32_x, svuint32_t,
+ z0 = svqshl_n_u32_x (p0, z0, 31),
+ z0 = svqshl_x (p0, z0, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshl_u64_m_tied1:
+** uqshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qshl_u64_m_tied1, svuint64_t, svint64_t,
+ z0 = svqshl_u64_m (p0, z0, z4),
+ z0 = svqshl_m (p0, z0, z4))
+
+/*
+** qshl_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** uqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u64_m_tied2, svuint64_t, svint64_t,
+ z0_res = svqshl_u64_m (p0, z4, z0),
+ z0_res = svqshl_m (p0, z4, z0))
+
+/*
+** qshl_u64_m_untied:
+** movprfx z0, z1
+** uqshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qshl_u64_m_untied, svuint64_t, svint64_t,
+ z0 = svqshl_u64_m (p0, z1, z4),
+ z0 = svqshl_m (p0, z1, z4))
+
+/*
+** qshl_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** uqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_u64_m_tied1, svuint64_t, int64_t,
+ z0 = svqshl_n_u64_m (p0, z0, x0),
+ z0 = svqshl_m (p0, z0, x0))
+
+/*
+** qshl_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** uqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_u64_m_untied, svuint64_t, int64_t,
+ z0 = svqshl_n_u64_m (p0, z1, x0),
+ z0 = svqshl_m (p0, z1, x0))
+
+/*
+** qshl_m64_u64_m:
+** lsr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m64_u64_m, svuint64_t,
+ z0 = svqshl_n_u64_m (p0, z0, -64),
+ z0 = svqshl_m (p0, z0, -64))
+
+/*
+** qshl_m2_u64_m:
+** lsr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u64_m, svuint64_t,
+ z0 = svqshl_n_u64_m (p0, z0, -2),
+ z0 = svqshl_m (p0, z0, -2))
+
+/*
+** qshl_m1_u64_m_tied1:
+** lsr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u64_m_tied1, svuint64_t,
+ z0 = svqshl_n_u64_m (p0, z0, -1),
+ z0 = svqshl_m (p0, z0, -1))
+
+/*
+** qshl_m1_u64_m_untied:
+** movprfx z0, z1
+** lsr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u64_m_untied, svuint64_t,
+ z0 = svqshl_n_u64_m (p0, z1, -1),
+ z0 = svqshl_m (p0, z1, -1))
+
+/*
+** qshl_1_u64_m_tied1:
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u64_m_tied1, svuint64_t,
+ z0 = svqshl_n_u64_m (p0, z0, 1),
+ z0 = svqshl_m (p0, z0, 1))
+
+/*
+** qshl_1_u64_m_untied:
+** movprfx z0, z1
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u64_m_untied, svuint64_t,
+ z0 = svqshl_n_u64_m (p0, z1, 1),
+ z0 = svqshl_m (p0, z1, 1))
+
+/*
+** qshl_2_u64_m:
+** uqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u64_m, svuint64_t,
+ z0 = svqshl_n_u64_m (p0, z0, 2),
+ z0 = svqshl_m (p0, z0, 2))
+
+/*
+** qshl_63_u64_m:
+** uqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qshl_63_u64_m, svuint64_t,
+ z0 = svqshl_n_u64_m (p0, z0, 63),
+ z0 = svqshl_m (p0, z0, 63))
+
+/*
+** qshl_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uqshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qshl_u64_z_tied1, svuint64_t, svint64_t,
+ z0 = svqshl_u64_z (p0, z0, z4),
+ z0 = svqshl_z (p0, z0, z4))
+
+/*
+** qshl_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** uqshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u64_z_tied2, svuint64_t, svint64_t,
+ z0_res = svqshl_u64_z (p0, z4, z0),
+ z0_res = svqshl_z (p0, z4, z0))
+
+/*
+** qshl_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0\.d, p0/z, z4\.d
+** uqshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_u64_z_untied, svuint64_t, svint64_t,
+ z0 = svqshl_u64_z (p0, z1, z4),
+ z0 = svqshl_z (p0, z1, z4))
+
+/*
+** qshl_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** uqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_u64_z_tied1, svuint64_t, int64_t,
+ z0 = svqshl_n_u64_z (p0, z0, x0),
+ z0 = svqshl_z (p0, z0, x0))
+
+/*
+** qshl_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqshl z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uqshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_u64_z_untied, svuint64_t, int64_t,
+ z0 = svqshl_n_u64_z (p0, z1, x0),
+ z0 = svqshl_z (p0, z1, x0))
+
+/*
+** qshl_m64_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** lsr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m64_u64_z, svuint64_t,
+ z0 = svqshl_n_u64_z (p0, z0, -64),
+ z0 = svqshl_z (p0, z0, -64))
+
+/*
+** qshl_m2_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** lsr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u64_z, svuint64_t,
+ z0 = svqshl_n_u64_z (p0, z0, -2),
+ z0 = svqshl_z (p0, z0, -2))
+
+/*
+** qshl_m1_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** lsr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u64_z_tied1, svuint64_t,
+ z0 = svqshl_n_u64_z (p0, z0, -1),
+ z0 = svqshl_z (p0, z0, -1))
+
+/*
+** qshl_m1_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** lsr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u64_z_untied, svuint64_t,
+ z0 = svqshl_n_u64_z (p0, z1, -1),
+ z0 = svqshl_z (p0, z1, -1))
+
+/*
+** qshl_1_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u64_z_tied1, svuint64_t,
+ z0 = svqshl_n_u64_z (p0, z0, 1),
+ z0 = svqshl_z (p0, z0, 1))
+
+/*
+** qshl_1_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u64_z_untied, svuint64_t,
+ z0 = svqshl_n_u64_z (p0, z1, 1),
+ z0 = svqshl_z (p0, z1, 1))
+
+/*
+** qshl_2_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** uqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u64_z, svuint64_t,
+ z0 = svqshl_n_u64_z (p0, z0, 2),
+ z0 = svqshl_z (p0, z0, 2))
+
+/*
+** qshl_63_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** uqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qshl_63_u64_z, svuint64_t,
+ z0 = svqshl_n_u64_z (p0, z0, 63),
+ z0 = svqshl_z (p0, z0, 63))
+
+/*
+** qshl_u64_x_tied1:
+** uqshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qshl_u64_x_tied1, svuint64_t, svint64_t,
+ z0 = svqshl_u64_x (p0, z0, z4),
+ z0 = svqshl_x (p0, z0, z4))
+
+/*
+** qshl_u64_x_tied2:
+** uqshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u64_x_tied2, svuint64_t, svint64_t,
+ z0_res = svqshl_u64_x (p0, z4, z0),
+ z0_res = svqshl_x (p0, z4, z0))
+
+/*
+** qshl_u64_x_untied:
+** (
+** movprfx z0, z1
+** uqshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0, z4
+** uqshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_u64_x_untied, svuint64_t, svint64_t,
+ z0 = svqshl_u64_x (p0, z1, z4),
+ z0 = svqshl_x (p0, z1, z4))
+
+/*
+** qshl_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** uqshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_u64_x_tied1, svuint64_t, int64_t,
+ z0 = svqshl_n_u64_x (p0, z0, x0),
+ z0 = svqshl_x (p0, z0, x0))
+
+/*
+** qshl_x0_u64_x_untied:
+** mov z0\.d, x0
+** uqshlr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_x0_u64_x_untied, svuint64_t, int64_t,
+ z0 = svqshl_n_u64_x (p0, z1, x0),
+ z0 = svqshl_x (p0, z1, x0))
+
+/*
+** qshl_m64_u64_x:
+** lsr z0\.d, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m64_u64_x, svuint64_t,
+ z0 = svqshl_n_u64_x (p0, z0, -64),
+ z0 = svqshl_x (p0, z0, -64))
+
+/*
+** qshl_m2_u64_x:
+** lsr z0\.d, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u64_x, svuint64_t,
+ z0 = svqshl_n_u64_x (p0, z0, -2),
+ z0 = svqshl_x (p0, z0, -2))
+
+/*
+** qshl_m1_u64_x_tied1:
+** lsr z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u64_x_tied1, svuint64_t,
+ z0 = svqshl_n_u64_x (p0, z0, -1),
+ z0 = svqshl_x (p0, z0, -1))
+
+/*
+** qshl_m1_u64_x_untied:
+** lsr z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u64_x_untied, svuint64_t,
+ z0 = svqshl_n_u64_x (p0, z1, -1),
+ z0 = svqshl_x (p0, z1, -1))
+
+/*
+** qshl_1_u64_x_tied1:
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u64_x_tied1, svuint64_t,
+ z0 = svqshl_n_u64_x (p0, z0, 1),
+ z0 = svqshl_x (p0, z0, 1))
+
+/*
+** qshl_1_u64_x_untied:
+** movprfx z0, z1
+** uqshl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u64_x_untied, svuint64_t,
+ z0 = svqshl_n_u64_x (p0, z1, 1),
+ z0 = svqshl_x (p0, z1, 1))
+
+/*
+** qshl_2_u64_x:
+** uqshl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u64_x, svuint64_t,
+ z0 = svqshl_n_u64_x (p0, z0, 2),
+ z0 = svqshl_x (p0, z0, 2))
+
+/*
+** qshl_63_u64_x:
+** uqshl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (qshl_63_u64_x, svuint64_t,
+ z0 = svqshl_n_u64_x (p0, z0, 63),
+ z0 = svqshl_x (p0, z0, 63))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshl_u8_m_tied1:
+** uqshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qshl_u8_m_tied1, svuint8_t, svint8_t,
+ z0 = svqshl_u8_m (p0, z0, z4),
+ z0 = svqshl_m (p0, z0, z4))
+
+/*
+** qshl_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** uqshl z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u8_m_tied2, svuint8_t, svint8_t,
+ z0_res = svqshl_u8_m (p0, z4, z0),
+ z0_res = svqshl_m (p0, z4, z0))
+
+/*
+** qshl_u8_m_untied:
+** movprfx z0, z1
+** uqshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qshl_u8_m_untied, svuint8_t, svint8_t,
+ z0 = svqshl_u8_m (p0, z1, z4),
+ z0 = svqshl_m (p0, z1, z4))
+
+/*
+** qshl_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** uqshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u8_m_tied1, svuint8_t, int8_t,
+ z0 = svqshl_n_u8_m (p0, z0, x0),
+ z0 = svqshl_m (p0, z0, x0))
+
+/*
+** qshl_w0_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uqshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u8_m_untied, svuint8_t, int8_t,
+ z0 = svqshl_n_u8_m (p0, z1, x0),
+ z0 = svqshl_m (p0, z1, x0))
+
+/*
+** qshl_m8_u8_m:
+** lsr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m8_u8_m, svuint8_t,
+ z0 = svqshl_n_u8_m (p0, z0, -8),
+ z0 = svqshl_m (p0, z0, -8))
+
+/*
+** qshl_m2_u8_m:
+** lsr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u8_m, svuint8_t,
+ z0 = svqshl_n_u8_m (p0, z0, -2),
+ z0 = svqshl_m (p0, z0, -2))
+
+/*
+** qshl_m1_u8_m_tied1:
+** lsr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u8_m_tied1, svuint8_t,
+ z0 = svqshl_n_u8_m (p0, z0, -1),
+ z0 = svqshl_m (p0, z0, -1))
+
+/*
+** qshl_m1_u8_m_untied:
+** movprfx z0, z1
+** lsr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u8_m_untied, svuint8_t,
+ z0 = svqshl_n_u8_m (p0, z1, -1),
+ z0 = svqshl_m (p0, z1, -1))
+
+/*
+** qshl_1_u8_m_tied1:
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u8_m_tied1, svuint8_t,
+ z0 = svqshl_n_u8_m (p0, z0, 1),
+ z0 = svqshl_m (p0, z0, 1))
+
+/*
+** qshl_1_u8_m_untied:
+** movprfx z0, z1
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u8_m_untied, svuint8_t,
+ z0 = svqshl_n_u8_m (p0, z1, 1),
+ z0 = svqshl_m (p0, z1, 1))
+
+/*
+** qshl_2_u8_m:
+** uqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u8_m, svuint8_t,
+ z0 = svqshl_n_u8_m (p0, z0, 2),
+ z0 = svqshl_m (p0, z0, 2))
+
+/*
+** qshl_7_u8_m:
+** uqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qshl_7_u8_m, svuint8_t,
+ z0 = svqshl_n_u8_m (p0, z0, 7),
+ z0 = svqshl_m (p0, z0, 7))
+
+/*
+** qshl_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uqshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qshl_u8_z_tied1, svuint8_t, svint8_t,
+ z0 = svqshl_u8_z (p0, z0, z4),
+ z0 = svqshl_z (p0, z0, z4))
+
+/*
+** qshl_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** uqshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u8_z_tied2, svuint8_t, svint8_t,
+ z0_res = svqshl_u8_z (p0, z4, z0),
+ z0_res = svqshl_z (p0, z4, z0))
+
+/*
+** qshl_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0\.b, p0/z, z4\.b
+** uqshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_u8_z_untied, svuint8_t, svint8_t,
+ z0 = svqshl_u8_z (p0, z1, z4),
+ z0 = svqshl_z (p0, z1, z4))
+
+/*
+** qshl_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** uqshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u8_z_tied1, svuint8_t, int8_t,
+ z0 = svqshl_n_u8_z (p0, z0, x0),
+ z0 = svqshl_z (p0, z0, x0))
+
+/*
+** qshl_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqshl z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uqshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u8_z_untied, svuint8_t, int8_t,
+ z0 = svqshl_n_u8_z (p0, z1, x0),
+ z0 = svqshl_z (p0, z1, x0))
+
+/*
+** qshl_m8_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** lsr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m8_u8_z, svuint8_t,
+ z0 = svqshl_n_u8_z (p0, z0, -8),
+ z0 = svqshl_z (p0, z0, -8))
+
+/*
+** qshl_m2_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** lsr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u8_z, svuint8_t,
+ z0 = svqshl_n_u8_z (p0, z0, -2),
+ z0 = svqshl_z (p0, z0, -2))
+
+/*
+** qshl_m1_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** lsr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u8_z_tied1, svuint8_t,
+ z0 = svqshl_n_u8_z (p0, z0, -1),
+ z0 = svqshl_z (p0, z0, -1))
+
+/*
+** qshl_m1_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** lsr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u8_z_untied, svuint8_t,
+ z0 = svqshl_n_u8_z (p0, z1, -1),
+ z0 = svqshl_z (p0, z1, -1))
+
+/*
+** qshl_1_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u8_z_tied1, svuint8_t,
+ z0 = svqshl_n_u8_z (p0, z0, 1),
+ z0 = svqshl_z (p0, z0, 1))
+
+/*
+** qshl_1_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u8_z_untied, svuint8_t,
+ z0 = svqshl_n_u8_z (p0, z1, 1),
+ z0 = svqshl_z (p0, z1, 1))
+
+/*
+** qshl_2_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** uqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u8_z, svuint8_t,
+ z0 = svqshl_n_u8_z (p0, z0, 2),
+ z0 = svqshl_z (p0, z0, 2))
+
+/*
+** qshl_7_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** uqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qshl_7_u8_z, svuint8_t,
+ z0 = svqshl_n_u8_z (p0, z0, 7),
+ z0 = svqshl_z (p0, z0, 7))
+
+/*
+** qshl_u8_x_tied1:
+** uqshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (qshl_u8_x_tied1, svuint8_t, svint8_t,
+ z0 = svqshl_u8_x (p0, z0, z4),
+ z0 = svqshl_x (p0, z0, z4))
+
+/*
+** qshl_u8_x_tied2:
+** uqshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (qshl_u8_x_tied2, svuint8_t, svint8_t,
+ z0_res = svqshl_u8_x (p0, z4, z0),
+ z0_res = svqshl_x (p0, z4, z0))
+
+/*
+** qshl_u8_x_untied:
+** (
+** movprfx z0, z1
+** uqshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0, z4
+** uqshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (qshl_u8_x_untied, svuint8_t, svint8_t,
+ z0 = svqshl_u8_x (p0, z1, z4),
+ z0 = svqshl_x (p0, z1, z4))
+
+/*
+** qshl_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** uqshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u8_x_tied1, svuint8_t, int8_t,
+ z0 = svqshl_n_u8_x (p0, z0, x0),
+ z0 = svqshl_x (p0, z0, x0))
+
+/*
+** qshl_w0_u8_x_untied:
+** mov z0\.b, w0
+** uqshlr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (qshl_w0_u8_x_untied, svuint8_t, int8_t,
+ z0 = svqshl_n_u8_x (p0, z1, x0),
+ z0 = svqshl_x (p0, z1, x0))
+
+/*
+** qshl_m8_u8_x:
+** lsr z0\.b, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m8_u8_x, svuint8_t,
+ z0 = svqshl_n_u8_x (p0, z0, -8),
+ z0 = svqshl_x (p0, z0, -8))
+
+/*
+** qshl_m2_u8_x:
+** lsr z0\.b, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m2_u8_x, svuint8_t,
+ z0 = svqshl_n_u8_x (p0, z0, -2),
+ z0 = svqshl_x (p0, z0, -2))
+
+/*
+** qshl_m1_u8_x_tied1:
+** lsr z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u8_x_tied1, svuint8_t,
+ z0 = svqshl_n_u8_x (p0, z0, -1),
+ z0 = svqshl_x (p0, z0, -1))
+
+/*
+** qshl_m1_u8_x_untied:
+** lsr z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_m1_u8_x_untied, svuint8_t,
+ z0 = svqshl_n_u8_x (p0, z1, -1),
+ z0 = svqshl_x (p0, z1, -1))
+
+/*
+** qshl_1_u8_x_tied1:
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u8_x_tied1, svuint8_t,
+ z0 = svqshl_n_u8_x (p0, z0, 1),
+ z0 = svqshl_x (p0, z0, 1))
+
+/*
+** qshl_1_u8_x_untied:
+** movprfx z0, z1
+** uqshl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qshl_1_u8_x_untied, svuint8_t,
+ z0 = svqshl_n_u8_x (p0, z1, 1),
+ z0 = svqshl_x (p0, z1, 1))
+
+/*
+** qshl_2_u8_x:
+** uqshl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (qshl_2_u8_x, svuint8_t,
+ z0 = svqshl_n_u8_x (p0, z0, 2),
+ z0 = svqshl_x (p0, z0, 2))
+
+/*
+** qshl_7_u8_x:
+** uqshl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (qshl_7_u8_x, svuint8_t,
+ z0 = svqshl_n_u8_x (p0, z0, 7),
+ z0 = svqshl_x (p0, z0, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshlu_0_s16_m_tied1:
+** sqshlu z0\.h, p0/m, z0\.h, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s16_m_tied1, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_m (p0, z0, 0),
+ z0_res = svqshlu_m (p0, z0, 0))
+
+/*
+** qshlu_0_s16_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.h, p0/m, z0\.h, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s16_m_untied, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_m (p0, z1, 0),
+ z0_res = svqshlu_m (p0, z1, 0))
+
+/*
+** qshlu_1_s16_m_tied1:
+** sqshlu z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s16_m_tied1, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_m (p0, z0, 1),
+ z0_res = svqshlu_m (p0, z0, 1))
+
+/*
+** qshlu_1_s16_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s16_m_untied, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_m (p0, z1, 1),
+ z0_res = svqshlu_m (p0, z1, 1))
+
+/*
+** qshlu_15_s16_m_tied1:
+** sqshlu z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_15_s16_m_tied1, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_m (p0, z0, 15),
+ z0_res = svqshlu_m (p0, z0, 15))
+
+/*
+** qshlu_15_s16_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_15_s16_m_untied, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_m (p0, z1, 15),
+ z0_res = svqshlu_m (p0, z1, 15))
+
+/*
+** qshlu_0_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshlu z0\.h, p0/m, z0\.h, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s16_z_tied1, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_z (p0, z0, 0),
+ z0_res = svqshlu_z (p0, z0, 0))
+
+/*
+** qshlu_0_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** sqshlu z0\.h, p0/m, z0\.h, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s16_z_untied, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_z (p0, z1, 0),
+ z0_res = svqshlu_z (p0, z1, 0))
+
+/*
+** qshlu_1_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshlu z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s16_z_tied1, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_z (p0, z0, 1),
+ z0_res = svqshlu_z (p0, z0, 1))
+
+/*
+** qshlu_1_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** sqshlu z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s16_z_untied, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_z (p0, z1, 1),
+ z0_res = svqshlu_z (p0, z1, 1))
+
+/*
+** qshlu_15_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqshlu z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_15_s16_z_tied1, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_z (p0, z0, 15),
+ z0_res = svqshlu_z (p0, z0, 15))
+
+/*
+** qshlu_15_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** sqshlu z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_15_s16_z_untied, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_z (p0, z1, 15),
+ z0_res = svqshlu_z (p0, z1, 15))
+
+/*
+** qshlu_0_s16_x_tied1:
+** sqshlu z0\.h, p0/m, z0\.h, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s16_x_tied1, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_x (p0, z0, 0),
+ z0_res = svqshlu_x (p0, z0, 0))
+
+/*
+** qshlu_0_s16_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.h, p0/m, z0\.h, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s16_x_untied, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_x (p0, z1, 0),
+ z0_res = svqshlu_x (p0, z1, 0))
+
+/*
+** qshlu_1_s16_x_tied1:
+** sqshlu z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s16_x_tied1, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_x (p0, z0, 1),
+ z0_res = svqshlu_x (p0, z0, 1))
+
+/*
+** qshlu_1_s16_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s16_x_untied, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_x (p0, z1, 1),
+ z0_res = svqshlu_x (p0, z1, 1))
+
+/*
+** qshlu_15_s16_x_tied1:
+** sqshlu z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_15_s16_x_tied1, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_x (p0, z0, 15),
+ z0_res = svqshlu_x (p0, z0, 15))
+
+/*
+** qshlu_15_s16_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_15_s16_x_untied, svuint16_t, svint16_t,
+ z0_res = svqshlu_n_s16_x (p0, z1, 15),
+ z0_res = svqshlu_x (p0, z1, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshlu_0_s32_m_tied1:
+** sqshlu z0\.s, p0/m, z0\.s, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s32_m_tied1, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_m (p0, z0, 0),
+ z0_res = svqshlu_m (p0, z0, 0))
+
+/*
+** qshlu_0_s32_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.s, p0/m, z0\.s, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s32_m_untied, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_m (p0, z1, 0),
+ z0_res = svqshlu_m (p0, z1, 0))
+
+/*
+** qshlu_1_s32_m_tied1:
+** sqshlu z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s32_m_tied1, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_m (p0, z0, 1),
+ z0_res = svqshlu_m (p0, z0, 1))
+
+/*
+** qshlu_1_s32_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s32_m_untied, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_m (p0, z1, 1),
+ z0_res = svqshlu_m (p0, z1, 1))
+
+/*
+** qshlu_31_s32_m_tied1:
+** sqshlu z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_31_s32_m_tied1, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_m (p0, z0, 31),
+ z0_res = svqshlu_m (p0, z0, 31))
+
+/*
+** qshlu_31_s32_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_31_s32_m_untied, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_m (p0, z1, 31),
+ z0_res = svqshlu_m (p0, z1, 31))
+
+/*
+** qshlu_0_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshlu z0\.s, p0/m, z0\.s, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s32_z_tied1, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_z (p0, z0, 0),
+ z0_res = svqshlu_z (p0, z0, 0))
+
+/*
+** qshlu_0_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** sqshlu z0\.s, p0/m, z0\.s, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s32_z_untied, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_z (p0, z1, 0),
+ z0_res = svqshlu_z (p0, z1, 0))
+
+/*
+** qshlu_1_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshlu z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s32_z_tied1, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_z (p0, z0, 1),
+ z0_res = svqshlu_z (p0, z0, 1))
+
+/*
+** qshlu_1_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** sqshlu z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s32_z_untied, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_z (p0, z1, 1),
+ z0_res = svqshlu_z (p0, z1, 1))
+
+/*
+** qshlu_31_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqshlu z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_31_s32_z_tied1, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_z (p0, z0, 31),
+ z0_res = svqshlu_z (p0, z0, 31))
+
+/*
+** qshlu_31_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** sqshlu z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_31_s32_z_untied, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_z (p0, z1, 31),
+ z0_res = svqshlu_z (p0, z1, 31))
+
+/*
+** qshlu_0_s32_x_tied1:
+** sqshlu z0\.s, p0/m, z0\.s, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s32_x_tied1, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_x (p0, z0, 0),
+ z0_res = svqshlu_x (p0, z0, 0))
+
+/*
+** qshlu_0_s32_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.s, p0/m, z0\.s, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s32_x_untied, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_x (p0, z1, 0),
+ z0_res = svqshlu_x (p0, z1, 0))
+
+/*
+** qshlu_1_s32_x_tied1:
+** sqshlu z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s32_x_tied1, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_x (p0, z0, 1),
+ z0_res = svqshlu_x (p0, z0, 1))
+
+/*
+** qshlu_1_s32_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s32_x_untied, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_x (p0, z1, 1),
+ z0_res = svqshlu_x (p0, z1, 1))
+
+/*
+** qshlu_31_s32_x_tied1:
+** sqshlu z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_31_s32_x_tied1, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_x (p0, z0, 31),
+ z0_res = svqshlu_x (p0, z0, 31))
+
+/*
+** qshlu_31_s32_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_31_s32_x_untied, svuint32_t, svint32_t,
+ z0_res = svqshlu_n_s32_x (p0, z1, 31),
+ z0_res = svqshlu_x (p0, z1, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshlu_0_s64_m_tied1:
+** sqshlu z0\.d, p0/m, z0\.d, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s64_m_tied1, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_m (p0, z0, 0),
+ z0_res = svqshlu_m (p0, z0, 0))
+
+/*
+** qshlu_0_s64_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.d, p0/m, z0\.d, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s64_m_untied, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_m (p0, z1, 0),
+ z0_res = svqshlu_m (p0, z1, 0))
+
+/*
+** qshlu_1_s64_m_tied1:
+** sqshlu z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s64_m_tied1, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_m (p0, z0, 1),
+ z0_res = svqshlu_m (p0, z0, 1))
+
+/*
+** qshlu_1_s64_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s64_m_untied, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_m (p0, z1, 1),
+ z0_res = svqshlu_m (p0, z1, 1))
+
+/*
+** qshlu_63_s64_m_tied1:
+** sqshlu z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_63_s64_m_tied1, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_m (p0, z0, 63),
+ z0_res = svqshlu_m (p0, z0, 63))
+
+/*
+** qshlu_63_s64_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_63_s64_m_untied, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_m (p0, z1, 63),
+ z0_res = svqshlu_m (p0, z1, 63))
+
+/*
+** qshlu_0_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshlu z0\.d, p0/m, z0\.d, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s64_z_tied1, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_z (p0, z0, 0),
+ z0_res = svqshlu_z (p0, z0, 0))
+
+/*
+** qshlu_0_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** sqshlu z0\.d, p0/m, z0\.d, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s64_z_untied, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_z (p0, z1, 0),
+ z0_res = svqshlu_z (p0, z1, 0))
+
+/*
+** qshlu_1_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshlu z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s64_z_tied1, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_z (p0, z0, 1),
+ z0_res = svqshlu_z (p0, z0, 1))
+
+/*
+** qshlu_1_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** sqshlu z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s64_z_untied, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_z (p0, z1, 1),
+ z0_res = svqshlu_z (p0, z1, 1))
+
+/*
+** qshlu_63_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqshlu z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_63_s64_z_tied1, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_z (p0, z0, 63),
+ z0_res = svqshlu_z (p0, z0, 63))
+
+/*
+** qshlu_63_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** sqshlu z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_63_s64_z_untied, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_z (p0, z1, 63),
+ z0_res = svqshlu_z (p0, z1, 63))
+
+/*
+** qshlu_0_s64_x_tied1:
+** sqshlu z0\.d, p0/m, z0\.d, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s64_x_tied1, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_x (p0, z0, 0),
+ z0_res = svqshlu_x (p0, z0, 0))
+
+/*
+** qshlu_0_s64_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.d, p0/m, z0\.d, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s64_x_untied, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_x (p0, z1, 0),
+ z0_res = svqshlu_x (p0, z1, 0))
+
+/*
+** qshlu_1_s64_x_tied1:
+** sqshlu z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s64_x_tied1, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_x (p0, z0, 1),
+ z0_res = svqshlu_x (p0, z0, 1))
+
+/*
+** qshlu_1_s64_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s64_x_untied, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_x (p0, z1, 1),
+ z0_res = svqshlu_x (p0, z1, 1))
+
+/*
+** qshlu_63_s64_x_tied1:
+** sqshlu z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_63_s64_x_tied1, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_x (p0, z0, 63),
+ z0_res = svqshlu_x (p0, z0, 63))
+
+/*
+** qshlu_63_s64_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_63_s64_x_untied, svuint64_t, svint64_t,
+ z0_res = svqshlu_n_s64_x (p0, z1, 63),
+ z0_res = svqshlu_x (p0, z1, 63))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshlu_0_s8_m_tied1:
+** sqshlu z0\.b, p0/m, z0\.b, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s8_m_tied1, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_m (p0, z0, 0),
+ z0_res = svqshlu_m (p0, z0, 0))
+
+/*
+** qshlu_0_s8_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.b, p0/m, z0\.b, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s8_m_untied, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_m (p0, z1, 0),
+ z0_res = svqshlu_m (p0, z1, 0))
+
+/*
+** qshlu_1_s8_m_tied1:
+** sqshlu z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s8_m_tied1, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_m (p0, z0, 1),
+ z0_res = svqshlu_m (p0, z0, 1))
+
+/*
+** qshlu_1_s8_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s8_m_untied, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_m (p0, z1, 1),
+ z0_res = svqshlu_m (p0, z1, 1))
+
+/*
+** qshlu_7_s8_m_tied1:
+** sqshlu z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_7_s8_m_tied1, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_m (p0, z0, 7),
+ z0_res = svqshlu_m (p0, z0, 7))
+
+/*
+** qshlu_7_s8_m_untied:
+** movprfx z0, z1
+** sqshlu z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_7_s8_m_untied, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_m (p0, z1, 7),
+ z0_res = svqshlu_m (p0, z1, 7))
+
+/*
+** qshlu_0_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshlu z0\.b, p0/m, z0\.b, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s8_z_tied1, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_z (p0, z0, 0),
+ z0_res = svqshlu_z (p0, z0, 0))
+
+/*
+** qshlu_0_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** sqshlu z0\.b, p0/m, z0\.b, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s8_z_untied, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_z (p0, z1, 0),
+ z0_res = svqshlu_z (p0, z1, 0))
+
+/*
+** qshlu_1_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshlu z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s8_z_tied1, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_z (p0, z0, 1),
+ z0_res = svqshlu_z (p0, z0, 1))
+
+/*
+** qshlu_1_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** sqshlu z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s8_z_untied, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_z (p0, z1, 1),
+ z0_res = svqshlu_z (p0, z1, 1))
+
+/*
+** qshlu_7_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqshlu z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_7_s8_z_tied1, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_z (p0, z0, 7),
+ z0_res = svqshlu_z (p0, z0, 7))
+
+/*
+** qshlu_7_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** sqshlu z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_7_s8_z_untied, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_z (p0, z1, 7),
+ z0_res = svqshlu_z (p0, z1, 7))
+
+/*
+** qshlu_0_s8_x_tied1:
+** sqshlu z0\.b, p0/m, z0\.b, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s8_x_tied1, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_x (p0, z0, 0),
+ z0_res = svqshlu_x (p0, z0, 0))
+
+/*
+** qshlu_0_s8_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.b, p0/m, z0\.b, #0
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_0_s8_x_untied, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_x (p0, z1, 0),
+ z0_res = svqshlu_x (p0, z1, 0))
+
+/*
+** qshlu_1_s8_x_tied1:
+** sqshlu z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s8_x_tied1, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_x (p0, z0, 1),
+ z0_res = svqshlu_x (p0, z0, 1))
+
+/*
+** qshlu_1_s8_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_1_s8_x_untied, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_x (p0, z1, 1),
+ z0_res = svqshlu_x (p0, z1, 1))
+
+/*
+** qshlu_7_s8_x_tied1:
+** sqshlu z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_7_s8_x_tied1, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_x (p0, z0, 7),
+ z0_res = svqshlu_x (p0, z0, 7))
+
+/*
+** qshlu_7_s8_x_untied:
+** movprfx z0, z1
+** sqshlu z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_DUAL_Z_REV (qshlu_7_s8_x_untied, svuint8_t, svint8_t,
+ z0_res = svqshlu_n_s8_x (p0, z1, 7),
+ z0_res = svqshlu_x (p0, z1, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnb_1_s16:
+** sqshrnb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_1_s16, svint8_t, svint16_t,
+ z0_res = svqshrnb_n_s16 (z0, 1),
+ z0_res = svqshrnb (z0, 1))
+
+/*
+** qshrnb_2_s16:
+** sqshrnb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_2_s16, svint8_t, svint16_t,
+ z0_res = svqshrnb_n_s16 (z0, 2),
+ z0_res = svqshrnb (z0, 2))
+
+/*
+** qshrnb_8_s16_tied1:
+** sqshrnb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_8_s16_tied1, svint8_t, svint16_t,
+ z0_res = svqshrnb_n_s16 (z0, 8),
+ z0_res = svqshrnb (z0, 8))
+
+/*
+** qshrnb_8_s16_untied:
+** sqshrnb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_8_s16_untied, svint8_t, svint16_t,
+ z0_res = svqshrnb_n_s16 (z1, 8),
+ z0_res = svqshrnb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnb_1_s32:
+** sqshrnb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_1_s32, svint16_t, svint32_t,
+ z0_res = svqshrnb_n_s32 (z0, 1),
+ z0_res = svqshrnb (z0, 1))
+
+/*
+** qshrnb_2_s32:
+** sqshrnb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_2_s32, svint16_t, svint32_t,
+ z0_res = svqshrnb_n_s32 (z0, 2),
+ z0_res = svqshrnb (z0, 2))
+
+/*
+** qshrnb_16_s32_tied1:
+** sqshrnb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_16_s32_tied1, svint16_t, svint32_t,
+ z0_res = svqshrnb_n_s32 (z0, 16),
+ z0_res = svqshrnb (z0, 16))
+
+/*
+** qshrnb_16_s32_untied:
+** sqshrnb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_16_s32_untied, svint16_t, svint32_t,
+ z0_res = svqshrnb_n_s32 (z1, 16),
+ z0_res = svqshrnb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnb_1_s64:
+** sqshrnb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_1_s64, svint32_t, svint64_t,
+ z0_res = svqshrnb_n_s64 (z0, 1),
+ z0_res = svqshrnb (z0, 1))
+
+/*
+** qshrnb_2_s64:
+** sqshrnb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_2_s64, svint32_t, svint64_t,
+ z0_res = svqshrnb_n_s64 (z0, 2),
+ z0_res = svqshrnb (z0, 2))
+
+/*
+** qshrnb_32_s64_tied1:
+** sqshrnb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_32_s64_tied1, svint32_t, svint64_t,
+ z0_res = svqshrnb_n_s64 (z0, 32),
+ z0_res = svqshrnb (z0, 32))
+
+/*
+** qshrnb_32_s64_untied:
+** sqshrnb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_32_s64_untied, svint32_t, svint64_t,
+ z0_res = svqshrnb_n_s64 (z1, 32),
+ z0_res = svqshrnb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnb_1_u16:
+** uqshrnb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_1_u16, svuint8_t, svuint16_t,
+ z0_res = svqshrnb_n_u16 (z0, 1),
+ z0_res = svqshrnb (z0, 1))
+
+/*
+** qshrnb_2_u16:
+** uqshrnb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_2_u16, svuint8_t, svuint16_t,
+ z0_res = svqshrnb_n_u16 (z0, 2),
+ z0_res = svqshrnb (z0, 2))
+
+/*
+** qshrnb_8_u16_tied1:
+** uqshrnb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_8_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svqshrnb_n_u16 (z0, 8),
+ z0_res = svqshrnb (z0, 8))
+
+/*
+** qshrnb_8_u16_untied:
+** uqshrnb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_8_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svqshrnb_n_u16 (z1, 8),
+ z0_res = svqshrnb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnb_1_u32:
+** uqshrnb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_1_u32, svuint16_t, svuint32_t,
+ z0_res = svqshrnb_n_u32 (z0, 1),
+ z0_res = svqshrnb (z0, 1))
+
+/*
+** qshrnb_2_u32:
+** uqshrnb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_2_u32, svuint16_t, svuint32_t,
+ z0_res = svqshrnb_n_u32 (z0, 2),
+ z0_res = svqshrnb (z0, 2))
+
+/*
+** qshrnb_16_u32_tied1:
+** uqshrnb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_16_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svqshrnb_n_u32 (z0, 16),
+ z0_res = svqshrnb (z0, 16))
+
+/*
+** qshrnb_16_u32_untied:
+** uqshrnb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_16_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svqshrnb_n_u32 (z1, 16),
+ z0_res = svqshrnb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnb_1_u64:
+** uqshrnb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_1_u64, svuint32_t, svuint64_t,
+ z0_res = svqshrnb_n_u64 (z0, 1),
+ z0_res = svqshrnb (z0, 1))
+
+/*
+** qshrnb_2_u64:
+** uqshrnb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_2_u64, svuint32_t, svuint64_t,
+ z0_res = svqshrnb_n_u64 (z0, 2),
+ z0_res = svqshrnb (z0, 2))
+
+/*
+** qshrnb_32_u64_tied1:
+** uqshrnb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_32_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svqshrnb_n_u64 (z0, 32),
+ z0_res = svqshrnb (z0, 32))
+
+/*
+** qshrnb_32_u64_untied:
+** uqshrnb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrnb_32_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svqshrnb_n_u64 (z1, 32),
+ z0_res = svqshrnb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnt_1_s16:
+** sqshrnt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (qshrnt_1_s16, svint8_t, svint16_t,
+ z0 = svqshrnt_n_s16 (z0, z4, 1),
+ z0 = svqshrnt (z0, z4, 1))
+
+/*
+** qshrnt_2_s16:
+** sqshrnt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (qshrnt_2_s16, svint8_t, svint16_t,
+ z0 = svqshrnt_n_s16 (z0, z4, 2),
+ z0 = svqshrnt (z0, z4, 2))
+
+/*
+** qshrnt_8_s16_tied1:
+** sqshrnt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (qshrnt_8_s16_tied1, svint8_t, svint16_t,
+ z0 = svqshrnt_n_s16 (z0, z4, 8),
+ z0 = svqshrnt (z0, z4, 8))
+
+/*
+** qshrnt_8_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** sqshrnt z0\.b, z4\.h, #8
+** |
+** sqshrnt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshrnt_8_s16_untied, svint8_t, svint16_t,
+ z0 = svqshrnt_n_s16 (z1, z4, 8),
+ z0 = svqshrnt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnt_1_s32:
+** sqshrnt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (qshrnt_1_s32, svint16_t, svint32_t,
+ z0 = svqshrnt_n_s32 (z0, z4, 1),
+ z0 = svqshrnt (z0, z4, 1))
+
+/*
+** qshrnt_2_s32:
+** sqshrnt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (qshrnt_2_s32, svint16_t, svint32_t,
+ z0 = svqshrnt_n_s32 (z0, z4, 2),
+ z0 = svqshrnt (z0, z4, 2))
+
+/*
+** qshrnt_16_s32_tied1:
+** sqshrnt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (qshrnt_16_s32_tied1, svint16_t, svint32_t,
+ z0 = svqshrnt_n_s32 (z0, z4, 16),
+ z0 = svqshrnt (z0, z4, 16))
+
+/*
+** qshrnt_16_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** sqshrnt z0\.h, z4\.s, #16
+** |
+** sqshrnt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshrnt_16_s32_untied, svint16_t, svint32_t,
+ z0 = svqshrnt_n_s32 (z1, z4, 16),
+ z0 = svqshrnt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnt_1_s64:
+** sqshrnt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (qshrnt_1_s64, svint32_t, svint64_t,
+ z0 = svqshrnt_n_s64 (z0, z4, 1),
+ z0 = svqshrnt (z0, z4, 1))
+
+/*
+** qshrnt_2_s64:
+** sqshrnt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (qshrnt_2_s64, svint32_t, svint64_t,
+ z0 = svqshrnt_n_s64 (z0, z4, 2),
+ z0 = svqshrnt (z0, z4, 2))
+
+/*
+** qshrnt_32_s64_tied1:
+** sqshrnt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (qshrnt_32_s64_tied1, svint32_t, svint64_t,
+ z0 = svqshrnt_n_s64 (z0, z4, 32),
+ z0 = svqshrnt (z0, z4, 32))
+
+/*
+** qshrnt_32_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** sqshrnt z0\.s, z4\.d, #32
+** |
+** sqshrnt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshrnt_32_s64_untied, svint32_t, svint64_t,
+ z0 = svqshrnt_n_s64 (z1, z4, 32),
+ z0 = svqshrnt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnt_1_u16:
+** uqshrnt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (qshrnt_1_u16, svuint8_t, svuint16_t,
+ z0 = svqshrnt_n_u16 (z0, z4, 1),
+ z0 = svqshrnt (z0, z4, 1))
+
+/*
+** qshrnt_2_u16:
+** uqshrnt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (qshrnt_2_u16, svuint8_t, svuint16_t,
+ z0 = svqshrnt_n_u16 (z0, z4, 2),
+ z0 = svqshrnt (z0, z4, 2))
+
+/*
+** qshrnt_8_u16_tied1:
+** uqshrnt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (qshrnt_8_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svqshrnt_n_u16 (z0, z4, 8),
+ z0 = svqshrnt (z0, z4, 8))
+
+/*
+** qshrnt_8_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** uqshrnt z0\.b, z4\.h, #8
+** |
+** uqshrnt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshrnt_8_u16_untied, svuint8_t, svuint16_t,
+ z0 = svqshrnt_n_u16 (z1, z4, 8),
+ z0 = svqshrnt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnt_1_u32:
+** uqshrnt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (qshrnt_1_u32, svuint16_t, svuint32_t,
+ z0 = svqshrnt_n_u32 (z0, z4, 1),
+ z0 = svqshrnt (z0, z4, 1))
+
+/*
+** qshrnt_2_u32:
+** uqshrnt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (qshrnt_2_u32, svuint16_t, svuint32_t,
+ z0 = svqshrnt_n_u32 (z0, z4, 2),
+ z0 = svqshrnt (z0, z4, 2))
+
+/*
+** qshrnt_16_u32_tied1:
+** uqshrnt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (qshrnt_16_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svqshrnt_n_u32 (z0, z4, 16),
+ z0 = svqshrnt (z0, z4, 16))
+
+/*
+** qshrnt_16_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** uqshrnt z0\.h, z4\.s, #16
+** |
+** uqshrnt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshrnt_16_u32_untied, svuint16_t, svuint32_t,
+ z0 = svqshrnt_n_u32 (z1, z4, 16),
+ z0 = svqshrnt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrnt_1_u64:
+** uqshrnt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (qshrnt_1_u64, svuint32_t, svuint64_t,
+ z0 = svqshrnt_n_u64 (z0, z4, 1),
+ z0 = svqshrnt (z0, z4, 1))
+
+/*
+** qshrnt_2_u64:
+** uqshrnt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (qshrnt_2_u64, svuint32_t, svuint64_t,
+ z0 = svqshrnt_n_u64 (z0, z4, 2),
+ z0 = svqshrnt (z0, z4, 2))
+
+/*
+** qshrnt_32_u64_tied1:
+** uqshrnt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (qshrnt_32_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svqshrnt_n_u64 (z0, z4, 32),
+ z0 = svqshrnt (z0, z4, 32))
+
+/*
+** qshrnt_32_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** uqshrnt z0\.s, z4\.d, #32
+** |
+** uqshrnt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshrnt_32_u64_untied, svuint32_t, svuint64_t,
+ z0 = svqshrnt_n_u64 (z1, z4, 32),
+ z0 = svqshrnt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrunb_1_s16:
+** sqshrunb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_1_s16, svuint8_t, svint16_t,
+ z0_res = svqshrunb_n_s16 (z0, 1),
+ z0_res = svqshrunb (z0, 1))
+
+/*
+** qshrunb_2_s16:
+** sqshrunb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_2_s16, svuint8_t, svint16_t,
+ z0_res = svqshrunb_n_s16 (z0, 2),
+ z0_res = svqshrunb (z0, 2))
+
+/*
+** qshrunb_8_s16_tied1:
+** sqshrunb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_8_s16_tied1, svuint8_t, svint16_t,
+ z0_res = svqshrunb_n_s16 (z0, 8),
+ z0_res = svqshrunb (z0, 8))
+
+/*
+** qshrunb_8_s16_untied:
+** sqshrunb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_8_s16_untied, svuint8_t, svint16_t,
+ z0_res = svqshrunb_n_s16 (z1, 8),
+ z0_res = svqshrunb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrunb_1_s32:
+** sqshrunb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_1_s32, svuint16_t, svint32_t,
+ z0_res = svqshrunb_n_s32 (z0, 1),
+ z0_res = svqshrunb (z0, 1))
+
+/*
+** qshrunb_2_s32:
+** sqshrunb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_2_s32, svuint16_t, svint32_t,
+ z0_res = svqshrunb_n_s32 (z0, 2),
+ z0_res = svqshrunb (z0, 2))
+
+/*
+** qshrunb_16_s32_tied1:
+** sqshrunb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_16_s32_tied1, svuint16_t, svint32_t,
+ z0_res = svqshrunb_n_s32 (z0, 16),
+ z0_res = svqshrunb (z0, 16))
+
+/*
+** qshrunb_16_s32_untied:
+** sqshrunb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_16_s32_untied, svuint16_t, svint32_t,
+ z0_res = svqshrunb_n_s32 (z1, 16),
+ z0_res = svqshrunb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrunb_1_s64:
+** sqshrunb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_1_s64, svuint32_t, svint64_t,
+ z0_res = svqshrunb_n_s64 (z0, 1),
+ z0_res = svqshrunb (z0, 1))
+
+/*
+** qshrunb_2_s64:
+** sqshrunb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_2_s64, svuint32_t, svint64_t,
+ z0_res = svqshrunb_n_s64 (z0, 2),
+ z0_res = svqshrunb (z0, 2))
+
+/*
+** qshrunb_32_s64_tied1:
+** sqshrunb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_32_s64_tied1, svuint32_t, svint64_t,
+ z0_res = svqshrunb_n_s64 (z0, 32),
+ z0_res = svqshrunb (z0, 32))
+
+/*
+** qshrunb_32_s64_untied:
+** sqshrunb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (qshrunb_32_s64_untied, svuint32_t, svint64_t,
+ z0_res = svqshrunb_n_s64 (z1, 32),
+ z0_res = svqshrunb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrunt_1_s16:
+** sqshrunt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (qshrunt_1_s16, svuint8_t, svint16_t,
+ z0 = svqshrunt_n_s16 (z0, z4, 1),
+ z0 = svqshrunt (z0, z4, 1))
+
+/*
+** qshrunt_2_s16:
+** sqshrunt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (qshrunt_2_s16, svuint8_t, svint16_t,
+ z0 = svqshrunt_n_s16 (z0, z4, 2),
+ z0 = svqshrunt (z0, z4, 2))
+
+/*
+** qshrunt_8_s16_tied1:
+** sqshrunt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (qshrunt_8_s16_tied1, svuint8_t, svint16_t,
+ z0 = svqshrunt_n_s16 (z0, z4, 8),
+ z0 = svqshrunt (z0, z4, 8))
+
+/*
+** qshrunt_8_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** sqshrunt z0\.b, z4\.h, #8
+** |
+** sqshrunt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshrunt_8_s16_untied, svuint8_t, svint16_t,
+ z0 = svqshrunt_n_s16 (z1, z4, 8),
+ z0 = svqshrunt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrunt_1_s32:
+** sqshrunt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (qshrunt_1_s32, svuint16_t, svint32_t,
+ z0 = svqshrunt_n_s32 (z0, z4, 1),
+ z0 = svqshrunt (z0, z4, 1))
+
+/*
+** qshrunt_2_s32:
+** sqshrunt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (qshrunt_2_s32, svuint16_t, svint32_t,
+ z0 = svqshrunt_n_s32 (z0, z4, 2),
+ z0 = svqshrunt (z0, z4, 2))
+
+/*
+** qshrunt_16_s32_tied1:
+** sqshrunt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (qshrunt_16_s32_tied1, svuint16_t, svint32_t,
+ z0 = svqshrunt_n_s32 (z0, z4, 16),
+ z0 = svqshrunt (z0, z4, 16))
+
+/*
+** qshrunt_16_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** sqshrunt z0\.h, z4\.s, #16
+** |
+** sqshrunt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshrunt_16_s32_untied, svuint16_t, svint32_t,
+ z0 = svqshrunt_n_s32 (z1, z4, 16),
+ z0 = svqshrunt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qshrunt_1_s64:
+** sqshrunt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (qshrunt_1_s64, svuint32_t, svint64_t,
+ z0 = svqshrunt_n_s64 (z0, z4, 1),
+ z0 = svqshrunt (z0, z4, 1))
+
+/*
+** qshrunt_2_s64:
+** sqshrunt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (qshrunt_2_s64, svuint32_t, svint64_t,
+ z0 = svqshrunt_n_s64 (z0, z4, 2),
+ z0 = svqshrunt (z0, z4, 2))
+
+/*
+** qshrunt_32_s64_tied1:
+** sqshrunt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (qshrunt_32_s64_tied1, svuint32_t, svint64_t,
+ z0 = svqshrunt_n_s64 (z0, z4, 32),
+ z0 = svqshrunt (z0, z4, 32))
+
+/*
+** qshrunt_32_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** sqshrunt z0\.s, z4\.d, #32
+** |
+** sqshrunt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qshrunt_32_s64_untied, svuint32_t, svint64_t,
+ z0 = svqshrunt_n_s64 (z1, z4, 32),
+ z0 = svqshrunt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsub_s16_tied1:
+** sqsub z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_tied1, svint16_t,
+ z0 = svqsub_s16 (z0, z1),
+ z0 = svqsub (z0, z1))
+
+/*
+** qsub_s16_tied2:
+** sqsub z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_tied2, svint16_t,
+ z0 = svqsub_s16 (z1, z0),
+ z0 = svqsub (z1, z0))
+
+/*
+** qsub_s16_untied:
+** sqsub z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_untied, svint16_t,
+ z0 = svqsub_s16 (z1, z2),
+ z0 = svqsub (z1, z2))
+
+/*
+** qsub_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** sqsub z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s16_tied1, svint16_t, int16_t,
+ z0 = svqsub_n_s16 (z0, x0),
+ z0 = svqsub (z0, x0))
+
+/*
+** qsub_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** sqsub z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s16_untied, svint16_t, int16_t,
+ z0 = svqsub_n_s16 (z1, x0),
+ z0 = svqsub (z1, x0))
+
+/*
+** qsub_1_s16_tied1:
+** sqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s16_tied1, svint16_t,
+ z0 = svqsub_n_s16 (z0, 1),
+ z0 = svqsub (z0, 1))
+
+/*
+** qsub_1_s16_untied:
+** movprfx z0, z1
+** sqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s16_untied, svint16_t,
+ z0 = svqsub_n_s16 (z1, 1),
+ z0 = svqsub (z1, 1))
+
+/*
+** qsub_127_s16:
+** sqsub z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s16, svint16_t,
+ z0 = svqsub_n_s16 (z0, 127),
+ z0 = svqsub (z0, 127))
+
+/*
+** qsub_128_s16:
+** sqsub z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s16, svint16_t,
+ z0 = svqsub_n_s16 (z0, 128),
+ z0 = svqsub (z0, 128))
+
+/*
+** qsub_255_s16:
+** sqsub z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s16, svint16_t,
+ z0 = svqsub_n_s16 (z0, 255),
+ z0 = svqsub (z0, 255))
+
+/*
+** qsub_m1_s16:
+** sqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s16, svint16_t,
+ z0 = svqsub_n_s16 (z0, -1),
+ z0 = svqsub (z0, -1))
+
+/*
+** qsub_m127_s16:
+** sqadd z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s16, svint16_t,
+ z0 = svqsub_n_s16 (z0, -127),
+ z0 = svqsub (z0, -127))
+
+/*
+** qsub_m128_s16:
+** sqadd z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s16, svint16_t,
+ z0 = svqsub_n_s16 (z0, -128),
+ z0 = svqsub (z0, -128))
+
+/*
+** qsub_s16_m_tied1:
+** sqsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_m_tied1, svint16_t,
+ z0 = svqsub_s16_m (p0, z0, z1),
+ z0 = svqsub_m (p0, z0, z1))
+
+/*
+** qsub_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqsub z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_m_tied2, svint16_t,
+ z0 = svqsub_s16_m (p0, z1, z0),
+ z0 = svqsub_m (p0, z1, z0))
+
+/*
+** qsub_s16_m_untied:
+** movprfx z0, z1
+** sqsub z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_m_untied, svint16_t,
+ z0 = svqsub_s16_m (p0, z1, z2),
+ z0 = svqsub_m (p0, z1, z2))
+
+/*
+** qsub_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svqsub_n_s16_m (p0, z0, x0),
+ z0 = svqsub_m (p0, z0, x0))
+
+/*
+** qsub_w0_s16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svqsub_n_s16_m (p0, z1, x0),
+ z0 = svqsub_m (p0, z1, x0))
+
+/*
+** qsub_1_s16_m_tied1:
+** mov (z[0-9]+\.h), #1
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s16_m_tied1, svint16_t,
+ z0 = svqsub_n_s16_m (p0, z0, 1),
+ z0 = svqsub_m (p0, z0, 1))
+
+/*
+** qsub_1_s16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), #1
+** movprfx z0, z1
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s16_m_untied, svint16_t,
+ z0 = svqsub_n_s16_m (p0, z1, 1),
+ z0 = svqsub_m (p0, z1, 1))
+
+/*
+** qsub_127_s16_m:
+** mov (z[0-9]+\.h), #127
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s16_m, svint16_t,
+ z0 = svqsub_n_s16_m (p0, z0, 127),
+ z0 = svqsub_m (p0, z0, 127))
+
+/*
+** qsub_128_s16_m:
+** mov (z[0-9]+\.h), #128
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s16_m, svint16_t,
+ z0 = svqsub_n_s16_m (p0, z0, 128),
+ z0 = svqsub_m (p0, z0, 128))
+
+/*
+** qsub_255_s16_m:
+** mov (z[0-9]+\.h), #255
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s16_m, svint16_t,
+ z0 = svqsub_n_s16_m (p0, z0, 255),
+ z0 = svqsub_m (p0, z0, 255))
+
+/*
+** qsub_m1_s16_m:
+** mov (z[0-9]+)\.b, #-1
+** sqsub z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s16_m, svint16_t,
+ z0 = svqsub_n_s16_m (p0, z0, -1),
+ z0 = svqsub_m (p0, z0, -1))
+
+/*
+** qsub_m127_s16_m:
+** mov (z[0-9]+\.h), #-127
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s16_m, svint16_t,
+ z0 = svqsub_n_s16_m (p0, z0, -127),
+ z0 = svqsub_m (p0, z0, -127))
+
+/*
+** qsub_m128_s16_m:
+** mov (z[0-9]+\.h), #-128
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s16_m, svint16_t,
+ z0 = svqsub_n_s16_m (p0, z0, -128),
+ z0 = svqsub_m (p0, z0, -128))
+
+/*
+** qsub_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_z_tied1, svint16_t,
+ z0 = svqsub_s16_z (p0, z0, z1),
+ z0 = svqsub_z (p0, z0, z1))
+
+/*
+** qsub_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** sqsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_z_tied2, svint16_t,
+ z0 = svqsub_s16_z (p0, z1, z0),
+ z0 = svqsub_z (p0, z1, z0))
+
+/*
+** qsub_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqsub z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** sqsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_z_untied, svint16_t,
+ z0 = svqsub_s16_z (p0, z1, z2),
+ z0 = svqsub_z (p0, z1, z2))
+
+/*
+** qsub_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svqsub_n_s16_z (p0, z0, x0),
+ z0 = svqsub_z (p0, z0, x0))
+
+/*
+** qsub_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqsub z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** sqsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svqsub_n_s16_z (p0, z1, x0),
+ z0 = svqsub_z (p0, z1, x0))
+
+/*
+** qsub_1_s16_z_tied1:
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s16_z_tied1, svint16_t,
+ z0 = svqsub_n_s16_z (p0, z0, 1),
+ z0 = svqsub_z (p0, z0, 1))
+
+/*
+** qsub_1_s16_z_untied:
+** mov (z[0-9]+\.h), #1
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqsub z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** sqsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s16_z_untied, svint16_t,
+ z0 = svqsub_n_s16_z (p0, z1, 1),
+ z0 = svqsub_z (p0, z1, 1))
+
+/*
+** qsub_127_s16_z:
+** mov (z[0-9]+\.h), #127
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s16_z, svint16_t,
+ z0 = svqsub_n_s16_z (p0, z0, 127),
+ z0 = svqsub_z (p0, z0, 127))
+
+/*
+** qsub_128_s16_z:
+** mov (z[0-9]+\.h), #128
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s16_z, svint16_t,
+ z0 = svqsub_n_s16_z (p0, z0, 128),
+ z0 = svqsub_z (p0, z0, 128))
+
+/*
+** qsub_255_s16_z:
+** mov (z[0-9]+\.h), #255
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s16_z, svint16_t,
+ z0 = svqsub_n_s16_z (p0, z0, 255),
+ z0 = svqsub_z (p0, z0, 255))
+
+/*
+** qsub_m1_s16_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s16_z, svint16_t,
+ z0 = svqsub_n_s16_z (p0, z0, -1),
+ z0 = svqsub_z (p0, z0, -1))
+
+/*
+** qsub_m127_s16_z:
+** mov (z[0-9]+\.h), #-127
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s16_z, svint16_t,
+ z0 = svqsub_n_s16_z (p0, z0, -127),
+ z0 = svqsub_z (p0, z0, -127))
+
+/*
+** qsub_m128_s16_z:
+** mov (z[0-9]+\.h), #-128
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s16_z, svint16_t,
+ z0 = svqsub_n_s16_z (p0, z0, -128),
+ z0 = svqsub_z (p0, z0, -128))
+
+/*
+** qsub_s16_x_tied1:
+** sqsub z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_x_tied1, svint16_t,
+ z0 = svqsub_s16_x (p0, z0, z1),
+ z0 = svqsub_x (p0, z0, z1))
+
+/*
+** qsub_s16_x_tied2:
+** sqsub z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_x_tied2, svint16_t,
+ z0 = svqsub_s16_x (p0, z1, z0),
+ z0 = svqsub_x (p0, z1, z0))
+
+/*
+** qsub_s16_x_untied:
+** sqsub z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s16_x_untied, svint16_t,
+ z0 = svqsub_s16_x (p0, z1, z2),
+ z0 = svqsub_x (p0, z1, z2))
+
+/*
+** qsub_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** sqsub z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svqsub_n_s16_x (p0, z0, x0),
+ z0 = svqsub_x (p0, z0, x0))
+
+/*
+** qsub_w0_s16_x_untied:
+** mov (z[0-9]+\.h), w0
+** sqsub z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svqsub_n_s16_x (p0, z1, x0),
+ z0 = svqsub_x (p0, z1, x0))
+
+/*
+** qsub_1_s16_x_tied1:
+** sqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s16_x_tied1, svint16_t,
+ z0 = svqsub_n_s16_x (p0, z0, 1),
+ z0 = svqsub_x (p0, z0, 1))
+
+/*
+** qsub_1_s16_x_untied:
+** movprfx z0, z1
+** sqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s16_x_untied, svint16_t,
+ z0 = svqsub_n_s16_x (p0, z1, 1),
+ z0 = svqsub_x (p0, z1, 1))
+
+/*
+** qsub_127_s16_x:
+** sqsub z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s16_x, svint16_t,
+ z0 = svqsub_n_s16_x (p0, z0, 127),
+ z0 = svqsub_x (p0, z0, 127))
+
+/*
+** qsub_128_s16_x:
+** sqsub z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s16_x, svint16_t,
+ z0 = svqsub_n_s16_x (p0, z0, 128),
+ z0 = svqsub_x (p0, z0, 128))
+
+/*
+** qsub_255_s16_x:
+** sqsub z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s16_x, svint16_t,
+ z0 = svqsub_n_s16_x (p0, z0, 255),
+ z0 = svqsub_x (p0, z0, 255))
+
+/*
+** qsub_m1_s16_x:
+** sqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s16_x, svint16_t,
+ z0 = svqsub_n_s16_x (p0, z0, -1),
+ z0 = svqsub_x (p0, z0, -1))
+
+/*
+** qsub_m127_s16_x:
+** sqadd z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s16_x, svint16_t,
+ z0 = svqsub_n_s16_x (p0, z0, -127),
+ z0 = svqsub_x (p0, z0, -127))
+
+/*
+** qsub_m128_s16_x:
+** sqadd z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s16_x, svint16_t,
+ z0 = svqsub_n_s16_x (p0, z0, -128),
+ z0 = svqsub_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsub_s32_tied1:
+** sqsub z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_tied1, svint32_t,
+ z0 = svqsub_s32 (z0, z1),
+ z0 = svqsub (z0, z1))
+
+/*
+** qsub_s32_tied2:
+** sqsub z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_tied2, svint32_t,
+ z0 = svqsub_s32 (z1, z0),
+ z0 = svqsub (z1, z0))
+
+/*
+** qsub_s32_untied:
+** sqsub z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_untied, svint32_t,
+ z0 = svqsub_s32 (z1, z2),
+ z0 = svqsub (z1, z2))
+
+/*
+** qsub_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** sqsub z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s32_tied1, svint32_t, int32_t,
+ z0 = svqsub_n_s32 (z0, x0),
+ z0 = svqsub (z0, x0))
+
+/*
+** qsub_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** sqsub z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s32_untied, svint32_t, int32_t,
+ z0 = svqsub_n_s32 (z1, x0),
+ z0 = svqsub (z1, x0))
+
+/*
+** qsub_1_s32_tied1:
+** sqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s32_tied1, svint32_t,
+ z0 = svqsub_n_s32 (z0, 1),
+ z0 = svqsub (z0, 1))
+
+/*
+** qsub_1_s32_untied:
+** movprfx z0, z1
+** sqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s32_untied, svint32_t,
+ z0 = svqsub_n_s32 (z1, 1),
+ z0 = svqsub (z1, 1))
+
+/*
+** qsub_127_s32:
+** sqsub z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s32, svint32_t,
+ z0 = svqsub_n_s32 (z0, 127),
+ z0 = svqsub (z0, 127))
+
+/*
+** qsub_128_s32:
+** sqsub z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s32, svint32_t,
+ z0 = svqsub_n_s32 (z0, 128),
+ z0 = svqsub (z0, 128))
+
+/*
+** qsub_255_s32:
+** sqsub z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s32, svint32_t,
+ z0 = svqsub_n_s32 (z0, 255),
+ z0 = svqsub (z0, 255))
+
+/*
+** qsub_m1_s32:
+** sqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s32, svint32_t,
+ z0 = svqsub_n_s32 (z0, -1),
+ z0 = svqsub (z0, -1))
+
+/*
+** qsub_m127_s32:
+** sqadd z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s32, svint32_t,
+ z0 = svqsub_n_s32 (z0, -127),
+ z0 = svqsub (z0, -127))
+
+/*
+** qsub_m128_s32:
+** sqadd z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s32, svint32_t,
+ z0 = svqsub_n_s32 (z0, -128),
+ z0 = svqsub (z0, -128))
+
+/*
+** qsub_s32_m_tied1:
+** sqsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_m_tied1, svint32_t,
+ z0 = svqsub_s32_m (p0, z0, z1),
+ z0 = svqsub_m (p0, z0, z1))
+
+/*
+** qsub_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqsub z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_m_tied2, svint32_t,
+ z0 = svqsub_s32_m (p0, z1, z0),
+ z0 = svqsub_m (p0, z1, z0))
+
+/*
+** qsub_s32_m_untied:
+** movprfx z0, z1
+** sqsub z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_m_untied, svint32_t,
+ z0 = svqsub_s32_m (p0, z1, z2),
+ z0 = svqsub_m (p0, z1, z2))
+
+/*
+** qsub_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svqsub_n_s32_m (p0, z0, x0),
+ z0 = svqsub_m (p0, z0, x0))
+
+/*
+** qsub_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svqsub_n_s32_m (p0, z1, x0),
+ z0 = svqsub_m (p0, z1, x0))
+
+/*
+** qsub_1_s32_m_tied1:
+** mov (z[0-9]+\.s), #1
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s32_m_tied1, svint32_t,
+ z0 = svqsub_n_s32_m (p0, z0, 1),
+ z0 = svqsub_m (p0, z0, 1))
+
+/*
+** qsub_1_s32_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.s), #1
+** movprfx z0, z1
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s32_m_untied, svint32_t,
+ z0 = svqsub_n_s32_m (p0, z1, 1),
+ z0 = svqsub_m (p0, z1, 1))
+
+/*
+** qsub_127_s32_m:
+** mov (z[0-9]+\.s), #127
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s32_m, svint32_t,
+ z0 = svqsub_n_s32_m (p0, z0, 127),
+ z0 = svqsub_m (p0, z0, 127))
+
+/*
+** qsub_128_s32_m:
+** mov (z[0-9]+\.s), #128
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s32_m, svint32_t,
+ z0 = svqsub_n_s32_m (p0, z0, 128),
+ z0 = svqsub_m (p0, z0, 128))
+
+/*
+** qsub_255_s32_m:
+** mov (z[0-9]+\.s), #255
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s32_m, svint32_t,
+ z0 = svqsub_n_s32_m (p0, z0, 255),
+ z0 = svqsub_m (p0, z0, 255))
+
+/*
+** qsub_m1_s32_m:
+** mov (z[0-9]+)\.b, #-1
+** sqsub z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s32_m, svint32_t,
+ z0 = svqsub_n_s32_m (p0, z0, -1),
+ z0 = svqsub_m (p0, z0, -1))
+
+/*
+** qsub_m127_s32_m:
+** mov (z[0-9]+\.s), #-127
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s32_m, svint32_t,
+ z0 = svqsub_n_s32_m (p0, z0, -127),
+ z0 = svqsub_m (p0, z0, -127))
+
+/*
+** qsub_m128_s32_m:
+** mov (z[0-9]+\.s), #-128
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s32_m, svint32_t,
+ z0 = svqsub_n_s32_m (p0, z0, -128),
+ z0 = svqsub_m (p0, z0, -128))
+
+/*
+** qsub_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_z_tied1, svint32_t,
+ z0 = svqsub_s32_z (p0, z0, z1),
+ z0 = svqsub_z (p0, z0, z1))
+
+/*
+** qsub_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** sqsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_z_tied2, svint32_t,
+ z0 = svqsub_s32_z (p0, z1, z0),
+ z0 = svqsub_z (p0, z1, z0))
+
+/*
+** qsub_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqsub z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** sqsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_z_untied, svint32_t,
+ z0 = svqsub_s32_z (p0, z1, z2),
+ z0 = svqsub_z (p0, z1, z2))
+
+/*
+** qsub_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svqsub_n_s32_z (p0, z0, x0),
+ z0 = svqsub_z (p0, z0, x0))
+
+/*
+** qsub_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqsub z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** sqsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svqsub_n_s32_z (p0, z1, x0),
+ z0 = svqsub_z (p0, z1, x0))
+
+/*
+** qsub_1_s32_z_tied1:
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s32_z_tied1, svint32_t,
+ z0 = svqsub_n_s32_z (p0, z0, 1),
+ z0 = svqsub_z (p0, z0, 1))
+
+/*
+** qsub_1_s32_z_untied:
+** mov (z[0-9]+\.s), #1
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqsub z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** sqsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s32_z_untied, svint32_t,
+ z0 = svqsub_n_s32_z (p0, z1, 1),
+ z0 = svqsub_z (p0, z1, 1))
+
+/*
+** qsub_127_s32_z:
+** mov (z[0-9]+\.s), #127
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s32_z, svint32_t,
+ z0 = svqsub_n_s32_z (p0, z0, 127),
+ z0 = svqsub_z (p0, z0, 127))
+
+/*
+** qsub_128_s32_z:
+** mov (z[0-9]+\.s), #128
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s32_z, svint32_t,
+ z0 = svqsub_n_s32_z (p0, z0, 128),
+ z0 = svqsub_z (p0, z0, 128))
+
+/*
+** qsub_255_s32_z:
+** mov (z[0-9]+\.s), #255
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s32_z, svint32_t,
+ z0 = svqsub_n_s32_z (p0, z0, 255),
+ z0 = svqsub_z (p0, z0, 255))
+
+/*
+** qsub_m1_s32_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s32_z, svint32_t,
+ z0 = svqsub_n_s32_z (p0, z0, -1),
+ z0 = svqsub_z (p0, z0, -1))
+
+/*
+** qsub_m127_s32_z:
+** mov (z[0-9]+\.s), #-127
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s32_z, svint32_t,
+ z0 = svqsub_n_s32_z (p0, z0, -127),
+ z0 = svqsub_z (p0, z0, -127))
+
+/*
+** qsub_m128_s32_z:
+** mov (z[0-9]+\.s), #-128
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s32_z, svint32_t,
+ z0 = svqsub_n_s32_z (p0, z0, -128),
+ z0 = svqsub_z (p0, z0, -128))
+
+/*
+** qsub_s32_x_tied1:
+** sqsub z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_x_tied1, svint32_t,
+ z0 = svqsub_s32_x (p0, z0, z1),
+ z0 = svqsub_x (p0, z0, z1))
+
+/*
+** qsub_s32_x_tied2:
+** sqsub z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_x_tied2, svint32_t,
+ z0 = svqsub_s32_x (p0, z1, z0),
+ z0 = svqsub_x (p0, z1, z0))
+
+/*
+** qsub_s32_x_untied:
+** sqsub z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s32_x_untied, svint32_t,
+ z0 = svqsub_s32_x (p0, z1, z2),
+ z0 = svqsub_x (p0, z1, z2))
+
+/*
+** qsub_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** sqsub z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svqsub_n_s32_x (p0, z0, x0),
+ z0 = svqsub_x (p0, z0, x0))
+
+/*
+** qsub_w0_s32_x_untied:
+** mov (z[0-9]+\.s), w0
+** sqsub z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svqsub_n_s32_x (p0, z1, x0),
+ z0 = svqsub_x (p0, z1, x0))
+
+/*
+** qsub_1_s32_x_tied1:
+** sqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s32_x_tied1, svint32_t,
+ z0 = svqsub_n_s32_x (p0, z0, 1),
+ z0 = svqsub_x (p0, z0, 1))
+
+/*
+** qsub_1_s32_x_untied:
+** movprfx z0, z1
+** sqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s32_x_untied, svint32_t,
+ z0 = svqsub_n_s32_x (p0, z1, 1),
+ z0 = svqsub_x (p0, z1, 1))
+
+/*
+** qsub_127_s32_x:
+** sqsub z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s32_x, svint32_t,
+ z0 = svqsub_n_s32_x (p0, z0, 127),
+ z0 = svqsub_x (p0, z0, 127))
+
+/*
+** qsub_128_s32_x:
+** sqsub z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s32_x, svint32_t,
+ z0 = svqsub_n_s32_x (p0, z0, 128),
+ z0 = svqsub_x (p0, z0, 128))
+
+/*
+** qsub_255_s32_x:
+** sqsub z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s32_x, svint32_t,
+ z0 = svqsub_n_s32_x (p0, z0, 255),
+ z0 = svqsub_x (p0, z0, 255))
+
+/*
+** qsub_m1_s32_x:
+** sqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s32_x, svint32_t,
+ z0 = svqsub_n_s32_x (p0, z0, -1),
+ z0 = svqsub_x (p0, z0, -1))
+
+/*
+** qsub_m127_s32_x:
+** sqadd z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s32_x, svint32_t,
+ z0 = svqsub_n_s32_x (p0, z0, -127),
+ z0 = svqsub_x (p0, z0, -127))
+
+/*
+** qsub_m128_s32_x:
+** sqadd z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s32_x, svint32_t,
+ z0 = svqsub_n_s32_x (p0, z0, -128),
+ z0 = svqsub_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsub_s64_tied1:
+** sqsub z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_tied1, svint64_t,
+ z0 = svqsub_s64 (z0, z1),
+ z0 = svqsub (z0, z1))
+
+/*
+** qsub_s64_tied2:
+** sqsub z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_tied2, svint64_t,
+ z0 = svqsub_s64 (z1, z0),
+ z0 = svqsub (z1, z0))
+
+/*
+** qsub_s64_untied:
+** sqsub z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_untied, svint64_t,
+ z0 = svqsub_s64 (z1, z2),
+ z0 = svqsub (z1, z2))
+
+/*
+** qsub_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** sqsub z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_s64_tied1, svint64_t, int64_t,
+ z0 = svqsub_n_s64 (z0, x0),
+ z0 = svqsub (z0, x0))
+
+/*
+** qsub_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** sqsub z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_s64_untied, svint64_t, int64_t,
+ z0 = svqsub_n_s64 (z1, x0),
+ z0 = svqsub (z1, x0))
+
+/*
+** qsub_1_s64_tied1:
+** sqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s64_tied1, svint64_t,
+ z0 = svqsub_n_s64 (z0, 1),
+ z0 = svqsub (z0, 1))
+
+/*
+** qsub_1_s64_untied:
+** movprfx z0, z1
+** sqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s64_untied, svint64_t,
+ z0 = svqsub_n_s64 (z1, 1),
+ z0 = svqsub (z1, 1))
+
+/*
+** qsub_127_s64:
+** sqsub z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s64, svint64_t,
+ z0 = svqsub_n_s64 (z0, 127),
+ z0 = svqsub (z0, 127))
+
+/*
+** qsub_128_s64:
+** sqsub z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s64, svint64_t,
+ z0 = svqsub_n_s64 (z0, 128),
+ z0 = svqsub (z0, 128))
+
+/*
+** qsub_255_s64:
+** sqsub z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s64, svint64_t,
+ z0 = svqsub_n_s64 (z0, 255),
+ z0 = svqsub (z0, 255))
+
+/*
+** qsub_m1_s64:
+** sqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s64, svint64_t,
+ z0 = svqsub_n_s64 (z0, -1),
+ z0 = svqsub (z0, -1))
+
+/*
+** qsub_m127_s64:
+** sqadd z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s64, svint64_t,
+ z0 = svqsub_n_s64 (z0, -127),
+ z0 = svqsub (z0, -127))
+
+/*
+** qsub_m128_s64:
+** sqadd z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s64, svint64_t,
+ z0 = svqsub_n_s64 (z0, -128),
+ z0 = svqsub (z0, -128))
+
+/*
+** qsub_s64_m_tied1:
+** sqsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_m_tied1, svint64_t,
+ z0 = svqsub_s64_m (p0, z0, z1),
+ z0 = svqsub_m (p0, z0, z1))
+
+/*
+** qsub_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_m_tied2, svint64_t,
+ z0 = svqsub_s64_m (p0, z1, z0),
+ z0 = svqsub_m (p0, z1, z0))
+
+/*
+** qsub_s64_m_untied:
+** movprfx z0, z1
+** sqsub z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_m_untied, svint64_t,
+ z0 = svqsub_s64_m (p0, z1, z2),
+ z0 = svqsub_m (p0, z1, z2))
+
+/*
+** qsub_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svqsub_n_s64_m (p0, z0, x0),
+ z0 = svqsub_m (p0, z0, x0))
+
+/*
+** qsub_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svqsub_n_s64_m (p0, z1, x0),
+ z0 = svqsub_m (p0, z1, x0))
+
+/*
+** qsub_1_s64_m_tied1:
+** mov (z[0-9]+\.d), #1
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s64_m_tied1, svint64_t,
+ z0 = svqsub_n_s64_m (p0, z0, 1),
+ z0 = svqsub_m (p0, z0, 1))
+
+/*
+** qsub_1_s64_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.d), #1
+** movprfx z0, z1
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s64_m_untied, svint64_t,
+ z0 = svqsub_n_s64_m (p0, z1, 1),
+ z0 = svqsub_m (p0, z1, 1))
+
+/*
+** qsub_127_s64_m:
+** mov (z[0-9]+\.d), #127
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s64_m, svint64_t,
+ z0 = svqsub_n_s64_m (p0, z0, 127),
+ z0 = svqsub_m (p0, z0, 127))
+
+/*
+** qsub_128_s64_m:
+** mov (z[0-9]+\.d), #128
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s64_m, svint64_t,
+ z0 = svqsub_n_s64_m (p0, z0, 128),
+ z0 = svqsub_m (p0, z0, 128))
+
+/*
+** qsub_255_s64_m:
+** mov (z[0-9]+\.d), #255
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s64_m, svint64_t,
+ z0 = svqsub_n_s64_m (p0, z0, 255),
+ z0 = svqsub_m (p0, z0, 255))
+
+/*
+** qsub_m1_s64_m:
+** mov (z[0-9]+)\.b, #-1
+** sqsub z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s64_m, svint64_t,
+ z0 = svqsub_n_s64_m (p0, z0, -1),
+ z0 = svqsub_m (p0, z0, -1))
+
+/*
+** qsub_m127_s64_m:
+** mov (z[0-9]+\.d), #-127
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s64_m, svint64_t,
+ z0 = svqsub_n_s64_m (p0, z0, -127),
+ z0 = svqsub_m (p0, z0, -127))
+
+/*
+** qsub_m128_s64_m:
+** mov (z[0-9]+\.d), #-128
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s64_m, svint64_t,
+ z0 = svqsub_n_s64_m (p0, z0, -128),
+ z0 = svqsub_m (p0, z0, -128))
+
+/*
+** qsub_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_z_tied1, svint64_t,
+ z0 = svqsub_s64_z (p0, z0, z1),
+ z0 = svqsub_z (p0, z0, z1))
+
+/*
+** qsub_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** sqsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_z_tied2, svint64_t,
+ z0 = svqsub_s64_z (p0, z1, z0),
+ z0 = svqsub_z (p0, z1, z0))
+
+/*
+** qsub_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqsub z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** sqsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_z_untied, svint64_t,
+ z0 = svqsub_s64_z (p0, z1, z2),
+ z0 = svqsub_z (p0, z1, z2))
+
+/*
+** qsub_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svqsub_n_s64_z (p0, z0, x0),
+ z0 = svqsub_z (p0, z0, x0))
+
+/*
+** qsub_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqsub z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** sqsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svqsub_n_s64_z (p0, z1, x0),
+ z0 = svqsub_z (p0, z1, x0))
+
+/*
+** qsub_1_s64_z_tied1:
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s64_z_tied1, svint64_t,
+ z0 = svqsub_n_s64_z (p0, z0, 1),
+ z0 = svqsub_z (p0, z0, 1))
+
+/*
+** qsub_1_s64_z_untied:
+** mov (z[0-9]+\.d), #1
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqsub z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** sqsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s64_z_untied, svint64_t,
+ z0 = svqsub_n_s64_z (p0, z1, 1),
+ z0 = svqsub_z (p0, z1, 1))
+
+/*
+** qsub_127_s64_z:
+** mov (z[0-9]+\.d), #127
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s64_z, svint64_t,
+ z0 = svqsub_n_s64_z (p0, z0, 127),
+ z0 = svqsub_z (p0, z0, 127))
+
+/*
+** qsub_128_s64_z:
+** mov (z[0-9]+\.d), #128
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s64_z, svint64_t,
+ z0 = svqsub_n_s64_z (p0, z0, 128),
+ z0 = svqsub_z (p0, z0, 128))
+
+/*
+** qsub_255_s64_z:
+** mov (z[0-9]+\.d), #255
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s64_z, svint64_t,
+ z0 = svqsub_n_s64_z (p0, z0, 255),
+ z0 = svqsub_z (p0, z0, 255))
+
+/*
+** qsub_m1_s64_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s64_z, svint64_t,
+ z0 = svqsub_n_s64_z (p0, z0, -1),
+ z0 = svqsub_z (p0, z0, -1))
+
+/*
+** qsub_m127_s64_z:
+** mov (z[0-9]+\.d), #-127
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s64_z, svint64_t,
+ z0 = svqsub_n_s64_z (p0, z0, -127),
+ z0 = svqsub_z (p0, z0, -127))
+
+/*
+** qsub_m128_s64_z:
+** mov (z[0-9]+\.d), #-128
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s64_z, svint64_t,
+ z0 = svqsub_n_s64_z (p0, z0, -128),
+ z0 = svqsub_z (p0, z0, -128))
+
+/*
+** qsub_s64_x_tied1:
+** sqsub z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_x_tied1, svint64_t,
+ z0 = svqsub_s64_x (p0, z0, z1),
+ z0 = svqsub_x (p0, z0, z1))
+
+/*
+** qsub_s64_x_tied2:
+** sqsub z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_x_tied2, svint64_t,
+ z0 = svqsub_s64_x (p0, z1, z0),
+ z0 = svqsub_x (p0, z1, z0))
+
+/*
+** qsub_s64_x_untied:
+** sqsub z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s64_x_untied, svint64_t,
+ z0 = svqsub_s64_x (p0, z1, z2),
+ z0 = svqsub_x (p0, z1, z2))
+
+/*
+** qsub_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** sqsub z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svqsub_n_s64_x (p0, z0, x0),
+ z0 = svqsub_x (p0, z0, x0))
+
+/*
+** qsub_x0_s64_x_untied:
+** mov (z[0-9]+\.d), x0
+** sqsub z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svqsub_n_s64_x (p0, z1, x0),
+ z0 = svqsub_x (p0, z1, x0))
+
+/*
+** qsub_1_s64_x_tied1:
+** sqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s64_x_tied1, svint64_t,
+ z0 = svqsub_n_s64_x (p0, z0, 1),
+ z0 = svqsub_x (p0, z0, 1))
+
+/*
+** qsub_1_s64_x_untied:
+** movprfx z0, z1
+** sqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s64_x_untied, svint64_t,
+ z0 = svqsub_n_s64_x (p0, z1, 1),
+ z0 = svqsub_x (p0, z1, 1))
+
+/*
+** qsub_127_s64_x:
+** sqsub z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s64_x, svint64_t,
+ z0 = svqsub_n_s64_x (p0, z0, 127),
+ z0 = svqsub_x (p0, z0, 127))
+
+/*
+** qsub_128_s64_x:
+** sqsub z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s64_x, svint64_t,
+ z0 = svqsub_n_s64_x (p0, z0, 128),
+ z0 = svqsub_x (p0, z0, 128))
+
+/*
+** qsub_255_s64_x:
+** sqsub z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s64_x, svint64_t,
+ z0 = svqsub_n_s64_x (p0, z0, 255),
+ z0 = svqsub_x (p0, z0, 255))
+
+/*
+** qsub_m1_s64_x:
+** sqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s64_x, svint64_t,
+ z0 = svqsub_n_s64_x (p0, z0, -1),
+ z0 = svqsub_x (p0, z0, -1))
+
+/*
+** qsub_m127_s64_x:
+** sqadd z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s64_x, svint64_t,
+ z0 = svqsub_n_s64_x (p0, z0, -127),
+ z0 = svqsub_x (p0, z0, -127))
+
+/*
+** qsub_m128_s64_x:
+** sqadd z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s64_x, svint64_t,
+ z0 = svqsub_n_s64_x (p0, z0, -128),
+ z0 = svqsub_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsub_s8_tied1:
+** sqsub z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_tied1, svint8_t,
+ z0 = svqsub_s8 (z0, z1),
+ z0 = svqsub (z0, z1))
+
+/*
+** qsub_s8_tied2:
+** sqsub z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_tied2, svint8_t,
+ z0 = svqsub_s8 (z1, z0),
+ z0 = svqsub (z1, z0))
+
+/*
+** qsub_s8_untied:
+** sqsub z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_untied, svint8_t,
+ z0 = svqsub_s8 (z1, z2),
+ z0 = svqsub (z1, z2))
+
+/*
+** qsub_w0_s8_tied1:
+** mov (z[0-9]+\.b), w0
+** sqsub z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s8_tied1, svint8_t, int8_t,
+ z0 = svqsub_n_s8 (z0, x0),
+ z0 = svqsub (z0, x0))
+
+/*
+** qsub_w0_s8_untied:
+** mov (z[0-9]+\.b), w0
+** sqsub z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s8_untied, svint8_t, int8_t,
+ z0 = svqsub_n_s8 (z1, x0),
+ z0 = svqsub (z1, x0))
+
+/*
+** qsub_1_s8_tied1:
+** sqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s8_tied1, svint8_t,
+ z0 = svqsub_n_s8 (z0, 1),
+ z0 = svqsub (z0, 1))
+
+/*
+** qsub_1_s8_untied:
+** movprfx z0, z1
+** sqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s8_untied, svint8_t,
+ z0 = svqsub_n_s8 (z1, 1),
+ z0 = svqsub (z1, 1))
+
+/*
+** qsub_127_s8:
+** sqsub z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s8, svint8_t,
+ z0 = svqsub_n_s8 (z0, 127),
+ z0 = svqsub (z0, 127))
+
+/*
+** qsub_128_s8:
+** sqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s8, svint8_t,
+ z0 = svqsub_n_s8 (z0, 128),
+ z0 = svqsub (z0, 128))
+
+/*
+** qsub_255_s8:
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s8, svint8_t,
+ z0 = svqsub_n_s8 (z0, 255),
+ z0 = svqsub (z0, 255))
+
+/*
+** qsub_m1_s8:
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s8, svint8_t,
+ z0 = svqsub_n_s8 (z0, -1),
+ z0 = svqsub (z0, -1))
+
+/*
+** qsub_m127_s8:
+** sqadd z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s8, svint8_t,
+ z0 = svqsub_n_s8 (z0, -127),
+ z0 = svqsub (z0, -127))
+
+/*
+** qsub_m128_s8:
+** sqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s8, svint8_t,
+ z0 = svqsub_n_s8 (z0, -128),
+ z0 = svqsub (z0, -128))
+
+/*
+** qsub_s8_m_tied1:
+** sqsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_m_tied1, svint8_t,
+ z0 = svqsub_s8_m (p0, z0, z1),
+ z0 = svqsub_m (p0, z0, z1))
+
+/*
+** qsub_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqsub z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_m_tied2, svint8_t,
+ z0 = svqsub_s8_m (p0, z1, z0),
+ z0 = svqsub_m (p0, z1, z0))
+
+/*
+** qsub_s8_m_untied:
+** movprfx z0, z1
+** sqsub z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_m_untied, svint8_t,
+ z0 = svqsub_s8_m (p0, z1, z2),
+ z0 = svqsub_m (p0, z1, z2))
+
+/*
+** qsub_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svqsub_n_s8_m (p0, z0, x0),
+ z0 = svqsub_m (p0, z0, x0))
+
+/*
+** qsub_w0_s8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svqsub_n_s8_m (p0, z1, x0),
+ z0 = svqsub_m (p0, z1, x0))
+
+/*
+** qsub_1_s8_m_tied1:
+** mov (z[0-9]+\.b), #1
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s8_m_tied1, svint8_t,
+ z0 = svqsub_n_s8_m (p0, z0, 1),
+ z0 = svqsub_m (p0, z0, 1))
+
+/*
+** qsub_1_s8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), #1
+** movprfx z0, z1
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s8_m_untied, svint8_t,
+ z0 = svqsub_n_s8_m (p0, z1, 1),
+ z0 = svqsub_m (p0, z1, 1))
+
+/*
+** qsub_127_s8_m:
+** mov (z[0-9]+\.b), #127
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s8_m, svint8_t,
+ z0 = svqsub_n_s8_m (p0, z0, 127),
+ z0 = svqsub_m (p0, z0, 127))
+
+/*
+** qsub_128_s8_m:
+** mov (z[0-9]+\.b), #-128
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s8_m, svint8_t,
+ z0 = svqsub_n_s8_m (p0, z0, 128),
+ z0 = svqsub_m (p0, z0, 128))
+
+/*
+** qsub_255_s8_m:
+** mov (z[0-9]+\.b), #-1
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s8_m, svint8_t,
+ z0 = svqsub_n_s8_m (p0, z0, 255),
+ z0 = svqsub_m (p0, z0, 255))
+
+/*
+** qsub_m1_s8_m:
+** mov (z[0-9]+\.b), #-1
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s8_m, svint8_t,
+ z0 = svqsub_n_s8_m (p0, z0, -1),
+ z0 = svqsub_m (p0, z0, -1))
+
+/*
+** qsub_m127_s8_m:
+** mov (z[0-9]+\.b), #-127
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s8_m, svint8_t,
+ z0 = svqsub_n_s8_m (p0, z0, -127),
+ z0 = svqsub_m (p0, z0, -127))
+
+/*
+** qsub_m128_s8_m:
+** mov (z[0-9]+\.b), #-128
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s8_m, svint8_t,
+ z0 = svqsub_n_s8_m (p0, z0, -128),
+ z0 = svqsub_m (p0, z0, -128))
+
+/*
+** qsub_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_z_tied1, svint8_t,
+ z0 = svqsub_s8_z (p0, z0, z1),
+ z0 = svqsub_z (p0, z0, z1))
+
+/*
+** qsub_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** sqsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_z_tied2, svint8_t,
+ z0 = svqsub_s8_z (p0, z1, z0),
+ z0 = svqsub_z (p0, z1, z0))
+
+/*
+** qsub_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqsub z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** sqsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_z_untied, svint8_t,
+ z0 = svqsub_s8_z (p0, z1, z2),
+ z0 = svqsub_z (p0, z1, z2))
+
+/*
+** qsub_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svqsub_n_s8_z (p0, z0, x0),
+ z0 = svqsub_z (p0, z0, x0))
+
+/*
+** qsub_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** sqsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svqsub_n_s8_z (p0, z1, x0),
+ z0 = svqsub_z (p0, z1, x0))
+
+/*
+** qsub_1_s8_z_tied1:
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s8_z_tied1, svint8_t,
+ z0 = svqsub_n_s8_z (p0, z0, 1),
+ z0 = svqsub_z (p0, z0, 1))
+
+/*
+** qsub_1_s8_z_untied:
+** mov (z[0-9]+\.b), #1
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** sqsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s8_z_untied, svint8_t,
+ z0 = svqsub_n_s8_z (p0, z1, 1),
+ z0 = svqsub_z (p0, z1, 1))
+
+/*
+** qsub_127_s8_z:
+** mov (z[0-9]+\.b), #127
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s8_z, svint8_t,
+ z0 = svqsub_n_s8_z (p0, z0, 127),
+ z0 = svqsub_z (p0, z0, 127))
+
+/*
+** qsub_128_s8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s8_z, svint8_t,
+ z0 = svqsub_n_s8_z (p0, z0, 128),
+ z0 = svqsub_z (p0, z0, 128))
+
+/*
+** qsub_255_s8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s8_z, svint8_t,
+ z0 = svqsub_n_s8_z (p0, z0, 255),
+ z0 = svqsub_z (p0, z0, 255))
+
+/*
+** qsub_m1_s8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s8_z, svint8_t,
+ z0 = svqsub_n_s8_z (p0, z0, -1),
+ z0 = svqsub_z (p0, z0, -1))
+
+/*
+** qsub_m127_s8_z:
+** mov (z[0-9]+\.b), #-127
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s8_z, svint8_t,
+ z0 = svqsub_n_s8_z (p0, z0, -127),
+ z0 = svqsub_z (p0, z0, -127))
+
+/*
+** qsub_m128_s8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s8_z, svint8_t,
+ z0 = svqsub_n_s8_z (p0, z0, -128),
+ z0 = svqsub_z (p0, z0, -128))
+
+/*
+** qsub_s8_x_tied1:
+** sqsub z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_x_tied1, svint8_t,
+ z0 = svqsub_s8_x (p0, z0, z1),
+ z0 = svqsub_x (p0, z0, z1))
+
+/*
+** qsub_s8_x_tied2:
+** sqsub z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_x_tied2, svint8_t,
+ z0 = svqsub_s8_x (p0, z1, z0),
+ z0 = svqsub_x (p0, z1, z0))
+
+/*
+** qsub_s8_x_untied:
+** sqsub z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_s8_x_untied, svint8_t,
+ z0 = svqsub_s8_x (p0, z1, z2),
+ z0 = svqsub_x (p0, z1, z2))
+
+/*
+** qsub_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** sqsub z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svqsub_n_s8_x (p0, z0, x0),
+ z0 = svqsub_x (p0, z0, x0))
+
+/*
+** qsub_w0_s8_x_untied:
+** mov (z[0-9]+\.b), w0
+** sqsub z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svqsub_n_s8_x (p0, z1, x0),
+ z0 = svqsub_x (p0, z1, x0))
+
+/*
+** qsub_1_s8_x_tied1:
+** sqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s8_x_tied1, svint8_t,
+ z0 = svqsub_n_s8_x (p0, z0, 1),
+ z0 = svqsub_x (p0, z0, 1))
+
+/*
+** qsub_1_s8_x_untied:
+** movprfx z0, z1
+** sqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_s8_x_untied, svint8_t,
+ z0 = svqsub_n_s8_x (p0, z1, 1),
+ z0 = svqsub_x (p0, z1, 1))
+
+/*
+** qsub_127_s8_x:
+** sqsub z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_s8_x, svint8_t,
+ z0 = svqsub_n_s8_x (p0, z0, 127),
+ z0 = svqsub_x (p0, z0, 127))
+
+/*
+** qsub_128_s8_x:
+** sqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_s8_x, svint8_t,
+ z0 = svqsub_n_s8_x (p0, z0, 128),
+ z0 = svqsub_x (p0, z0, 128))
+
+/*
+** qsub_255_s8_x:
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_s8_x, svint8_t,
+ z0 = svqsub_n_s8_x (p0, z0, 255),
+ z0 = svqsub_x (p0, z0, 255))
+
+/*
+** qsub_m1_s8_x:
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_s8_x, svint8_t,
+ z0 = svqsub_n_s8_x (p0, z0, -1),
+ z0 = svqsub_x (p0, z0, -1))
+
+/*
+** qsub_m127_s8_x:
+** sqadd z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_s8_x, svint8_t,
+ z0 = svqsub_n_s8_x (p0, z0, -127),
+ z0 = svqsub_x (p0, z0, -127))
+
+/*
+** qsub_m128_s8_x:
+** sqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_s8_x, svint8_t,
+ z0 = svqsub_n_s8_x (p0, z0, -128),
+ z0 = svqsub_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsub_u16_tied1:
+** uqsub z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_tied1, svuint16_t,
+ z0 = svqsub_u16 (z0, z1),
+ z0 = svqsub (z0, z1))
+
+/*
+** qsub_u16_tied2:
+** uqsub z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_tied2, svuint16_t,
+ z0 = svqsub_u16 (z1, z0),
+ z0 = svqsub (z1, z0))
+
+/*
+** qsub_u16_untied:
+** uqsub z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_untied, svuint16_t,
+ z0 = svqsub_u16 (z1, z2),
+ z0 = svqsub (z1, z2))
+
+/*
+** qsub_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** uqsub z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u16_tied1, svuint16_t, uint16_t,
+ z0 = svqsub_n_u16 (z0, x0),
+ z0 = svqsub (z0, x0))
+
+/*
+** qsub_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** uqsub z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u16_untied, svuint16_t, uint16_t,
+ z0 = svqsub_n_u16 (z1, x0),
+ z0 = svqsub (z1, x0))
+
+/*
+** qsub_1_u16_tied1:
+** uqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u16_tied1, svuint16_t,
+ z0 = svqsub_n_u16 (z0, 1),
+ z0 = svqsub (z0, 1))
+
+/*
+** qsub_1_u16_untied:
+** movprfx z0, z1
+** uqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u16_untied, svuint16_t,
+ z0 = svqsub_n_u16 (z1, 1),
+ z0 = svqsub (z1, 1))
+
+/*
+** qsub_127_u16:
+** uqsub z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u16, svuint16_t,
+ z0 = svqsub_n_u16 (z0, 127),
+ z0 = svqsub (z0, 127))
+
+/*
+** qsub_128_u16:
+** uqsub z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u16, svuint16_t,
+ z0 = svqsub_n_u16 (z0, 128),
+ z0 = svqsub (z0, 128))
+
+/*
+** qsub_255_u16:
+** uqsub z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u16, svuint16_t,
+ z0 = svqsub_n_u16 (z0, 255),
+ z0 = svqsub (z0, 255))
+
+/*
+** qsub_m1_u16:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.h, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u16, svuint16_t,
+ z0 = svqsub_n_u16 (z0, -1),
+ z0 = svqsub (z0, -1))
+
+/*
+** qsub_m127_u16:
+** mov (z[0-9]+\.h), #-127
+** uqsub z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u16, svuint16_t,
+ z0 = svqsub_n_u16 (z0, -127),
+ z0 = svqsub (z0, -127))
+
+/*
+** qsub_m128_u16:
+** mov (z[0-9]+\.h), #-128
+** uqsub z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u16, svuint16_t,
+ z0 = svqsub_n_u16 (z0, -128),
+ z0 = svqsub (z0, -128))
+
+/*
+** qsub_u16_m_tied1:
+** uqsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_m_tied1, svuint16_t,
+ z0 = svqsub_u16_m (p0, z0, z1),
+ z0 = svqsub_m (p0, z0, z1))
+
+/*
+** qsub_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uqsub z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_m_tied2, svuint16_t,
+ z0 = svqsub_u16_m (p0, z1, z0),
+ z0 = svqsub_m (p0, z1, z0))
+
+/*
+** qsub_u16_m_untied:
+** movprfx z0, z1
+** uqsub z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_m_untied, svuint16_t,
+ z0 = svqsub_u16_m (p0, z1, z2),
+ z0 = svqsub_m (p0, z1, z2))
+
+/*
+** qsub_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u16_m_tied1, svuint16_t, uint16_t,
+ z0 = svqsub_n_u16_m (p0, z0, x0),
+ z0 = svqsub_m (p0, z0, x0))
+
+/*
+** qsub_w0_u16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u16_m_untied, svuint16_t, uint16_t,
+ z0 = svqsub_n_u16_m (p0, z1, x0),
+ z0 = svqsub_m (p0, z1, x0))
+
+/*
+** qsub_1_u16_m_tied1:
+** mov (z[0-9]+\.h), #1
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u16_m_tied1, svuint16_t,
+ z0 = svqsub_n_u16_m (p0, z0, 1),
+ z0 = svqsub_m (p0, z0, 1))
+
+/*
+** qsub_1_u16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), #1
+** movprfx z0, z1
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u16_m_untied, svuint16_t,
+ z0 = svqsub_n_u16_m (p0, z1, 1),
+ z0 = svqsub_m (p0, z1, 1))
+
+/*
+** qsub_127_u16_m:
+** mov (z[0-9]+\.h), #127
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u16_m, svuint16_t,
+ z0 = svqsub_n_u16_m (p0, z0, 127),
+ z0 = svqsub_m (p0, z0, 127))
+
+/*
+** qsub_128_u16_m:
+** mov (z[0-9]+\.h), #128
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u16_m, svuint16_t,
+ z0 = svqsub_n_u16_m (p0, z0, 128),
+ z0 = svqsub_m (p0, z0, 128))
+
+/*
+** qsub_255_u16_m:
+** mov (z[0-9]+\.h), #255
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u16_m, svuint16_t,
+ z0 = svqsub_n_u16_m (p0, z0, 255),
+ z0 = svqsub_m (p0, z0, 255))
+
+/*
+** qsub_m1_u16_m:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u16_m, svuint16_t,
+ z0 = svqsub_n_u16_m (p0, z0, -1),
+ z0 = svqsub_m (p0, z0, -1))
+
+/*
+** qsub_m127_u16_m:
+** mov (z[0-9]+\.h), #-127
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u16_m, svuint16_t,
+ z0 = svqsub_n_u16_m (p0, z0, -127),
+ z0 = svqsub_m (p0, z0, -127))
+
+/*
+** qsub_m128_u16_m:
+** mov (z[0-9]+\.h), #-128
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u16_m, svuint16_t,
+ z0 = svqsub_n_u16_m (p0, z0, -128),
+ z0 = svqsub_m (p0, z0, -128))
+
+/*
+** qsub_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_z_tied1, svuint16_t,
+ z0 = svqsub_u16_z (p0, z0, z1),
+ z0 = svqsub_z (p0, z0, z1))
+
+/*
+** qsub_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** uqsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_z_tied2, svuint16_t,
+ z0 = svqsub_u16_z (p0, z1, z0),
+ z0 = svqsub_z (p0, z1, z0))
+
+/*
+** qsub_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqsub z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** uqsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_z_untied, svuint16_t,
+ z0 = svqsub_u16_z (p0, z1, z2),
+ z0 = svqsub_z (p0, z1, z2))
+
+/*
+** qsub_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u16_z_tied1, svuint16_t, uint16_t,
+ z0 = svqsub_n_u16_z (p0, z0, x0),
+ z0 = svqsub_z (p0, z0, x0))
+
+/*
+** qsub_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqsub z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uqsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u16_z_untied, svuint16_t, uint16_t,
+ z0 = svqsub_n_u16_z (p0, z1, x0),
+ z0 = svqsub_z (p0, z1, x0))
+
+/*
+** qsub_1_u16_z_tied1:
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u16_z_tied1, svuint16_t,
+ z0 = svqsub_n_u16_z (p0, z0, 1),
+ z0 = svqsub_z (p0, z0, 1))
+
+/*
+** qsub_1_u16_z_untied:
+** mov (z[0-9]+\.h), #1
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqsub z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uqsubr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u16_z_untied, svuint16_t,
+ z0 = svqsub_n_u16_z (p0, z1, 1),
+ z0 = svqsub_z (p0, z1, 1))
+
+/*
+** qsub_127_u16_z:
+** mov (z[0-9]+\.h), #127
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u16_z, svuint16_t,
+ z0 = svqsub_n_u16_z (p0, z0, 127),
+ z0 = svqsub_z (p0, z0, 127))
+
+/*
+** qsub_128_u16_z:
+** mov (z[0-9]+\.h), #128
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u16_z, svuint16_t,
+ z0 = svqsub_n_u16_z (p0, z0, 128),
+ z0 = svqsub_z (p0, z0, 128))
+
+/*
+** qsub_255_u16_z:
+** mov (z[0-9]+\.h), #255
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u16_z, svuint16_t,
+ z0 = svqsub_n_u16_z (p0, z0, 255),
+ z0 = svqsub_z (p0, z0, 255))
+
+/*
+** qsub_m1_u16_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u16_z, svuint16_t,
+ z0 = svqsub_n_u16_z (p0, z0, -1),
+ z0 = svqsub_z (p0, z0, -1))
+
+/*
+** qsub_m127_u16_z:
+** mov (z[0-9]+\.h), #-127
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u16_z, svuint16_t,
+ z0 = svqsub_n_u16_z (p0, z0, -127),
+ z0 = svqsub_z (p0, z0, -127))
+
+/*
+** qsub_m128_u16_z:
+** mov (z[0-9]+\.h), #-128
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u16_z, svuint16_t,
+ z0 = svqsub_n_u16_z (p0, z0, -128),
+ z0 = svqsub_z (p0, z0, -128))
+
+/*
+** qsub_u16_x_tied1:
+** uqsub z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_x_tied1, svuint16_t,
+ z0 = svqsub_u16_x (p0, z0, z1),
+ z0 = svqsub_x (p0, z0, z1))
+
+/*
+** qsub_u16_x_tied2:
+** uqsub z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_x_tied2, svuint16_t,
+ z0 = svqsub_u16_x (p0, z1, z0),
+ z0 = svqsub_x (p0, z1, z0))
+
+/*
+** qsub_u16_x_untied:
+** uqsub z0\.h, z1\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u16_x_untied, svuint16_t,
+ z0 = svqsub_u16_x (p0, z1, z2),
+ z0 = svqsub_x (p0, z1, z2))
+
+/*
+** qsub_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** uqsub z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u16_x_tied1, svuint16_t, uint16_t,
+ z0 = svqsub_n_u16_x (p0, z0, x0),
+ z0 = svqsub_x (p0, z0, x0))
+
+/*
+** qsub_w0_u16_x_untied:
+** mov (z[0-9]+\.h), w0
+** uqsub z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u16_x_untied, svuint16_t, uint16_t,
+ z0 = svqsub_n_u16_x (p0, z1, x0),
+ z0 = svqsub_x (p0, z1, x0))
+
+/*
+** qsub_1_u16_x_tied1:
+** uqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u16_x_tied1, svuint16_t,
+ z0 = svqsub_n_u16_x (p0, z0, 1),
+ z0 = svqsub_x (p0, z0, 1))
+
+/*
+** qsub_1_u16_x_untied:
+** movprfx z0, z1
+** uqsub z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u16_x_untied, svuint16_t,
+ z0 = svqsub_n_u16_x (p0, z1, 1),
+ z0 = svqsub_x (p0, z1, 1))
+
+/*
+** qsub_127_u16_x:
+** uqsub z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u16_x, svuint16_t,
+ z0 = svqsub_n_u16_x (p0, z0, 127),
+ z0 = svqsub_x (p0, z0, 127))
+
+/*
+** qsub_128_u16_x:
+** uqsub z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u16_x, svuint16_t,
+ z0 = svqsub_n_u16_x (p0, z0, 128),
+ z0 = svqsub_x (p0, z0, 128))
+
+/*
+** qsub_255_u16_x:
+** uqsub z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u16_x, svuint16_t,
+ z0 = svqsub_n_u16_x (p0, z0, 255),
+ z0 = svqsub_x (p0, z0, 255))
+
+/*
+** qsub_m1_u16_x:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.h, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u16_x, svuint16_t,
+ z0 = svqsub_n_u16_x (p0, z0, -1),
+ z0 = svqsub_x (p0, z0, -1))
+
+/*
+** qsub_m127_u16_x:
+** mov (z[0-9]+\.h), #-127
+** uqsub z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u16_x, svuint16_t,
+ z0 = svqsub_n_u16_x (p0, z0, -127),
+ z0 = svqsub_x (p0, z0, -127))
+
+/*
+** qsub_m128_u16_x:
+** mov (z[0-9]+\.h), #-128
+** uqsub z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u16_x, svuint16_t,
+ z0 = svqsub_n_u16_x (p0, z0, -128),
+ z0 = svqsub_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsub_u32_tied1:
+** uqsub z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_tied1, svuint32_t,
+ z0 = svqsub_u32 (z0, z1),
+ z0 = svqsub (z0, z1))
+
+/*
+** qsub_u32_tied2:
+** uqsub z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_tied2, svuint32_t,
+ z0 = svqsub_u32 (z1, z0),
+ z0 = svqsub (z1, z0))
+
+/*
+** qsub_u32_untied:
+** uqsub z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_untied, svuint32_t,
+ z0 = svqsub_u32 (z1, z2),
+ z0 = svqsub (z1, z2))
+
+/*
+** qsub_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** uqsub z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svqsub_n_u32 (z0, x0),
+ z0 = svqsub (z0, x0))
+
+/*
+** qsub_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** uqsub z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svqsub_n_u32 (z1, x0),
+ z0 = svqsub (z1, x0))
+
+/*
+** qsub_1_u32_tied1:
+** uqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u32_tied1, svuint32_t,
+ z0 = svqsub_n_u32 (z0, 1),
+ z0 = svqsub (z0, 1))
+
+/*
+** qsub_1_u32_untied:
+** movprfx z0, z1
+** uqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u32_untied, svuint32_t,
+ z0 = svqsub_n_u32 (z1, 1),
+ z0 = svqsub (z1, 1))
+
+/*
+** qsub_127_u32:
+** uqsub z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u32, svuint32_t,
+ z0 = svqsub_n_u32 (z0, 127),
+ z0 = svqsub (z0, 127))
+
+/*
+** qsub_128_u32:
+** uqsub z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u32, svuint32_t,
+ z0 = svqsub_n_u32 (z0, 128),
+ z0 = svqsub (z0, 128))
+
+/*
+** qsub_255_u32:
+** uqsub z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u32, svuint32_t,
+ z0 = svqsub_n_u32 (z0, 255),
+ z0 = svqsub (z0, 255))
+
+/*
+** qsub_m1_u32:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.s, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u32, svuint32_t,
+ z0 = svqsub_n_u32 (z0, -1),
+ z0 = svqsub (z0, -1))
+
+/*
+** qsub_m127_u32:
+** mov (z[0-9]+\.s), #-127
+** uqsub z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u32, svuint32_t,
+ z0 = svqsub_n_u32 (z0, -127),
+ z0 = svqsub (z0, -127))
+
+/*
+** qsub_m128_u32:
+** mov (z[0-9]+\.s), #-128
+** uqsub z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u32, svuint32_t,
+ z0 = svqsub_n_u32 (z0, -128),
+ z0 = svqsub (z0, -128))
+
+/*
+** qsub_u32_m_tied1:
+** uqsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_m_tied1, svuint32_t,
+ z0 = svqsub_u32_m (p0, z0, z1),
+ z0 = svqsub_m (p0, z0, z1))
+
+/*
+** qsub_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uqsub z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_m_tied2, svuint32_t,
+ z0 = svqsub_u32_m (p0, z1, z0),
+ z0 = svqsub_m (p0, z1, z0))
+
+/*
+** qsub_u32_m_untied:
+** movprfx z0, z1
+** uqsub z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_m_untied, svuint32_t,
+ z0 = svqsub_u32_m (p0, z1, z2),
+ z0 = svqsub_m (p0, z1, z2))
+
+/*
+** qsub_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u32_m_tied1, svuint32_t, uint32_t,
+ z0 = svqsub_n_u32_m (p0, z0, x0),
+ z0 = svqsub_m (p0, z0, x0))
+
+/*
+** qsub_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u32_m_untied, svuint32_t, uint32_t,
+ z0 = svqsub_n_u32_m (p0, z1, x0),
+ z0 = svqsub_m (p0, z1, x0))
+
+/*
+** qsub_1_u32_m_tied1:
+** mov (z[0-9]+\.s), #1
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u32_m_tied1, svuint32_t,
+ z0 = svqsub_n_u32_m (p0, z0, 1),
+ z0 = svqsub_m (p0, z0, 1))
+
+/*
+** qsub_1_u32_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.s), #1
+** movprfx z0, z1
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u32_m_untied, svuint32_t,
+ z0 = svqsub_n_u32_m (p0, z1, 1),
+ z0 = svqsub_m (p0, z1, 1))
+
+/*
+** qsub_127_u32_m:
+** mov (z[0-9]+\.s), #127
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u32_m, svuint32_t,
+ z0 = svqsub_n_u32_m (p0, z0, 127),
+ z0 = svqsub_m (p0, z0, 127))
+
+/*
+** qsub_128_u32_m:
+** mov (z[0-9]+\.s), #128
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u32_m, svuint32_t,
+ z0 = svqsub_n_u32_m (p0, z0, 128),
+ z0 = svqsub_m (p0, z0, 128))
+
+/*
+** qsub_255_u32_m:
+** mov (z[0-9]+\.s), #255
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u32_m, svuint32_t,
+ z0 = svqsub_n_u32_m (p0, z0, 255),
+ z0 = svqsub_m (p0, z0, 255))
+
+/*
+** qsub_m1_u32_m:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u32_m, svuint32_t,
+ z0 = svqsub_n_u32_m (p0, z0, -1),
+ z0 = svqsub_m (p0, z0, -1))
+
+/*
+** qsub_m127_u32_m:
+** mov (z[0-9]+\.s), #-127
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u32_m, svuint32_t,
+ z0 = svqsub_n_u32_m (p0, z0, -127),
+ z0 = svqsub_m (p0, z0, -127))
+
+/*
+** qsub_m128_u32_m:
+** mov (z[0-9]+\.s), #-128
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u32_m, svuint32_t,
+ z0 = svqsub_n_u32_m (p0, z0, -128),
+ z0 = svqsub_m (p0, z0, -128))
+
+/*
+** qsub_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_z_tied1, svuint32_t,
+ z0 = svqsub_u32_z (p0, z0, z1),
+ z0 = svqsub_z (p0, z0, z1))
+
+/*
+** qsub_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** uqsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_z_tied2, svuint32_t,
+ z0 = svqsub_u32_z (p0, z1, z0),
+ z0 = svqsub_z (p0, z1, z0))
+
+/*
+** qsub_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqsub z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** uqsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_z_untied, svuint32_t,
+ z0 = svqsub_u32_z (p0, z1, z2),
+ z0 = svqsub_z (p0, z1, z2))
+
+/*
+** qsub_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u32_z_tied1, svuint32_t, uint32_t,
+ z0 = svqsub_n_u32_z (p0, z0, x0),
+ z0 = svqsub_z (p0, z0, x0))
+
+/*
+** qsub_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqsub z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uqsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u32_z_untied, svuint32_t, uint32_t,
+ z0 = svqsub_n_u32_z (p0, z1, x0),
+ z0 = svqsub_z (p0, z1, x0))
+
+/*
+** qsub_1_u32_z_tied1:
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u32_z_tied1, svuint32_t,
+ z0 = svqsub_n_u32_z (p0, z0, 1),
+ z0 = svqsub_z (p0, z0, 1))
+
+/*
+** qsub_1_u32_z_untied:
+** mov (z[0-9]+\.s), #1
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqsub z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uqsubr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u32_z_untied, svuint32_t,
+ z0 = svqsub_n_u32_z (p0, z1, 1),
+ z0 = svqsub_z (p0, z1, 1))
+
+/*
+** qsub_127_u32_z:
+** mov (z[0-9]+\.s), #127
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u32_z, svuint32_t,
+ z0 = svqsub_n_u32_z (p0, z0, 127),
+ z0 = svqsub_z (p0, z0, 127))
+
+/*
+** qsub_128_u32_z:
+** mov (z[0-9]+\.s), #128
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u32_z, svuint32_t,
+ z0 = svqsub_n_u32_z (p0, z0, 128),
+ z0 = svqsub_z (p0, z0, 128))
+
+/*
+** qsub_255_u32_z:
+** mov (z[0-9]+\.s), #255
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u32_z, svuint32_t,
+ z0 = svqsub_n_u32_z (p0, z0, 255),
+ z0 = svqsub_z (p0, z0, 255))
+
+/*
+** qsub_m1_u32_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u32_z, svuint32_t,
+ z0 = svqsub_n_u32_z (p0, z0, -1),
+ z0 = svqsub_z (p0, z0, -1))
+
+/*
+** qsub_m127_u32_z:
+** mov (z[0-9]+\.s), #-127
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u32_z, svuint32_t,
+ z0 = svqsub_n_u32_z (p0, z0, -127),
+ z0 = svqsub_z (p0, z0, -127))
+
+/*
+** qsub_m128_u32_z:
+** mov (z[0-9]+\.s), #-128
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u32_z, svuint32_t,
+ z0 = svqsub_n_u32_z (p0, z0, -128),
+ z0 = svqsub_z (p0, z0, -128))
+
+/*
+** qsub_u32_x_tied1:
+** uqsub z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_x_tied1, svuint32_t,
+ z0 = svqsub_u32_x (p0, z0, z1),
+ z0 = svqsub_x (p0, z0, z1))
+
+/*
+** qsub_u32_x_tied2:
+** uqsub z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_x_tied2, svuint32_t,
+ z0 = svqsub_u32_x (p0, z1, z0),
+ z0 = svqsub_x (p0, z1, z0))
+
+/*
+** qsub_u32_x_untied:
+** uqsub z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u32_x_untied, svuint32_t,
+ z0 = svqsub_u32_x (p0, z1, z2),
+ z0 = svqsub_x (p0, z1, z2))
+
+/*
+** qsub_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** uqsub z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u32_x_tied1, svuint32_t, uint32_t,
+ z0 = svqsub_n_u32_x (p0, z0, x0),
+ z0 = svqsub_x (p0, z0, x0))
+
+/*
+** qsub_w0_u32_x_untied:
+** mov (z[0-9]+\.s), w0
+** uqsub z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u32_x_untied, svuint32_t, uint32_t,
+ z0 = svqsub_n_u32_x (p0, z1, x0),
+ z0 = svqsub_x (p0, z1, x0))
+
+/*
+** qsub_1_u32_x_tied1:
+** uqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u32_x_tied1, svuint32_t,
+ z0 = svqsub_n_u32_x (p0, z0, 1),
+ z0 = svqsub_x (p0, z0, 1))
+
+/*
+** qsub_1_u32_x_untied:
+** movprfx z0, z1
+** uqsub z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u32_x_untied, svuint32_t,
+ z0 = svqsub_n_u32_x (p0, z1, 1),
+ z0 = svqsub_x (p0, z1, 1))
+
+/*
+** qsub_127_u32_x:
+** uqsub z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u32_x, svuint32_t,
+ z0 = svqsub_n_u32_x (p0, z0, 127),
+ z0 = svqsub_x (p0, z0, 127))
+
+/*
+** qsub_128_u32_x:
+** uqsub z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u32_x, svuint32_t,
+ z0 = svqsub_n_u32_x (p0, z0, 128),
+ z0 = svqsub_x (p0, z0, 128))
+
+/*
+** qsub_255_u32_x:
+** uqsub z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u32_x, svuint32_t,
+ z0 = svqsub_n_u32_x (p0, z0, 255),
+ z0 = svqsub_x (p0, z0, 255))
+
+/*
+** qsub_m1_u32_x:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.s, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u32_x, svuint32_t,
+ z0 = svqsub_n_u32_x (p0, z0, -1),
+ z0 = svqsub_x (p0, z0, -1))
+
+/*
+** qsub_m127_u32_x:
+** mov (z[0-9]+\.s), #-127
+** uqsub z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u32_x, svuint32_t,
+ z0 = svqsub_n_u32_x (p0, z0, -127),
+ z0 = svqsub_x (p0, z0, -127))
+
+/*
+** qsub_m128_u32_x:
+** mov (z[0-9]+\.s), #-128
+** uqsub z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u32_x, svuint32_t,
+ z0 = svqsub_n_u32_x (p0, z0, -128),
+ z0 = svqsub_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsub_u64_tied1:
+** uqsub z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_tied1, svuint64_t,
+ z0 = svqsub_u64 (z0, z1),
+ z0 = svqsub (z0, z1))
+
+/*
+** qsub_u64_tied2:
+** uqsub z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_tied2, svuint64_t,
+ z0 = svqsub_u64 (z1, z0),
+ z0 = svqsub (z1, z0))
+
+/*
+** qsub_u64_untied:
+** uqsub z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_untied, svuint64_t,
+ z0 = svqsub_u64 (z1, z2),
+ z0 = svqsub (z1, z2))
+
+/*
+** qsub_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** uqsub z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svqsub_n_u64 (z0, x0),
+ z0 = svqsub (z0, x0))
+
+/*
+** qsub_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** uqsub z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svqsub_n_u64 (z1, x0),
+ z0 = svqsub (z1, x0))
+
+/*
+** qsub_1_u64_tied1:
+** uqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u64_tied1, svuint64_t,
+ z0 = svqsub_n_u64 (z0, 1),
+ z0 = svqsub (z0, 1))
+
+/*
+** qsub_1_u64_untied:
+** movprfx z0, z1
+** uqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u64_untied, svuint64_t,
+ z0 = svqsub_n_u64 (z1, 1),
+ z0 = svqsub (z1, 1))
+
+/*
+** qsub_127_u64:
+** uqsub z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u64, svuint64_t,
+ z0 = svqsub_n_u64 (z0, 127),
+ z0 = svqsub (z0, 127))
+
+/*
+** qsub_128_u64:
+** uqsub z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u64, svuint64_t,
+ z0 = svqsub_n_u64 (z0, 128),
+ z0 = svqsub (z0, 128))
+
+/*
+** qsub_255_u64:
+** uqsub z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u64, svuint64_t,
+ z0 = svqsub_n_u64 (z0, 255),
+ z0 = svqsub (z0, 255))
+
+/*
+** qsub_m1_u64:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.d, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u64, svuint64_t,
+ z0 = svqsub_n_u64 (z0, -1),
+ z0 = svqsub (z0, -1))
+
+/*
+** qsub_m127_u64:
+** mov (z[0-9]+\.d), #-127
+** uqsub z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u64, svuint64_t,
+ z0 = svqsub_n_u64 (z0, -127),
+ z0 = svqsub (z0, -127))
+
+/*
+** qsub_m128_u64:
+** mov (z[0-9]+\.d), #-128
+** uqsub z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u64, svuint64_t,
+ z0 = svqsub_n_u64 (z0, -128),
+ z0 = svqsub (z0, -128))
+
+/*
+** qsub_u64_m_tied1:
+** uqsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_m_tied1, svuint64_t,
+ z0 = svqsub_u64_m (p0, z0, z1),
+ z0 = svqsub_m (p0, z0, z1))
+
+/*
+** qsub_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_m_tied2, svuint64_t,
+ z0 = svqsub_u64_m (p0, z1, z0),
+ z0 = svqsub_m (p0, z1, z0))
+
+/*
+** qsub_u64_m_untied:
+** movprfx z0, z1
+** uqsub z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_m_untied, svuint64_t,
+ z0 = svqsub_u64_m (p0, z1, z2),
+ z0 = svqsub_m (p0, z1, z2))
+
+/*
+** qsub_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_u64_m_tied1, svuint64_t, uint64_t,
+ z0 = svqsub_n_u64_m (p0, z0, x0),
+ z0 = svqsub_m (p0, z0, x0))
+
+/*
+** qsub_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_u64_m_untied, svuint64_t, uint64_t,
+ z0 = svqsub_n_u64_m (p0, z1, x0),
+ z0 = svqsub_m (p0, z1, x0))
+
+/*
+** qsub_1_u64_m_tied1:
+** mov (z[0-9]+\.d), #1
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u64_m_tied1, svuint64_t,
+ z0 = svqsub_n_u64_m (p0, z0, 1),
+ z0 = svqsub_m (p0, z0, 1))
+
+/*
+** qsub_1_u64_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.d), #1
+** movprfx z0, z1
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u64_m_untied, svuint64_t,
+ z0 = svqsub_n_u64_m (p0, z1, 1),
+ z0 = svqsub_m (p0, z1, 1))
+
+/*
+** qsub_127_u64_m:
+** mov (z[0-9]+\.d), #127
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u64_m, svuint64_t,
+ z0 = svqsub_n_u64_m (p0, z0, 127),
+ z0 = svqsub_m (p0, z0, 127))
+
+/*
+** qsub_128_u64_m:
+** mov (z[0-9]+\.d), #128
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u64_m, svuint64_t,
+ z0 = svqsub_n_u64_m (p0, z0, 128),
+ z0 = svqsub_m (p0, z0, 128))
+
+/*
+** qsub_255_u64_m:
+** mov (z[0-9]+\.d), #255
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u64_m, svuint64_t,
+ z0 = svqsub_n_u64_m (p0, z0, 255),
+ z0 = svqsub_m (p0, z0, 255))
+
+/*
+** qsub_m1_u64_m:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u64_m, svuint64_t,
+ z0 = svqsub_n_u64_m (p0, z0, -1),
+ z0 = svqsub_m (p0, z0, -1))
+
+/*
+** qsub_m127_u64_m:
+** mov (z[0-9]+\.d), #-127
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u64_m, svuint64_t,
+ z0 = svqsub_n_u64_m (p0, z0, -127),
+ z0 = svqsub_m (p0, z0, -127))
+
+/*
+** qsub_m128_u64_m:
+** mov (z[0-9]+\.d), #-128
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u64_m, svuint64_t,
+ z0 = svqsub_n_u64_m (p0, z0, -128),
+ z0 = svqsub_m (p0, z0, -128))
+
+/*
+** qsub_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_z_tied1, svuint64_t,
+ z0 = svqsub_u64_z (p0, z0, z1),
+ z0 = svqsub_z (p0, z0, z1))
+
+/*
+** qsub_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** uqsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_z_tied2, svuint64_t,
+ z0 = svqsub_u64_z (p0, z1, z0),
+ z0 = svqsub_z (p0, z1, z0))
+
+/*
+** qsub_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqsub z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** uqsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_z_untied, svuint64_t,
+ z0 = svqsub_u64_z (p0, z1, z2),
+ z0 = svqsub_z (p0, z1, z2))
+
+/*
+** qsub_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_u64_z_tied1, svuint64_t, uint64_t,
+ z0 = svqsub_n_u64_z (p0, z0, x0),
+ z0 = svqsub_z (p0, z0, x0))
+
+/*
+** qsub_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqsub z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uqsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_u64_z_untied, svuint64_t, uint64_t,
+ z0 = svqsub_n_u64_z (p0, z1, x0),
+ z0 = svqsub_z (p0, z1, x0))
+
+/*
+** qsub_1_u64_z_tied1:
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u64_z_tied1, svuint64_t,
+ z0 = svqsub_n_u64_z (p0, z0, 1),
+ z0 = svqsub_z (p0, z0, 1))
+
+/*
+** qsub_1_u64_z_untied:
+** mov (z[0-9]+\.d), #1
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqsub z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uqsubr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u64_z_untied, svuint64_t,
+ z0 = svqsub_n_u64_z (p0, z1, 1),
+ z0 = svqsub_z (p0, z1, 1))
+
+/*
+** qsub_127_u64_z:
+** mov (z[0-9]+\.d), #127
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u64_z, svuint64_t,
+ z0 = svqsub_n_u64_z (p0, z0, 127),
+ z0 = svqsub_z (p0, z0, 127))
+
+/*
+** qsub_128_u64_z:
+** mov (z[0-9]+\.d), #128
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u64_z, svuint64_t,
+ z0 = svqsub_n_u64_z (p0, z0, 128),
+ z0 = svqsub_z (p0, z0, 128))
+
+/*
+** qsub_255_u64_z:
+** mov (z[0-9]+\.d), #255
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u64_z, svuint64_t,
+ z0 = svqsub_n_u64_z (p0, z0, 255),
+ z0 = svqsub_z (p0, z0, 255))
+
+/*
+** qsub_m1_u64_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u64_z, svuint64_t,
+ z0 = svqsub_n_u64_z (p0, z0, -1),
+ z0 = svqsub_z (p0, z0, -1))
+
+/*
+** qsub_m127_u64_z:
+** mov (z[0-9]+\.d), #-127
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u64_z, svuint64_t,
+ z0 = svqsub_n_u64_z (p0, z0, -127),
+ z0 = svqsub_z (p0, z0, -127))
+
+/*
+** qsub_m128_u64_z:
+** mov (z[0-9]+\.d), #-128
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u64_z, svuint64_t,
+ z0 = svqsub_n_u64_z (p0, z0, -128),
+ z0 = svqsub_z (p0, z0, -128))
+
+/*
+** qsub_u64_x_tied1:
+** uqsub z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_x_tied1, svuint64_t,
+ z0 = svqsub_u64_x (p0, z0, z1),
+ z0 = svqsub_x (p0, z0, z1))
+
+/*
+** qsub_u64_x_tied2:
+** uqsub z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_x_tied2, svuint64_t,
+ z0 = svqsub_u64_x (p0, z1, z0),
+ z0 = svqsub_x (p0, z1, z0))
+
+/*
+** qsub_u64_x_untied:
+** uqsub z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u64_x_untied, svuint64_t,
+ z0 = svqsub_u64_x (p0, z1, z2),
+ z0 = svqsub_x (p0, z1, z2))
+
+/*
+** qsub_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** uqsub z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_u64_x_tied1, svuint64_t, uint64_t,
+ z0 = svqsub_n_u64_x (p0, z0, x0),
+ z0 = svqsub_x (p0, z0, x0))
+
+/*
+** qsub_x0_u64_x_untied:
+** mov (z[0-9]+\.d), x0
+** uqsub z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_x0_u64_x_untied, svuint64_t, uint64_t,
+ z0 = svqsub_n_u64_x (p0, z1, x0),
+ z0 = svqsub_x (p0, z1, x0))
+
+/*
+** qsub_1_u64_x_tied1:
+** uqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u64_x_tied1, svuint64_t,
+ z0 = svqsub_n_u64_x (p0, z0, 1),
+ z0 = svqsub_x (p0, z0, 1))
+
+/*
+** qsub_1_u64_x_untied:
+** movprfx z0, z1
+** uqsub z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u64_x_untied, svuint64_t,
+ z0 = svqsub_n_u64_x (p0, z1, 1),
+ z0 = svqsub_x (p0, z1, 1))
+
+/*
+** qsub_127_u64_x:
+** uqsub z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u64_x, svuint64_t,
+ z0 = svqsub_n_u64_x (p0, z0, 127),
+ z0 = svqsub_x (p0, z0, 127))
+
+/*
+** qsub_128_u64_x:
+** uqsub z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u64_x, svuint64_t,
+ z0 = svqsub_n_u64_x (p0, z0, 128),
+ z0 = svqsub_x (p0, z0, 128))
+
+/*
+** qsub_255_u64_x:
+** uqsub z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u64_x, svuint64_t,
+ z0 = svqsub_n_u64_x (p0, z0, 255),
+ z0 = svqsub_x (p0, z0, 255))
+
+/*
+** qsub_m1_u64_x:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.d, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u64_x, svuint64_t,
+ z0 = svqsub_n_u64_x (p0, z0, -1),
+ z0 = svqsub_x (p0, z0, -1))
+
+/*
+** qsub_m127_u64_x:
+** mov (z[0-9]+\.d), #-127
+** uqsub z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u64_x, svuint64_t,
+ z0 = svqsub_n_u64_x (p0, z0, -127),
+ z0 = svqsub_x (p0, z0, -127))
+
+/*
+** qsub_m128_u64_x:
+** mov (z[0-9]+\.d), #-128
+** uqsub z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u64_x, svuint64_t,
+ z0 = svqsub_n_u64_x (p0, z0, -128),
+ z0 = svqsub_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsub_u8_tied1:
+** uqsub z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_tied1, svuint8_t,
+ z0 = svqsub_u8 (z0, z1),
+ z0 = svqsub (z0, z1))
+
+/*
+** qsub_u8_tied2:
+** uqsub z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_tied2, svuint8_t,
+ z0 = svqsub_u8 (z1, z0),
+ z0 = svqsub (z1, z0))
+
+/*
+** qsub_u8_untied:
+** uqsub z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_untied, svuint8_t,
+ z0 = svqsub_u8 (z1, z2),
+ z0 = svqsub (z1, z2))
+
+/*
+** qsub_w0_u8_tied1:
+** mov (z[0-9]+\.b), w0
+** uqsub z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u8_tied1, svuint8_t, uint8_t,
+ z0 = svqsub_n_u8 (z0, x0),
+ z0 = svqsub (z0, x0))
+
+/*
+** qsub_w0_u8_untied:
+** mov (z[0-9]+\.b), w0
+** uqsub z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u8_untied, svuint8_t, uint8_t,
+ z0 = svqsub_n_u8 (z1, x0),
+ z0 = svqsub (z1, x0))
+
+/*
+** qsub_1_u8_tied1:
+** uqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u8_tied1, svuint8_t,
+ z0 = svqsub_n_u8 (z0, 1),
+ z0 = svqsub (z0, 1))
+
+/*
+** qsub_1_u8_untied:
+** movprfx z0, z1
+** uqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u8_untied, svuint8_t,
+ z0 = svqsub_n_u8 (z1, 1),
+ z0 = svqsub (z1, 1))
+
+/*
+** qsub_127_u8:
+** uqsub z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u8, svuint8_t,
+ z0 = svqsub_n_u8 (z0, 127),
+ z0 = svqsub (z0, 127))
+
+/*
+** qsub_128_u8:
+** uqsub z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u8, svuint8_t,
+ z0 = svqsub_n_u8 (z0, 128),
+ z0 = svqsub (z0, 128))
+
+/*
+** qsub_255_u8:
+** uqsub z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u8, svuint8_t,
+ z0 = svqsub_n_u8 (z0, 255),
+ z0 = svqsub (z0, 255))
+
+/*
+** qsub_m1_u8:
+** uqsub z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u8, svuint8_t,
+ z0 = svqsub_n_u8 (z0, -1),
+ z0 = svqsub (z0, -1))
+
+/*
+** qsub_m127_u8:
+** uqsub z0\.b, z0\.b, #129
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u8, svuint8_t,
+ z0 = svqsub_n_u8 (z0, -127),
+ z0 = svqsub (z0, -127))
+
+/*
+** qsub_m128_u8:
+** uqsub z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u8, svuint8_t,
+ z0 = svqsub_n_u8 (z0, -128),
+ z0 = svqsub (z0, -128))
+
+/*
+** qsub_u8_m_tied1:
+** uqsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_m_tied1, svuint8_t,
+ z0 = svqsub_u8_m (p0, z0, z1),
+ z0 = svqsub_m (p0, z0, z1))
+
+/*
+** qsub_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uqsub z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_m_tied2, svuint8_t,
+ z0 = svqsub_u8_m (p0, z1, z0),
+ z0 = svqsub_m (p0, z1, z0))
+
+/*
+** qsub_u8_m_untied:
+** movprfx z0, z1
+** uqsub z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_m_untied, svuint8_t,
+ z0 = svqsub_u8_m (p0, z1, z2),
+ z0 = svqsub_m (p0, z1, z2))
+
+/*
+** qsub_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u8_m_tied1, svuint8_t, uint8_t,
+ z0 = svqsub_n_u8_m (p0, z0, x0),
+ z0 = svqsub_m (p0, z0, x0))
+
+/*
+** qsub_w0_u8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u8_m_untied, svuint8_t, uint8_t,
+ z0 = svqsub_n_u8_m (p0, z1, x0),
+ z0 = svqsub_m (p0, z1, x0))
+
+/*
+** qsub_1_u8_m_tied1:
+** mov (z[0-9]+\.b), #1
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u8_m_tied1, svuint8_t,
+ z0 = svqsub_n_u8_m (p0, z0, 1),
+ z0 = svqsub_m (p0, z0, 1))
+
+/*
+** qsub_1_u8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), #1
+** movprfx z0, z1
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u8_m_untied, svuint8_t,
+ z0 = svqsub_n_u8_m (p0, z1, 1),
+ z0 = svqsub_m (p0, z1, 1))
+
+/*
+** qsub_127_u8_m:
+** mov (z[0-9]+\.b), #127
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u8_m, svuint8_t,
+ z0 = svqsub_n_u8_m (p0, z0, 127),
+ z0 = svqsub_m (p0, z0, 127))
+
+/*
+** qsub_128_u8_m:
+** mov (z[0-9]+\.b), #-128
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u8_m, svuint8_t,
+ z0 = svqsub_n_u8_m (p0, z0, 128),
+ z0 = svqsub_m (p0, z0, 128))
+
+/*
+** qsub_255_u8_m:
+** mov (z[0-9]+\.b), #-1
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u8_m, svuint8_t,
+ z0 = svqsub_n_u8_m (p0, z0, 255),
+ z0 = svqsub_m (p0, z0, 255))
+
+/*
+** qsub_m1_u8_m:
+** mov (z[0-9]+\.b), #-1
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u8_m, svuint8_t,
+ z0 = svqsub_n_u8_m (p0, z0, -1),
+ z0 = svqsub_m (p0, z0, -1))
+
+/*
+** qsub_m127_u8_m:
+** mov (z[0-9]+\.b), #-127
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u8_m, svuint8_t,
+ z0 = svqsub_n_u8_m (p0, z0, -127),
+ z0 = svqsub_m (p0, z0, -127))
+
+/*
+** qsub_m128_u8_m:
+** mov (z[0-9]+\.b), #-128
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u8_m, svuint8_t,
+ z0 = svqsub_n_u8_m (p0, z0, -128),
+ z0 = svqsub_m (p0, z0, -128))
+
+/*
+** qsub_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_z_tied1, svuint8_t,
+ z0 = svqsub_u8_z (p0, z0, z1),
+ z0 = svqsub_z (p0, z0, z1))
+
+/*
+** qsub_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** uqsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_z_tied2, svuint8_t,
+ z0 = svqsub_u8_z (p0, z1, z0),
+ z0 = svqsub_z (p0, z1, z0))
+
+/*
+** qsub_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqsub z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** uqsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_z_untied, svuint8_t,
+ z0 = svqsub_u8_z (p0, z1, z2),
+ z0 = svqsub_z (p0, z1, z2))
+
+/*
+** qsub_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u8_z_tied1, svuint8_t, uint8_t,
+ z0 = svqsub_n_u8_z (p0, z0, x0),
+ z0 = svqsub_z (p0, z0, x0))
+
+/*
+** qsub_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uqsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u8_z_untied, svuint8_t, uint8_t,
+ z0 = svqsub_n_u8_z (p0, z1, x0),
+ z0 = svqsub_z (p0, z1, x0))
+
+/*
+** qsub_1_u8_z_tied1:
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u8_z_tied1, svuint8_t,
+ z0 = svqsub_n_u8_z (p0, z0, 1),
+ z0 = svqsub_z (p0, z0, 1))
+
+/*
+** qsub_1_u8_z_untied:
+** mov (z[0-9]+\.b), #1
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uqsubr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u8_z_untied, svuint8_t,
+ z0 = svqsub_n_u8_z (p0, z1, 1),
+ z0 = svqsub_z (p0, z1, 1))
+
+/*
+** qsub_127_u8_z:
+** mov (z[0-9]+\.b), #127
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u8_z, svuint8_t,
+ z0 = svqsub_n_u8_z (p0, z0, 127),
+ z0 = svqsub_z (p0, z0, 127))
+
+/*
+** qsub_128_u8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u8_z, svuint8_t,
+ z0 = svqsub_n_u8_z (p0, z0, 128),
+ z0 = svqsub_z (p0, z0, 128))
+
+/*
+** qsub_255_u8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u8_z, svuint8_t,
+ z0 = svqsub_n_u8_z (p0, z0, 255),
+ z0 = svqsub_z (p0, z0, 255))
+
+/*
+** qsub_m1_u8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u8_z, svuint8_t,
+ z0 = svqsub_n_u8_z (p0, z0, -1),
+ z0 = svqsub_z (p0, z0, -1))
+
+/*
+** qsub_m127_u8_z:
+** mov (z[0-9]+\.b), #-127
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u8_z, svuint8_t,
+ z0 = svqsub_n_u8_z (p0, z0, -127),
+ z0 = svqsub_z (p0, z0, -127))
+
+/*
+** qsub_m128_u8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u8_z, svuint8_t,
+ z0 = svqsub_n_u8_z (p0, z0, -128),
+ z0 = svqsub_z (p0, z0, -128))
+
+/*
+** qsub_u8_x_tied1:
+** uqsub z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_x_tied1, svuint8_t,
+ z0 = svqsub_u8_x (p0, z0, z1),
+ z0 = svqsub_x (p0, z0, z1))
+
+/*
+** qsub_u8_x_tied2:
+** uqsub z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_x_tied2, svuint8_t,
+ z0 = svqsub_u8_x (p0, z1, z0),
+ z0 = svqsub_x (p0, z1, z0))
+
+/*
+** qsub_u8_x_untied:
+** uqsub z0\.b, z1\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsub_u8_x_untied, svuint8_t,
+ z0 = svqsub_u8_x (p0, z1, z2),
+ z0 = svqsub_x (p0, z1, z2))
+
+/*
+** qsub_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** uqsub z0\.b, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u8_x_tied1, svuint8_t, uint8_t,
+ z0 = svqsub_n_u8_x (p0, z0, x0),
+ z0 = svqsub_x (p0, z0, x0))
+
+/*
+** qsub_w0_u8_x_untied:
+** mov (z[0-9]+\.b), w0
+** uqsub z0\.b, z1\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsub_w0_u8_x_untied, svuint8_t, uint8_t,
+ z0 = svqsub_n_u8_x (p0, z1, x0),
+ z0 = svqsub_x (p0, z1, x0))
+
+/*
+** qsub_1_u8_x_tied1:
+** uqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u8_x_tied1, svuint8_t,
+ z0 = svqsub_n_u8_x (p0, z0, 1),
+ z0 = svqsub_x (p0, z0, 1))
+
+/*
+** qsub_1_u8_x_untied:
+** movprfx z0, z1
+** uqsub z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (qsub_1_u8_x_untied, svuint8_t,
+ z0 = svqsub_n_u8_x (p0, z1, 1),
+ z0 = svqsub_x (p0, z1, 1))
+
+/*
+** qsub_127_u8_x:
+** uqsub z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (qsub_127_u8_x, svuint8_t,
+ z0 = svqsub_n_u8_x (p0, z0, 127),
+ z0 = svqsub_x (p0, z0, 127))
+
+/*
+** qsub_128_u8_x:
+** uqsub z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_128_u8_x, svuint8_t,
+ z0 = svqsub_n_u8_x (p0, z0, 128),
+ z0 = svqsub_x (p0, z0, 128))
+
+/*
+** qsub_255_u8_x:
+** uqsub z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_255_u8_x, svuint8_t,
+ z0 = svqsub_n_u8_x (p0, z0, 255),
+ z0 = svqsub_x (p0, z0, 255))
+
+/*
+** qsub_m1_u8_x:
+** uqsub z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m1_u8_x, svuint8_t,
+ z0 = svqsub_n_u8_x (p0, z0, -1),
+ z0 = svqsub_x (p0, z0, -1))
+
+/*
+** qsub_m127_u8_x:
+** uqsub z0\.b, z0\.b, #129
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m127_u8_x, svuint8_t,
+ z0 = svqsub_n_u8_x (p0, z0, -127),
+ z0 = svqsub_x (p0, z0, -127))
+
+/*
+** qsub_m128_u8_x:
+** uqsub z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (qsub_m128_u8_x, svuint8_t,
+ z0 = svqsub_n_u8_x (p0, z0, -128),
+ z0 = svqsub_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsubr_s16_m_tied1:
+** sqsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s16_m_tied1, svint16_t,
+ z0 = svqsubr_s16_m (p0, z0, z1),
+ z0 = svqsubr_m (p0, z0, z1))
+
+/*
+** qsubr_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqsubr z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s16_m_tied2, svint16_t,
+ z0 = svqsubr_s16_m (p0, z1, z0),
+ z0 = svqsubr_m (p0, z1, z0))
+
+/*
+** qsubr_s16_m_untied:
+** movprfx z0, z1
+** sqsubr z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s16_m_untied, svint16_t,
+ z0 = svqsubr_s16_m (p0, z1, z2),
+ z0 = svqsubr_m (p0, z1, z2))
+
+/*
+** qsubr_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** sqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svqsubr_n_s16_m (p0, z0, x0),
+ z0 = svqsubr_m (p0, z0, x0))
+
+/*
+** qsubr_w0_s16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** sqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svqsubr_n_s16_m (p0, z1, x0),
+ z0 = svqsubr_m (p0, z1, x0))
+
+/*
+** qsubr_1_s16_m_tied1:
+** mov (z[0-9]+\.h), #1
+** sqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s16_m_tied1, svint16_t,
+ z0 = svqsubr_n_s16_m (p0, z0, 1),
+ z0 = svqsubr_m (p0, z0, 1))
+
+/*
+** qsubr_1_s16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), #1
+** movprfx z0, z1
+** sqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s16_m_untied, svint16_t,
+ z0 = svqsubr_n_s16_m (p0, z1, 1),
+ z0 = svqsubr_m (p0, z1, 1))
+
+/*
+** qsubr_m2_s16_m:
+** mov (z[0-9]+\.h), #-2
+** sqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m2_s16_m, svint16_t,
+ z0 = svqsubr_n_s16_m (p0, z0, -2),
+ z0 = svqsubr_m (p0, z0, -2))
+
+/*
+** qsubr_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** sqsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s16_z_tied1, svint16_t,
+ z0 = svqsubr_s16_z (p0, z0, z1),
+ z0 = svqsubr_z (p0, z0, z1))
+
+/*
+** qsubr_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** sqsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s16_z_tied2, svint16_t,
+ z0 = svqsubr_s16_z (p0, z1, z0),
+ z0 = svqsubr_z (p0, z1, z0))
+
+/*
+** qsubr_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqsubr z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** sqsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s16_z_untied, svint16_t,
+ z0 = svqsubr_s16_z (p0, z1, z2),
+ z0 = svqsubr_z (p0, z1, z2))
+
+/*
+** qsubr_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** sqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svqsubr_n_s16_z (p0, z0, x0),
+ z0 = svqsubr_z (p0, z0, x0))
+
+/*
+** qsubr_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqsubr z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** sqsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svqsubr_n_s16_z (p0, z1, x0),
+ z0 = svqsubr_z (p0, z1, x0))
+
+/*
+** qsubr_1_s16_z_tied1:
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z0\.h
+** sqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s16_z_tied1, svint16_t,
+ z0 = svqsubr_n_s16_z (p0, z0, 1),
+ z0 = svqsubr_z (p0, z0, 1))
+
+/*
+** qsubr_1_s16_z_untied:
+** mov (z[0-9]+\.h), #1
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** sqsubr z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** sqsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s16_z_untied, svint16_t,
+ z0 = svqsubr_n_s16_z (p0, z1, 1),
+ z0 = svqsubr_z (p0, z1, 1))
+
+/*
+** qsubr_s16_x_tied1:
+** sqsub z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s16_x_tied1, svint16_t,
+ z0 = svqsubr_s16_x (p0, z0, z1),
+ z0 = svqsubr_x (p0, z0, z1))
+
+/*
+** qsubr_s16_x_tied2:
+** sqsub z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s16_x_tied2, svint16_t,
+ z0 = svqsubr_s16_x (p0, z1, z0),
+ z0 = svqsubr_x (p0, z1, z0))
+
+/*
+** qsubr_s16_x_untied:
+** sqsub z0\.h, z2\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s16_x_untied, svint16_t,
+ z0 = svqsubr_s16_x (p0, z1, z2),
+ z0 = svqsubr_x (p0, z1, z2))
+
+/*
+** qsubr_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** sqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, x0),
+ z0 = svqsubr_x (p0, z0, x0))
+
+/*
+** qsubr_w0_s16_x_untied:
+** mov (z[0-9]+\.h), w0
+** sqsub z0\.h, \1, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svqsubr_n_s16_x (p0, z1, x0),
+ z0 = svqsubr_x (p0, z1, x0))
+
+/*
+** qsubr_1_s16_x_tied1:
+** mov (z[0-9]+\.h), #1
+** sqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s16_x_tied1, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, 1),
+ z0 = svqsubr_x (p0, z0, 1))
+
+/*
+** qsubr_1_s16_x_untied:
+** mov (z[0-9]+\.h), #1
+** sqsub z0\.h, \1, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s16_x_untied, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z1, 1),
+ z0 = svqsubr_x (p0, z1, 1))
+
+/*
+** qsubr_127_s16_x:
+** mov (z[0-9]+\.h), #127
+** sqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_127_s16_x, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, 127),
+ z0 = svqsubr_x (p0, z0, 127))
+
+/*
+** qsubr_128_s16_x:
+** mov (z[0-9]+\.h), #128
+** sqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_128_s16_x, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, 128),
+ z0 = svqsubr_x (p0, z0, 128))
+
+/*
+** qsubr_255_s16_x:
+** mov (z[0-9]+\.h), #255
+** sqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_255_s16_x, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, 255),
+ z0 = svqsubr_x (p0, z0, 255))
+
+/*
+** qsubr_256_s16_x:
+** mov (z[0-9]+\.h), #256
+** sqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_256_s16_x, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, 256),
+ z0 = svqsubr_x (p0, z0, 256))
+
+/*
+** qsubr_257_s16_x:
+** mov (z[0-9]+)\.b, #1
+** sqsub z0\.h, \1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_257_s16_x, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, 257),
+ z0 = svqsubr_x (p0, z0, 257))
+
+/*
+** qsubr_512_s16_x:
+** mov (z[0-9]+\.h), #512
+** sqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_512_s16_x, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, 512),
+ z0 = svqsubr_x (p0, z0, 512))
+
+/*
+** qsubr_65280_s16_x:
+** mov (z[0-9]+\.h), #-256
+** sqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65280_s16_x, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, 0xff00),
+ z0 = svqsubr_x (p0, z0, 0xff00))
+
+/*
+** qsubr_m1_s16_x_tied1:
+** mov (z[0-9]+)\.b, #-1
+** sqsub z0\.h, \1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_s16_x_tied1, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z0, -1),
+ z0 = svqsubr_x (p0, z0, -1))
+
+/*
+** qsubr_m1_s16_x_untied:
+** mov (z[0-9]+)\.b, #-1
+** sqsub z0\.h, \1\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_s16_x_untied, svint16_t,
+ z0 = svqsubr_n_s16_x (p0, z1, -1),
+ z0 = svqsubr_x (p0, z1, -1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsubr_s32_m_tied1:
+** sqsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s32_m_tied1, svint32_t,
+ z0 = svqsubr_s32_m (p0, z0, z1),
+ z0 = svqsubr_m (p0, z0, z1))
+
+/*
+** qsubr_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqsubr z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s32_m_tied2, svint32_t,
+ z0 = svqsubr_s32_m (p0, z1, z0),
+ z0 = svqsubr_m (p0, z1, z0))
+
+/*
+** qsubr_s32_m_untied:
+** movprfx z0, z1
+** sqsubr z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s32_m_untied, svint32_t,
+ z0 = svqsubr_s32_m (p0, z1, z2),
+ z0 = svqsubr_m (p0, z1, z2))
+
+/*
+** qsubr_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** sqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svqsubr_n_s32_m (p0, z0, x0),
+ z0 = svqsubr_m (p0, z0, x0))
+
+/*
+** qsubr_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svqsubr_n_s32_m (p0, z1, x0),
+ z0 = svqsubr_m (p0, z1, x0))
+
+/*
+** qsubr_1_s32_m_tied1:
+** mov (z[0-9]+\.s), #1
+** sqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s32_m_tied1, svint32_t,
+ z0 = svqsubr_n_s32_m (p0, z0, 1),
+ z0 = svqsubr_m (p0, z0, 1))
+
+/*
+** qsubr_1_s32_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.s), #1
+** movprfx z0, z1
+** sqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s32_m_untied, svint32_t,
+ z0 = svqsubr_n_s32_m (p0, z1, 1),
+ z0 = svqsubr_m (p0, z1, 1))
+
+/*
+** qsubr_m2_s32_m:
+** mov (z[0-9]+\.s), #-2
+** sqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m2_s32_m, svint32_t,
+ z0 = svqsubr_n_s32_m (p0, z0, -2),
+ z0 = svqsubr_m (p0, z0, -2))
+
+/*
+** qsubr_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** sqsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s32_z_tied1, svint32_t,
+ z0 = svqsubr_s32_z (p0, z0, z1),
+ z0 = svqsubr_z (p0, z0, z1))
+
+/*
+** qsubr_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** sqsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s32_z_tied2, svint32_t,
+ z0 = svqsubr_s32_z (p0, z1, z0),
+ z0 = svqsubr_z (p0, z1, z0))
+
+/*
+** qsubr_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqsubr z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** sqsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s32_z_untied, svint32_t,
+ z0 = svqsubr_s32_z (p0, z1, z2),
+ z0 = svqsubr_z (p0, z1, z2))
+
+/*
+** qsubr_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** sqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svqsubr_n_s32_z (p0, z0, x0),
+ z0 = svqsubr_z (p0, z0, x0))
+
+/*
+** qsubr_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqsubr z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** sqsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svqsubr_n_s32_z (p0, z1, x0),
+ z0 = svqsubr_z (p0, z1, x0))
+
+/*
+** qsubr_1_s32_z_tied1:
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z0\.s
+** sqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s32_z_tied1, svint32_t,
+ z0 = svqsubr_n_s32_z (p0, z0, 1),
+ z0 = svqsubr_z (p0, z0, 1))
+
+/*
+** qsubr_1_s32_z_untied:
+** mov (z[0-9]+\.s), #1
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** sqsubr z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** sqsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s32_z_untied, svint32_t,
+ z0 = svqsubr_n_s32_z (p0, z1, 1),
+ z0 = svqsubr_z (p0, z1, 1))
+
+/*
+** qsubr_s32_x_tied1:
+** sqsub z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s32_x_tied1, svint32_t,
+ z0 = svqsubr_s32_x (p0, z0, z1),
+ z0 = svqsubr_x (p0, z0, z1))
+
+/*
+** qsubr_s32_x_tied2:
+** sqsub z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s32_x_tied2, svint32_t,
+ z0 = svqsubr_s32_x (p0, z1, z0),
+ z0 = svqsubr_x (p0, z1, z0))
+
+/*
+** qsubr_s32_x_untied:
+** sqsub z0\.s, z2\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s32_x_untied, svint32_t,
+ z0 = svqsubr_s32_x (p0, z1, z2),
+ z0 = svqsubr_x (p0, z1, z2))
+
+/*
+** qsubr_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, x0),
+ z0 = svqsubr_x (p0, z0, x0))
+
+/*
+** qsubr_w0_s32_x_untied:
+** mov (z[0-9]+\.s), w0
+** sqsub z0\.s, \1, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svqsubr_n_s32_x (p0, z1, x0),
+ z0 = svqsubr_x (p0, z1, x0))
+
+/*
+** qsubr_1_s32_x_tied1:
+** mov (z[0-9]+\.s), #1
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s32_x_tied1, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 1),
+ z0 = svqsubr_x (p0, z0, 1))
+
+/*
+** qsubr_1_s32_x_untied:
+** mov (z[0-9]+\.s), #1
+** sqsub z0\.s, \1, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s32_x_untied, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z1, 1),
+ z0 = svqsubr_x (p0, z1, 1))
+
+/*
+** qsubr_127_s32_x:
+** mov (z[0-9]+\.s), #127
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_127_s32_x, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 127),
+ z0 = svqsubr_x (p0, z0, 127))
+
+/*
+** qsubr_128_s32_x:
+** mov (z[0-9]+\.s), #128
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_128_s32_x, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 128),
+ z0 = svqsubr_x (p0, z0, 128))
+
+/*
+** qsubr_255_s32_x:
+** mov (z[0-9]+\.s), #255
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_255_s32_x, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 255),
+ z0 = svqsubr_x (p0, z0, 255))
+
+/*
+** qsubr_256_s32_x:
+** mov (z[0-9]+\.s), #256
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_256_s32_x, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 256),
+ z0 = svqsubr_x (p0, z0, 256))
+
+/*
+** qsubr_511_s32_x:
+** mov (z[0-9]+\.s), #511
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_511_s32_x, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 511),
+ z0 = svqsubr_x (p0, z0, 511))
+
+/*
+** qsubr_512_s32_x:
+** mov (z[0-9]+\.s), #512
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_512_s32_x, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 512),
+ z0 = svqsubr_x (p0, z0, 512))
+
+/*
+** qsubr_65280_s32_x:
+** mov (z[0-9]+\.s), #65280
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65280_s32_x, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 0xff00),
+ z0 = svqsubr_x (p0, z0, 0xff00))
+
+/*
+** qsubr_65535_s32_x:
+** mov (z[0-9]+\.s), #65535
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65535_s32_x, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 65535),
+ z0 = svqsubr_x (p0, z0, 65535))
+
+/*
+** qsubr_65536_s32_x:
+** mov (z[0-9]+\.s), #65536
+** sqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65536_s32_x, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, 65536),
+ z0 = svqsubr_x (p0, z0, 65536))
+
+/*
+** qsubr_m1_s32_x_tied1:
+** mov (z[0-9]+)\.b, #-1
+** sqsub z0\.s, \1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_s32_x_tied1, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z0, -1),
+ z0 = svqsubr_x (p0, z0, -1))
+
+/*
+** qsubr_m1_s32_x_untied:
+** mov (z[0-9]+)\.b, #-1
+** sqsub z0\.s, \1\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_s32_x_untied, svint32_t,
+ z0 = svqsubr_n_s32_x (p0, z1, -1),
+ z0 = svqsubr_x (p0, z1, -1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsubr_s64_m_tied1:
+** sqsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s64_m_tied1, svint64_t,
+ z0 = svqsubr_s64_m (p0, z0, z1),
+ z0 = svqsubr_m (p0, z0, z1))
+
+/*
+** qsubr_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s64_m_tied2, svint64_t,
+ z0 = svqsubr_s64_m (p0, z1, z0),
+ z0 = svqsubr_m (p0, z1, z0))
+
+/*
+** qsubr_s64_m_untied:
+** movprfx z0, z1
+** sqsubr z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s64_m_untied, svint64_t,
+ z0 = svqsubr_s64_m (p0, z1, z2),
+ z0 = svqsubr_m (p0, z1, z2))
+
+/*
+** qsubr_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svqsubr_n_s64_m (p0, z0, x0),
+ z0 = svqsubr_m (p0, z0, x0))
+
+/*
+** qsubr_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svqsubr_n_s64_m (p0, z1, x0),
+ z0 = svqsubr_m (p0, z1, x0))
+
+/*
+** qsubr_1_s64_m_tied1:
+** mov (z[0-9]+\.d), #1
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s64_m_tied1, svint64_t,
+ z0 = svqsubr_n_s64_m (p0, z0, 1),
+ z0 = svqsubr_m (p0, z0, 1))
+
+/*
+** qsubr_1_s64_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.d), #1
+** movprfx z0, z1
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s64_m_untied, svint64_t,
+ z0 = svqsubr_n_s64_m (p0, z1, 1),
+ z0 = svqsubr_m (p0, z1, 1))
+
+/*
+** qsubr_m2_s64_m:
+** mov (z[0-9]+\.d), #-2
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m2_s64_m, svint64_t,
+ z0 = svqsubr_n_s64_m (p0, z0, -2),
+ z0 = svqsubr_m (p0, z0, -2))
+
+/*
+** qsubr_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** sqsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s64_z_tied1, svint64_t,
+ z0 = svqsubr_s64_z (p0, z0, z1),
+ z0 = svqsubr_z (p0, z0, z1))
+
+/*
+** qsubr_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** sqsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s64_z_tied2, svint64_t,
+ z0 = svqsubr_s64_z (p0, z1, z0),
+ z0 = svqsubr_z (p0, z1, z0))
+
+/*
+** qsubr_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqsubr z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** sqsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s64_z_untied, svint64_t,
+ z0 = svqsubr_s64_z (p0, z1, z2),
+ z0 = svqsubr_z (p0, z1, z2))
+
+/*
+** qsubr_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svqsubr_n_s64_z (p0, z0, x0),
+ z0 = svqsubr_z (p0, z0, x0))
+
+/*
+** qsubr_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** sqsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svqsubr_n_s64_z (p0, z1, x0),
+ z0 = svqsubr_z (p0, z1, x0))
+
+/*
+** qsubr_1_s64_z_tied1:
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z0\.d
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s64_z_tied1, svint64_t,
+ z0 = svqsubr_n_s64_z (p0, z0, 1),
+ z0 = svqsubr_z (p0, z0, 1))
+
+/*
+** qsubr_1_s64_z_untied:
+** mov (z[0-9]+\.d), #1
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** sqsubr z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** sqsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s64_z_untied, svint64_t,
+ z0 = svqsubr_n_s64_z (p0, z1, 1),
+ z0 = svqsubr_z (p0, z1, 1))
+
+/*
+** qsubr_s64_x_tied1:
+** sqsub z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s64_x_tied1, svint64_t,
+ z0 = svqsubr_s64_x (p0, z0, z1),
+ z0 = svqsubr_x (p0, z0, z1))
+
+/*
+** qsubr_s64_x_tied2:
+** sqsub z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s64_x_tied2, svint64_t,
+ z0 = svqsubr_s64_x (p0, z1, z0),
+ z0 = svqsubr_x (p0, z1, z0))
+
+/*
+** qsubr_s64_x_untied:
+** sqsub z0\.d, z2\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s64_x_untied, svint64_t,
+ z0 = svqsubr_s64_x (p0, z1, z2),
+ z0 = svqsubr_x (p0, z1, z2))
+
+/*
+** qsubr_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, x0),
+ z0 = svqsubr_x (p0, z0, x0))
+
+/*
+** qsubr_x0_s64_x_untied:
+** mov (z[0-9]+\.d), x0
+** sqsub z0\.d, \1, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svqsubr_n_s64_x (p0, z1, x0),
+ z0 = svqsubr_x (p0, z1, x0))
+
+/*
+** qsubr_1_s64_x_tied1:
+** mov (z[0-9]+\.d), #1
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s64_x_tied1, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 1),
+ z0 = svqsubr_x (p0, z0, 1))
+
+/*
+** qsubr_1_s64_x_untied:
+** mov (z[0-9]+\.d), #1
+** sqsub z0\.d, \1, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s64_x_untied, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z1, 1),
+ z0 = svqsubr_x (p0, z1, 1))
+
+/*
+** qsubr_127_s64_x:
+** mov (z[0-9]+\.d), #127
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_127_s64_x, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 127),
+ z0 = svqsubr_x (p0, z0, 127))
+
+/*
+** qsubr_128_s64_x:
+** mov (z[0-9]+\.d), #128
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_128_s64_x, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 128),
+ z0 = svqsubr_x (p0, z0, 128))
+
+/*
+** qsubr_255_s64_x:
+** mov (z[0-9]+\.d), #255
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_255_s64_x, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 255),
+ z0 = svqsubr_x (p0, z0, 255))
+
+/*
+** qsubr_256_s64_x:
+** mov (z[0-9]+\.d), #256
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_256_s64_x, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 256),
+ z0 = svqsubr_x (p0, z0, 256))
+
+/*
+** qsubr_511_s64_x:
+** mov (z[0-9]+\.d), #511
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_511_s64_x, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 511),
+ z0 = svqsubr_x (p0, z0, 511))
+
+/*
+** qsubr_512_s64_x:
+** mov (z[0-9]+\.d), #512
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_512_s64_x, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 512),
+ z0 = svqsubr_x (p0, z0, 512))
+
+/*
+** qsubr_65280_s64_x:
+** mov (z[0-9]+\.d), #65280
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65280_s64_x, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 0xff00),
+ z0 = svqsubr_x (p0, z0, 0xff00))
+
+/*
+** qsubr_65535_s64_x:
+** mov (z[0-9]+\.d), #65535
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65535_s64_x, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 65535),
+ z0 = svqsubr_x (p0, z0, 65535))
+
+/*
+** qsubr_65536_s64_x:
+** mov (z[0-9]+\.d), #65536
+** sqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65536_s64_x, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, 65536),
+ z0 = svqsubr_x (p0, z0, 65536))
+
+/*
+** qsubr_m1_s64_x_tied1:
+** mov (z[0-9]+)\.b, #-1
+** sqsub z0\.d, \1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_s64_x_tied1, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z0, -1),
+ z0 = svqsubr_x (p0, z0, -1))
+
+/*
+** qsubr_m1_s64_x_untied:
+** mov (z[0-9]+)\.b, #-1
+** sqsub z0\.d, \1\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_s64_x_untied, svint64_t,
+ z0 = svqsubr_n_s64_x (p0, z1, -1),
+ z0 = svqsubr_x (p0, z1, -1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsubr_s8_m_tied1:
+** sqsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s8_m_tied1, svint8_t,
+ z0 = svqsubr_s8_m (p0, z0, z1),
+ z0 = svqsubr_m (p0, z0, z1))
+
+/*
+** qsubr_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sqsubr z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s8_m_tied2, svint8_t,
+ z0 = svqsubr_s8_m (p0, z1, z0),
+ z0 = svqsubr_m (p0, z1, z0))
+
+/*
+** qsubr_s8_m_untied:
+** movprfx z0, z1
+** sqsubr z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s8_m_untied, svint8_t,
+ z0 = svqsubr_s8_m (p0, z1, z2),
+ z0 = svqsubr_m (p0, z1, z2))
+
+/*
+** qsubr_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** sqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svqsubr_n_s8_m (p0, z0, x0),
+ z0 = svqsubr_m (p0, z0, x0))
+
+/*
+** qsubr_w0_s8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** sqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svqsubr_n_s8_m (p0, z1, x0),
+ z0 = svqsubr_m (p0, z1, x0))
+
+/*
+** qsubr_1_s8_m_tied1:
+** mov (z[0-9]+\.b), #1
+** sqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s8_m_tied1, svint8_t,
+ z0 = svqsubr_n_s8_m (p0, z0, 1),
+ z0 = svqsubr_m (p0, z0, 1))
+
+/*
+** qsubr_1_s8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), #1
+** movprfx z0, z1
+** sqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s8_m_untied, svint8_t,
+ z0 = svqsubr_n_s8_m (p0, z1, 1),
+ z0 = svqsubr_m (p0, z1, 1))
+
+/*
+** qsubr_m1_s8_m:
+** mov (z[0-9]+\.b), #-1
+** sqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_s8_m, svint8_t,
+ z0 = svqsubr_n_s8_m (p0, z0, -1),
+ z0 = svqsubr_m (p0, z0, -1))
+
+/*
+** qsubr_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** sqsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s8_z_tied1, svint8_t,
+ z0 = svqsubr_s8_z (p0, z0, z1),
+ z0 = svqsubr_z (p0, z0, z1))
+
+/*
+** qsubr_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** sqsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s8_z_tied2, svint8_t,
+ z0 = svqsubr_s8_z (p0, z1, z0),
+ z0 = svqsubr_z (p0, z1, z0))
+
+/*
+** qsubr_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqsubr z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** sqsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s8_z_untied, svint8_t,
+ z0 = svqsubr_s8_z (p0, z1, z2),
+ z0 = svqsubr_z (p0, z1, z2))
+
+/*
+** qsubr_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** sqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svqsubr_n_s8_z (p0, z0, x0),
+ z0 = svqsubr_z (p0, z0, x0))
+
+/*
+** qsubr_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqsubr z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** sqsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svqsubr_n_s8_z (p0, z1, x0),
+ z0 = svqsubr_z (p0, z1, x0))
+
+/*
+** qsubr_1_s8_z_tied1:
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z0\.b
+** sqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s8_z_tied1, svint8_t,
+ z0 = svqsubr_n_s8_z (p0, z0, 1),
+ z0 = svqsubr_z (p0, z0, 1))
+
+/*
+** qsubr_1_s8_z_untied:
+** mov (z[0-9]+\.b), #1
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** sqsubr z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** sqsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s8_z_untied, svint8_t,
+ z0 = svqsubr_n_s8_z (p0, z1, 1),
+ z0 = svqsubr_z (p0, z1, 1))
+
+/*
+** qsubr_s8_x_tied1:
+** sqsub z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s8_x_tied1, svint8_t,
+ z0 = svqsubr_s8_x (p0, z0, z1),
+ z0 = svqsubr_x (p0, z0, z1))
+
+/*
+** qsubr_s8_x_tied2:
+** sqsub z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s8_x_tied2, svint8_t,
+ z0 = svqsubr_s8_x (p0, z1, z0),
+ z0 = svqsubr_x (p0, z1, z0))
+
+/*
+** qsubr_s8_x_untied:
+** sqsub z0\.b, z2\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_s8_x_untied, svint8_t,
+ z0 = svqsubr_s8_x (p0, z1, z2),
+ z0 = svqsubr_x (p0, z1, z2))
+
+/*
+** qsubr_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** sqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svqsubr_n_s8_x (p0, z0, x0),
+ z0 = svqsubr_x (p0, z0, x0))
+
+/*
+** qsubr_w0_s8_x_untied:
+** mov (z[0-9]+\.b), w0
+** sqsub z0\.b, \1, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svqsubr_n_s8_x (p0, z1, x0),
+ z0 = svqsubr_x (p0, z1, x0))
+
+/*
+** qsubr_1_s8_x_tied1:
+** mov (z[0-9]+\.b), #1
+** sqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s8_x_tied1, svint8_t,
+ z0 = svqsubr_n_s8_x (p0, z0, 1),
+ z0 = svqsubr_x (p0, z0, 1))
+
+/*
+** qsubr_1_s8_x_untied:
+** mov (z[0-9]+\.b), #1
+** sqsub z0\.b, \1, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_s8_x_untied, svint8_t,
+ z0 = svqsubr_n_s8_x (p0, z1, 1),
+ z0 = svqsubr_x (p0, z1, 1))
+
+/*
+** qsubr_127_s8_x:
+** mov (z[0-9]+\.b), #127
+** sqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_127_s8_x, svint8_t,
+ z0 = svqsubr_n_s8_x (p0, z0, 127),
+ z0 = svqsubr_x (p0, z0, 127))
+
+/*
+** qsubr_128_s8_x:
+** mov (z[0-9]+\.b), #-128
+** sqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_128_s8_x, svint8_t,
+ z0 = svqsubr_n_s8_x (p0, z0, 128),
+ z0 = svqsubr_x (p0, z0, 128))
+
+/*
+** qsubr_255_s8_x:
+** mov (z[0-9]+\.b), #-1
+** sqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_255_s8_x, svint8_t,
+ z0 = svqsubr_n_s8_x (p0, z0, 255),
+ z0 = svqsubr_x (p0, z0, 255))
+
+/*
+** qsubr_m1_s8_x:
+** mov (z[0-9]+\.b), #-1
+** sqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_s8_x, svint8_t,
+ z0 = svqsubr_n_s8_x (p0, z0, -1),
+ z0 = svqsubr_x (p0, z0, -1))
+
+/*
+** qsubr_m127_s8_x:
+** mov (z[0-9]+\.b), #-127
+** sqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m127_s8_x, svint8_t,
+ z0 = svqsubr_n_s8_x (p0, z0, -127),
+ z0 = svqsubr_x (p0, z0, -127))
+
+/*
+** qsubr_m128_s8_x:
+** mov (z[0-9]+\.b), #-128
+** sqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m128_s8_x, svint8_t,
+ z0 = svqsubr_n_s8_x (p0, z0, -128),
+ z0 = svqsubr_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsubr_u16_m_tied1:
+** uqsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u16_m_tied1, svuint16_t,
+ z0 = svqsubr_u16_m (p0, z0, z1),
+ z0 = svqsubr_m (p0, z0, z1))
+
+/*
+** qsubr_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uqsubr z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u16_m_tied2, svuint16_t,
+ z0 = svqsubr_u16_m (p0, z1, z0),
+ z0 = svqsubr_m (p0, z1, z0))
+
+/*
+** qsubr_u16_m_untied:
+** movprfx z0, z1
+** uqsubr z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u16_m_untied, svuint16_t,
+ z0 = svqsubr_u16_m (p0, z1, z2),
+ z0 = svqsubr_m (p0, z1, z2))
+
+/*
+** qsubr_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** uqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u16_m_tied1, svuint16_t, uint16_t,
+ z0 = svqsubr_n_u16_m (p0, z0, x0),
+ z0 = svqsubr_m (p0, z0, x0))
+
+/*
+** qsubr_w0_u16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** uqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u16_m_untied, svuint16_t, uint16_t,
+ z0 = svqsubr_n_u16_m (p0, z1, x0),
+ z0 = svqsubr_m (p0, z1, x0))
+
+/*
+** qsubr_1_u16_m_tied1:
+** mov (z[0-9]+\.h), #1
+** uqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u16_m_tied1, svuint16_t,
+ z0 = svqsubr_n_u16_m (p0, z0, 1),
+ z0 = svqsubr_m (p0, z0, 1))
+
+/*
+** qsubr_1_u16_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.h), #1
+** movprfx z0, z1
+** uqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u16_m_untied, svuint16_t,
+ z0 = svqsubr_n_u16_m (p0, z1, 1),
+ z0 = svqsubr_m (p0, z1, 1))
+
+/*
+** qsubr_m2_u16_m:
+** mov (z[0-9]+\.h), #-2
+** uqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m2_u16_m, svuint16_t,
+ z0 = svqsubr_n_u16_m (p0, z0, -2),
+ z0 = svqsubr_m (p0, z0, -2))
+
+/*
+** qsubr_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** uqsubr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u16_z_tied1, svuint16_t,
+ z0 = svqsubr_u16_z (p0, z0, z1),
+ z0 = svqsubr_z (p0, z0, z1))
+
+/*
+** qsubr_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** uqsub z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u16_z_tied2, svuint16_t,
+ z0 = svqsubr_u16_z (p0, z1, z0),
+ z0 = svqsubr_z (p0, z1, z0))
+
+/*
+** qsubr_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqsubr z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** uqsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u16_z_untied, svuint16_t,
+ z0 = svqsubr_u16_z (p0, z1, z2),
+ z0 = svqsubr_z (p0, z1, z2))
+
+/*
+** qsubr_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** uqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u16_z_tied1, svuint16_t, uint16_t,
+ z0 = svqsubr_n_u16_z (p0, z0, x0),
+ z0 = svqsubr_z (p0, z0, x0))
+
+/*
+** qsubr_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqsubr z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uqsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u16_z_untied, svuint16_t, uint16_t,
+ z0 = svqsubr_n_u16_z (p0, z1, x0),
+ z0 = svqsubr_z (p0, z1, x0))
+
+/*
+** qsubr_1_u16_z_tied1:
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z0\.h
+** uqsubr z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u16_z_tied1, svuint16_t,
+ z0 = svqsubr_n_u16_z (p0, z0, 1),
+ z0 = svqsubr_z (p0, z0, 1))
+
+/*
+** qsubr_1_u16_z_untied:
+** mov (z[0-9]+\.h), #1
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** uqsubr z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** uqsub z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u16_z_untied, svuint16_t,
+ z0 = svqsubr_n_u16_z (p0, z1, 1),
+ z0 = svqsubr_z (p0, z1, 1))
+
+/*
+** qsubr_u16_x_tied1:
+** uqsub z0\.h, z1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u16_x_tied1, svuint16_t,
+ z0 = svqsubr_u16_x (p0, z0, z1),
+ z0 = svqsubr_x (p0, z0, z1))
+
+/*
+** qsubr_u16_x_tied2:
+** uqsub z0\.h, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u16_x_tied2, svuint16_t,
+ z0 = svqsubr_u16_x (p0, z1, z0),
+ z0 = svqsubr_x (p0, z1, z0))
+
+/*
+** qsubr_u16_x_untied:
+** uqsub z0\.h, z2\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u16_x_untied, svuint16_t,
+ z0 = svqsubr_u16_x (p0, z1, z2),
+ z0 = svqsubr_x (p0, z1, z2))
+
+/*
+** qsubr_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** uqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u16_x_tied1, svuint16_t, uint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, x0),
+ z0 = svqsubr_x (p0, z0, x0))
+
+/*
+** qsubr_w0_u16_x_untied:
+** mov (z[0-9]+\.h), w0
+** uqsub z0\.h, \1, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u16_x_untied, svuint16_t, uint16_t,
+ z0 = svqsubr_n_u16_x (p0, z1, x0),
+ z0 = svqsubr_x (p0, z1, x0))
+
+/*
+** qsubr_1_u16_x_tied1:
+** mov (z[0-9]+\.h), #1
+** uqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u16_x_tied1, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, 1),
+ z0 = svqsubr_x (p0, z0, 1))
+
+/*
+** qsubr_1_u16_x_untied:
+** mov (z[0-9]+\.h), #1
+** uqsub z0\.h, \1, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u16_x_untied, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z1, 1),
+ z0 = svqsubr_x (p0, z1, 1))
+
+/*
+** qsubr_127_u16_x:
+** mov (z[0-9]+\.h), #127
+** uqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_127_u16_x, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, 127),
+ z0 = svqsubr_x (p0, z0, 127))
+
+/*
+** qsubr_128_u16_x:
+** mov (z[0-9]+\.h), #128
+** uqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_128_u16_x, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, 128),
+ z0 = svqsubr_x (p0, z0, 128))
+
+/*
+** qsubr_255_u16_x:
+** mov (z[0-9]+\.h), #255
+** uqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_255_u16_x, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, 255),
+ z0 = svqsubr_x (p0, z0, 255))
+
+/*
+** qsubr_256_u16_x:
+** mov (z[0-9]+\.h), #256
+** uqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_256_u16_x, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, 256),
+ z0 = svqsubr_x (p0, z0, 256))
+
+/*
+** qsubr_257_u16_x:
+** mov (z[0-9]+)\.b, #1
+** uqsub z0\.h, \1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_257_u16_x, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, 257),
+ z0 = svqsubr_x (p0, z0, 257))
+
+/*
+** qsubr_512_u16_x:
+** mov (z[0-9]+\.h), #512
+** uqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_512_u16_x, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, 512),
+ z0 = svqsubr_x (p0, z0, 512))
+
+/*
+** qsubr_65280_u16_x:
+** mov (z[0-9]+\.h), #-256
+** uqsub z0\.h, \1, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65280_u16_x, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, 0xff00),
+ z0 = svqsubr_x (p0, z0, 0xff00))
+
+/*
+** qsubr_m1_u16_x_tied1:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.h, \1\.h, z0\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_u16_x_tied1, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z0, -1),
+ z0 = svqsubr_x (p0, z0, -1))
+
+/*
+** qsubr_m1_u16_x_untied:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.h, \1\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_u16_x_untied, svuint16_t,
+ z0 = svqsubr_n_u16_x (p0, z1, -1),
+ z0 = svqsubr_x (p0, z1, -1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsubr_u32_m_tied1:
+** uqsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u32_m_tied1, svuint32_t,
+ z0 = svqsubr_u32_m (p0, z0, z1),
+ z0 = svqsubr_m (p0, z0, z1))
+
+/*
+** qsubr_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uqsubr z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u32_m_tied2, svuint32_t,
+ z0 = svqsubr_u32_m (p0, z1, z0),
+ z0 = svqsubr_m (p0, z1, z0))
+
+/*
+** qsubr_u32_m_untied:
+** movprfx z0, z1
+** uqsubr z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u32_m_untied, svuint32_t,
+ z0 = svqsubr_u32_m (p0, z1, z2),
+ z0 = svqsubr_m (p0, z1, z2))
+
+/*
+** qsubr_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** uqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u32_m_tied1, svuint32_t, uint32_t,
+ z0 = svqsubr_n_u32_m (p0, z0, x0),
+ z0 = svqsubr_m (p0, z0, x0))
+
+/*
+** qsubr_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** uqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u32_m_untied, svuint32_t, uint32_t,
+ z0 = svqsubr_n_u32_m (p0, z1, x0),
+ z0 = svqsubr_m (p0, z1, x0))
+
+/*
+** qsubr_1_u32_m_tied1:
+** mov (z[0-9]+\.s), #1
+** uqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u32_m_tied1, svuint32_t,
+ z0 = svqsubr_n_u32_m (p0, z0, 1),
+ z0 = svqsubr_m (p0, z0, 1))
+
+/*
+** qsubr_1_u32_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.s), #1
+** movprfx z0, z1
+** uqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u32_m_untied, svuint32_t,
+ z0 = svqsubr_n_u32_m (p0, z1, 1),
+ z0 = svqsubr_m (p0, z1, 1))
+
+/*
+** qsubr_m2_u32_m:
+** mov (z[0-9]+\.s), #-2
+** uqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m2_u32_m, svuint32_t,
+ z0 = svqsubr_n_u32_m (p0, z0, -2),
+ z0 = svqsubr_m (p0, z0, -2))
+
+/*
+** qsubr_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** uqsubr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u32_z_tied1, svuint32_t,
+ z0 = svqsubr_u32_z (p0, z0, z1),
+ z0 = svqsubr_z (p0, z0, z1))
+
+/*
+** qsubr_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** uqsub z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u32_z_tied2, svuint32_t,
+ z0 = svqsubr_u32_z (p0, z1, z0),
+ z0 = svqsubr_z (p0, z1, z0))
+
+/*
+** qsubr_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqsubr z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** uqsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u32_z_untied, svuint32_t,
+ z0 = svqsubr_u32_z (p0, z1, z2),
+ z0 = svqsubr_z (p0, z1, z2))
+
+/*
+** qsubr_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** uqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u32_z_tied1, svuint32_t, uint32_t,
+ z0 = svqsubr_n_u32_z (p0, z0, x0),
+ z0 = svqsubr_z (p0, z0, x0))
+
+/*
+** qsubr_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqsubr z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uqsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u32_z_untied, svuint32_t, uint32_t,
+ z0 = svqsubr_n_u32_z (p0, z1, x0),
+ z0 = svqsubr_z (p0, z1, x0))
+
+/*
+** qsubr_1_u32_z_tied1:
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z0\.s
+** uqsubr z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u32_z_tied1, svuint32_t,
+ z0 = svqsubr_n_u32_z (p0, z0, 1),
+ z0 = svqsubr_z (p0, z0, 1))
+
+/*
+** qsubr_1_u32_z_untied:
+** mov (z[0-9]+\.s), #1
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** uqsubr z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** uqsub z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u32_z_untied, svuint32_t,
+ z0 = svqsubr_n_u32_z (p0, z1, 1),
+ z0 = svqsubr_z (p0, z1, 1))
+
+/*
+** qsubr_u32_x_tied1:
+** uqsub z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u32_x_tied1, svuint32_t,
+ z0 = svqsubr_u32_x (p0, z0, z1),
+ z0 = svqsubr_x (p0, z0, z1))
+
+/*
+** qsubr_u32_x_tied2:
+** uqsub z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u32_x_tied2, svuint32_t,
+ z0 = svqsubr_u32_x (p0, z1, z0),
+ z0 = svqsubr_x (p0, z1, z0))
+
+/*
+** qsubr_u32_x_untied:
+** uqsub z0\.s, z2\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u32_x_untied, svuint32_t,
+ z0 = svqsubr_u32_x (p0, z1, z2),
+ z0 = svqsubr_x (p0, z1, z2))
+
+/*
+** qsubr_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u32_x_tied1, svuint32_t, uint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, x0),
+ z0 = svqsubr_x (p0, z0, x0))
+
+/*
+** qsubr_w0_u32_x_untied:
+** mov (z[0-9]+\.s), w0
+** uqsub z0\.s, \1, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u32_x_untied, svuint32_t, uint32_t,
+ z0 = svqsubr_n_u32_x (p0, z1, x0),
+ z0 = svqsubr_x (p0, z1, x0))
+
+/*
+** qsubr_1_u32_x_tied1:
+** mov (z[0-9]+\.s), #1
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u32_x_tied1, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 1),
+ z0 = svqsubr_x (p0, z0, 1))
+
+/*
+** qsubr_1_u32_x_untied:
+** mov (z[0-9]+\.s), #1
+** uqsub z0\.s, \1, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u32_x_untied, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z1, 1),
+ z0 = svqsubr_x (p0, z1, 1))
+
+/*
+** qsubr_127_u32_x:
+** mov (z[0-9]+\.s), #127
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_127_u32_x, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 127),
+ z0 = svqsubr_x (p0, z0, 127))
+
+/*
+** qsubr_128_u32_x:
+** mov (z[0-9]+\.s), #128
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_128_u32_x, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 128),
+ z0 = svqsubr_x (p0, z0, 128))
+
+/*
+** qsubr_255_u32_x:
+** mov (z[0-9]+\.s), #255
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_255_u32_x, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 255),
+ z0 = svqsubr_x (p0, z0, 255))
+
+/*
+** qsubr_256_u32_x:
+** mov (z[0-9]+\.s), #256
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_256_u32_x, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 256),
+ z0 = svqsubr_x (p0, z0, 256))
+
+/*
+** qsubr_511_u32_x:
+** mov (z[0-9]+\.s), #511
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_511_u32_x, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 511),
+ z0 = svqsubr_x (p0, z0, 511))
+
+/*
+** qsubr_512_u32_x:
+** mov (z[0-9]+\.s), #512
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_512_u32_x, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 512),
+ z0 = svqsubr_x (p0, z0, 512))
+
+/*
+** qsubr_65280_u32_x:
+** mov (z[0-9]+\.s), #65280
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65280_u32_x, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 0xff00),
+ z0 = svqsubr_x (p0, z0, 0xff00))
+
+/*
+** qsubr_65535_u32_x:
+** mov (z[0-9]+\.s), #65535
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65535_u32_x, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 65535),
+ z0 = svqsubr_x (p0, z0, 65535))
+
+/*
+** qsubr_65536_u32_x:
+** mov (z[0-9]+\.s), #65536
+** uqsub z0\.s, \1, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65536_u32_x, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, 65536),
+ z0 = svqsubr_x (p0, z0, 65536))
+
+/*
+** qsubr_m1_u32_x_tied1:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.s, \1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_u32_x_tied1, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z0, -1),
+ z0 = svqsubr_x (p0, z0, -1))
+
+/*
+** qsubr_m1_u32_x_untied:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.s, \1\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_u32_x_untied, svuint32_t,
+ z0 = svqsubr_n_u32_x (p0, z1, -1),
+ z0 = svqsubr_x (p0, z1, -1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsubr_u64_m_tied1:
+** uqsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u64_m_tied1, svuint64_t,
+ z0 = svqsubr_u64_m (p0, z0, z1),
+ z0 = svqsubr_m (p0, z0, z1))
+
+/*
+** qsubr_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u64_m_tied2, svuint64_t,
+ z0 = svqsubr_u64_m (p0, z1, z0),
+ z0 = svqsubr_m (p0, z1, z0))
+
+/*
+** qsubr_u64_m_untied:
+** movprfx z0, z1
+** uqsubr z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u64_m_untied, svuint64_t,
+ z0 = svqsubr_u64_m (p0, z1, z2),
+ z0 = svqsubr_m (p0, z1, z2))
+
+/*
+** qsubr_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_u64_m_tied1, svuint64_t, uint64_t,
+ z0 = svqsubr_n_u64_m (p0, z0, x0),
+ z0 = svqsubr_m (p0, z0, x0))
+
+/*
+** qsubr_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_u64_m_untied, svuint64_t, uint64_t,
+ z0 = svqsubr_n_u64_m (p0, z1, x0),
+ z0 = svqsubr_m (p0, z1, x0))
+
+/*
+** qsubr_1_u64_m_tied1:
+** mov (z[0-9]+\.d), #1
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u64_m_tied1, svuint64_t,
+ z0 = svqsubr_n_u64_m (p0, z0, 1),
+ z0 = svqsubr_m (p0, z0, 1))
+
+/*
+** qsubr_1_u64_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.d), #1
+** movprfx z0, z1
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u64_m_untied, svuint64_t,
+ z0 = svqsubr_n_u64_m (p0, z1, 1),
+ z0 = svqsubr_m (p0, z1, 1))
+
+/*
+** qsubr_m2_u64_m:
+** mov (z[0-9]+\.d), #-2
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m2_u64_m, svuint64_t,
+ z0 = svqsubr_n_u64_m (p0, z0, -2),
+ z0 = svqsubr_m (p0, z0, -2))
+
+/*
+** qsubr_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** uqsubr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u64_z_tied1, svuint64_t,
+ z0 = svqsubr_u64_z (p0, z0, z1),
+ z0 = svqsubr_z (p0, z0, z1))
+
+/*
+** qsubr_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** uqsub z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u64_z_tied2, svuint64_t,
+ z0 = svqsubr_u64_z (p0, z1, z0),
+ z0 = svqsubr_z (p0, z1, z0))
+
+/*
+** qsubr_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqsubr z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** uqsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u64_z_untied, svuint64_t,
+ z0 = svqsubr_u64_z (p0, z1, z2),
+ z0 = svqsubr_z (p0, z1, z2))
+
+/*
+** qsubr_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_u64_z_tied1, svuint64_t, uint64_t,
+ z0 = svqsubr_n_u64_z (p0, z0, x0),
+ z0 = svqsubr_z (p0, z0, x0))
+
+/*
+** qsubr_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uqsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_u64_z_untied, svuint64_t, uint64_t,
+ z0 = svqsubr_n_u64_z (p0, z1, x0),
+ z0 = svqsubr_z (p0, z1, x0))
+
+/*
+** qsubr_1_u64_z_tied1:
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z0\.d
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u64_z_tied1, svuint64_t,
+ z0 = svqsubr_n_u64_z (p0, z0, 1),
+ z0 = svqsubr_z (p0, z0, 1))
+
+/*
+** qsubr_1_u64_z_untied:
+** mov (z[0-9]+\.d), #1
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** uqsubr z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** uqsub z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u64_z_untied, svuint64_t,
+ z0 = svqsubr_n_u64_z (p0, z1, 1),
+ z0 = svqsubr_z (p0, z1, 1))
+
+/*
+** qsubr_u64_x_tied1:
+** uqsub z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u64_x_tied1, svuint64_t,
+ z0 = svqsubr_u64_x (p0, z0, z1),
+ z0 = svqsubr_x (p0, z0, z1))
+
+/*
+** qsubr_u64_x_tied2:
+** uqsub z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u64_x_tied2, svuint64_t,
+ z0 = svqsubr_u64_x (p0, z1, z0),
+ z0 = svqsubr_x (p0, z1, z0))
+
+/*
+** qsubr_u64_x_untied:
+** uqsub z0\.d, z2\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u64_x_untied, svuint64_t,
+ z0 = svqsubr_u64_x (p0, z1, z2),
+ z0 = svqsubr_x (p0, z1, z2))
+
+/*
+** qsubr_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_u64_x_tied1, svuint64_t, uint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, x0),
+ z0 = svqsubr_x (p0, z0, x0))
+
+/*
+** qsubr_x0_u64_x_untied:
+** mov (z[0-9]+\.d), x0
+** uqsub z0\.d, \1, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_x0_u64_x_untied, svuint64_t, uint64_t,
+ z0 = svqsubr_n_u64_x (p0, z1, x0),
+ z0 = svqsubr_x (p0, z1, x0))
+
+/*
+** qsubr_1_u64_x_tied1:
+** mov (z[0-9]+\.d), #1
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u64_x_tied1, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 1),
+ z0 = svqsubr_x (p0, z0, 1))
+
+/*
+** qsubr_1_u64_x_untied:
+** mov (z[0-9]+\.d), #1
+** uqsub z0\.d, \1, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u64_x_untied, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z1, 1),
+ z0 = svqsubr_x (p0, z1, 1))
+
+/*
+** qsubr_127_u64_x:
+** mov (z[0-9]+\.d), #127
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_127_u64_x, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 127),
+ z0 = svqsubr_x (p0, z0, 127))
+
+/*
+** qsubr_128_u64_x:
+** mov (z[0-9]+\.d), #128
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_128_u64_x, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 128),
+ z0 = svqsubr_x (p0, z0, 128))
+
+/*
+** qsubr_255_u64_x:
+** mov (z[0-9]+\.d), #255
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_255_u64_x, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 255),
+ z0 = svqsubr_x (p0, z0, 255))
+
+/*
+** qsubr_256_u64_x:
+** mov (z[0-9]+\.d), #256
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_256_u64_x, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 256),
+ z0 = svqsubr_x (p0, z0, 256))
+
+/*
+** qsubr_511_u64_x:
+** mov (z[0-9]+\.d), #511
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_511_u64_x, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 511),
+ z0 = svqsubr_x (p0, z0, 511))
+
+/*
+** qsubr_512_u64_x:
+** mov (z[0-9]+\.d), #512
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_512_u64_x, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 512),
+ z0 = svqsubr_x (p0, z0, 512))
+
+/*
+** qsubr_65280_u64_x:
+** mov (z[0-9]+\.d), #65280
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65280_u64_x, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 0xff00),
+ z0 = svqsubr_x (p0, z0, 0xff00))
+
+/*
+** qsubr_65535_u64_x:
+** mov (z[0-9]+\.d), #65535
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65535_u64_x, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 65535),
+ z0 = svqsubr_x (p0, z0, 65535))
+
+/*
+** qsubr_65536_u64_x:
+** mov (z[0-9]+\.d), #65536
+** uqsub z0\.d, \1, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_65536_u64_x, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, 65536),
+ z0 = svqsubr_x (p0, z0, 65536))
+
+/*
+** qsubr_m1_u64_x_tied1:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.d, \1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_u64_x_tied1, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z0, -1),
+ z0 = svqsubr_x (p0, z0, -1))
+
+/*
+** qsubr_m1_u64_x_untied:
+** mov (z[0-9]+)\.b, #-1
+** uqsub z0\.d, \1\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_u64_x_untied, svuint64_t,
+ z0 = svqsubr_n_u64_x (p0, z1, -1),
+ z0 = svqsubr_x (p0, z1, -1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qsubr_u8_m_tied1:
+** uqsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u8_m_tied1, svuint8_t,
+ z0 = svqsubr_u8_m (p0, z0, z1),
+ z0 = svqsubr_m (p0, z0, z1))
+
+/*
+** qsubr_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** uqsubr z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u8_m_tied2, svuint8_t,
+ z0 = svqsubr_u8_m (p0, z1, z0),
+ z0 = svqsubr_m (p0, z1, z0))
+
+/*
+** qsubr_u8_m_untied:
+** movprfx z0, z1
+** uqsubr z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u8_m_untied, svuint8_t,
+ z0 = svqsubr_u8_m (p0, z1, z2),
+ z0 = svqsubr_m (p0, z1, z2))
+
+/*
+** qsubr_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** uqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u8_m_tied1, svuint8_t, uint8_t,
+ z0 = svqsubr_n_u8_m (p0, z0, x0),
+ z0 = svqsubr_m (p0, z0, x0))
+
+/*
+** qsubr_w0_u8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** uqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u8_m_untied, svuint8_t, uint8_t,
+ z0 = svqsubr_n_u8_m (p0, z1, x0),
+ z0 = svqsubr_m (p0, z1, x0))
+
+/*
+** qsubr_1_u8_m_tied1:
+** mov (z[0-9]+\.b), #1
+** uqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u8_m_tied1, svuint8_t,
+ z0 = svqsubr_n_u8_m (p0, z0, 1),
+ z0 = svqsubr_m (p0, z0, 1))
+
+/*
+** qsubr_1_u8_m_untied: { xfail *-*-* }
+** mov (z[0-9]+\.b), #1
+** movprfx z0, z1
+** uqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u8_m_untied, svuint8_t,
+ z0 = svqsubr_n_u8_m (p0, z1, 1),
+ z0 = svqsubr_m (p0, z1, 1))
+
+/*
+** qsubr_m1_u8_m:
+** mov (z[0-9]+\.b), #-1
+** uqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_u8_m, svuint8_t,
+ z0 = svqsubr_n_u8_m (p0, z0, -1),
+ z0 = svqsubr_m (p0, z0, -1))
+
+/*
+** qsubr_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** uqsubr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u8_z_tied1, svuint8_t,
+ z0 = svqsubr_u8_z (p0, z0, z1),
+ z0 = svqsubr_z (p0, z0, z1))
+
+/*
+** qsubr_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** uqsub z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u8_z_tied2, svuint8_t,
+ z0 = svqsubr_u8_z (p0, z1, z0),
+ z0 = svqsubr_z (p0, z1, z0))
+
+/*
+** qsubr_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqsubr z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** uqsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u8_z_untied, svuint8_t,
+ z0 = svqsubr_u8_z (p0, z1, z2),
+ z0 = svqsubr_z (p0, z1, z2))
+
+/*
+** qsubr_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** uqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u8_z_tied1, svuint8_t, uint8_t,
+ z0 = svqsubr_n_u8_z (p0, z0, x0),
+ z0 = svqsubr_z (p0, z0, x0))
+
+/*
+** qsubr_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqsubr z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uqsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u8_z_untied, svuint8_t, uint8_t,
+ z0 = svqsubr_n_u8_z (p0, z1, x0),
+ z0 = svqsubr_z (p0, z1, x0))
+
+/*
+** qsubr_1_u8_z_tied1:
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z0\.b
+** uqsubr z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u8_z_tied1, svuint8_t,
+ z0 = svqsubr_n_u8_z (p0, z0, 1),
+ z0 = svqsubr_z (p0, z0, 1))
+
+/*
+** qsubr_1_u8_z_untied:
+** mov (z[0-9]+\.b), #1
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** uqsubr z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** uqsub z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u8_z_untied, svuint8_t,
+ z0 = svqsubr_n_u8_z (p0, z1, 1),
+ z0 = svqsubr_z (p0, z1, 1))
+
+/*
+** qsubr_u8_x_tied1:
+** uqsub z0\.b, z1\.b, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u8_x_tied1, svuint8_t,
+ z0 = svqsubr_u8_x (p0, z0, z1),
+ z0 = svqsubr_x (p0, z0, z1))
+
+/*
+** qsubr_u8_x_tied2:
+** uqsub z0\.b, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u8_x_tied2, svuint8_t,
+ z0 = svqsubr_u8_x (p0, z1, z0),
+ z0 = svqsubr_x (p0, z1, z0))
+
+/*
+** qsubr_u8_x_untied:
+** uqsub z0\.b, z2\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_u8_x_untied, svuint8_t,
+ z0 = svqsubr_u8_x (p0, z1, z2),
+ z0 = svqsubr_x (p0, z1, z2))
+
+/*
+** qsubr_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** uqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u8_x_tied1, svuint8_t, uint8_t,
+ z0 = svqsubr_n_u8_x (p0, z0, x0),
+ z0 = svqsubr_x (p0, z0, x0))
+
+/*
+** qsubr_w0_u8_x_untied:
+** mov (z[0-9]+\.b), w0
+** uqsub z0\.b, \1, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (qsubr_w0_u8_x_untied, svuint8_t, uint8_t,
+ z0 = svqsubr_n_u8_x (p0, z1, x0),
+ z0 = svqsubr_x (p0, z1, x0))
+
+/*
+** qsubr_1_u8_x_tied1:
+** mov (z[0-9]+\.b), #1
+** uqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u8_x_tied1, svuint8_t,
+ z0 = svqsubr_n_u8_x (p0, z0, 1),
+ z0 = svqsubr_x (p0, z0, 1))
+
+/*
+** qsubr_1_u8_x_untied:
+** mov (z[0-9]+\.b), #1
+** uqsub z0\.b, \1, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_1_u8_x_untied, svuint8_t,
+ z0 = svqsubr_n_u8_x (p0, z1, 1),
+ z0 = svqsubr_x (p0, z1, 1))
+
+/*
+** qsubr_127_u8_x:
+** mov (z[0-9]+\.b), #127
+** uqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_127_u8_x, svuint8_t,
+ z0 = svqsubr_n_u8_x (p0, z0, 127),
+ z0 = svqsubr_x (p0, z0, 127))
+
+/*
+** qsubr_128_u8_x:
+** mov (z[0-9]+\.b), #-128
+** uqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_128_u8_x, svuint8_t,
+ z0 = svqsubr_n_u8_x (p0, z0, 128),
+ z0 = svqsubr_x (p0, z0, 128))
+
+/*
+** qsubr_255_u8_x:
+** mov (z[0-9]+\.b), #-1
+** uqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_255_u8_x, svuint8_t,
+ z0 = svqsubr_n_u8_x (p0, z0, 255),
+ z0 = svqsubr_x (p0, z0, 255))
+
+/*
+** qsubr_m1_u8_x:
+** mov (z[0-9]+\.b), #-1
+** uqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m1_u8_x, svuint8_t,
+ z0 = svqsubr_n_u8_x (p0, z0, -1),
+ z0 = svqsubr_x (p0, z0, -1))
+
+/*
+** qsubr_m127_u8_x:
+** mov (z[0-9]+\.b), #-127
+** uqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m127_u8_x, svuint8_t,
+ z0 = svqsubr_n_u8_x (p0, z0, -127),
+ z0 = svqsubr_x (p0, z0, -127))
+
+/*
+** qsubr_m128_u8_x:
+** mov (z[0-9]+\.b), #-128
+** uqsub z0\.b, \1, z0\.b
+** ret
+*/
+TEST_UNIFORM_Z (qsubr_m128_u8_x, svuint8_t,
+ z0 = svqsubr_n_u8_x (p0, z0, -128),
+ z0 = svqsubr_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnb_s16:
+** sqxtnb z0\.b, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qxtnb_s16, svint8_t, svint16_t,
+ z0 = svqxtnb_s16 (z4),
+ z0 = svqxtnb (z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnb_s32:
+** sqxtnb z0\.h, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qxtnb_s32, svint16_t, svint32_t,
+ z0 = svqxtnb_s32 (z4),
+ z0 = svqxtnb (z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnb_s64:
+** sqxtnb z0\.s, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qxtnb_s64, svint32_t, svint64_t,
+ z0 = svqxtnb_s64 (z4),
+ z0 = svqxtnb (z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnb_u16:
+** uqxtnb z0\.b, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qxtnb_u16, svuint8_t, svuint16_t,
+ z0 = svqxtnb_u16 (z4),
+ z0 = svqxtnb (z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnb_u32:
+** uqxtnb z0\.h, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qxtnb_u32, svuint16_t, svuint32_t,
+ z0 = svqxtnb_u32 (z4),
+ z0 = svqxtnb (z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnb_u64:
+** uqxtnb z0\.s, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qxtnb_u64, svuint32_t, svuint64_t,
+ z0 = svqxtnb_u64 (z4),
+ z0 = svqxtnb (z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnt_s16_tied1:
+** sqxtnt z0\.b, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qxtnt_s16_tied1, svint8_t, svint16_t,
+ z0 = svqxtnt_s16 (z0, z4),
+ z0 = svqxtnt (z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (qxtnt_s16_tied2, svint8_t, svint16_t,
+ z0_res = svqxtnt_s16 (z4, z0),
+ z0_res = svqxtnt (z4, z0))
+
+/*
+** qxtnt_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** sqxtnt z0\.b, z4\.h
+** |
+** sqxtnt z1\.b, z4\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qxtnt_s16_untied, svint8_t, svint16_t,
+ z0 = svqxtnt_s16 (z1, z4),
+ z0 = svqxtnt (z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnt_s32_tied1:
+** sqxtnt z0\.h, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qxtnt_s32_tied1, svint16_t, svint32_t,
+ z0 = svqxtnt_s32 (z0, z4),
+ z0 = svqxtnt (z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (qxtnt_s32_tied2, svint16_t, svint32_t,
+ z0_res = svqxtnt_s32 (z4, z0),
+ z0_res = svqxtnt (z4, z0))
+
+/*
+** qxtnt_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** sqxtnt z0\.h, z4\.s
+** |
+** sqxtnt z1\.h, z4\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qxtnt_s32_untied, svint16_t, svint32_t,
+ z0 = svqxtnt_s32 (z1, z4),
+ z0 = svqxtnt (z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnt_s64_tied1:
+** sqxtnt z0\.s, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qxtnt_s64_tied1, svint32_t, svint64_t,
+ z0 = svqxtnt_s64 (z0, z4),
+ z0 = svqxtnt (z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (qxtnt_s64_tied2, svint32_t, svint64_t,
+ z0_res = svqxtnt_s64 (z4, z0),
+ z0_res = svqxtnt (z4, z0))
+
+/*
+** qxtnt_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** sqxtnt z0\.s, z4\.d
+** |
+** sqxtnt z1\.s, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qxtnt_s64_untied, svint32_t, svint64_t,
+ z0 = svqxtnt_s64 (z1, z4),
+ z0 = svqxtnt (z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnt_u16_tied1:
+** uqxtnt z0\.b, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qxtnt_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svqxtnt_u16 (z0, z4),
+ z0 = svqxtnt (z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (qxtnt_u16_tied2, svuint8_t, svuint16_t,
+ z0_res = svqxtnt_u16 (z4, z0),
+ z0_res = svqxtnt (z4, z0))
+
+/*
+** qxtnt_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** uqxtnt z0\.b, z4\.h
+** |
+** uqxtnt z1\.b, z4\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qxtnt_u16_untied, svuint8_t, svuint16_t,
+ z0 = svqxtnt_u16 (z1, z4),
+ z0 = svqxtnt (z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnt_u32_tied1:
+** uqxtnt z0\.h, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qxtnt_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svqxtnt_u32 (z0, z4),
+ z0 = svqxtnt (z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (qxtnt_u32_tied2, svuint16_t, svuint32_t,
+ z0_res = svqxtnt_u32 (z4, z0),
+ z0_res = svqxtnt (z4, z0))
+
+/*
+** qxtnt_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** uqxtnt z0\.h, z4\.s
+** |
+** uqxtnt z1\.h, z4\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qxtnt_u32_untied, svuint16_t, svuint32_t,
+ z0 = svqxtnt_u32 (z1, z4),
+ z0 = svqxtnt (z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtnt_u64_tied1:
+** uqxtnt z0\.s, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qxtnt_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svqxtnt_u64 (z0, z4),
+ z0 = svqxtnt (z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (qxtnt_u64_tied2, svuint32_t, svuint64_t,
+ z0_res = svqxtnt_u64 (z4, z0),
+ z0_res = svqxtnt (z4, z0))
+
+/*
+** qxtnt_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** uqxtnt z0\.s, z4\.d
+** |
+** uqxtnt z1\.s, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qxtnt_u64_untied, svuint32_t, svuint64_t,
+ z0 = svqxtnt_u64 (z1, z4),
+ z0 = svqxtnt (z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtunb_s16:
+** sqxtunb z0\.b, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qxtunb_s16, svuint8_t, svint16_t,
+ z0 = svqxtunb_s16 (z4),
+ z0 = svqxtunb (z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtunb_s32:
+** sqxtunb z0\.h, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qxtunb_s32, svuint16_t, svint32_t,
+ z0 = svqxtunb_s32 (z4),
+ z0 = svqxtunb (z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtunb_s64:
+** sqxtunb z0\.s, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qxtunb_s64, svuint32_t, svint64_t,
+ z0 = svqxtunb_s64 (z4),
+ z0 = svqxtunb (z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtunt_s16_tied1:
+** sqxtunt z0\.b, z4\.h
+** ret
+*/
+TEST_DUAL_Z (qxtunt_s16_tied1, svuint8_t, svint16_t,
+ z0 = svqxtunt_s16 (z0, z4),
+ z0 = svqxtunt (z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (qxtunt_s16_tied2, svuint8_t, svint16_t,
+ z0_res = svqxtunt_s16 (z4, z0),
+ z0_res = svqxtunt (z4, z0))
+
+/*
+** qxtunt_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** sqxtunt z0\.b, z4\.h
+** |
+** sqxtunt z1\.b, z4\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qxtunt_s16_untied, svuint8_t, svint16_t,
+ z0 = svqxtunt_s16 (z1, z4),
+ z0 = svqxtunt (z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtunt_s32_tied1:
+** sqxtunt z0\.h, z4\.s
+** ret
+*/
+TEST_DUAL_Z (qxtunt_s32_tied1, svuint16_t, svint32_t,
+ z0 = svqxtunt_s32 (z0, z4),
+ z0 = svqxtunt (z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (qxtunt_s32_tied2, svuint16_t, svint32_t,
+ z0_res = svqxtunt_s32 (z4, z0),
+ z0_res = svqxtunt (z4, z0))
+
+/*
+** qxtunt_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** sqxtunt z0\.h, z4\.s
+** |
+** sqxtunt z1\.h, z4\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qxtunt_s32_untied, svuint16_t, svint32_t,
+ z0 = svqxtunt_s32 (z1, z4),
+ z0 = svqxtunt (z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** qxtunt_s64_tied1:
+** sqxtunt z0\.s, z4\.d
+** ret
+*/
+TEST_DUAL_Z (qxtunt_s64_tied1, svuint32_t, svint64_t,
+ z0 = svqxtunt_s64 (z0, z4),
+ z0 = svqxtunt (z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (qxtunt_s64_tied2, svuint32_t, svint64_t,
+ z0_res = svqxtunt_s64 (z4, z0),
+ z0_res = svqxtunt (z4, z0))
+
+/*
+** qxtunt_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** sqxtunt z0\.s, z4\.d
+** |
+** sqxtunt z1\.s, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (qxtunt_s64_untied, svuint32_t, svint64_t,
+ z0 = svqxtunt_s64 (z1, z4),
+ z0 = svqxtunt (z1, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnb_s16_tied1:
+** raddhnb z0\.b, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_s16_tied1, svint8_t, svint16_t,
+ z0_res = svraddhnb_s16 (z0, z1),
+ z0_res = svraddhnb (z0, z1))
+
+/*
+** raddhnb_s16_tied2:
+** raddhnb z0\.b, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_s16_tied2, svint8_t, svint16_t,
+ z0_res = svraddhnb_s16 (z1, z0),
+ z0_res = svraddhnb (z1, z0))
+
+/*
+** raddhnb_s16_untied:
+** raddhnb z0\.b, (z1\.h, z2\.h|z2\.h, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_s16_untied, svint8_t, svint16_t,
+ z0_res = svraddhnb_s16 (z1, z2),
+ z0_res = svraddhnb (z1, z2))
+
+/*
+** raddhnb_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** raddhnb z0\.b, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_w0_s16_tied1, svint8_t, svint16_t, int16_t,
+ z0_res = svraddhnb_n_s16 (z0, x0),
+ z0_res = svraddhnb (z0, x0))
+
+/*
+** raddhnb_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** raddhnb z0\.b, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_w0_s16_untied, svint8_t, svint16_t, int16_t,
+ z0_res = svraddhnb_n_s16 (z1, x0),
+ z0_res = svraddhnb (z1, x0))
+
+/*
+** raddhnb_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** raddhnb z0\.b, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_s16_tied1, svint8_t, svint16_t,
+ z0_res = svraddhnb_n_s16 (z0, 11),
+ z0_res = svraddhnb (z0, 11))
+
+/*
+** raddhnb_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** raddhnb z0\.b, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_s16_untied, svint8_t, svint16_t,
+ z0_res = svraddhnb_n_s16 (z1, 11),
+ z0_res = svraddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnb_s32_tied1:
+** raddhnb z0\.h, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_s32_tied1, svint16_t, svint32_t,
+ z0_res = svraddhnb_s32 (z0, z1),
+ z0_res = svraddhnb (z0, z1))
+
+/*
+** raddhnb_s32_tied2:
+** raddhnb z0\.h, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_s32_tied2, svint16_t, svint32_t,
+ z0_res = svraddhnb_s32 (z1, z0),
+ z0_res = svraddhnb (z1, z0))
+
+/*
+** raddhnb_s32_untied:
+** raddhnb z0\.h, (z1\.s, z2\.s|z2\.s, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_s32_untied, svint16_t, svint32_t,
+ z0_res = svraddhnb_s32 (z1, z2),
+ z0_res = svraddhnb (z1, z2))
+
+/*
+** raddhnb_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** raddhnb z0\.h, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_w0_s32_tied1, svint16_t, svint32_t, int32_t,
+ z0_res = svraddhnb_n_s32 (z0, x0),
+ z0_res = svraddhnb (z0, x0))
+
+/*
+** raddhnb_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** raddhnb z0\.h, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_w0_s32_untied, svint16_t, svint32_t, int32_t,
+ z0_res = svraddhnb_n_s32 (z1, x0),
+ z0_res = svraddhnb (z1, x0))
+
+/*
+** raddhnb_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** raddhnb z0\.h, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_s32_tied1, svint16_t, svint32_t,
+ z0_res = svraddhnb_n_s32 (z0, 11),
+ z0_res = svraddhnb (z0, 11))
+
+/*
+** raddhnb_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** raddhnb z0\.h, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_s32_untied, svint16_t, svint32_t,
+ z0_res = svraddhnb_n_s32 (z1, 11),
+ z0_res = svraddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnb_s64_tied1:
+** raddhnb z0\.s, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_s64_tied1, svint32_t, svint64_t,
+ z0_res = svraddhnb_s64 (z0, z1),
+ z0_res = svraddhnb (z0, z1))
+
+/*
+** raddhnb_s64_tied2:
+** raddhnb z0\.s, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_s64_tied2, svint32_t, svint64_t,
+ z0_res = svraddhnb_s64 (z1, z0),
+ z0_res = svraddhnb (z1, z0))
+
+/*
+** raddhnb_s64_untied:
+** raddhnb z0\.s, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_s64_untied, svint32_t, svint64_t,
+ z0_res = svraddhnb_s64 (z1, z2),
+ z0_res = svraddhnb (z1, z2))
+
+/*
+** raddhnb_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** raddhnb z0\.s, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_x0_s64_tied1, svint32_t, svint64_t, int64_t,
+ z0_res = svraddhnb_n_s64 (z0, x0),
+ z0_res = svraddhnb (z0, x0))
+
+/*
+** raddhnb_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** raddhnb z0\.s, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_x0_s64_untied, svint32_t, svint64_t, int64_t,
+ z0_res = svraddhnb_n_s64 (z1, x0),
+ z0_res = svraddhnb (z1, x0))
+
+/*
+** raddhnb_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** raddhnb z0\.s, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_s64_tied1, svint32_t, svint64_t,
+ z0_res = svraddhnb_n_s64 (z0, 11),
+ z0_res = svraddhnb (z0, 11))
+
+/*
+** raddhnb_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** raddhnb z0\.s, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_s64_untied, svint32_t, svint64_t,
+ z0_res = svraddhnb_n_s64 (z1, 11),
+ z0_res = svraddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnb_u16_tied1:
+** raddhnb z0\.b, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svraddhnb_u16 (z0, z1),
+ z0_res = svraddhnb (z0, z1))
+
+/*
+** raddhnb_u16_tied2:
+** raddhnb z0\.b, (z0\.h, z1\.h|z1\.h, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_u16_tied2, svuint8_t, svuint16_t,
+ z0_res = svraddhnb_u16 (z1, z0),
+ z0_res = svraddhnb (z1, z0))
+
+/*
+** raddhnb_u16_untied:
+** raddhnb z0\.b, (z1\.h, z2\.h|z2\.h, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svraddhnb_u16 (z1, z2),
+ z0_res = svraddhnb (z1, z2))
+
+/*
+** raddhnb_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** raddhnb z0\.b, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_w0_u16_tied1, svuint8_t, svuint16_t, uint16_t,
+ z0_res = svraddhnb_n_u16 (z0, x0),
+ z0_res = svraddhnb (z0, x0))
+
+/*
+** raddhnb_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** raddhnb z0\.b, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_w0_u16_untied, svuint8_t, svuint16_t, uint16_t,
+ z0_res = svraddhnb_n_u16 (z1, x0),
+ z0_res = svraddhnb (z1, x0))
+
+/*
+** raddhnb_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** raddhnb z0\.b, (z0\.h, \1|\1, z0\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svraddhnb_n_u16 (z0, 11),
+ z0_res = svraddhnb (z0, 11))
+
+/*
+** raddhnb_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** raddhnb z0\.b, (z1\.h, \1|\1, z1\.h)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svraddhnb_n_u16 (z1, 11),
+ z0_res = svraddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnb_u32_tied1:
+** raddhnb z0\.h, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svraddhnb_u32 (z0, z1),
+ z0_res = svraddhnb (z0, z1))
+
+/*
+** raddhnb_u32_tied2:
+** raddhnb z0\.h, (z0\.s, z1\.s|z1\.s, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_u32_tied2, svuint16_t, svuint32_t,
+ z0_res = svraddhnb_u32 (z1, z0),
+ z0_res = svraddhnb (z1, z0))
+
+/*
+** raddhnb_u32_untied:
+** raddhnb z0\.h, (z1\.s, z2\.s|z2\.s, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svraddhnb_u32 (z1, z2),
+ z0_res = svraddhnb (z1, z2))
+
+/*
+** raddhnb_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** raddhnb z0\.h, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_w0_u32_tied1, svuint16_t, svuint32_t, uint32_t,
+ z0_res = svraddhnb_n_u32 (z0, x0),
+ z0_res = svraddhnb (z0, x0))
+
+/*
+** raddhnb_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** raddhnb z0\.h, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_w0_u32_untied, svuint16_t, svuint32_t, uint32_t,
+ z0_res = svraddhnb_n_u32 (z1, x0),
+ z0_res = svraddhnb (z1, x0))
+
+/*
+** raddhnb_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** raddhnb z0\.h, (z0\.s, \1|\1, z0\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svraddhnb_n_u32 (z0, 11),
+ z0_res = svraddhnb (z0, 11))
+
+/*
+** raddhnb_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** raddhnb z0\.h, (z1\.s, \1|\1, z1\.s)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svraddhnb_n_u32 (z1, 11),
+ z0_res = svraddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnb_u64_tied1:
+** raddhnb z0\.s, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svraddhnb_u64 (z0, z1),
+ z0_res = svraddhnb (z0, z1))
+
+/*
+** raddhnb_u64_tied2:
+** raddhnb z0\.s, (z0\.d, z1\.d|z1\.d, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_u64_tied2, svuint32_t, svuint64_t,
+ z0_res = svraddhnb_u64 (z1, z0),
+ z0_res = svraddhnb (z1, z0))
+
+/*
+** raddhnb_u64_untied:
+** raddhnb z0\.s, (z1\.d, z2\.d|z2\.d, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svraddhnb_u64 (z1, z2),
+ z0_res = svraddhnb (z1, z2))
+
+/*
+** raddhnb_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** raddhnb z0\.s, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_x0_u64_tied1, svuint32_t, svuint64_t, uint64_t,
+ z0_res = svraddhnb_n_u64 (z0, x0),
+ z0_res = svraddhnb (z0, x0))
+
+/*
+** raddhnb_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** raddhnb z0\.s, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (raddhnb_x0_u64_untied, svuint32_t, svuint64_t, uint64_t,
+ z0_res = svraddhnb_n_u64 (z1, x0),
+ z0_res = svraddhnb (z1, x0))
+
+/*
+** raddhnb_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** raddhnb z0\.s, (z0\.d, \1|\1, z0\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svraddhnb_n_u64 (z0, 11),
+ z0_res = svraddhnb (z0, 11))
+
+/*
+** raddhnb_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** raddhnb z0\.s, (z1\.d, \1|\1, z1\.d)
+** ret
+*/
+TEST_TYPE_CHANGE_Z (raddhnb_11_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svraddhnb_n_u64 (z1, 11),
+ z0_res = svraddhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnt_s16_tied1:
+** raddhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_s16_tied1, svint8_t, svint16_t,
+ z0 = svraddhnt_s16 (z0, z4, z5),
+ z0 = svraddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_s16_tied2, svint8_t, svint16_t,
+ z0_res = svraddhnt_s16 (z4, z0, z1),
+ z0_res = svraddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_s16_tied3, svint8_t, svint16_t,
+ z0_res = svraddhnt_s16 (z4, z1, z0),
+ z0_res = svraddhnt (z4, z1, z0))
+
+/*
+** raddhnt_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** |
+** raddhnt z1\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_s16_untied, svint8_t, svint16_t,
+ z0 = svraddhnt_s16 (z1, z4, z5),
+ z0 = svraddhnt (z1, z4, z5))
+
+/*
+** raddhnt_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_w0_s16_tied1, svint8_t, svint16_t, int16_t,
+ z0 = svraddhnt_n_s16 (z0, z4, x0),
+ z0 = svraddhnt (z0, z4, x0))
+
+/*
+** raddhnt_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** |
+** raddhnt z1\.b, (z4\.h, \1|\1, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_w0_s16_untied, svint8_t, svint16_t, int16_t,
+ z0 = svraddhnt_n_s16 (z1, z4, x0),
+ z0 = svraddhnt (z1, z4, x0))
+
+/*
+** raddhnt_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_s16_tied1, svint8_t, svint16_t,
+ z0 = svraddhnt_n_s16 (z0, z4, 11),
+ z0 = svraddhnt (z0, z4, 11))
+
+/*
+** raddhnt_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** |
+** raddhnt z1\.b, (z4\.h, \1|\1, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_s16_untied, svint8_t, svint16_t,
+ z0 = svraddhnt_n_s16 (z1, z4, 11),
+ z0 = svraddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnt_s32_tied1:
+** raddhnt z0\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_s32_tied1, svint16_t, svint32_t,
+ z0 = svraddhnt_s32 (z0, z4, z5),
+ z0 = svraddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_s32_tied2, svint16_t, svint32_t,
+ z0_res = svraddhnt_s32 (z4, z0, z1),
+ z0_res = svraddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_s32_tied3, svint16_t, svint32_t,
+ z0_res = svraddhnt_s32 (z4, z1, z0),
+ z0_res = svraddhnt (z4, z1, z0))
+
+/*
+** raddhnt_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** |
+** raddhnt z1\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_s32_untied, svint16_t, svint32_t,
+ z0 = svraddhnt_s32 (z1, z4, z5),
+ z0 = svraddhnt (z1, z4, z5))
+
+/*
+** raddhnt_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** raddhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_w0_s32_tied1, svint16_t, svint32_t, int32_t,
+ z0 = svraddhnt_n_s32 (z0, z4, x0),
+ z0 = svraddhnt (z0, z4, x0))
+
+/*
+** raddhnt_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** |
+** raddhnt z1\.h, (z4\.s, \1|\1, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_w0_s32_untied, svint16_t, svint32_t, int32_t,
+ z0 = svraddhnt_n_s32 (z1, z4, x0),
+ z0 = svraddhnt (z1, z4, x0))
+
+/*
+** raddhnt_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** raddhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_s32_tied1, svint16_t, svint32_t,
+ z0 = svraddhnt_n_s32 (z0, z4, 11),
+ z0 = svraddhnt (z0, z4, 11))
+
+/*
+** raddhnt_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** |
+** raddhnt z1\.h, (z4\.s, \1|\1, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_s32_untied, svint16_t, svint32_t,
+ z0 = svraddhnt_n_s32 (z1, z4, 11),
+ z0 = svraddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnt_s64_tied1:
+** raddhnt z0\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_s64_tied1, svint32_t, svint64_t,
+ z0 = svraddhnt_s64 (z0, z4, z5),
+ z0 = svraddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_s64_tied2, svint32_t, svint64_t,
+ z0_res = svraddhnt_s64 (z4, z0, z1),
+ z0_res = svraddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_s64_tied3, svint32_t, svint64_t,
+ z0_res = svraddhnt_s64 (z4, z1, z0),
+ z0_res = svraddhnt (z4, z1, z0))
+
+/*
+** raddhnt_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** |
+** raddhnt z1\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_s64_untied, svint32_t, svint64_t,
+ z0 = svraddhnt_s64 (z1, z4, z5),
+ z0 = svraddhnt (z1, z4, z5))
+
+/*
+** raddhnt_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** raddhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_x0_s64_tied1, svint32_t, svint64_t, int64_t,
+ z0 = svraddhnt_n_s64 (z0, z4, x0),
+ z0 = svraddhnt (z0, z4, x0))
+
+/*
+** raddhnt_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** |
+** raddhnt z1\.s, (z4\.d, \1|\1, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_x0_s64_untied, svint32_t, svint64_t, int64_t,
+ z0 = svraddhnt_n_s64 (z1, z4, x0),
+ z0 = svraddhnt (z1, z4, x0))
+
+/*
+** raddhnt_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** raddhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_s64_tied1, svint32_t, svint64_t,
+ z0 = svraddhnt_n_s64 (z0, z4, 11),
+ z0 = svraddhnt (z0, z4, 11))
+
+/*
+** raddhnt_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** |
+** raddhnt z1\.s, (z4\.d, \1|\1, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_s64_untied, svint32_t, svint64_t,
+ z0 = svraddhnt_n_s64 (z1, z4, 11),
+ z0 = svraddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnt_u16_tied1:
+** raddhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svraddhnt_u16 (z0, z4, z5),
+ z0 = svraddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_u16_tied2, svuint8_t, svuint16_t,
+ z0_res = svraddhnt_u16 (z4, z0, z1),
+ z0_res = svraddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_u16_tied3, svuint8_t, svuint16_t,
+ z0_res = svraddhnt_u16 (z4, z1, z0),
+ z0_res = svraddhnt (z4, z1, z0))
+
+/*
+** raddhnt_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** |
+** raddhnt z1\.b, (z4\.h, z5\.h|z5\.h, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_u16_untied, svuint8_t, svuint16_t,
+ z0 = svraddhnt_u16 (z1, z4, z5),
+ z0 = svraddhnt (z1, z4, z5))
+
+/*
+** raddhnt_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_w0_u16_tied1, svuint8_t, svuint16_t, uint16_t,
+ z0 = svraddhnt_n_u16 (z0, z4, x0),
+ z0 = svraddhnt (z0, z4, x0))
+
+/*
+** raddhnt_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** |
+** raddhnt z1\.b, (z4\.h, \1|\1, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_w0_u16_untied, svuint8_t, svuint16_t, uint16_t,
+ z0 = svraddhnt_n_u16 (z1, z4, x0),
+ z0 = svraddhnt (z1, z4, x0))
+
+/*
+** raddhnt_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svraddhnt_n_u16 (z0, z4, 11),
+ z0 = svraddhnt (z0, z4, 11))
+
+/*
+** raddhnt_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.b, (z4\.h, \1|\1, z4\.h)
+** |
+** raddhnt z1\.b, (z4\.h, \1|\1, z4\.h)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_u16_untied, svuint8_t, svuint16_t,
+ z0 = svraddhnt_n_u16 (z1, z4, 11),
+ z0 = svraddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnt_u32_tied1:
+** raddhnt z0\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svraddhnt_u32 (z0, z4, z5),
+ z0 = svraddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_u32_tied2, svuint16_t, svuint32_t,
+ z0_res = svraddhnt_u32 (z4, z0, z1),
+ z0_res = svraddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_u32_tied3, svuint16_t, svuint32_t,
+ z0_res = svraddhnt_u32 (z4, z1, z0),
+ z0_res = svraddhnt (z4, z1, z0))
+
+/*
+** raddhnt_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** |
+** raddhnt z1\.h, (z4\.s, z5\.s|z5\.s, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_u32_untied, svuint16_t, svuint32_t,
+ z0 = svraddhnt_u32 (z1, z4, z5),
+ z0 = svraddhnt (z1, z4, z5))
+
+/*
+** raddhnt_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** raddhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_w0_u32_tied1, svuint16_t, svuint32_t, uint32_t,
+ z0 = svraddhnt_n_u32 (z0, z4, x0),
+ z0 = svraddhnt (z0, z4, x0))
+
+/*
+** raddhnt_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** |
+** raddhnt z1\.h, (z4\.s, \1|\1, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_w0_u32_untied, svuint16_t, svuint32_t, uint32_t,
+ z0 = svraddhnt_n_u32 (z1, z4, x0),
+ z0 = svraddhnt (z1, z4, x0))
+
+/*
+** raddhnt_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** raddhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svraddhnt_n_u32 (z0, z4, 11),
+ z0 = svraddhnt (z0, z4, 11))
+
+/*
+** raddhnt_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.h, (z4\.s, \1|\1, z4\.s)
+** |
+** raddhnt z1\.h, (z4\.s, \1|\1, z4\.s)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_u32_untied, svuint16_t, svuint32_t,
+ z0 = svraddhnt_n_u32 (z1, z4, 11),
+ z0 = svraddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** raddhnt_u64_tied1:
+** raddhnt z0\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svraddhnt_u64 (z0, z4, z5),
+ z0 = svraddhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_u64_tied2, svuint32_t, svuint64_t,
+ z0_res = svraddhnt_u64 (z4, z0, z1),
+ z0_res = svraddhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (raddhnt_u64_tied3, svuint32_t, svuint64_t,
+ z0_res = svraddhnt_u64 (z4, z1, z0),
+ z0_res = svraddhnt (z4, z1, z0))
+
+/*
+** raddhnt_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** |
+** raddhnt z1\.s, (z4\.d, z5\.d|z5\.d, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_u64_untied, svuint32_t, svuint64_t,
+ z0 = svraddhnt_u64 (z1, z4, z5),
+ z0 = svraddhnt (z1, z4, z5))
+
+/*
+** raddhnt_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** raddhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_x0_u64_tied1, svuint32_t, svuint64_t, uint64_t,
+ z0 = svraddhnt_n_u64 (z0, z4, x0),
+ z0 = svraddhnt (z0, z4, x0))
+
+/*
+** raddhnt_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** |
+** raddhnt z1\.s, (z4\.d, \1|\1, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (raddhnt_x0_u64_untied, svuint32_t, svuint64_t, uint64_t,
+ z0 = svraddhnt_n_u64 (z1, z4, x0),
+ z0 = svraddhnt (z1, z4, x0))
+
+/*
+** raddhnt_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** raddhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svraddhnt_n_u64 (z0, z4, 11),
+ z0 = svraddhnt (z0, z4, 11))
+
+/*
+** raddhnt_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** mov z0\.d, z1\.d
+** raddhnt z0\.s, (z4\.d, \1|\1, z4\.d)
+** |
+** raddhnt z1\.s, (z4\.d, \1|\1, z4\.d)
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (raddhnt_11_u64_untied, svuint32_t, svuint64_t,
+ z0 = svraddhnt_n_u64 (z1, z4, 11),
+ z0 = svraddhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-sha3"
+
+/*
+** rax1_s64_tied1:
+** rax1 z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rax1_s64_tied1, svint64_t,
+ z0 = svrax1_s64 (z0, z1),
+ z0 = svrax1 (z0, z1))
+
+/*
+** rax1_s64_tied2:
+** rax1 z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (rax1_s64_tied2, svint64_t,
+ z0 = svrax1_s64 (z1, z0),
+ z0 = svrax1 (z1, z0))
+
+/*
+** rax1_s64_untied:
+** rax1 z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (rax1_s64_untied, svint64_t,
+ z0 = svrax1_s64 (z1, z2),
+ z0 = svrax1 (z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-sha3"
+
+/*
+** rax1_u64_tied1:
+** rax1 z0\.d, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rax1_u64_tied1, svuint64_t,
+ z0 = svrax1_u64 (z0, z1),
+ z0 = svrax1 (z0, z1))
+
+/*
+** rax1_u64_tied2:
+** rax1 z0\.d, z1\.d, z0\.d
+** ret
+*/
+TEST_UNIFORM_Z (rax1_u64_tied2, svuint64_t,
+ z0 = svrax1_u64 (z1, z0),
+ z0 = svrax1 (z1, z0))
+
+/*
+** rax1_u64_untied:
+** rax1 z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (rax1_u64_untied, svuint64_t,
+ z0 = svrax1_u64 (z1, z2),
+ z0 = svrax1 (z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** recpe_u32_m_tied12:
+** urecpe z0\.s, p0/m, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (recpe_u32_m_tied12, svuint32_t,
+ z0 = svrecpe_u32_m (z0, p0, z0),
+ z0 = svrecpe_m (z0, p0, z0))
+
+/*
+** recpe_u32_m_tied1:
+** urecpe z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (recpe_u32_m_tied1, svuint32_t,
+ z0 = svrecpe_u32_m (z0, p0, z1),
+ z0 = svrecpe_m (z0, p0, z1))
+
+/*
+** recpe_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** urecpe z0\.s, p0/m, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (recpe_u32_m_tied2, svuint32_t,
+ z0 = svrecpe_u32_m (z1, p0, z0),
+ z0 = svrecpe_m (z1, p0, z0))
+
+/*
+** recpe_u32_m_untied:
+** movprfx z0, z2
+** urecpe z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (recpe_u32_m_untied, svuint32_t,
+ z0 = svrecpe_u32_m (z2, p0, z1),
+ z0 = svrecpe_m (z2, p0, z1))
+
+/*
+** recpe_u32_z_tied1:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.s, p0/z, \1\.s
+** urecpe z0\.s, p0/m, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (recpe_u32_z_tied1, svuint32_t,
+ z0 = svrecpe_u32_z (p0, z0),
+ z0 = svrecpe_z (p0, z0))
+
+/*
+** recpe_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** urecpe z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (recpe_u32_z_untied, svuint32_t,
+ z0 = svrecpe_u32_z (p0, z1),
+ z0 = svrecpe_z (p0, z1))
+
+/*
+** recpe_u32_x_tied1:
+** urecpe z0\.s, p0/m, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (recpe_u32_x_tied1, svuint32_t,
+ z0 = svrecpe_u32_x (p0, z0),
+ z0 = svrecpe_x (p0, z0))
+
+/*
+** recpe_u32_x_untied:
+** urecpe z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (recpe_u32_x_untied, svuint32_t,
+ z0 = svrecpe_u32_x (p0, z1),
+ z0 = svrecpe_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rhadd_s16_m_tied1:
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s16_m_tied1, svint16_t,
+ z0 = svrhadd_s16_m (p0, z0, z1),
+ z0 = svrhadd_m (p0, z0, z1))
+
+/*
+** rhadd_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srhadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s16_m_tied2, svint16_t,
+ z0 = svrhadd_s16_m (p0, z1, z0),
+ z0 = svrhadd_m (p0, z1, z0))
+
+/*
+** rhadd_s16_m_untied:
+** movprfx z0, z1
+** srhadd z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s16_m_untied, svint16_t,
+ z0 = svrhadd_s16_m (p0, z1, z2),
+ z0 = svrhadd_m (p0, z1, z2))
+
+/*
+** rhadd_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** srhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svrhadd_n_s16_m (p0, z0, x0),
+ z0 = svrhadd_m (p0, z0, x0))
+
+/*
+** rhadd_w0_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** srhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svrhadd_n_s16_m (p0, z1, x0),
+ z0 = svrhadd_m (p0, z1, x0))
+
+/*
+** rhadd_11_s16_m_tied1:
+** mov (z[0-9]+\.h), #11
+** srhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s16_m_tied1, svint16_t,
+ z0 = svrhadd_n_s16_m (p0, z0, 11),
+ z0 = svrhadd_m (p0, z0, 11))
+
+/*
+** rhadd_11_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** srhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s16_m_untied, svint16_t,
+ z0 = svrhadd_n_s16_m (p0, z1, 11),
+ z0 = svrhadd_m (p0, z1, 11))
+
+/*
+** rhadd_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s16_z_tied1, svint16_t,
+ z0 = svrhadd_s16_z (p0, z0, z1),
+ z0 = svrhadd_z (p0, z0, z1))
+
+/*
+** rhadd_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s16_z_tied2, svint16_t,
+ z0 = svrhadd_s16_z (p0, z1, z0),
+ z0 = svrhadd_z (p0, z1, z0))
+
+/*
+** rhadd_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** srhadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s16_z_untied, svint16_t,
+ z0 = svrhadd_s16_z (p0, z1, z2),
+ z0 = svrhadd_z (p0, z1, z2))
+
+/*
+** rhadd_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** srhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svrhadd_n_s16_z (p0, z0, x0),
+ z0 = svrhadd_z (p0, z0, x0))
+
+/*
+** rhadd_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** srhadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svrhadd_n_s16_z (p0, z1, x0),
+ z0 = svrhadd_z (p0, z1, x0))
+
+/*
+** rhadd_11_s16_z_tied1:
+** mov (z[0-9]+\.h), #11
+** movprfx z0\.h, p0/z, z0\.h
+** srhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s16_z_tied1, svint16_t,
+ z0 = svrhadd_n_s16_z (p0, z0, 11),
+ z0 = svrhadd_z (p0, z0, 11))
+
+/*
+** rhadd_11_s16_z_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** srhadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s16_z_untied, svint16_t,
+ z0 = svrhadd_n_s16_z (p0, z1, 11),
+ z0 = svrhadd_z (p0, z1, 11))
+
+/*
+** rhadd_s16_x_tied1:
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s16_x_tied1, svint16_t,
+ z0 = svrhadd_s16_x (p0, z0, z1),
+ z0 = svrhadd_x (p0, z0, z1))
+
+/*
+** rhadd_s16_x_tied2:
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s16_x_tied2, svint16_t,
+ z0 = svrhadd_s16_x (p0, z1, z0),
+ z0 = svrhadd_x (p0, z1, z0))
+
+/*
+** rhadd_s16_x_untied:
+** (
+** movprfx z0, z1
+** srhadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0, z2
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s16_x_untied, svint16_t,
+ z0 = svrhadd_s16_x (p0, z1, z2),
+ z0 = svrhadd_x (p0, z1, z2))
+
+/*
+** rhadd_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** srhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svrhadd_n_s16_x (p0, z0, x0),
+ z0 = svrhadd_x (p0, z0, x0))
+
+/*
+** rhadd_w0_s16_x_untied:
+** mov z0\.h, w0
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svrhadd_n_s16_x (p0, z1, x0),
+ z0 = svrhadd_x (p0, z1, x0))
+
+/*
+** rhadd_11_s16_x_tied1:
+** mov (z[0-9]+\.h), #11
+** srhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s16_x_tied1, svint16_t,
+ z0 = svrhadd_n_s16_x (p0, z0, 11),
+ z0 = svrhadd_x (p0, z0, 11))
+
+/*
+** rhadd_11_s16_x_untied:
+** mov z0\.h, #11
+** srhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s16_x_untied, svint16_t,
+ z0 = svrhadd_n_s16_x (p0, z1, 11),
+ z0 = svrhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rhadd_s32_m_tied1:
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s32_m_tied1, svint32_t,
+ z0 = svrhadd_s32_m (p0, z0, z1),
+ z0 = svrhadd_m (p0, z0, z1))
+
+/*
+** rhadd_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srhadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s32_m_tied2, svint32_t,
+ z0 = svrhadd_s32_m (p0, z1, z0),
+ z0 = svrhadd_m (p0, z1, z0))
+
+/*
+** rhadd_s32_m_untied:
+** movprfx z0, z1
+** srhadd z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s32_m_untied, svint32_t,
+ z0 = svrhadd_s32_m (p0, z1, z2),
+ z0 = svrhadd_m (p0, z1, z2))
+
+/*
+** rhadd_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** srhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svrhadd_n_s32_m (p0, z0, x0),
+ z0 = svrhadd_m (p0, z0, x0))
+
+/*
+** rhadd_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** srhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svrhadd_n_s32_m (p0, z1, x0),
+ z0 = svrhadd_m (p0, z1, x0))
+
+/*
+** rhadd_11_s32_m_tied1:
+** mov (z[0-9]+\.s), #11
+** srhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s32_m_tied1, svint32_t,
+ z0 = svrhadd_n_s32_m (p0, z0, 11),
+ z0 = svrhadd_m (p0, z0, 11))
+
+/*
+** rhadd_11_s32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** srhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s32_m_untied, svint32_t,
+ z0 = svrhadd_n_s32_m (p0, z1, 11),
+ z0 = svrhadd_m (p0, z1, 11))
+
+/*
+** rhadd_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s32_z_tied1, svint32_t,
+ z0 = svrhadd_s32_z (p0, z0, z1),
+ z0 = svrhadd_z (p0, z0, z1))
+
+/*
+** rhadd_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s32_z_tied2, svint32_t,
+ z0 = svrhadd_s32_z (p0, z1, z0),
+ z0 = svrhadd_z (p0, z1, z0))
+
+/*
+** rhadd_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** srhadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s32_z_untied, svint32_t,
+ z0 = svrhadd_s32_z (p0, z1, z2),
+ z0 = svrhadd_z (p0, z1, z2))
+
+/*
+** rhadd_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** srhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svrhadd_n_s32_z (p0, z0, x0),
+ z0 = svrhadd_z (p0, z0, x0))
+
+/*
+** rhadd_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** srhadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svrhadd_n_s32_z (p0, z1, x0),
+ z0 = svrhadd_z (p0, z1, x0))
+
+/*
+** rhadd_11_s32_z_tied1:
+** mov (z[0-9]+\.s), #11
+** movprfx z0\.s, p0/z, z0\.s
+** srhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s32_z_tied1, svint32_t,
+ z0 = svrhadd_n_s32_z (p0, z0, 11),
+ z0 = svrhadd_z (p0, z0, 11))
+
+/*
+** rhadd_11_s32_z_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** srhadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s32_z_untied, svint32_t,
+ z0 = svrhadd_n_s32_z (p0, z1, 11),
+ z0 = svrhadd_z (p0, z1, 11))
+
+/*
+** rhadd_s32_x_tied1:
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s32_x_tied1, svint32_t,
+ z0 = svrhadd_s32_x (p0, z0, z1),
+ z0 = svrhadd_x (p0, z0, z1))
+
+/*
+** rhadd_s32_x_tied2:
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s32_x_tied2, svint32_t,
+ z0 = svrhadd_s32_x (p0, z1, z0),
+ z0 = svrhadd_x (p0, z1, z0))
+
+/*
+** rhadd_s32_x_untied:
+** (
+** movprfx z0, z1
+** srhadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0, z2
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s32_x_untied, svint32_t,
+ z0 = svrhadd_s32_x (p0, z1, z2),
+ z0 = svrhadd_x (p0, z1, z2))
+
+/*
+** rhadd_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** srhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svrhadd_n_s32_x (p0, z0, x0),
+ z0 = svrhadd_x (p0, z0, x0))
+
+/*
+** rhadd_w0_s32_x_untied:
+** mov z0\.s, w0
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svrhadd_n_s32_x (p0, z1, x0),
+ z0 = svrhadd_x (p0, z1, x0))
+
+/*
+** rhadd_11_s32_x_tied1:
+** mov (z[0-9]+\.s), #11
+** srhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s32_x_tied1, svint32_t,
+ z0 = svrhadd_n_s32_x (p0, z0, 11),
+ z0 = svrhadd_x (p0, z0, 11))
+
+/*
+** rhadd_11_s32_x_untied:
+** mov z0\.s, #11
+** srhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s32_x_untied, svint32_t,
+ z0 = svrhadd_n_s32_x (p0, z1, 11),
+ z0 = svrhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rhadd_s64_m_tied1:
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s64_m_tied1, svint64_t,
+ z0 = svrhadd_s64_m (p0, z0, z1),
+ z0 = svrhadd_m (p0, z0, z1))
+
+/*
+** rhadd_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** srhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s64_m_tied2, svint64_t,
+ z0 = svrhadd_s64_m (p0, z1, z0),
+ z0 = svrhadd_m (p0, z1, z0))
+
+/*
+** rhadd_s64_m_untied:
+** movprfx z0, z1
+** srhadd z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s64_m_untied, svint64_t,
+ z0 = svrhadd_s64_m (p0, z1, z2),
+ z0 = svrhadd_m (p0, z1, z2))
+
+/*
+** rhadd_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** srhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svrhadd_n_s64_m (p0, z0, x0),
+ z0 = svrhadd_m (p0, z0, x0))
+
+/*
+** rhadd_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** srhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svrhadd_n_s64_m (p0, z1, x0),
+ z0 = svrhadd_m (p0, z1, x0))
+
+/*
+** rhadd_11_s64_m_tied1:
+** mov (z[0-9]+\.d), #11
+** srhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s64_m_tied1, svint64_t,
+ z0 = svrhadd_n_s64_m (p0, z0, 11),
+ z0 = svrhadd_m (p0, z0, 11))
+
+/*
+** rhadd_11_s64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** srhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s64_m_untied, svint64_t,
+ z0 = svrhadd_n_s64_m (p0, z1, 11),
+ z0 = svrhadd_m (p0, z1, 11))
+
+/*
+** rhadd_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s64_z_tied1, svint64_t,
+ z0 = svrhadd_s64_z (p0, z0, z1),
+ z0 = svrhadd_z (p0, z0, z1))
+
+/*
+** rhadd_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s64_z_tied2, svint64_t,
+ z0 = svrhadd_s64_z (p0, z1, z0),
+ z0 = svrhadd_z (p0, z1, z0))
+
+/*
+** rhadd_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** srhadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s64_z_untied, svint64_t,
+ z0 = svrhadd_s64_z (p0, z1, z2),
+ z0 = svrhadd_z (p0, z1, z2))
+
+/*
+** rhadd_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** srhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svrhadd_n_s64_z (p0, z0, x0),
+ z0 = svrhadd_z (p0, z0, x0))
+
+/*
+** rhadd_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** srhadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svrhadd_n_s64_z (p0, z1, x0),
+ z0 = svrhadd_z (p0, z1, x0))
+
+/*
+** rhadd_11_s64_z_tied1:
+** mov (z[0-9]+\.d), #11
+** movprfx z0\.d, p0/z, z0\.d
+** srhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s64_z_tied1, svint64_t,
+ z0 = svrhadd_n_s64_z (p0, z0, 11),
+ z0 = svrhadd_z (p0, z0, 11))
+
+/*
+** rhadd_11_s64_z_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** srhadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s64_z_untied, svint64_t,
+ z0 = svrhadd_n_s64_z (p0, z1, 11),
+ z0 = svrhadd_z (p0, z1, 11))
+
+/*
+** rhadd_s64_x_tied1:
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s64_x_tied1, svint64_t,
+ z0 = svrhadd_s64_x (p0, z0, z1),
+ z0 = svrhadd_x (p0, z0, z1))
+
+/*
+** rhadd_s64_x_tied2:
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s64_x_tied2, svint64_t,
+ z0 = svrhadd_s64_x (p0, z1, z0),
+ z0 = svrhadd_x (p0, z1, z0))
+
+/*
+** rhadd_s64_x_untied:
+** (
+** movprfx z0, z1
+** srhadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0, z2
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s64_x_untied, svint64_t,
+ z0 = svrhadd_s64_x (p0, z1, z2),
+ z0 = svrhadd_x (p0, z1, z2))
+
+/*
+** rhadd_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** srhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svrhadd_n_s64_x (p0, z0, x0),
+ z0 = svrhadd_x (p0, z0, x0))
+
+/*
+** rhadd_x0_s64_x_untied:
+** mov z0\.d, x0
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svrhadd_n_s64_x (p0, z1, x0),
+ z0 = svrhadd_x (p0, z1, x0))
+
+/*
+** rhadd_11_s64_x_tied1:
+** mov (z[0-9]+\.d), #11
+** srhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s64_x_tied1, svint64_t,
+ z0 = svrhadd_n_s64_x (p0, z0, 11),
+ z0 = svrhadd_x (p0, z0, 11))
+
+/*
+** rhadd_11_s64_x_untied:
+** mov z0\.d, #11
+** srhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s64_x_untied, svint64_t,
+ z0 = svrhadd_n_s64_x (p0, z1, 11),
+ z0 = svrhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rhadd_s8_m_tied1:
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s8_m_tied1, svint8_t,
+ z0 = svrhadd_s8_m (p0, z0, z1),
+ z0 = svrhadd_m (p0, z0, z1))
+
+/*
+** rhadd_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srhadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s8_m_tied2, svint8_t,
+ z0 = svrhadd_s8_m (p0, z1, z0),
+ z0 = svrhadd_m (p0, z1, z0))
+
+/*
+** rhadd_s8_m_untied:
+** movprfx z0, z1
+** srhadd z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s8_m_untied, svint8_t,
+ z0 = svrhadd_s8_m (p0, z1, z2),
+ z0 = svrhadd_m (p0, z1, z2))
+
+/*
+** rhadd_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** srhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svrhadd_n_s8_m (p0, z0, x0),
+ z0 = svrhadd_m (p0, z0, x0))
+
+/*
+** rhadd_w0_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** srhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svrhadd_n_s8_m (p0, z1, x0),
+ z0 = svrhadd_m (p0, z1, x0))
+
+/*
+** rhadd_11_s8_m_tied1:
+** mov (z[0-9]+\.b), #11
+** srhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s8_m_tied1, svint8_t,
+ z0 = svrhadd_n_s8_m (p0, z0, 11),
+ z0 = svrhadd_m (p0, z0, 11))
+
+/*
+** rhadd_11_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** srhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s8_m_untied, svint8_t,
+ z0 = svrhadd_n_s8_m (p0, z1, 11),
+ z0 = svrhadd_m (p0, z1, 11))
+
+/*
+** rhadd_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s8_z_tied1, svint8_t,
+ z0 = svrhadd_s8_z (p0, z0, z1),
+ z0 = svrhadd_z (p0, z0, z1))
+
+/*
+** rhadd_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s8_z_tied2, svint8_t,
+ z0 = svrhadd_s8_z (p0, z1, z0),
+ z0 = svrhadd_z (p0, z1, z0))
+
+/*
+** rhadd_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** srhadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s8_z_untied, svint8_t,
+ z0 = svrhadd_s8_z (p0, z1, z2),
+ z0 = svrhadd_z (p0, z1, z2))
+
+/*
+** rhadd_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** srhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svrhadd_n_s8_z (p0, z0, x0),
+ z0 = svrhadd_z (p0, z0, x0))
+
+/*
+** rhadd_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** srhadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svrhadd_n_s8_z (p0, z1, x0),
+ z0 = svrhadd_z (p0, z1, x0))
+
+/*
+** rhadd_11_s8_z_tied1:
+** mov (z[0-9]+\.b), #11
+** movprfx z0\.b, p0/z, z0\.b
+** srhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s8_z_tied1, svint8_t,
+ z0 = svrhadd_n_s8_z (p0, z0, 11),
+ z0 = svrhadd_z (p0, z0, 11))
+
+/*
+** rhadd_11_s8_z_untied:
+** mov (z[0-9]+\.b), #11
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** srhadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s8_z_untied, svint8_t,
+ z0 = svrhadd_n_s8_z (p0, z1, 11),
+ z0 = svrhadd_z (p0, z1, 11))
+
+/*
+** rhadd_s8_x_tied1:
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s8_x_tied1, svint8_t,
+ z0 = svrhadd_s8_x (p0, z0, z1),
+ z0 = svrhadd_x (p0, z0, z1))
+
+/*
+** rhadd_s8_x_tied2:
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s8_x_tied2, svint8_t,
+ z0 = svrhadd_s8_x (p0, z1, z0),
+ z0 = svrhadd_x (p0, z1, z0))
+
+/*
+** rhadd_s8_x_untied:
+** (
+** movprfx z0, z1
+** srhadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0, z2
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_s8_x_untied, svint8_t,
+ z0 = svrhadd_s8_x (p0, z1, z2),
+ z0 = svrhadd_x (p0, z1, z2))
+
+/*
+** rhadd_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** srhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svrhadd_n_s8_x (p0, z0, x0),
+ z0 = svrhadd_x (p0, z0, x0))
+
+/*
+** rhadd_w0_s8_x_untied:
+** mov z0\.b, w0
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svrhadd_n_s8_x (p0, z1, x0),
+ z0 = svrhadd_x (p0, z1, x0))
+
+/*
+** rhadd_11_s8_x_tied1:
+** mov (z[0-9]+\.b), #11
+** srhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s8_x_tied1, svint8_t,
+ z0 = svrhadd_n_s8_x (p0, z0, 11),
+ z0 = svrhadd_x (p0, z0, 11))
+
+/*
+** rhadd_11_s8_x_untied:
+** mov z0\.b, #11
+** srhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_s8_x_untied, svint8_t,
+ z0 = svrhadd_n_s8_x (p0, z1, 11),
+ z0 = svrhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rhadd_u16_m_tied1:
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u16_m_tied1, svuint16_t,
+ z0 = svrhadd_u16_m (p0, z0, z1),
+ z0 = svrhadd_m (p0, z0, z1))
+
+/*
+** rhadd_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** urhadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u16_m_tied2, svuint16_t,
+ z0 = svrhadd_u16_m (p0, z1, z0),
+ z0 = svrhadd_m (p0, z1, z0))
+
+/*
+** rhadd_u16_m_untied:
+** movprfx z0, z1
+** urhadd z0\.h, p0/m, z0\.h, z2\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u16_m_untied, svuint16_t,
+ z0 = svrhadd_u16_m (p0, z1, z2),
+ z0 = svrhadd_m (p0, z1, z2))
+
+/*
+** rhadd_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** urhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u16_m_tied1, svuint16_t, uint16_t,
+ z0 = svrhadd_n_u16_m (p0, z0, x0),
+ z0 = svrhadd_m (p0, z0, x0))
+
+/*
+** rhadd_w0_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** urhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u16_m_untied, svuint16_t, uint16_t,
+ z0 = svrhadd_n_u16_m (p0, z1, x0),
+ z0 = svrhadd_m (p0, z1, x0))
+
+/*
+** rhadd_11_u16_m_tied1:
+** mov (z[0-9]+\.h), #11
+** urhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u16_m_tied1, svuint16_t,
+ z0 = svrhadd_n_u16_m (p0, z0, 11),
+ z0 = svrhadd_m (p0, z0, 11))
+
+/*
+** rhadd_11_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #11
+** movprfx z0, z1
+** urhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u16_m_untied, svuint16_t,
+ z0 = svrhadd_n_u16_m (p0, z1, 11),
+ z0 = svrhadd_m (p0, z1, 11))
+
+/*
+** rhadd_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u16_z_tied1, svuint16_t,
+ z0 = svrhadd_u16_z (p0, z0, z1),
+ z0 = svrhadd_z (p0, z0, z1))
+
+/*
+** rhadd_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u16_z_tied2, svuint16_t,
+ z0 = svrhadd_u16_z (p0, z1, z0),
+ z0 = svrhadd_z (p0, z1, z0))
+
+/*
+** rhadd_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** urhadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0\.h, p0/z, z2\.h
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u16_z_untied, svuint16_t,
+ z0 = svrhadd_u16_z (p0, z1, z2),
+ z0 = svrhadd_z (p0, z1, z2))
+
+/*
+** rhadd_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** urhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u16_z_tied1, svuint16_t, uint16_t,
+ z0 = svrhadd_n_u16_z (p0, z0, x0),
+ z0 = svrhadd_z (p0, z0, x0))
+
+/*
+** rhadd_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** urhadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u16_z_untied, svuint16_t, uint16_t,
+ z0 = svrhadd_n_u16_z (p0, z1, x0),
+ z0 = svrhadd_z (p0, z1, x0))
+
+/*
+** rhadd_11_u16_z_tied1:
+** mov (z[0-9]+\.h), #11
+** movprfx z0\.h, p0/z, z0\.h
+** urhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u16_z_tied1, svuint16_t,
+ z0 = svrhadd_n_u16_z (p0, z0, 11),
+ z0 = svrhadd_z (p0, z0, 11))
+
+/*
+** rhadd_11_u16_z_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** urhadd z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u16_z_untied, svuint16_t,
+ z0 = svrhadd_n_u16_z (p0, z1, 11),
+ z0 = svrhadd_z (p0, z1, 11))
+
+/*
+** rhadd_u16_x_tied1:
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u16_x_tied1, svuint16_t,
+ z0 = svrhadd_u16_x (p0, z0, z1),
+ z0 = svrhadd_x (p0, z0, z1))
+
+/*
+** rhadd_u16_x_tied2:
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u16_x_tied2, svuint16_t,
+ z0 = svrhadd_u16_x (p0, z1, z0),
+ z0 = svrhadd_x (p0, z1, z0))
+
+/*
+** rhadd_u16_x_untied:
+** (
+** movprfx z0, z1
+** urhadd z0\.h, p0/m, z0\.h, z2\.h
+** |
+** movprfx z0, z2
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u16_x_untied, svuint16_t,
+ z0 = svrhadd_u16_x (p0, z1, z2),
+ z0 = svrhadd_x (p0, z1, z2))
+
+/*
+** rhadd_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** urhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u16_x_tied1, svuint16_t, uint16_t,
+ z0 = svrhadd_n_u16_x (p0, z0, x0),
+ z0 = svrhadd_x (p0, z0, x0))
+
+/*
+** rhadd_w0_u16_x_untied:
+** mov z0\.h, w0
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u16_x_untied, svuint16_t, uint16_t,
+ z0 = svrhadd_n_u16_x (p0, z1, x0),
+ z0 = svrhadd_x (p0, z1, x0))
+
+/*
+** rhadd_11_u16_x_tied1:
+** mov (z[0-9]+\.h), #11
+** urhadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u16_x_tied1, svuint16_t,
+ z0 = svrhadd_n_u16_x (p0, z0, 11),
+ z0 = svrhadd_x (p0, z0, 11))
+
+/*
+** rhadd_11_u16_x_untied:
+** mov z0\.h, #11
+** urhadd z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u16_x_untied, svuint16_t,
+ z0 = svrhadd_n_u16_x (p0, z1, 11),
+ z0 = svrhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rhadd_u32_m_tied1:
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u32_m_tied1, svuint32_t,
+ z0 = svrhadd_u32_m (p0, z0, z1),
+ z0 = svrhadd_m (p0, z0, z1))
+
+/*
+** rhadd_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** urhadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u32_m_tied2, svuint32_t,
+ z0 = svrhadd_u32_m (p0, z1, z0),
+ z0 = svrhadd_m (p0, z1, z0))
+
+/*
+** rhadd_u32_m_untied:
+** movprfx z0, z1
+** urhadd z0\.s, p0/m, z0\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u32_m_untied, svuint32_t,
+ z0 = svrhadd_u32_m (p0, z1, z2),
+ z0 = svrhadd_m (p0, z1, z2))
+
+/*
+** rhadd_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** urhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u32_m_tied1, svuint32_t, uint32_t,
+ z0 = svrhadd_n_u32_m (p0, z0, x0),
+ z0 = svrhadd_m (p0, z0, x0))
+
+/*
+** rhadd_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** urhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u32_m_untied, svuint32_t, uint32_t,
+ z0 = svrhadd_n_u32_m (p0, z1, x0),
+ z0 = svrhadd_m (p0, z1, x0))
+
+/*
+** rhadd_11_u32_m_tied1:
+** mov (z[0-9]+\.s), #11
+** urhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u32_m_tied1, svuint32_t,
+ z0 = svrhadd_n_u32_m (p0, z0, 11),
+ z0 = svrhadd_m (p0, z0, 11))
+
+/*
+** rhadd_11_u32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** urhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u32_m_untied, svuint32_t,
+ z0 = svrhadd_n_u32_m (p0, z1, 11),
+ z0 = svrhadd_m (p0, z1, 11))
+
+/*
+** rhadd_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u32_z_tied1, svuint32_t,
+ z0 = svrhadd_u32_z (p0, z0, z1),
+ z0 = svrhadd_z (p0, z0, z1))
+
+/*
+** rhadd_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u32_z_tied2, svuint32_t,
+ z0 = svrhadd_u32_z (p0, z1, z0),
+ z0 = svrhadd_z (p0, z1, z0))
+
+/*
+** rhadd_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** urhadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0\.s, p0/z, z2\.s
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u32_z_untied, svuint32_t,
+ z0 = svrhadd_u32_z (p0, z1, z2),
+ z0 = svrhadd_z (p0, z1, z2))
+
+/*
+** rhadd_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** urhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u32_z_tied1, svuint32_t, uint32_t,
+ z0 = svrhadd_n_u32_z (p0, z0, x0),
+ z0 = svrhadd_z (p0, z0, x0))
+
+/*
+** rhadd_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** urhadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u32_z_untied, svuint32_t, uint32_t,
+ z0 = svrhadd_n_u32_z (p0, z1, x0),
+ z0 = svrhadd_z (p0, z1, x0))
+
+/*
+** rhadd_11_u32_z_tied1:
+** mov (z[0-9]+\.s), #11
+** movprfx z0\.s, p0/z, z0\.s
+** urhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u32_z_tied1, svuint32_t,
+ z0 = svrhadd_n_u32_z (p0, z0, 11),
+ z0 = svrhadd_z (p0, z0, 11))
+
+/*
+** rhadd_11_u32_z_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** urhadd z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u32_z_untied, svuint32_t,
+ z0 = svrhadd_n_u32_z (p0, z1, 11),
+ z0 = svrhadd_z (p0, z1, 11))
+
+/*
+** rhadd_u32_x_tied1:
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u32_x_tied1, svuint32_t,
+ z0 = svrhadd_u32_x (p0, z0, z1),
+ z0 = svrhadd_x (p0, z0, z1))
+
+/*
+** rhadd_u32_x_tied2:
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u32_x_tied2, svuint32_t,
+ z0 = svrhadd_u32_x (p0, z1, z0),
+ z0 = svrhadd_x (p0, z1, z0))
+
+/*
+** rhadd_u32_x_untied:
+** (
+** movprfx z0, z1
+** urhadd z0\.s, p0/m, z0\.s, z2\.s
+** |
+** movprfx z0, z2
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u32_x_untied, svuint32_t,
+ z0 = svrhadd_u32_x (p0, z1, z2),
+ z0 = svrhadd_x (p0, z1, z2))
+
+/*
+** rhadd_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** urhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u32_x_tied1, svuint32_t, uint32_t,
+ z0 = svrhadd_n_u32_x (p0, z0, x0),
+ z0 = svrhadd_x (p0, z0, x0))
+
+/*
+** rhadd_w0_u32_x_untied:
+** mov z0\.s, w0
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u32_x_untied, svuint32_t, uint32_t,
+ z0 = svrhadd_n_u32_x (p0, z1, x0),
+ z0 = svrhadd_x (p0, z1, x0))
+
+/*
+** rhadd_11_u32_x_tied1:
+** mov (z[0-9]+\.s), #11
+** urhadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u32_x_tied1, svuint32_t,
+ z0 = svrhadd_n_u32_x (p0, z0, 11),
+ z0 = svrhadd_x (p0, z0, 11))
+
+/*
+** rhadd_11_u32_x_untied:
+** mov z0\.s, #11
+** urhadd z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u32_x_untied, svuint32_t,
+ z0 = svrhadd_n_u32_x (p0, z1, 11),
+ z0 = svrhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rhadd_u64_m_tied1:
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u64_m_tied1, svuint64_t,
+ z0 = svrhadd_u64_m (p0, z0, z1),
+ z0 = svrhadd_m (p0, z0, z1))
+
+/*
+** rhadd_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** urhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u64_m_tied2, svuint64_t,
+ z0 = svrhadd_u64_m (p0, z1, z0),
+ z0 = svrhadd_m (p0, z1, z0))
+
+/*
+** rhadd_u64_m_untied:
+** movprfx z0, z1
+** urhadd z0\.d, p0/m, z0\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u64_m_untied, svuint64_t,
+ z0 = svrhadd_u64_m (p0, z1, z2),
+ z0 = svrhadd_m (p0, z1, z2))
+
+/*
+** rhadd_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** urhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_u64_m_tied1, svuint64_t, uint64_t,
+ z0 = svrhadd_n_u64_m (p0, z0, x0),
+ z0 = svrhadd_m (p0, z0, x0))
+
+/*
+** rhadd_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** urhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_u64_m_untied, svuint64_t, uint64_t,
+ z0 = svrhadd_n_u64_m (p0, z1, x0),
+ z0 = svrhadd_m (p0, z1, x0))
+
+/*
+** rhadd_11_u64_m_tied1:
+** mov (z[0-9]+\.d), #11
+** urhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u64_m_tied1, svuint64_t,
+ z0 = svrhadd_n_u64_m (p0, z0, 11),
+ z0 = svrhadd_m (p0, z0, 11))
+
+/*
+** rhadd_11_u64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** urhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u64_m_untied, svuint64_t,
+ z0 = svrhadd_n_u64_m (p0, z1, 11),
+ z0 = svrhadd_m (p0, z1, 11))
+
+/*
+** rhadd_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u64_z_tied1, svuint64_t,
+ z0 = svrhadd_u64_z (p0, z0, z1),
+ z0 = svrhadd_z (p0, z0, z1))
+
+/*
+** rhadd_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u64_z_tied2, svuint64_t,
+ z0 = svrhadd_u64_z (p0, z1, z0),
+ z0 = svrhadd_z (p0, z1, z0))
+
+/*
+** rhadd_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** urhadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0\.d, p0/z, z2\.d
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u64_z_untied, svuint64_t,
+ z0 = svrhadd_u64_z (p0, z1, z2),
+ z0 = svrhadd_z (p0, z1, z2))
+
+/*
+** rhadd_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** urhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_u64_z_tied1, svuint64_t, uint64_t,
+ z0 = svrhadd_n_u64_z (p0, z0, x0),
+ z0 = svrhadd_z (p0, z0, x0))
+
+/*
+** rhadd_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** urhadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_u64_z_untied, svuint64_t, uint64_t,
+ z0 = svrhadd_n_u64_z (p0, z1, x0),
+ z0 = svrhadd_z (p0, z1, x0))
+
+/*
+** rhadd_11_u64_z_tied1:
+** mov (z[0-9]+\.d), #11
+** movprfx z0\.d, p0/z, z0\.d
+** urhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u64_z_tied1, svuint64_t,
+ z0 = svrhadd_n_u64_z (p0, z0, 11),
+ z0 = svrhadd_z (p0, z0, 11))
+
+/*
+** rhadd_11_u64_z_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** urhadd z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u64_z_untied, svuint64_t,
+ z0 = svrhadd_n_u64_z (p0, z1, 11),
+ z0 = svrhadd_z (p0, z1, 11))
+
+/*
+** rhadd_u64_x_tied1:
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u64_x_tied1, svuint64_t,
+ z0 = svrhadd_u64_x (p0, z0, z1),
+ z0 = svrhadd_x (p0, z0, z1))
+
+/*
+** rhadd_u64_x_tied2:
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u64_x_tied2, svuint64_t,
+ z0 = svrhadd_u64_x (p0, z1, z0),
+ z0 = svrhadd_x (p0, z1, z0))
+
+/*
+** rhadd_u64_x_untied:
+** (
+** movprfx z0, z1
+** urhadd z0\.d, p0/m, z0\.d, z2\.d
+** |
+** movprfx z0, z2
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u64_x_untied, svuint64_t,
+ z0 = svrhadd_u64_x (p0, z1, z2),
+ z0 = svrhadd_x (p0, z1, z2))
+
+/*
+** rhadd_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** urhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_u64_x_tied1, svuint64_t, uint64_t,
+ z0 = svrhadd_n_u64_x (p0, z0, x0),
+ z0 = svrhadd_x (p0, z0, x0))
+
+/*
+** rhadd_x0_u64_x_untied:
+** mov z0\.d, x0
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_x0_u64_x_untied, svuint64_t, uint64_t,
+ z0 = svrhadd_n_u64_x (p0, z1, x0),
+ z0 = svrhadd_x (p0, z1, x0))
+
+/*
+** rhadd_11_u64_x_tied1:
+** mov (z[0-9]+\.d), #11
+** urhadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u64_x_tied1, svuint64_t,
+ z0 = svrhadd_n_u64_x (p0, z0, 11),
+ z0 = svrhadd_x (p0, z0, 11))
+
+/*
+** rhadd_11_u64_x_untied:
+** mov z0\.d, #11
+** urhadd z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u64_x_untied, svuint64_t,
+ z0 = svrhadd_n_u64_x (p0, z1, 11),
+ z0 = svrhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rhadd_u8_m_tied1:
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u8_m_tied1, svuint8_t,
+ z0 = svrhadd_u8_m (p0, z0, z1),
+ z0 = svrhadd_m (p0, z0, z1))
+
+/*
+** rhadd_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** urhadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u8_m_tied2, svuint8_t,
+ z0 = svrhadd_u8_m (p0, z1, z0),
+ z0 = svrhadd_m (p0, z1, z0))
+
+/*
+** rhadd_u8_m_untied:
+** movprfx z0, z1
+** urhadd z0\.b, p0/m, z0\.b, z2\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u8_m_untied, svuint8_t,
+ z0 = svrhadd_u8_m (p0, z1, z2),
+ z0 = svrhadd_m (p0, z1, z2))
+
+/*
+** rhadd_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** urhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u8_m_tied1, svuint8_t, uint8_t,
+ z0 = svrhadd_n_u8_m (p0, z0, x0),
+ z0 = svrhadd_m (p0, z0, x0))
+
+/*
+** rhadd_w0_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** urhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u8_m_untied, svuint8_t, uint8_t,
+ z0 = svrhadd_n_u8_m (p0, z1, x0),
+ z0 = svrhadd_m (p0, z1, x0))
+
+/*
+** rhadd_11_u8_m_tied1:
+** mov (z[0-9]+\.b), #11
+** urhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u8_m_tied1, svuint8_t,
+ z0 = svrhadd_n_u8_m (p0, z0, 11),
+ z0 = svrhadd_m (p0, z0, 11))
+
+/*
+** rhadd_11_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #11
+** movprfx z0, z1
+** urhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u8_m_untied, svuint8_t,
+ z0 = svrhadd_n_u8_m (p0, z1, 11),
+ z0 = svrhadd_m (p0, z1, 11))
+
+/*
+** rhadd_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u8_z_tied1, svuint8_t,
+ z0 = svrhadd_u8_z (p0, z0, z1),
+ z0 = svrhadd_z (p0, z0, z1))
+
+/*
+** rhadd_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u8_z_tied2, svuint8_t,
+ z0 = svrhadd_u8_z (p0, z1, z0),
+ z0 = svrhadd_z (p0, z1, z0))
+
+/*
+** rhadd_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** urhadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0\.b, p0/z, z2\.b
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u8_z_untied, svuint8_t,
+ z0 = svrhadd_u8_z (p0, z1, z2),
+ z0 = svrhadd_z (p0, z1, z2))
+
+/*
+** rhadd_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** urhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u8_z_tied1, svuint8_t, uint8_t,
+ z0 = svrhadd_n_u8_z (p0, z0, x0),
+ z0 = svrhadd_z (p0, z0, x0))
+
+/*
+** rhadd_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** urhadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u8_z_untied, svuint8_t, uint8_t,
+ z0 = svrhadd_n_u8_z (p0, z1, x0),
+ z0 = svrhadd_z (p0, z1, x0))
+
+/*
+** rhadd_11_u8_z_tied1:
+** mov (z[0-9]+\.b), #11
+** movprfx z0\.b, p0/z, z0\.b
+** urhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u8_z_tied1, svuint8_t,
+ z0 = svrhadd_n_u8_z (p0, z0, 11),
+ z0 = svrhadd_z (p0, z0, 11))
+
+/*
+** rhadd_11_u8_z_untied:
+** mov (z[0-9]+\.b), #11
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** urhadd z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u8_z_untied, svuint8_t,
+ z0 = svrhadd_n_u8_z (p0, z1, 11),
+ z0 = svrhadd_z (p0, z1, 11))
+
+/*
+** rhadd_u8_x_tied1:
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u8_x_tied1, svuint8_t,
+ z0 = svrhadd_u8_x (p0, z0, z1),
+ z0 = svrhadd_x (p0, z0, z1))
+
+/*
+** rhadd_u8_x_tied2:
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u8_x_tied2, svuint8_t,
+ z0 = svrhadd_u8_x (p0, z1, z0),
+ z0 = svrhadd_x (p0, z1, z0))
+
+/*
+** rhadd_u8_x_untied:
+** (
+** movprfx z0, z1
+** urhadd z0\.b, p0/m, z0\.b, z2\.b
+** |
+** movprfx z0, z2
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_u8_x_untied, svuint8_t,
+ z0 = svrhadd_u8_x (p0, z1, z2),
+ z0 = svrhadd_x (p0, z1, z2))
+
+/*
+** rhadd_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** urhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u8_x_tied1, svuint8_t, uint8_t,
+ z0 = svrhadd_n_u8_x (p0, z0, x0),
+ z0 = svrhadd_x (p0, z0, x0))
+
+/*
+** rhadd_w0_u8_x_untied:
+** mov z0\.b, w0
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (rhadd_w0_u8_x_untied, svuint8_t, uint8_t,
+ z0 = svrhadd_n_u8_x (p0, z1, x0),
+ z0 = svrhadd_x (p0, z1, x0))
+
+/*
+** rhadd_11_u8_x_tied1:
+** mov (z[0-9]+\.b), #11
+** urhadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u8_x_tied1, svuint8_t,
+ z0 = svrhadd_n_u8_x (p0, z0, 11),
+ z0 = svrhadd_x (p0, z0, 11))
+
+/*
+** rhadd_11_u8_x_untied:
+** mov z0\.b, #11
+** urhadd z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_Z (rhadd_11_u8_x_untied, svuint8_t,
+ z0 = svrhadd_n_u8_x (p0, z1, 11),
+ z0 = svrhadd_x (p0, z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshl_s16_m_tied1:
+** srshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (rshl_s16_m_tied1, svint16_t, svint16_t,
+ z0 = svrshl_s16_m (p0, z0, z4),
+ z0 = svrshl_m (p0, z0, z4))
+
+/*
+** rshl_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** srshl z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s16_m_tied2, svint16_t, svint16_t,
+ z0_res = svrshl_s16_m (p0, z4, z0),
+ z0_res = svrshl_m (p0, z4, z0))
+
+/*
+** rshl_s16_m_untied:
+** movprfx z0, z1
+** srshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (rshl_s16_m_untied, svint16_t, svint16_t,
+ z0 = svrshl_s16_m (p0, z1, z4),
+ z0 = svrshl_m (p0, z1, z4))
+
+/*
+** rshl_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** srshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s16_m_tied1, svint16_t, int16_t,
+ z0 = svrshl_n_s16_m (p0, z0, x0),
+ z0 = svrshl_m (p0, z0, x0))
+
+/*
+** rshl_w0_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** srshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s16_m_untied, svint16_t, int16_t,
+ z0 = svrshl_n_s16_m (p0, z1, x0),
+ z0 = svrshl_m (p0, z1, x0))
+
+/*
+** rshl_m16_s16_m:
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m16_s16_m, svint16_t,
+ z0 = svrshl_n_s16_m (p0, z0, -16),
+ z0 = svrshl_m (p0, z0, -16))
+
+/*
+** rshl_m2_s16_m:
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s16_m, svint16_t,
+ z0 = svrshl_n_s16_m (p0, z0, -2),
+ z0 = svrshl_m (p0, z0, -2))
+
+/*
+** rshl_m1_s16_m_tied1:
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s16_m_tied1, svint16_t,
+ z0 = svrshl_n_s16_m (p0, z0, -1),
+ z0 = svrshl_m (p0, z0, -1))
+
+/*
+** rshl_m1_s16_m_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s16_m_untied, svint16_t,
+ z0 = svrshl_n_s16_m (p0, z1, -1),
+ z0 = svrshl_m (p0, z1, -1))
+
+/*
+** rshl_1_s16_m_tied1:
+** lsl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s16_m_tied1, svint16_t,
+ z0 = svrshl_n_s16_m (p0, z0, 1),
+ z0 = svrshl_m (p0, z0, 1))
+
+/*
+** rshl_1_s16_m_untied:
+** movprfx z0, z1
+** lsl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s16_m_untied, svint16_t,
+ z0 = svrshl_n_s16_m (p0, z1, 1),
+ z0 = svrshl_m (p0, z1, 1))
+
+/*
+** rshl_2_s16_m:
+** lsl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s16_m, svint16_t,
+ z0 = svrshl_n_s16_m (p0, z0, 2),
+ z0 = svrshl_m (p0, z0, 2))
+
+/*
+** rshl_15_s16_m:
+** lsl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (rshl_15_s16_m, svint16_t,
+ z0 = svrshl_n_s16_m (p0, z0, 15),
+ z0 = svrshl_m (p0, z0, 15))
+
+/*
+** rshl_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** srshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (rshl_s16_z_tied1, svint16_t, svint16_t,
+ z0 = svrshl_s16_z (p0, z0, z4),
+ z0 = svrshl_z (p0, z0, z4))
+
+/*
+** rshl_s16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** srshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s16_z_tied2, svint16_t, svint16_t,
+ z0_res = svrshl_s16_z (p0, z4, z0),
+ z0_res = svrshl_z (p0, z4, z0))
+
+/*
+** rshl_s16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** srshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0\.h, p0/z, z4\.h
+** srshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_s16_z_untied, svint16_t, svint16_t,
+ z0 = svrshl_s16_z (p0, z1, z4),
+ z0 = svrshl_z (p0, z1, z4))
+
+/*
+** rshl_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** srshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s16_z_tied1, svint16_t, int16_t,
+ z0 = svrshl_n_s16_z (p0, z0, x0),
+ z0 = svrshl_z (p0, z0, x0))
+
+/*
+** rshl_w0_s16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** srshl z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** srshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s16_z_untied, svint16_t, int16_t,
+ z0 = svrshl_n_s16_z (p0, z1, x0),
+ z0 = svrshl_z (p0, z1, x0))
+
+/*
+** rshl_m16_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m16_s16_z, svint16_t,
+ z0 = svrshl_n_s16_z (p0, z0, -16),
+ z0 = svrshl_z (p0, z0, -16))
+
+/*
+** rshl_m2_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s16_z, svint16_t,
+ z0 = svrshl_n_s16_z (p0, z0, -2),
+ z0 = svrshl_z (p0, z0, -2))
+
+/*
+** rshl_m1_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s16_z_tied1, svint16_t,
+ z0 = svrshl_n_s16_z (p0, z0, -1),
+ z0 = svrshl_z (p0, z0, -1))
+
+/*
+** rshl_m1_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s16_z_untied, svint16_t,
+ z0 = svrshl_n_s16_z (p0, z1, -1),
+ z0 = svrshl_z (p0, z1, -1))
+
+/*
+** rshl_1_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** lsl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s16_z_tied1, svint16_t,
+ z0 = svrshl_n_s16_z (p0, z0, 1),
+ z0 = svrshl_z (p0, z0, 1))
+
+/*
+** rshl_1_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** lsl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s16_z_untied, svint16_t,
+ z0 = svrshl_n_s16_z (p0, z1, 1),
+ z0 = svrshl_z (p0, z1, 1))
+
+/*
+** rshl_2_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** lsl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s16_z, svint16_t,
+ z0 = svrshl_n_s16_z (p0, z0, 2),
+ z0 = svrshl_z (p0, z0, 2))
+
+/*
+** rshl_15_s16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** lsl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (rshl_15_s16_z, svint16_t,
+ z0 = svrshl_n_s16_z (p0, z0, 15),
+ z0 = svrshl_z (p0, z0, 15))
+
+/*
+** rshl_s16_x_tied1:
+** srshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (rshl_s16_x_tied1, svint16_t, svint16_t,
+ z0 = svrshl_s16_x (p0, z0, z4),
+ z0 = svrshl_x (p0, z0, z4))
+
+/*
+** rshl_s16_x_tied2:
+** srshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s16_x_tied2, svint16_t, svint16_t,
+ z0_res = svrshl_s16_x (p0, z4, z0),
+ z0_res = svrshl_x (p0, z4, z0))
+
+/*
+** rshl_s16_x_untied:
+** (
+** movprfx z0, z1
+** srshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0, z4
+** srshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_s16_x_untied, svint16_t, svint16_t,
+ z0 = svrshl_s16_x (p0, z1, z4),
+ z0 = svrshl_x (p0, z1, z4))
+
+/*
+** rshl_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** srshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s16_x_tied1, svint16_t, int16_t,
+ z0 = svrshl_n_s16_x (p0, z0, x0),
+ z0 = svrshl_x (p0, z0, x0))
+
+/*
+** rshl_w0_s16_x_untied:
+** mov z0\.h, w0
+** srshlr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s16_x_untied, svint16_t, int16_t,
+ z0 = svrshl_n_s16_x (p0, z1, x0),
+ z0 = svrshl_x (p0, z1, x0))
+
+/*
+** rshl_m16_s16_x:
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m16_s16_x, svint16_t,
+ z0 = svrshl_n_s16_x (p0, z0, -16),
+ z0 = svrshl_x (p0, z0, -16))
+
+/*
+** rshl_m2_s16_x:
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s16_x, svint16_t,
+ z0 = svrshl_n_s16_x (p0, z0, -2),
+ z0 = svrshl_x (p0, z0, -2))
+
+/*
+** rshl_m1_s16_x_tied1:
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s16_x_tied1, svint16_t,
+ z0 = svrshl_n_s16_x (p0, z0, -1),
+ z0 = svrshl_x (p0, z0, -1))
+
+/*
+** rshl_m1_s16_x_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s16_x_untied, svint16_t,
+ z0 = svrshl_n_s16_x (p0, z1, -1),
+ z0 = svrshl_x (p0, z1, -1))
+
+/*
+** rshl_1_s16_x_tied1:
+** lsl z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s16_x_tied1, svint16_t,
+ z0 = svrshl_n_s16_x (p0, z0, 1),
+ z0 = svrshl_x (p0, z0, 1))
+
+/*
+** rshl_1_s16_x_untied:
+** lsl z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s16_x_untied, svint16_t,
+ z0 = svrshl_n_s16_x (p0, z1, 1),
+ z0 = svrshl_x (p0, z1, 1))
+
+/*
+** rshl_2_s16_x:
+** lsl z0\.h, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s16_x, svint16_t,
+ z0 = svrshl_n_s16_x (p0, z0, 2),
+ z0 = svrshl_x (p0, z0, 2))
+
+/*
+** rshl_15_s16_x:
+** lsl z0\.h, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (rshl_15_s16_x, svint16_t,
+ z0 = svrshl_n_s16_x (p0, z0, 15),
+ z0 = svrshl_x (p0, z0, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshl_s32_m_tied1:
+** srshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (rshl_s32_m_tied1, svint32_t, svint32_t,
+ z0 = svrshl_s32_m (p0, z0, z4),
+ z0 = svrshl_m (p0, z0, z4))
+
+/*
+** rshl_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** srshl z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s32_m_tied2, svint32_t, svint32_t,
+ z0_res = svrshl_s32_m (p0, z4, z0),
+ z0_res = svrshl_m (p0, z4, z0))
+
+/*
+** rshl_s32_m_untied:
+** movprfx z0, z1
+** srshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (rshl_s32_m_untied, svint32_t, svint32_t,
+ z0 = svrshl_s32_m (p0, z1, z4),
+ z0 = svrshl_m (p0, z1, z4))
+
+/*
+** rshl_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** srshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s32_m_tied1, svint32_t, int32_t,
+ z0 = svrshl_n_s32_m (p0, z0, x0),
+ z0 = svrshl_m (p0, z0, x0))
+
+/*
+** rshl_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** srshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s32_m_untied, svint32_t, int32_t,
+ z0 = svrshl_n_s32_m (p0, z1, x0),
+ z0 = svrshl_m (p0, z1, x0))
+
+/*
+** rshl_m32_s32_m:
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m32_s32_m, svint32_t,
+ z0 = svrshl_n_s32_m (p0, z0, -32),
+ z0 = svrshl_m (p0, z0, -32))
+
+/*
+** rshl_m2_s32_m:
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s32_m, svint32_t,
+ z0 = svrshl_n_s32_m (p0, z0, -2),
+ z0 = svrshl_m (p0, z0, -2))
+
+/*
+** rshl_m1_s32_m_tied1:
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s32_m_tied1, svint32_t,
+ z0 = svrshl_n_s32_m (p0, z0, -1),
+ z0 = svrshl_m (p0, z0, -1))
+
+/*
+** rshl_m1_s32_m_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s32_m_untied, svint32_t,
+ z0 = svrshl_n_s32_m (p0, z1, -1),
+ z0 = svrshl_m (p0, z1, -1))
+
+/*
+** rshl_1_s32_m_tied1:
+** lsl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s32_m_tied1, svint32_t,
+ z0 = svrshl_n_s32_m (p0, z0, 1),
+ z0 = svrshl_m (p0, z0, 1))
+
+/*
+** rshl_1_s32_m_untied:
+** movprfx z0, z1
+** lsl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s32_m_untied, svint32_t,
+ z0 = svrshl_n_s32_m (p0, z1, 1),
+ z0 = svrshl_m (p0, z1, 1))
+
+/*
+** rshl_2_s32_m:
+** lsl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s32_m, svint32_t,
+ z0 = svrshl_n_s32_m (p0, z0, 2),
+ z0 = svrshl_m (p0, z0, 2))
+
+/*
+** rshl_31_s32_m:
+** lsl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (rshl_31_s32_m, svint32_t,
+ z0 = svrshl_n_s32_m (p0, z0, 31),
+ z0 = svrshl_m (p0, z0, 31))
+
+/*
+** rshl_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** srshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (rshl_s32_z_tied1, svint32_t, svint32_t,
+ z0 = svrshl_s32_z (p0, z0, z4),
+ z0 = svrshl_z (p0, z0, z4))
+
+/*
+** rshl_s32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** srshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s32_z_tied2, svint32_t, svint32_t,
+ z0_res = svrshl_s32_z (p0, z4, z0),
+ z0_res = svrshl_z (p0, z4, z0))
+
+/*
+** rshl_s32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** srshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0\.s, p0/z, z4\.s
+** srshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_s32_z_untied, svint32_t, svint32_t,
+ z0 = svrshl_s32_z (p0, z1, z4),
+ z0 = svrshl_z (p0, z1, z4))
+
+/*
+** rshl_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** srshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s32_z_tied1, svint32_t, int32_t,
+ z0 = svrshl_n_s32_z (p0, z0, x0),
+ z0 = svrshl_z (p0, z0, x0))
+
+/*
+** rshl_w0_s32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** srshl z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** srshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s32_z_untied, svint32_t, int32_t,
+ z0 = svrshl_n_s32_z (p0, z1, x0),
+ z0 = svrshl_z (p0, z1, x0))
+
+/*
+** rshl_m32_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m32_s32_z, svint32_t,
+ z0 = svrshl_n_s32_z (p0, z0, -32),
+ z0 = svrshl_z (p0, z0, -32))
+
+/*
+** rshl_m2_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s32_z, svint32_t,
+ z0 = svrshl_n_s32_z (p0, z0, -2),
+ z0 = svrshl_z (p0, z0, -2))
+
+/*
+** rshl_m1_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s32_z_tied1, svint32_t,
+ z0 = svrshl_n_s32_z (p0, z0, -1),
+ z0 = svrshl_z (p0, z0, -1))
+
+/*
+** rshl_m1_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s32_z_untied, svint32_t,
+ z0 = svrshl_n_s32_z (p0, z1, -1),
+ z0 = svrshl_z (p0, z1, -1))
+
+/*
+** rshl_1_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** lsl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s32_z_tied1, svint32_t,
+ z0 = svrshl_n_s32_z (p0, z0, 1),
+ z0 = svrshl_z (p0, z0, 1))
+
+/*
+** rshl_1_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** lsl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s32_z_untied, svint32_t,
+ z0 = svrshl_n_s32_z (p0, z1, 1),
+ z0 = svrshl_z (p0, z1, 1))
+
+/*
+** rshl_2_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** lsl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s32_z, svint32_t,
+ z0 = svrshl_n_s32_z (p0, z0, 2),
+ z0 = svrshl_z (p0, z0, 2))
+
+/*
+** rshl_31_s32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** lsl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (rshl_31_s32_z, svint32_t,
+ z0 = svrshl_n_s32_z (p0, z0, 31),
+ z0 = svrshl_z (p0, z0, 31))
+
+/*
+** rshl_s32_x_tied1:
+** srshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (rshl_s32_x_tied1, svint32_t, svint32_t,
+ z0 = svrshl_s32_x (p0, z0, z4),
+ z0 = svrshl_x (p0, z0, z4))
+
+/*
+** rshl_s32_x_tied2:
+** srshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s32_x_tied2, svint32_t, svint32_t,
+ z0_res = svrshl_s32_x (p0, z4, z0),
+ z0_res = svrshl_x (p0, z4, z0))
+
+/*
+** rshl_s32_x_untied:
+** (
+** movprfx z0, z1
+** srshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0, z4
+** srshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_s32_x_untied, svint32_t, svint32_t,
+ z0 = svrshl_s32_x (p0, z1, z4),
+ z0 = svrshl_x (p0, z1, z4))
+
+/*
+** rshl_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** srshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s32_x_tied1, svint32_t, int32_t,
+ z0 = svrshl_n_s32_x (p0, z0, x0),
+ z0 = svrshl_x (p0, z0, x0))
+
+/*
+** rshl_w0_s32_x_untied:
+** mov z0\.s, w0
+** srshlr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s32_x_untied, svint32_t, int32_t,
+ z0 = svrshl_n_s32_x (p0, z1, x0),
+ z0 = svrshl_x (p0, z1, x0))
+
+/*
+** rshl_m32_s32_x:
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m32_s32_x, svint32_t,
+ z0 = svrshl_n_s32_x (p0, z0, -32),
+ z0 = svrshl_x (p0, z0, -32))
+
+/*
+** rshl_m2_s32_x:
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s32_x, svint32_t,
+ z0 = svrshl_n_s32_x (p0, z0, -2),
+ z0 = svrshl_x (p0, z0, -2))
+
+/*
+** rshl_m1_s32_x_tied1:
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s32_x_tied1, svint32_t,
+ z0 = svrshl_n_s32_x (p0, z0, -1),
+ z0 = svrshl_x (p0, z0, -1))
+
+/*
+** rshl_m1_s32_x_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s32_x_untied, svint32_t,
+ z0 = svrshl_n_s32_x (p0, z1, -1),
+ z0 = svrshl_x (p0, z1, -1))
+
+/*
+** rshl_1_s32_x_tied1:
+** lsl z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s32_x_tied1, svint32_t,
+ z0 = svrshl_n_s32_x (p0, z0, 1),
+ z0 = svrshl_x (p0, z0, 1))
+
+/*
+** rshl_1_s32_x_untied:
+** lsl z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s32_x_untied, svint32_t,
+ z0 = svrshl_n_s32_x (p0, z1, 1),
+ z0 = svrshl_x (p0, z1, 1))
+
+/*
+** rshl_2_s32_x:
+** lsl z0\.s, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s32_x, svint32_t,
+ z0 = svrshl_n_s32_x (p0, z0, 2),
+ z0 = svrshl_x (p0, z0, 2))
+
+/*
+** rshl_31_s32_x:
+** lsl z0\.s, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (rshl_31_s32_x, svint32_t,
+ z0 = svrshl_n_s32_x (p0, z0, 31),
+ z0 = svrshl_x (p0, z0, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshl_s64_m_tied1:
+** srshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (rshl_s64_m_tied1, svint64_t, svint64_t,
+ z0 = svrshl_s64_m (p0, z0, z4),
+ z0 = svrshl_m (p0, z0, z4))
+
+/*
+** rshl_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** srshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s64_m_tied2, svint64_t, svint64_t,
+ z0_res = svrshl_s64_m (p0, z4, z0),
+ z0_res = svrshl_m (p0, z4, z0))
+
+/*
+** rshl_s64_m_untied:
+** movprfx z0, z1
+** srshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (rshl_s64_m_untied, svint64_t, svint64_t,
+ z0 = svrshl_s64_m (p0, z1, z4),
+ z0 = svrshl_m (p0, z1, z4))
+
+/*
+** rshl_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** srshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_s64_m_tied1, svint64_t, int64_t,
+ z0 = svrshl_n_s64_m (p0, z0, x0),
+ z0 = svrshl_m (p0, z0, x0))
+
+/*
+** rshl_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** srshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_s64_m_untied, svint64_t, int64_t,
+ z0 = svrshl_n_s64_m (p0, z1, x0),
+ z0 = svrshl_m (p0, z1, x0))
+
+/*
+** rshl_m64_s64_m:
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m64_s64_m, svint64_t,
+ z0 = svrshl_n_s64_m (p0, z0, -64),
+ z0 = svrshl_m (p0, z0, -64))
+
+/*
+** rshl_m2_s64_m:
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s64_m, svint64_t,
+ z0 = svrshl_n_s64_m (p0, z0, -2),
+ z0 = svrshl_m (p0, z0, -2))
+
+/*
+** rshl_m1_s64_m_tied1:
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s64_m_tied1, svint64_t,
+ z0 = svrshl_n_s64_m (p0, z0, -1),
+ z0 = svrshl_m (p0, z0, -1))
+
+/*
+** rshl_m1_s64_m_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s64_m_untied, svint64_t,
+ z0 = svrshl_n_s64_m (p0, z1, -1),
+ z0 = svrshl_m (p0, z1, -1))
+
+/*
+** rshl_1_s64_m_tied1:
+** lsl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s64_m_tied1, svint64_t,
+ z0 = svrshl_n_s64_m (p0, z0, 1),
+ z0 = svrshl_m (p0, z0, 1))
+
+/*
+** rshl_1_s64_m_untied:
+** movprfx z0, z1
+** lsl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s64_m_untied, svint64_t,
+ z0 = svrshl_n_s64_m (p0, z1, 1),
+ z0 = svrshl_m (p0, z1, 1))
+
+/*
+** rshl_2_s64_m:
+** lsl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s64_m, svint64_t,
+ z0 = svrshl_n_s64_m (p0, z0, 2),
+ z0 = svrshl_m (p0, z0, 2))
+
+/*
+** rshl_63_s64_m:
+** lsl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (rshl_63_s64_m, svint64_t,
+ z0 = svrshl_n_s64_m (p0, z0, 63),
+ z0 = svrshl_m (p0, z0, 63))
+
+/*
+** rshl_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** srshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (rshl_s64_z_tied1, svint64_t, svint64_t,
+ z0 = svrshl_s64_z (p0, z0, z4),
+ z0 = svrshl_z (p0, z0, z4))
+
+/*
+** rshl_s64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** srshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s64_z_tied2, svint64_t, svint64_t,
+ z0_res = svrshl_s64_z (p0, z4, z0),
+ z0_res = svrshl_z (p0, z4, z0))
+
+/*
+** rshl_s64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** srshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0\.d, p0/z, z4\.d
+** srshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_s64_z_untied, svint64_t, svint64_t,
+ z0 = svrshl_s64_z (p0, z1, z4),
+ z0 = svrshl_z (p0, z1, z4))
+
+/*
+** rshl_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** srshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_s64_z_tied1, svint64_t, int64_t,
+ z0 = svrshl_n_s64_z (p0, z0, x0),
+ z0 = svrshl_z (p0, z0, x0))
+
+/*
+** rshl_x0_s64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** srshl z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** srshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_s64_z_untied, svint64_t, int64_t,
+ z0 = svrshl_n_s64_z (p0, z1, x0),
+ z0 = svrshl_z (p0, z1, x0))
+
+/*
+** rshl_m64_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m64_s64_z, svint64_t,
+ z0 = svrshl_n_s64_z (p0, z0, -64),
+ z0 = svrshl_z (p0, z0, -64))
+
+/*
+** rshl_m2_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s64_z, svint64_t,
+ z0 = svrshl_n_s64_z (p0, z0, -2),
+ z0 = svrshl_z (p0, z0, -2))
+
+/*
+** rshl_m1_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s64_z_tied1, svint64_t,
+ z0 = svrshl_n_s64_z (p0, z0, -1),
+ z0 = svrshl_z (p0, z0, -1))
+
+/*
+** rshl_m1_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s64_z_untied, svint64_t,
+ z0 = svrshl_n_s64_z (p0, z1, -1),
+ z0 = svrshl_z (p0, z1, -1))
+
+/*
+** rshl_1_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** lsl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s64_z_tied1, svint64_t,
+ z0 = svrshl_n_s64_z (p0, z0, 1),
+ z0 = svrshl_z (p0, z0, 1))
+
+/*
+** rshl_1_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** lsl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s64_z_untied, svint64_t,
+ z0 = svrshl_n_s64_z (p0, z1, 1),
+ z0 = svrshl_z (p0, z1, 1))
+
+/*
+** rshl_2_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** lsl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s64_z, svint64_t,
+ z0 = svrshl_n_s64_z (p0, z0, 2),
+ z0 = svrshl_z (p0, z0, 2))
+
+/*
+** rshl_63_s64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** lsl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (rshl_63_s64_z, svint64_t,
+ z0 = svrshl_n_s64_z (p0, z0, 63),
+ z0 = svrshl_z (p0, z0, 63))
+
+/*
+** rshl_s64_x_tied1:
+** srshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (rshl_s64_x_tied1, svint64_t, svint64_t,
+ z0 = svrshl_s64_x (p0, z0, z4),
+ z0 = svrshl_x (p0, z0, z4))
+
+/*
+** rshl_s64_x_tied2:
+** srshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s64_x_tied2, svint64_t, svint64_t,
+ z0_res = svrshl_s64_x (p0, z4, z0),
+ z0_res = svrshl_x (p0, z4, z0))
+
+/*
+** rshl_s64_x_untied:
+** (
+** movprfx z0, z1
+** srshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0, z4
+** srshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_s64_x_untied, svint64_t, svint64_t,
+ z0 = svrshl_s64_x (p0, z1, z4),
+ z0 = svrshl_x (p0, z1, z4))
+
+/*
+** rshl_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** srshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_s64_x_tied1, svint64_t, int64_t,
+ z0 = svrshl_n_s64_x (p0, z0, x0),
+ z0 = svrshl_x (p0, z0, x0))
+
+/*
+** rshl_x0_s64_x_untied:
+** mov z0\.d, x0
+** srshlr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_s64_x_untied, svint64_t, int64_t,
+ z0 = svrshl_n_s64_x (p0, z1, x0),
+ z0 = svrshl_x (p0, z1, x0))
+
+/*
+** rshl_m64_s64_x:
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m64_s64_x, svint64_t,
+ z0 = svrshl_n_s64_x (p0, z0, -64),
+ z0 = svrshl_x (p0, z0, -64))
+
+/*
+** rshl_m2_s64_x:
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s64_x, svint64_t,
+ z0 = svrshl_n_s64_x (p0, z0, -2),
+ z0 = svrshl_x (p0, z0, -2))
+
+/*
+** rshl_m1_s64_x_tied1:
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s64_x_tied1, svint64_t,
+ z0 = svrshl_n_s64_x (p0, z0, -1),
+ z0 = svrshl_x (p0, z0, -1))
+
+/*
+** rshl_m1_s64_x_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s64_x_untied, svint64_t,
+ z0 = svrshl_n_s64_x (p0, z1, -1),
+ z0 = svrshl_x (p0, z1, -1))
+
+/*
+** rshl_1_s64_x_tied1:
+** lsl z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s64_x_tied1, svint64_t,
+ z0 = svrshl_n_s64_x (p0, z0, 1),
+ z0 = svrshl_x (p0, z0, 1))
+
+/*
+** rshl_1_s64_x_untied:
+** lsl z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s64_x_untied, svint64_t,
+ z0 = svrshl_n_s64_x (p0, z1, 1),
+ z0 = svrshl_x (p0, z1, 1))
+
+/*
+** rshl_2_s64_x:
+** lsl z0\.d, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s64_x, svint64_t,
+ z0 = svrshl_n_s64_x (p0, z0, 2),
+ z0 = svrshl_x (p0, z0, 2))
+
+/*
+** rshl_63_s64_x:
+** lsl z0\.d, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (rshl_63_s64_x, svint64_t,
+ z0 = svrshl_n_s64_x (p0, z0, 63),
+ z0 = svrshl_x (p0, z0, 63))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshl_s8_m_tied1:
+** srshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (rshl_s8_m_tied1, svint8_t, svint8_t,
+ z0 = svrshl_s8_m (p0, z0, z4),
+ z0 = svrshl_m (p0, z0, z4))
+
+/*
+** rshl_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** srshl z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s8_m_tied2, svint8_t, svint8_t,
+ z0_res = svrshl_s8_m (p0, z4, z0),
+ z0_res = svrshl_m (p0, z4, z0))
+
+/*
+** rshl_s8_m_untied:
+** movprfx z0, z1
+** srshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (rshl_s8_m_untied, svint8_t, svint8_t,
+ z0 = svrshl_s8_m (p0, z1, z4),
+ z0 = svrshl_m (p0, z1, z4))
+
+/*
+** rshl_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** srshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s8_m_tied1, svint8_t, int8_t,
+ z0 = svrshl_n_s8_m (p0, z0, x0),
+ z0 = svrshl_m (p0, z0, x0))
+
+/*
+** rshl_w0_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** srshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s8_m_untied, svint8_t, int8_t,
+ z0 = svrshl_n_s8_m (p0, z1, x0),
+ z0 = svrshl_m (p0, z1, x0))
+
+/*
+** rshl_m8_s8_m:
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m8_s8_m, svint8_t,
+ z0 = svrshl_n_s8_m (p0, z0, -8),
+ z0 = svrshl_m (p0, z0, -8))
+
+/*
+** rshl_m2_s8_m:
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s8_m, svint8_t,
+ z0 = svrshl_n_s8_m (p0, z0, -2),
+ z0 = svrshl_m (p0, z0, -2))
+
+/*
+** rshl_m1_s8_m_tied1:
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s8_m_tied1, svint8_t,
+ z0 = svrshl_n_s8_m (p0, z0, -1),
+ z0 = svrshl_m (p0, z0, -1))
+
+/*
+** rshl_m1_s8_m_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s8_m_untied, svint8_t,
+ z0 = svrshl_n_s8_m (p0, z1, -1),
+ z0 = svrshl_m (p0, z1, -1))
+
+/*
+** rshl_1_s8_m_tied1:
+** lsl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s8_m_tied1, svint8_t,
+ z0 = svrshl_n_s8_m (p0, z0, 1),
+ z0 = svrshl_m (p0, z0, 1))
+
+/*
+** rshl_1_s8_m_untied:
+** movprfx z0, z1
+** lsl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s8_m_untied, svint8_t,
+ z0 = svrshl_n_s8_m (p0, z1, 1),
+ z0 = svrshl_m (p0, z1, 1))
+
+/*
+** rshl_2_s8_m:
+** lsl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s8_m, svint8_t,
+ z0 = svrshl_n_s8_m (p0, z0, 2),
+ z0 = svrshl_m (p0, z0, 2))
+
+/*
+** rshl_7_s8_m:
+** lsl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (rshl_7_s8_m, svint8_t,
+ z0 = svrshl_n_s8_m (p0, z0, 7),
+ z0 = svrshl_m (p0, z0, 7))
+
+/*
+** rshl_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** srshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (rshl_s8_z_tied1, svint8_t, svint8_t,
+ z0 = svrshl_s8_z (p0, z0, z4),
+ z0 = svrshl_z (p0, z0, z4))
+
+/*
+** rshl_s8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** srshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s8_z_tied2, svint8_t, svint8_t,
+ z0_res = svrshl_s8_z (p0, z4, z0),
+ z0_res = svrshl_z (p0, z4, z0))
+
+/*
+** rshl_s8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** srshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0\.b, p0/z, z4\.b
+** srshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_s8_z_untied, svint8_t, svint8_t,
+ z0 = svrshl_s8_z (p0, z1, z4),
+ z0 = svrshl_z (p0, z1, z4))
+
+/*
+** rshl_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** srshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s8_z_tied1, svint8_t, int8_t,
+ z0 = svrshl_n_s8_z (p0, z0, x0),
+ z0 = svrshl_z (p0, z0, x0))
+
+/*
+** rshl_w0_s8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** srshl z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** srshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s8_z_untied, svint8_t, int8_t,
+ z0 = svrshl_n_s8_z (p0, z1, x0),
+ z0 = svrshl_z (p0, z1, x0))
+
+/*
+** rshl_m8_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m8_s8_z, svint8_t,
+ z0 = svrshl_n_s8_z (p0, z0, -8),
+ z0 = svrshl_z (p0, z0, -8))
+
+/*
+** rshl_m2_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s8_z, svint8_t,
+ z0 = svrshl_n_s8_z (p0, z0, -2),
+ z0 = svrshl_z (p0, z0, -2))
+
+/*
+** rshl_m1_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s8_z_tied1, svint8_t,
+ z0 = svrshl_n_s8_z (p0, z0, -1),
+ z0 = svrshl_z (p0, z0, -1))
+
+/*
+** rshl_m1_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s8_z_untied, svint8_t,
+ z0 = svrshl_n_s8_z (p0, z1, -1),
+ z0 = svrshl_z (p0, z1, -1))
+
+/*
+** rshl_1_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** lsl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s8_z_tied1, svint8_t,
+ z0 = svrshl_n_s8_z (p0, z0, 1),
+ z0 = svrshl_z (p0, z0, 1))
+
+/*
+** rshl_1_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** lsl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s8_z_untied, svint8_t,
+ z0 = svrshl_n_s8_z (p0, z1, 1),
+ z0 = svrshl_z (p0, z1, 1))
+
+/*
+** rshl_2_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** lsl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s8_z, svint8_t,
+ z0 = svrshl_n_s8_z (p0, z0, 2),
+ z0 = svrshl_z (p0, z0, 2))
+
+/*
+** rshl_7_s8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** lsl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (rshl_7_s8_z, svint8_t,
+ z0 = svrshl_n_s8_z (p0, z0, 7),
+ z0 = svrshl_z (p0, z0, 7))
+
+/*
+** rshl_s8_x_tied1:
+** srshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (rshl_s8_x_tied1, svint8_t, svint8_t,
+ z0 = svrshl_s8_x (p0, z0, z4),
+ z0 = svrshl_x (p0, z0, z4))
+
+/*
+** rshl_s8_x_tied2:
+** srshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_s8_x_tied2, svint8_t, svint8_t,
+ z0_res = svrshl_s8_x (p0, z4, z0),
+ z0_res = svrshl_x (p0, z4, z0))
+
+/*
+** rshl_s8_x_untied:
+** (
+** movprfx z0, z1
+** srshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0, z4
+** srshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_s8_x_untied, svint8_t, svint8_t,
+ z0 = svrshl_s8_x (p0, z1, z4),
+ z0 = svrshl_x (p0, z1, z4))
+
+/*
+** rshl_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** srshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s8_x_tied1, svint8_t, int8_t,
+ z0 = svrshl_n_s8_x (p0, z0, x0),
+ z0 = svrshl_x (p0, z0, x0))
+
+/*
+** rshl_w0_s8_x_untied:
+** mov z0\.b, w0
+** srshlr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_s8_x_untied, svint8_t, int8_t,
+ z0 = svrshl_n_s8_x (p0, z1, x0),
+ z0 = svrshl_x (p0, z1, x0))
+
+/*
+** rshl_m8_s8_x:
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m8_s8_x, svint8_t,
+ z0 = svrshl_n_s8_x (p0, z0, -8),
+ z0 = svrshl_x (p0, z0, -8))
+
+/*
+** rshl_m2_s8_x:
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_s8_x, svint8_t,
+ z0 = svrshl_n_s8_x (p0, z0, -2),
+ z0 = svrshl_x (p0, z0, -2))
+
+/*
+** rshl_m1_s8_x_tied1:
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s8_x_tied1, svint8_t,
+ z0 = svrshl_n_s8_x (p0, z0, -1),
+ z0 = svrshl_x (p0, z0, -1))
+
+/*
+** rshl_m1_s8_x_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_s8_x_untied, svint8_t,
+ z0 = svrshl_n_s8_x (p0, z1, -1),
+ z0 = svrshl_x (p0, z1, -1))
+
+/*
+** rshl_1_s8_x_tied1:
+** lsl z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s8_x_tied1, svint8_t,
+ z0 = svrshl_n_s8_x (p0, z0, 1),
+ z0 = svrshl_x (p0, z0, 1))
+
+/*
+** rshl_1_s8_x_untied:
+** lsl z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_s8_x_untied, svint8_t,
+ z0 = svrshl_n_s8_x (p0, z1, 1),
+ z0 = svrshl_x (p0, z1, 1))
+
+/*
+** rshl_2_s8_x:
+** lsl z0\.b, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_s8_x, svint8_t,
+ z0 = svrshl_n_s8_x (p0, z0, 2),
+ z0 = svrshl_x (p0, z0, 2))
+
+/*
+** rshl_7_s8_x:
+** lsl z0\.b, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (rshl_7_s8_x, svint8_t,
+ z0 = svrshl_n_s8_x (p0, z0, 7),
+ z0 = svrshl_x (p0, z0, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshl_u16_m_tied1:
+** urshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (rshl_u16_m_tied1, svuint16_t, svint16_t,
+ z0 = svrshl_u16_m (p0, z0, z4),
+ z0 = svrshl_m (p0, z0, z4))
+
+/*
+** rshl_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** urshl z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u16_m_tied2, svuint16_t, svint16_t,
+ z0_res = svrshl_u16_m (p0, z4, z0),
+ z0_res = svrshl_m (p0, z4, z0))
+
+/*
+** rshl_u16_m_untied:
+** movprfx z0, z1
+** urshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (rshl_u16_m_untied, svuint16_t, svint16_t,
+ z0 = svrshl_u16_m (p0, z1, z4),
+ z0 = svrshl_m (p0, z1, z4))
+
+/*
+** rshl_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** urshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u16_m_tied1, svuint16_t, int16_t,
+ z0 = svrshl_n_u16_m (p0, z0, x0),
+ z0 = svrshl_m (p0, z0, x0))
+
+/*
+** rshl_w0_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** urshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u16_m_untied, svuint16_t, int16_t,
+ z0 = svrshl_n_u16_m (p0, z1, x0),
+ z0 = svrshl_m (p0, z1, x0))
+
+/*
+** rshl_m16_u16_m:
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m16_u16_m, svuint16_t,
+ z0 = svrshl_n_u16_m (p0, z0, -16),
+ z0 = svrshl_m (p0, z0, -16))
+
+/*
+** rshl_m2_u16_m:
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u16_m, svuint16_t,
+ z0 = svrshl_n_u16_m (p0, z0, -2),
+ z0 = svrshl_m (p0, z0, -2))
+
+/*
+** rshl_m1_u16_m_tied1:
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u16_m_tied1, svuint16_t,
+ z0 = svrshl_n_u16_m (p0, z0, -1),
+ z0 = svrshl_m (p0, z0, -1))
+
+/*
+** rshl_m1_u16_m_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u16_m_untied, svuint16_t,
+ z0 = svrshl_n_u16_m (p0, z1, -1),
+ z0 = svrshl_m (p0, z1, -1))
+
+/*
+** rshl_1_u16_m_tied1:
+** lsl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u16_m_tied1, svuint16_t,
+ z0 = svrshl_n_u16_m (p0, z0, 1),
+ z0 = svrshl_m (p0, z0, 1))
+
+/*
+** rshl_1_u16_m_untied:
+** movprfx z0, z1
+** lsl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u16_m_untied, svuint16_t,
+ z0 = svrshl_n_u16_m (p0, z1, 1),
+ z0 = svrshl_m (p0, z1, 1))
+
+/*
+** rshl_2_u16_m:
+** lsl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u16_m, svuint16_t,
+ z0 = svrshl_n_u16_m (p0, z0, 2),
+ z0 = svrshl_m (p0, z0, 2))
+
+/*
+** rshl_15_u16_m:
+** lsl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (rshl_15_u16_m, svuint16_t,
+ z0 = svrshl_n_u16_m (p0, z0, 15),
+ z0 = svrshl_m (p0, z0, 15))
+
+/*
+** rshl_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** urshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (rshl_u16_z_tied1, svuint16_t, svint16_t,
+ z0 = svrshl_u16_z (p0, z0, z4),
+ z0 = svrshl_z (p0, z0, z4))
+
+/*
+** rshl_u16_z_tied2:
+** movprfx z0\.h, p0/z, z0\.h
+** urshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u16_z_tied2, svuint16_t, svint16_t,
+ z0_res = svrshl_u16_z (p0, z4, z0),
+ z0_res = svrshl_z (p0, z4, z0))
+
+/*
+** rshl_u16_z_untied:
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** urshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0\.h, p0/z, z4\.h
+** urshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_u16_z_untied, svuint16_t, svint16_t,
+ z0 = svrshl_u16_z (p0, z1, z4),
+ z0 = svrshl_z (p0, z1, z4))
+
+/*
+** rshl_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** urshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u16_z_tied1, svuint16_t, int16_t,
+ z0 = svrshl_n_u16_z (p0, z0, x0),
+ z0 = svrshl_z (p0, z0, x0))
+
+/*
+** rshl_w0_u16_z_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** movprfx z0\.h, p0/z, z1\.h
+** urshl z0\.h, p0/m, z0\.h, \1
+** |
+** movprfx z0\.h, p0/z, \1
+** urshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u16_z_untied, svuint16_t, int16_t,
+ z0 = svrshl_n_u16_z (p0, z1, x0),
+ z0 = svrshl_z (p0, z1, x0))
+
+/*
+** rshl_m16_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m16_u16_z, svuint16_t,
+ z0 = svrshl_n_u16_z (p0, z0, -16),
+ z0 = svrshl_z (p0, z0, -16))
+
+/*
+** rshl_m2_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u16_z, svuint16_t,
+ z0 = svrshl_n_u16_z (p0, z0, -2),
+ z0 = svrshl_z (p0, z0, -2))
+
+/*
+** rshl_m1_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u16_z_tied1, svuint16_t,
+ z0 = svrshl_n_u16_z (p0, z0, -1),
+ z0 = svrshl_z (p0, z0, -1))
+
+/*
+** rshl_m1_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u16_z_untied, svuint16_t,
+ z0 = svrshl_n_u16_z (p0, z1, -1),
+ z0 = svrshl_z (p0, z1, -1))
+
+/*
+** rshl_1_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** lsl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u16_z_tied1, svuint16_t,
+ z0 = svrshl_n_u16_z (p0, z0, 1),
+ z0 = svrshl_z (p0, z0, 1))
+
+/*
+** rshl_1_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** lsl z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u16_z_untied, svuint16_t,
+ z0 = svrshl_n_u16_z (p0, z1, 1),
+ z0 = svrshl_z (p0, z1, 1))
+
+/*
+** rshl_2_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** lsl z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u16_z, svuint16_t,
+ z0 = svrshl_n_u16_z (p0, z0, 2),
+ z0 = svrshl_z (p0, z0, 2))
+
+/*
+** rshl_15_u16_z:
+** movprfx z0\.h, p0/z, z0\.h
+** lsl z0\.h, p0/m, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (rshl_15_u16_z, svuint16_t,
+ z0 = svrshl_n_u16_z (p0, z0, 15),
+ z0 = svrshl_z (p0, z0, 15))
+
+/*
+** rshl_u16_x_tied1:
+** urshl z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (rshl_u16_x_tied1, svuint16_t, svint16_t,
+ z0 = svrshl_u16_x (p0, z0, z4),
+ z0 = svrshl_x (p0, z0, z4))
+
+/*
+** rshl_u16_x_tied2:
+** urshlr z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u16_x_tied2, svuint16_t, svint16_t,
+ z0_res = svrshl_u16_x (p0, z4, z0),
+ z0_res = svrshl_x (p0, z4, z0))
+
+/*
+** rshl_u16_x_untied:
+** (
+** movprfx z0, z1
+** urshl z0\.h, p0/m, z0\.h, z4\.h
+** |
+** movprfx z0, z4
+** urshlr z0\.h, p0/m, z0\.h, z1\.h
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_u16_x_untied, svuint16_t, svint16_t,
+ z0 = svrshl_u16_x (p0, z1, z4),
+ z0 = svrshl_x (p0, z1, z4))
+
+/*
+** rshl_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** urshl z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u16_x_tied1, svuint16_t, int16_t,
+ z0 = svrshl_n_u16_x (p0, z0, x0),
+ z0 = svrshl_x (p0, z0, x0))
+
+/*
+** rshl_w0_u16_x_untied:
+** mov z0\.h, w0
+** urshlr z0\.h, p0/m, z0\.h, z1\.h
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u16_x_untied, svuint16_t, int16_t,
+ z0 = svrshl_n_u16_x (p0, z1, x0),
+ z0 = svrshl_x (p0, z1, x0))
+
+/*
+** rshl_m16_u16_x:
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m16_u16_x, svuint16_t,
+ z0 = svrshl_n_u16_x (p0, z0, -16),
+ z0 = svrshl_x (p0, z0, -16))
+
+/*
+** rshl_m2_u16_x:
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u16_x, svuint16_t,
+ z0 = svrshl_n_u16_x (p0, z0, -2),
+ z0 = svrshl_x (p0, z0, -2))
+
+/*
+** rshl_m1_u16_x_tied1:
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u16_x_tied1, svuint16_t,
+ z0 = svrshl_n_u16_x (p0, z0, -1),
+ z0 = svrshl_x (p0, z0, -1))
+
+/*
+** rshl_m1_u16_x_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u16_x_untied, svuint16_t,
+ z0 = svrshl_n_u16_x (p0, z1, -1),
+ z0 = svrshl_x (p0, z1, -1))
+
+/*
+** rshl_1_u16_x_tied1:
+** lsl z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u16_x_tied1, svuint16_t,
+ z0 = svrshl_n_u16_x (p0, z0, 1),
+ z0 = svrshl_x (p0, z0, 1))
+
+/*
+** rshl_1_u16_x_untied:
+** lsl z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u16_x_untied, svuint16_t,
+ z0 = svrshl_n_u16_x (p0, z1, 1),
+ z0 = svrshl_x (p0, z1, 1))
+
+/*
+** rshl_2_u16_x:
+** lsl z0\.h, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u16_x, svuint16_t,
+ z0 = svrshl_n_u16_x (p0, z0, 2),
+ z0 = svrshl_x (p0, z0, 2))
+
+/*
+** rshl_15_u16_x:
+** lsl z0\.h, z0\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (rshl_15_u16_x, svuint16_t,
+ z0 = svrshl_n_u16_x (p0, z0, 15),
+ z0 = svrshl_x (p0, z0, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshl_u32_m_tied1:
+** urshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (rshl_u32_m_tied1, svuint32_t, svint32_t,
+ z0 = svrshl_u32_m (p0, z0, z4),
+ z0 = svrshl_m (p0, z0, z4))
+
+/*
+** rshl_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** urshl z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u32_m_tied2, svuint32_t, svint32_t,
+ z0_res = svrshl_u32_m (p0, z4, z0),
+ z0_res = svrshl_m (p0, z4, z0))
+
+/*
+** rshl_u32_m_untied:
+** movprfx z0, z1
+** urshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (rshl_u32_m_untied, svuint32_t, svint32_t,
+ z0 = svrshl_u32_m (p0, z1, z4),
+ z0 = svrshl_m (p0, z1, z4))
+
+/*
+** rshl_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** urshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u32_m_tied1, svuint32_t, int32_t,
+ z0 = svrshl_n_u32_m (p0, z0, x0),
+ z0 = svrshl_m (p0, z0, x0))
+
+/*
+** rshl_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** urshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u32_m_untied, svuint32_t, int32_t,
+ z0 = svrshl_n_u32_m (p0, z1, x0),
+ z0 = svrshl_m (p0, z1, x0))
+
+/*
+** rshl_m32_u32_m:
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m32_u32_m, svuint32_t,
+ z0 = svrshl_n_u32_m (p0, z0, -32),
+ z0 = svrshl_m (p0, z0, -32))
+
+/*
+** rshl_m2_u32_m:
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u32_m, svuint32_t,
+ z0 = svrshl_n_u32_m (p0, z0, -2),
+ z0 = svrshl_m (p0, z0, -2))
+
+/*
+** rshl_m1_u32_m_tied1:
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u32_m_tied1, svuint32_t,
+ z0 = svrshl_n_u32_m (p0, z0, -1),
+ z0 = svrshl_m (p0, z0, -1))
+
+/*
+** rshl_m1_u32_m_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u32_m_untied, svuint32_t,
+ z0 = svrshl_n_u32_m (p0, z1, -1),
+ z0 = svrshl_m (p0, z1, -1))
+
+/*
+** rshl_1_u32_m_tied1:
+** lsl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u32_m_tied1, svuint32_t,
+ z0 = svrshl_n_u32_m (p0, z0, 1),
+ z0 = svrshl_m (p0, z0, 1))
+
+/*
+** rshl_1_u32_m_untied:
+** movprfx z0, z1
+** lsl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u32_m_untied, svuint32_t,
+ z0 = svrshl_n_u32_m (p0, z1, 1),
+ z0 = svrshl_m (p0, z1, 1))
+
+/*
+** rshl_2_u32_m:
+** lsl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u32_m, svuint32_t,
+ z0 = svrshl_n_u32_m (p0, z0, 2),
+ z0 = svrshl_m (p0, z0, 2))
+
+/*
+** rshl_31_u32_m:
+** lsl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (rshl_31_u32_m, svuint32_t,
+ z0 = svrshl_n_u32_m (p0, z0, 31),
+ z0 = svrshl_m (p0, z0, 31))
+
+/*
+** rshl_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** urshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (rshl_u32_z_tied1, svuint32_t, svint32_t,
+ z0 = svrshl_u32_z (p0, z0, z4),
+ z0 = svrshl_z (p0, z0, z4))
+
+/*
+** rshl_u32_z_tied2:
+** movprfx z0\.s, p0/z, z0\.s
+** urshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u32_z_tied2, svuint32_t, svint32_t,
+ z0_res = svrshl_u32_z (p0, z4, z0),
+ z0_res = svrshl_z (p0, z4, z0))
+
+/*
+** rshl_u32_z_untied:
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** urshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0\.s, p0/z, z4\.s
+** urshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_u32_z_untied, svuint32_t, svint32_t,
+ z0 = svrshl_u32_z (p0, z1, z4),
+ z0 = svrshl_z (p0, z1, z4))
+
+/*
+** rshl_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** urshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u32_z_tied1, svuint32_t, int32_t,
+ z0 = svrshl_n_u32_z (p0, z0, x0),
+ z0 = svrshl_z (p0, z0, x0))
+
+/*
+** rshl_w0_u32_z_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** movprfx z0\.s, p0/z, z1\.s
+** urshl z0\.s, p0/m, z0\.s, \1
+** |
+** movprfx z0\.s, p0/z, \1
+** urshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u32_z_untied, svuint32_t, int32_t,
+ z0 = svrshl_n_u32_z (p0, z1, x0),
+ z0 = svrshl_z (p0, z1, x0))
+
+/*
+** rshl_m32_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m32_u32_z, svuint32_t,
+ z0 = svrshl_n_u32_z (p0, z0, -32),
+ z0 = svrshl_z (p0, z0, -32))
+
+/*
+** rshl_m2_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u32_z, svuint32_t,
+ z0 = svrshl_n_u32_z (p0, z0, -2),
+ z0 = svrshl_z (p0, z0, -2))
+
+/*
+** rshl_m1_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u32_z_tied1, svuint32_t,
+ z0 = svrshl_n_u32_z (p0, z0, -1),
+ z0 = svrshl_z (p0, z0, -1))
+
+/*
+** rshl_m1_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u32_z_untied, svuint32_t,
+ z0 = svrshl_n_u32_z (p0, z1, -1),
+ z0 = svrshl_z (p0, z1, -1))
+
+/*
+** rshl_1_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** lsl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u32_z_tied1, svuint32_t,
+ z0 = svrshl_n_u32_z (p0, z0, 1),
+ z0 = svrshl_z (p0, z0, 1))
+
+/*
+** rshl_1_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** lsl z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u32_z_untied, svuint32_t,
+ z0 = svrshl_n_u32_z (p0, z1, 1),
+ z0 = svrshl_z (p0, z1, 1))
+
+/*
+** rshl_2_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** lsl z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u32_z, svuint32_t,
+ z0 = svrshl_n_u32_z (p0, z0, 2),
+ z0 = svrshl_z (p0, z0, 2))
+
+/*
+** rshl_31_u32_z:
+** movprfx z0\.s, p0/z, z0\.s
+** lsl z0\.s, p0/m, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (rshl_31_u32_z, svuint32_t,
+ z0 = svrshl_n_u32_z (p0, z0, 31),
+ z0 = svrshl_z (p0, z0, 31))
+
+/*
+** rshl_u32_x_tied1:
+** urshl z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (rshl_u32_x_tied1, svuint32_t, svint32_t,
+ z0 = svrshl_u32_x (p0, z0, z4),
+ z0 = svrshl_x (p0, z0, z4))
+
+/*
+** rshl_u32_x_tied2:
+** urshlr z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u32_x_tied2, svuint32_t, svint32_t,
+ z0_res = svrshl_u32_x (p0, z4, z0),
+ z0_res = svrshl_x (p0, z4, z0))
+
+/*
+** rshl_u32_x_untied:
+** (
+** movprfx z0, z1
+** urshl z0\.s, p0/m, z0\.s, z4\.s
+** |
+** movprfx z0, z4
+** urshlr z0\.s, p0/m, z0\.s, z1\.s
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_u32_x_untied, svuint32_t, svint32_t,
+ z0 = svrshl_u32_x (p0, z1, z4),
+ z0 = svrshl_x (p0, z1, z4))
+
+/*
+** rshl_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** urshl z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u32_x_tied1, svuint32_t, int32_t,
+ z0 = svrshl_n_u32_x (p0, z0, x0),
+ z0 = svrshl_x (p0, z0, x0))
+
+/*
+** rshl_w0_u32_x_untied:
+** mov z0\.s, w0
+** urshlr z0\.s, p0/m, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u32_x_untied, svuint32_t, int32_t,
+ z0 = svrshl_n_u32_x (p0, z1, x0),
+ z0 = svrshl_x (p0, z1, x0))
+
+/*
+** rshl_m32_u32_x:
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m32_u32_x, svuint32_t,
+ z0 = svrshl_n_u32_x (p0, z0, -32),
+ z0 = svrshl_x (p0, z0, -32))
+
+/*
+** rshl_m2_u32_x:
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u32_x, svuint32_t,
+ z0 = svrshl_n_u32_x (p0, z0, -2),
+ z0 = svrshl_x (p0, z0, -2))
+
+/*
+** rshl_m1_u32_x_tied1:
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u32_x_tied1, svuint32_t,
+ z0 = svrshl_n_u32_x (p0, z0, -1),
+ z0 = svrshl_x (p0, z0, -1))
+
+/*
+** rshl_m1_u32_x_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u32_x_untied, svuint32_t,
+ z0 = svrshl_n_u32_x (p0, z1, -1),
+ z0 = svrshl_x (p0, z1, -1))
+
+/*
+** rshl_1_u32_x_tied1:
+** lsl z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u32_x_tied1, svuint32_t,
+ z0 = svrshl_n_u32_x (p0, z0, 1),
+ z0 = svrshl_x (p0, z0, 1))
+
+/*
+** rshl_1_u32_x_untied:
+** lsl z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u32_x_untied, svuint32_t,
+ z0 = svrshl_n_u32_x (p0, z1, 1),
+ z0 = svrshl_x (p0, z1, 1))
+
+/*
+** rshl_2_u32_x:
+** lsl z0\.s, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u32_x, svuint32_t,
+ z0 = svrshl_n_u32_x (p0, z0, 2),
+ z0 = svrshl_x (p0, z0, 2))
+
+/*
+** rshl_31_u32_x:
+** lsl z0\.s, z0\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (rshl_31_u32_x, svuint32_t,
+ z0 = svrshl_n_u32_x (p0, z0, 31),
+ z0 = svrshl_x (p0, z0, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshl_u64_m_tied1:
+** urshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (rshl_u64_m_tied1, svuint64_t, svint64_t,
+ z0 = svrshl_u64_m (p0, z0, z4),
+ z0 = svrshl_m (p0, z0, z4))
+
+/*
+** rshl_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** urshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u64_m_tied2, svuint64_t, svint64_t,
+ z0_res = svrshl_u64_m (p0, z4, z0),
+ z0_res = svrshl_m (p0, z4, z0))
+
+/*
+** rshl_u64_m_untied:
+** movprfx z0, z1
+** urshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (rshl_u64_m_untied, svuint64_t, svint64_t,
+ z0 = svrshl_u64_m (p0, z1, z4),
+ z0 = svrshl_m (p0, z1, z4))
+
+/*
+** rshl_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** urshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_u64_m_tied1, svuint64_t, int64_t,
+ z0 = svrshl_n_u64_m (p0, z0, x0),
+ z0 = svrshl_m (p0, z0, x0))
+
+/*
+** rshl_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** urshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_u64_m_untied, svuint64_t, int64_t,
+ z0 = svrshl_n_u64_m (p0, z1, x0),
+ z0 = svrshl_m (p0, z1, x0))
+
+/*
+** rshl_m64_u64_m:
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m64_u64_m, svuint64_t,
+ z0 = svrshl_n_u64_m (p0, z0, -64),
+ z0 = svrshl_m (p0, z0, -64))
+
+/*
+** rshl_m2_u64_m:
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u64_m, svuint64_t,
+ z0 = svrshl_n_u64_m (p0, z0, -2),
+ z0 = svrshl_m (p0, z0, -2))
+
+/*
+** rshl_m1_u64_m_tied1:
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u64_m_tied1, svuint64_t,
+ z0 = svrshl_n_u64_m (p0, z0, -1),
+ z0 = svrshl_m (p0, z0, -1))
+
+/*
+** rshl_m1_u64_m_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u64_m_untied, svuint64_t,
+ z0 = svrshl_n_u64_m (p0, z1, -1),
+ z0 = svrshl_m (p0, z1, -1))
+
+/*
+** rshl_1_u64_m_tied1:
+** lsl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u64_m_tied1, svuint64_t,
+ z0 = svrshl_n_u64_m (p0, z0, 1),
+ z0 = svrshl_m (p0, z0, 1))
+
+/*
+** rshl_1_u64_m_untied:
+** movprfx z0, z1
+** lsl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u64_m_untied, svuint64_t,
+ z0 = svrshl_n_u64_m (p0, z1, 1),
+ z0 = svrshl_m (p0, z1, 1))
+
+/*
+** rshl_2_u64_m:
+** lsl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u64_m, svuint64_t,
+ z0 = svrshl_n_u64_m (p0, z0, 2),
+ z0 = svrshl_m (p0, z0, 2))
+
+/*
+** rshl_63_u64_m:
+** lsl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (rshl_63_u64_m, svuint64_t,
+ z0 = svrshl_n_u64_m (p0, z0, 63),
+ z0 = svrshl_m (p0, z0, 63))
+
+/*
+** rshl_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** urshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (rshl_u64_z_tied1, svuint64_t, svint64_t,
+ z0 = svrshl_u64_z (p0, z0, z4),
+ z0 = svrshl_z (p0, z0, z4))
+
+/*
+** rshl_u64_z_tied2:
+** movprfx z0\.d, p0/z, z0\.d
+** urshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u64_z_tied2, svuint64_t, svint64_t,
+ z0_res = svrshl_u64_z (p0, z4, z0),
+ z0_res = svrshl_z (p0, z4, z0))
+
+/*
+** rshl_u64_z_untied:
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** urshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0\.d, p0/z, z4\.d
+** urshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_u64_z_untied, svuint64_t, svint64_t,
+ z0 = svrshl_u64_z (p0, z1, z4),
+ z0 = svrshl_z (p0, z1, z4))
+
+/*
+** rshl_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** urshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_u64_z_tied1, svuint64_t, int64_t,
+ z0 = svrshl_n_u64_z (p0, z0, x0),
+ z0 = svrshl_z (p0, z0, x0))
+
+/*
+** rshl_x0_u64_z_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** movprfx z0\.d, p0/z, z1\.d
+** urshl z0\.d, p0/m, z0\.d, \1
+** |
+** movprfx z0\.d, p0/z, \1
+** urshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_u64_z_untied, svuint64_t, int64_t,
+ z0 = svrshl_n_u64_z (p0, z1, x0),
+ z0 = svrshl_z (p0, z1, x0))
+
+/*
+** rshl_m64_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m64_u64_z, svuint64_t,
+ z0 = svrshl_n_u64_z (p0, z0, -64),
+ z0 = svrshl_z (p0, z0, -64))
+
+/*
+** rshl_m2_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u64_z, svuint64_t,
+ z0 = svrshl_n_u64_z (p0, z0, -2),
+ z0 = svrshl_z (p0, z0, -2))
+
+/*
+** rshl_m1_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u64_z_tied1, svuint64_t,
+ z0 = svrshl_n_u64_z (p0, z0, -1),
+ z0 = svrshl_z (p0, z0, -1))
+
+/*
+** rshl_m1_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u64_z_untied, svuint64_t,
+ z0 = svrshl_n_u64_z (p0, z1, -1),
+ z0 = svrshl_z (p0, z1, -1))
+
+/*
+** rshl_1_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** lsl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u64_z_tied1, svuint64_t,
+ z0 = svrshl_n_u64_z (p0, z0, 1),
+ z0 = svrshl_z (p0, z0, 1))
+
+/*
+** rshl_1_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** lsl z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u64_z_untied, svuint64_t,
+ z0 = svrshl_n_u64_z (p0, z1, 1),
+ z0 = svrshl_z (p0, z1, 1))
+
+/*
+** rshl_2_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** lsl z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u64_z, svuint64_t,
+ z0 = svrshl_n_u64_z (p0, z0, 2),
+ z0 = svrshl_z (p0, z0, 2))
+
+/*
+** rshl_63_u64_z:
+** movprfx z0\.d, p0/z, z0\.d
+** lsl z0\.d, p0/m, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (rshl_63_u64_z, svuint64_t,
+ z0 = svrshl_n_u64_z (p0, z0, 63),
+ z0 = svrshl_z (p0, z0, 63))
+
+/*
+** rshl_u64_x_tied1:
+** urshl z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (rshl_u64_x_tied1, svuint64_t, svint64_t,
+ z0 = svrshl_u64_x (p0, z0, z4),
+ z0 = svrshl_x (p0, z0, z4))
+
+/*
+** rshl_u64_x_tied2:
+** urshlr z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u64_x_tied2, svuint64_t, svint64_t,
+ z0_res = svrshl_u64_x (p0, z4, z0),
+ z0_res = svrshl_x (p0, z4, z0))
+
+/*
+** rshl_u64_x_untied:
+** (
+** movprfx z0, z1
+** urshl z0\.d, p0/m, z0\.d, z4\.d
+** |
+** movprfx z0, z4
+** urshlr z0\.d, p0/m, z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_u64_x_untied, svuint64_t, svint64_t,
+ z0 = svrshl_u64_x (p0, z1, z4),
+ z0 = svrshl_x (p0, z1, z4))
+
+/*
+** rshl_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** urshl z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_u64_x_tied1, svuint64_t, int64_t,
+ z0 = svrshl_n_u64_x (p0, z0, x0),
+ z0 = svrshl_x (p0, z0, x0))
+
+/*
+** rshl_x0_u64_x_untied:
+** mov z0\.d, x0
+** urshlr z0\.d, p0/m, z0\.d, z1\.d
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_x0_u64_x_untied, svuint64_t, int64_t,
+ z0 = svrshl_n_u64_x (p0, z1, x0),
+ z0 = svrshl_x (p0, z1, x0))
+
+/*
+** rshl_m64_u64_x:
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m64_u64_x, svuint64_t,
+ z0 = svrshl_n_u64_x (p0, z0, -64),
+ z0 = svrshl_x (p0, z0, -64))
+
+/*
+** rshl_m2_u64_x:
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u64_x, svuint64_t,
+ z0 = svrshl_n_u64_x (p0, z0, -2),
+ z0 = svrshl_x (p0, z0, -2))
+
+/*
+** rshl_m1_u64_x_tied1:
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u64_x_tied1, svuint64_t,
+ z0 = svrshl_n_u64_x (p0, z0, -1),
+ z0 = svrshl_x (p0, z0, -1))
+
+/*
+** rshl_m1_u64_x_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u64_x_untied, svuint64_t,
+ z0 = svrshl_n_u64_x (p0, z1, -1),
+ z0 = svrshl_x (p0, z1, -1))
+
+/*
+** rshl_1_u64_x_tied1:
+** lsl z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u64_x_tied1, svuint64_t,
+ z0 = svrshl_n_u64_x (p0, z0, 1),
+ z0 = svrshl_x (p0, z0, 1))
+
+/*
+** rshl_1_u64_x_untied:
+** lsl z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u64_x_untied, svuint64_t,
+ z0 = svrshl_n_u64_x (p0, z1, 1),
+ z0 = svrshl_x (p0, z1, 1))
+
+/*
+** rshl_2_u64_x:
+** lsl z0\.d, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u64_x, svuint64_t,
+ z0 = svrshl_n_u64_x (p0, z0, 2),
+ z0 = svrshl_x (p0, z0, 2))
+
+/*
+** rshl_63_u64_x:
+** lsl z0\.d, z0\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (rshl_63_u64_x, svuint64_t,
+ z0 = svrshl_n_u64_x (p0, z0, 63),
+ z0 = svrshl_x (p0, z0, 63))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshl_u8_m_tied1:
+** urshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (rshl_u8_m_tied1, svuint8_t, svint8_t,
+ z0 = svrshl_u8_m (p0, z0, z4),
+ z0 = svrshl_m (p0, z0, z4))
+
+/*
+** rshl_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** urshl z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u8_m_tied2, svuint8_t, svint8_t,
+ z0_res = svrshl_u8_m (p0, z4, z0),
+ z0_res = svrshl_m (p0, z4, z0))
+
+/*
+** rshl_u8_m_untied:
+** movprfx z0, z1
+** urshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (rshl_u8_m_untied, svuint8_t, svint8_t,
+ z0 = svrshl_u8_m (p0, z1, z4),
+ z0 = svrshl_m (p0, z1, z4))
+
+/*
+** rshl_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** urshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u8_m_tied1, svuint8_t, int8_t,
+ z0 = svrshl_n_u8_m (p0, z0, x0),
+ z0 = svrshl_m (p0, z0, x0))
+
+/*
+** rshl_w0_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** urshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u8_m_untied, svuint8_t, int8_t,
+ z0 = svrshl_n_u8_m (p0, z1, x0),
+ z0 = svrshl_m (p0, z1, x0))
+
+/*
+** rshl_m8_u8_m:
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m8_u8_m, svuint8_t,
+ z0 = svrshl_n_u8_m (p0, z0, -8),
+ z0 = svrshl_m (p0, z0, -8))
+
+/*
+** rshl_m2_u8_m:
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u8_m, svuint8_t,
+ z0 = svrshl_n_u8_m (p0, z0, -2),
+ z0 = svrshl_m (p0, z0, -2))
+
+/*
+** rshl_m1_u8_m_tied1:
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u8_m_tied1, svuint8_t,
+ z0 = svrshl_n_u8_m (p0, z0, -1),
+ z0 = svrshl_m (p0, z0, -1))
+
+/*
+** rshl_m1_u8_m_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u8_m_untied, svuint8_t,
+ z0 = svrshl_n_u8_m (p0, z1, -1),
+ z0 = svrshl_m (p0, z1, -1))
+
+/*
+** rshl_1_u8_m_tied1:
+** lsl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u8_m_tied1, svuint8_t,
+ z0 = svrshl_n_u8_m (p0, z0, 1),
+ z0 = svrshl_m (p0, z0, 1))
+
+/*
+** rshl_1_u8_m_untied:
+** movprfx z0, z1
+** lsl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u8_m_untied, svuint8_t,
+ z0 = svrshl_n_u8_m (p0, z1, 1),
+ z0 = svrshl_m (p0, z1, 1))
+
+/*
+** rshl_2_u8_m:
+** lsl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u8_m, svuint8_t,
+ z0 = svrshl_n_u8_m (p0, z0, 2),
+ z0 = svrshl_m (p0, z0, 2))
+
+/*
+** rshl_7_u8_m:
+** lsl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (rshl_7_u8_m, svuint8_t,
+ z0 = svrshl_n_u8_m (p0, z0, 7),
+ z0 = svrshl_m (p0, z0, 7))
+
+/*
+** rshl_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** urshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (rshl_u8_z_tied1, svuint8_t, svint8_t,
+ z0 = svrshl_u8_z (p0, z0, z4),
+ z0 = svrshl_z (p0, z0, z4))
+
+/*
+** rshl_u8_z_tied2:
+** movprfx z0\.b, p0/z, z0\.b
+** urshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u8_z_tied2, svuint8_t, svint8_t,
+ z0_res = svrshl_u8_z (p0, z4, z0),
+ z0_res = svrshl_z (p0, z4, z0))
+
+/*
+** rshl_u8_z_untied:
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** urshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0\.b, p0/z, z4\.b
+** urshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_u8_z_untied, svuint8_t, svint8_t,
+ z0 = svrshl_u8_z (p0, z1, z4),
+ z0 = svrshl_z (p0, z1, z4))
+
+/*
+** rshl_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** urshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u8_z_tied1, svuint8_t, int8_t,
+ z0 = svrshl_n_u8_z (p0, z0, x0),
+ z0 = svrshl_z (p0, z0, x0))
+
+/*
+** rshl_w0_u8_z_untied:
+** mov (z[0-9]+\.b), w0
+** (
+** movprfx z0\.b, p0/z, z1\.b
+** urshl z0\.b, p0/m, z0\.b, \1
+** |
+** movprfx z0\.b, p0/z, \1
+** urshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u8_z_untied, svuint8_t, int8_t,
+ z0 = svrshl_n_u8_z (p0, z1, x0),
+ z0 = svrshl_z (p0, z1, x0))
+
+/*
+** rshl_m8_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m8_u8_z, svuint8_t,
+ z0 = svrshl_n_u8_z (p0, z0, -8),
+ z0 = svrshl_z (p0, z0, -8))
+
+/*
+** rshl_m2_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u8_z, svuint8_t,
+ z0 = svrshl_n_u8_z (p0, z0, -2),
+ z0 = svrshl_z (p0, z0, -2))
+
+/*
+** rshl_m1_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u8_z_tied1, svuint8_t,
+ z0 = svrshl_n_u8_z (p0, z0, -1),
+ z0 = svrshl_z (p0, z0, -1))
+
+/*
+** rshl_m1_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u8_z_untied, svuint8_t,
+ z0 = svrshl_n_u8_z (p0, z1, -1),
+ z0 = svrshl_z (p0, z1, -1))
+
+/*
+** rshl_1_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** lsl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u8_z_tied1, svuint8_t,
+ z0 = svrshl_n_u8_z (p0, z0, 1),
+ z0 = svrshl_z (p0, z0, 1))
+
+/*
+** rshl_1_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** lsl z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u8_z_untied, svuint8_t,
+ z0 = svrshl_n_u8_z (p0, z1, 1),
+ z0 = svrshl_z (p0, z1, 1))
+
+/*
+** rshl_2_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** lsl z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u8_z, svuint8_t,
+ z0 = svrshl_n_u8_z (p0, z0, 2),
+ z0 = svrshl_z (p0, z0, 2))
+
+/*
+** rshl_7_u8_z:
+** movprfx z0\.b, p0/z, z0\.b
+** lsl z0\.b, p0/m, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (rshl_7_u8_z, svuint8_t,
+ z0 = svrshl_n_u8_z (p0, z0, 7),
+ z0 = svrshl_z (p0, z0, 7))
+
+/*
+** rshl_u8_x_tied1:
+** urshl z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (rshl_u8_x_tied1, svuint8_t, svint8_t,
+ z0 = svrshl_u8_x (p0, z0, z4),
+ z0 = svrshl_x (p0, z0, z4))
+
+/*
+** rshl_u8_x_tied2:
+** urshlr z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z_REV (rshl_u8_x_tied2, svuint8_t, svint8_t,
+ z0_res = svrshl_u8_x (p0, z4, z0),
+ z0_res = svrshl_x (p0, z4, z0))
+
+/*
+** rshl_u8_x_untied:
+** (
+** movprfx z0, z1
+** urshl z0\.b, p0/m, z0\.b, z4\.b
+** |
+** movprfx z0, z4
+** urshlr z0\.b, p0/m, z0\.b, z1\.b
+** )
+** ret
+*/
+TEST_DUAL_Z (rshl_u8_x_untied, svuint8_t, svint8_t,
+ z0 = svrshl_u8_x (p0, z1, z4),
+ z0 = svrshl_x (p0, z1, z4))
+
+/*
+** rshl_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** urshl z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u8_x_tied1, svuint8_t, int8_t,
+ z0 = svrshl_n_u8_x (p0, z0, x0),
+ z0 = svrshl_x (p0, z0, x0))
+
+/*
+** rshl_w0_u8_x_untied:
+** mov z0\.b, w0
+** urshlr z0\.b, p0/m, z0\.b, z1\.b
+** ret
+*/
+TEST_UNIFORM_ZX (rshl_w0_u8_x_untied, svuint8_t, int8_t,
+ z0 = svrshl_n_u8_x (p0, z1, x0),
+ z0 = svrshl_x (p0, z1, x0))
+
+/*
+** rshl_m8_u8_x:
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m8_u8_x, svuint8_t,
+ z0 = svrshl_n_u8_x (p0, z0, -8),
+ z0 = svrshl_x (p0, z0, -8))
+
+/*
+** rshl_m2_u8_x:
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m2_u8_x, svuint8_t,
+ z0 = svrshl_n_u8_x (p0, z0, -2),
+ z0 = svrshl_x (p0, z0, -2))
+
+/*
+** rshl_m1_u8_x_tied1:
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u8_x_tied1, svuint8_t,
+ z0 = svrshl_n_u8_x (p0, z0, -1),
+ z0 = svrshl_x (p0, z0, -1))
+
+/*
+** rshl_m1_u8_x_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_m1_u8_x_untied, svuint8_t,
+ z0 = svrshl_n_u8_x (p0, z1, -1),
+ z0 = svrshl_x (p0, z1, -1))
+
+/*
+** rshl_1_u8_x_tied1:
+** lsl z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u8_x_tied1, svuint8_t,
+ z0 = svrshl_n_u8_x (p0, z0, 1),
+ z0 = svrshl_x (p0, z0, 1))
+
+/*
+** rshl_1_u8_x_untied:
+** lsl z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshl_1_u8_x_untied, svuint8_t,
+ z0 = svrshl_n_u8_x (p0, z1, 1),
+ z0 = svrshl_x (p0, z1, 1))
+
+/*
+** rshl_2_u8_x:
+** lsl z0\.b, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshl_2_u8_x, svuint8_t,
+ z0 = svrshl_n_u8_x (p0, z0, 2),
+ z0 = svrshl_x (p0, z0, 2))
+
+/*
+** rshl_7_u8_x:
+** lsl z0\.b, z0\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (rshl_7_u8_x, svuint8_t,
+ z0 = svrshl_n_u8_x (p0, z0, 7),
+ z0 = svrshl_x (p0, z0, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshr_1_s16_m_tied1:
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s16_m_tied1, svint16_t,
+ z0 = svrshr_n_s16_m (p0, z0, 1),
+ z0 = svrshr_m (p0, z0, 1))
+
+/*
+** rshr_1_s16_m_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s16_m_untied, svint16_t,
+ z0 = svrshr_n_s16_m (p0, z1, 1),
+ z0 = svrshr_m (p0, z1, 1))
+
+/*
+** rshr_2_s16_m_tied1:
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s16_m_tied1, svint16_t,
+ z0 = svrshr_n_s16_m (p0, z0, 2),
+ z0 = svrshr_m (p0, z0, 2))
+
+/*
+** rshr_2_s16_m_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s16_m_untied, svint16_t,
+ z0 = svrshr_n_s16_m (p0, z1, 2),
+ z0 = svrshr_m (p0, z1, 2))
+
+/*
+** rshr_16_s16_m_tied1:
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_s16_m_tied1, svint16_t,
+ z0 = svrshr_n_s16_m (p0, z0, 16),
+ z0 = svrshr_m (p0, z0, 16))
+
+/*
+** rshr_16_s16_m_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_s16_m_untied, svint16_t,
+ z0 = svrshr_n_s16_m (p0, z1, 16),
+ z0 = svrshr_m (p0, z1, 16))
+
+/*
+** rshr_1_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s16_z_tied1, svint16_t,
+ z0 = svrshr_n_s16_z (p0, z0, 1),
+ z0 = svrshr_z (p0, z0, 1))
+
+/*
+** rshr_1_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s16_z_untied, svint16_t,
+ z0 = svrshr_n_s16_z (p0, z1, 1),
+ z0 = svrshr_z (p0, z1, 1))
+
+/*
+** rshr_2_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s16_z_tied1, svint16_t,
+ z0 = svrshr_n_s16_z (p0, z0, 2),
+ z0 = svrshr_z (p0, z0, 2))
+
+/*
+** rshr_2_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s16_z_untied, svint16_t,
+ z0 = svrshr_n_s16_z (p0, z1, 2),
+ z0 = svrshr_z (p0, z1, 2))
+
+/*
+** rshr_16_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_s16_z_tied1, svint16_t,
+ z0 = svrshr_n_s16_z (p0, z0, 16),
+ z0 = svrshr_z (p0, z0, 16))
+
+/*
+** rshr_16_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_s16_z_untied, svint16_t,
+ z0 = svrshr_n_s16_z (p0, z1, 16),
+ z0 = svrshr_z (p0, z1, 16))
+
+/*
+** rshr_1_s16_x_tied1:
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s16_x_tied1, svint16_t,
+ z0 = svrshr_n_s16_x (p0, z0, 1),
+ z0 = svrshr_x (p0, z0, 1))
+
+/*
+** rshr_1_s16_x_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s16_x_untied, svint16_t,
+ z0 = svrshr_n_s16_x (p0, z1, 1),
+ z0 = svrshr_x (p0, z1, 1))
+
+/*
+** rshr_2_s16_x_tied1:
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s16_x_tied1, svint16_t,
+ z0 = svrshr_n_s16_x (p0, z0, 2),
+ z0 = svrshr_x (p0, z0, 2))
+
+/*
+** rshr_2_s16_x_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s16_x_untied, svint16_t,
+ z0 = svrshr_n_s16_x (p0, z1, 2),
+ z0 = svrshr_x (p0, z1, 2))
+
+/*
+** rshr_16_s16_x_tied1:
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_s16_x_tied1, svint16_t,
+ z0 = svrshr_n_s16_x (p0, z0, 16),
+ z0 = svrshr_x (p0, z0, 16))
+
+/*
+** rshr_16_s16_x_untied:
+** movprfx z0, z1
+** srshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_s16_x_untied, svint16_t,
+ z0 = svrshr_n_s16_x (p0, z1, 16),
+ z0 = svrshr_x (p0, z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshr_1_s32_m_tied1:
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s32_m_tied1, svint32_t,
+ z0 = svrshr_n_s32_m (p0, z0, 1),
+ z0 = svrshr_m (p0, z0, 1))
+
+/*
+** rshr_1_s32_m_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s32_m_untied, svint32_t,
+ z0 = svrshr_n_s32_m (p0, z1, 1),
+ z0 = svrshr_m (p0, z1, 1))
+
+/*
+** rshr_2_s32_m_tied1:
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s32_m_tied1, svint32_t,
+ z0 = svrshr_n_s32_m (p0, z0, 2),
+ z0 = svrshr_m (p0, z0, 2))
+
+/*
+** rshr_2_s32_m_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s32_m_untied, svint32_t,
+ z0 = svrshr_n_s32_m (p0, z1, 2),
+ z0 = svrshr_m (p0, z1, 2))
+
+/*
+** rshr_32_s32_m_tied1:
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_s32_m_tied1, svint32_t,
+ z0 = svrshr_n_s32_m (p0, z0, 32),
+ z0 = svrshr_m (p0, z0, 32))
+
+/*
+** rshr_32_s32_m_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_s32_m_untied, svint32_t,
+ z0 = svrshr_n_s32_m (p0, z1, 32),
+ z0 = svrshr_m (p0, z1, 32))
+
+/*
+** rshr_1_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s32_z_tied1, svint32_t,
+ z0 = svrshr_n_s32_z (p0, z0, 1),
+ z0 = svrshr_z (p0, z0, 1))
+
+/*
+** rshr_1_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s32_z_untied, svint32_t,
+ z0 = svrshr_n_s32_z (p0, z1, 1),
+ z0 = svrshr_z (p0, z1, 1))
+
+/*
+** rshr_2_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s32_z_tied1, svint32_t,
+ z0 = svrshr_n_s32_z (p0, z0, 2),
+ z0 = svrshr_z (p0, z0, 2))
+
+/*
+** rshr_2_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s32_z_untied, svint32_t,
+ z0 = svrshr_n_s32_z (p0, z1, 2),
+ z0 = svrshr_z (p0, z1, 2))
+
+/*
+** rshr_32_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_s32_z_tied1, svint32_t,
+ z0 = svrshr_n_s32_z (p0, z0, 32),
+ z0 = svrshr_z (p0, z0, 32))
+
+/*
+** rshr_32_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_s32_z_untied, svint32_t,
+ z0 = svrshr_n_s32_z (p0, z1, 32),
+ z0 = svrshr_z (p0, z1, 32))
+
+/*
+** rshr_1_s32_x_tied1:
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s32_x_tied1, svint32_t,
+ z0 = svrshr_n_s32_x (p0, z0, 1),
+ z0 = svrshr_x (p0, z0, 1))
+
+/*
+** rshr_1_s32_x_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s32_x_untied, svint32_t,
+ z0 = svrshr_n_s32_x (p0, z1, 1),
+ z0 = svrshr_x (p0, z1, 1))
+
+/*
+** rshr_2_s32_x_tied1:
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s32_x_tied1, svint32_t,
+ z0 = svrshr_n_s32_x (p0, z0, 2),
+ z0 = svrshr_x (p0, z0, 2))
+
+/*
+** rshr_2_s32_x_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s32_x_untied, svint32_t,
+ z0 = svrshr_n_s32_x (p0, z1, 2),
+ z0 = svrshr_x (p0, z1, 2))
+
+/*
+** rshr_32_s32_x_tied1:
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_s32_x_tied1, svint32_t,
+ z0 = svrshr_n_s32_x (p0, z0, 32),
+ z0 = svrshr_x (p0, z0, 32))
+
+/*
+** rshr_32_s32_x_untied:
+** movprfx z0, z1
+** srshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_s32_x_untied, svint32_t,
+ z0 = svrshr_n_s32_x (p0, z1, 32),
+ z0 = svrshr_x (p0, z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshr_1_s64_m_tied1:
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s64_m_tied1, svint64_t,
+ z0 = svrshr_n_s64_m (p0, z0, 1),
+ z0 = svrshr_m (p0, z0, 1))
+
+/*
+** rshr_1_s64_m_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s64_m_untied, svint64_t,
+ z0 = svrshr_n_s64_m (p0, z1, 1),
+ z0 = svrshr_m (p0, z1, 1))
+
+/*
+** rshr_2_s64_m_tied1:
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s64_m_tied1, svint64_t,
+ z0 = svrshr_n_s64_m (p0, z0, 2),
+ z0 = svrshr_m (p0, z0, 2))
+
+/*
+** rshr_2_s64_m_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s64_m_untied, svint64_t,
+ z0 = svrshr_n_s64_m (p0, z1, 2),
+ z0 = svrshr_m (p0, z1, 2))
+
+/*
+** rshr_64_s64_m_tied1:
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_s64_m_tied1, svint64_t,
+ z0 = svrshr_n_s64_m (p0, z0, 64),
+ z0 = svrshr_m (p0, z0, 64))
+
+/*
+** rshr_64_s64_m_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_s64_m_untied, svint64_t,
+ z0 = svrshr_n_s64_m (p0, z1, 64),
+ z0 = svrshr_m (p0, z1, 64))
+
+/*
+** rshr_1_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s64_z_tied1, svint64_t,
+ z0 = svrshr_n_s64_z (p0, z0, 1),
+ z0 = svrshr_z (p0, z0, 1))
+
+/*
+** rshr_1_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s64_z_untied, svint64_t,
+ z0 = svrshr_n_s64_z (p0, z1, 1),
+ z0 = svrshr_z (p0, z1, 1))
+
+/*
+** rshr_2_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s64_z_tied1, svint64_t,
+ z0 = svrshr_n_s64_z (p0, z0, 2),
+ z0 = svrshr_z (p0, z0, 2))
+
+/*
+** rshr_2_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s64_z_untied, svint64_t,
+ z0 = svrshr_n_s64_z (p0, z1, 2),
+ z0 = svrshr_z (p0, z1, 2))
+
+/*
+** rshr_64_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_s64_z_tied1, svint64_t,
+ z0 = svrshr_n_s64_z (p0, z0, 64),
+ z0 = svrshr_z (p0, z0, 64))
+
+/*
+** rshr_64_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_s64_z_untied, svint64_t,
+ z0 = svrshr_n_s64_z (p0, z1, 64),
+ z0 = svrshr_z (p0, z1, 64))
+
+/*
+** rshr_1_s64_x_tied1:
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s64_x_tied1, svint64_t,
+ z0 = svrshr_n_s64_x (p0, z0, 1),
+ z0 = svrshr_x (p0, z0, 1))
+
+/*
+** rshr_1_s64_x_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s64_x_untied, svint64_t,
+ z0 = svrshr_n_s64_x (p0, z1, 1),
+ z0 = svrshr_x (p0, z1, 1))
+
+/*
+** rshr_2_s64_x_tied1:
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s64_x_tied1, svint64_t,
+ z0 = svrshr_n_s64_x (p0, z0, 2),
+ z0 = svrshr_x (p0, z0, 2))
+
+/*
+** rshr_2_s64_x_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s64_x_untied, svint64_t,
+ z0 = svrshr_n_s64_x (p0, z1, 2),
+ z0 = svrshr_x (p0, z1, 2))
+
+/*
+** rshr_64_s64_x_tied1:
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_s64_x_tied1, svint64_t,
+ z0 = svrshr_n_s64_x (p0, z0, 64),
+ z0 = svrshr_x (p0, z0, 64))
+
+/*
+** rshr_64_s64_x_untied:
+** movprfx z0, z1
+** srshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_s64_x_untied, svint64_t,
+ z0 = svrshr_n_s64_x (p0, z1, 64),
+ z0 = svrshr_x (p0, z1, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshr_1_s8_m_tied1:
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s8_m_tied1, svint8_t,
+ z0 = svrshr_n_s8_m (p0, z0, 1),
+ z0 = svrshr_m (p0, z0, 1))
+
+/*
+** rshr_1_s8_m_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s8_m_untied, svint8_t,
+ z0 = svrshr_n_s8_m (p0, z1, 1),
+ z0 = svrshr_m (p0, z1, 1))
+
+/*
+** rshr_2_s8_m_tied1:
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s8_m_tied1, svint8_t,
+ z0 = svrshr_n_s8_m (p0, z0, 2),
+ z0 = svrshr_m (p0, z0, 2))
+
+/*
+** rshr_2_s8_m_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s8_m_untied, svint8_t,
+ z0 = svrshr_n_s8_m (p0, z1, 2),
+ z0 = svrshr_m (p0, z1, 2))
+
+/*
+** rshr_8_s8_m_tied1:
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_s8_m_tied1, svint8_t,
+ z0 = svrshr_n_s8_m (p0, z0, 8),
+ z0 = svrshr_m (p0, z0, 8))
+
+/*
+** rshr_8_s8_m_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_s8_m_untied, svint8_t,
+ z0 = svrshr_n_s8_m (p0, z1, 8),
+ z0 = svrshr_m (p0, z1, 8))
+
+/*
+** rshr_1_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s8_z_tied1, svint8_t,
+ z0 = svrshr_n_s8_z (p0, z0, 1),
+ z0 = svrshr_z (p0, z0, 1))
+
+/*
+** rshr_1_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s8_z_untied, svint8_t,
+ z0 = svrshr_n_s8_z (p0, z1, 1),
+ z0 = svrshr_z (p0, z1, 1))
+
+/*
+** rshr_2_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s8_z_tied1, svint8_t,
+ z0 = svrshr_n_s8_z (p0, z0, 2),
+ z0 = svrshr_z (p0, z0, 2))
+
+/*
+** rshr_2_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s8_z_untied, svint8_t,
+ z0 = svrshr_n_s8_z (p0, z1, 2),
+ z0 = svrshr_z (p0, z1, 2))
+
+/*
+** rshr_8_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_s8_z_tied1, svint8_t,
+ z0 = svrshr_n_s8_z (p0, z0, 8),
+ z0 = svrshr_z (p0, z0, 8))
+
+/*
+** rshr_8_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_s8_z_untied, svint8_t,
+ z0 = svrshr_n_s8_z (p0, z1, 8),
+ z0 = svrshr_z (p0, z1, 8))
+
+/*
+** rshr_1_s8_x_tied1:
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s8_x_tied1, svint8_t,
+ z0 = svrshr_n_s8_x (p0, z0, 1),
+ z0 = svrshr_x (p0, z0, 1))
+
+/*
+** rshr_1_s8_x_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_s8_x_untied, svint8_t,
+ z0 = svrshr_n_s8_x (p0, z1, 1),
+ z0 = svrshr_x (p0, z1, 1))
+
+/*
+** rshr_2_s8_x_tied1:
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s8_x_tied1, svint8_t,
+ z0 = svrshr_n_s8_x (p0, z0, 2),
+ z0 = svrshr_x (p0, z0, 2))
+
+/*
+** rshr_2_s8_x_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_s8_x_untied, svint8_t,
+ z0 = svrshr_n_s8_x (p0, z1, 2),
+ z0 = svrshr_x (p0, z1, 2))
+
+/*
+** rshr_8_s8_x_tied1:
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_s8_x_tied1, svint8_t,
+ z0 = svrshr_n_s8_x (p0, z0, 8),
+ z0 = svrshr_x (p0, z0, 8))
+
+/*
+** rshr_8_s8_x_untied:
+** movprfx z0, z1
+** srshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_s8_x_untied, svint8_t,
+ z0 = svrshr_n_s8_x (p0, z1, 8),
+ z0 = svrshr_x (p0, z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshr_1_u16_m_tied1:
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u16_m_tied1, svuint16_t,
+ z0 = svrshr_n_u16_m (p0, z0, 1),
+ z0 = svrshr_m (p0, z0, 1))
+
+/*
+** rshr_1_u16_m_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u16_m_untied, svuint16_t,
+ z0 = svrshr_n_u16_m (p0, z1, 1),
+ z0 = svrshr_m (p0, z1, 1))
+
+/*
+** rshr_2_u16_m_tied1:
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u16_m_tied1, svuint16_t,
+ z0 = svrshr_n_u16_m (p0, z0, 2),
+ z0 = svrshr_m (p0, z0, 2))
+
+/*
+** rshr_2_u16_m_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u16_m_untied, svuint16_t,
+ z0 = svrshr_n_u16_m (p0, z1, 2),
+ z0 = svrshr_m (p0, z1, 2))
+
+/*
+** rshr_16_u16_m_tied1:
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_u16_m_tied1, svuint16_t,
+ z0 = svrshr_n_u16_m (p0, z0, 16),
+ z0 = svrshr_m (p0, z0, 16))
+
+/*
+** rshr_16_u16_m_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_u16_m_untied, svuint16_t,
+ z0 = svrshr_n_u16_m (p0, z1, 16),
+ z0 = svrshr_m (p0, z1, 16))
+
+/*
+** rshr_1_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u16_z_tied1, svuint16_t,
+ z0 = svrshr_n_u16_z (p0, z0, 1),
+ z0 = svrshr_z (p0, z0, 1))
+
+/*
+** rshr_1_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u16_z_untied, svuint16_t,
+ z0 = svrshr_n_u16_z (p0, z1, 1),
+ z0 = svrshr_z (p0, z1, 1))
+
+/*
+** rshr_2_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u16_z_tied1, svuint16_t,
+ z0 = svrshr_n_u16_z (p0, z0, 2),
+ z0 = svrshr_z (p0, z0, 2))
+
+/*
+** rshr_2_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u16_z_untied, svuint16_t,
+ z0 = svrshr_n_u16_z (p0, z1, 2),
+ z0 = svrshr_z (p0, z1, 2))
+
+/*
+** rshr_16_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_u16_z_tied1, svuint16_t,
+ z0 = svrshr_n_u16_z (p0, z0, 16),
+ z0 = svrshr_z (p0, z0, 16))
+
+/*
+** rshr_16_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_u16_z_untied, svuint16_t,
+ z0 = svrshr_n_u16_z (p0, z1, 16),
+ z0 = svrshr_z (p0, z1, 16))
+
+/*
+** rshr_1_u16_x_tied1:
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u16_x_tied1, svuint16_t,
+ z0 = svrshr_n_u16_x (p0, z0, 1),
+ z0 = svrshr_x (p0, z0, 1))
+
+/*
+** rshr_1_u16_x_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u16_x_untied, svuint16_t,
+ z0 = svrshr_n_u16_x (p0, z1, 1),
+ z0 = svrshr_x (p0, z1, 1))
+
+/*
+** rshr_2_u16_x_tied1:
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u16_x_tied1, svuint16_t,
+ z0 = svrshr_n_u16_x (p0, z0, 2),
+ z0 = svrshr_x (p0, z0, 2))
+
+/*
+** rshr_2_u16_x_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u16_x_untied, svuint16_t,
+ z0 = svrshr_n_u16_x (p0, z1, 2),
+ z0 = svrshr_x (p0, z1, 2))
+
+/*
+** rshr_16_u16_x_tied1:
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_u16_x_tied1, svuint16_t,
+ z0 = svrshr_n_u16_x (p0, z0, 16),
+ z0 = svrshr_x (p0, z0, 16))
+
+/*
+** rshr_16_u16_x_untied:
+** movprfx z0, z1
+** urshr z0\.h, p0/m, z0\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rshr_16_u16_x_untied, svuint16_t,
+ z0 = svrshr_n_u16_x (p0, z1, 16),
+ z0 = svrshr_x (p0, z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshr_1_u32_m_tied1:
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u32_m_tied1, svuint32_t,
+ z0 = svrshr_n_u32_m (p0, z0, 1),
+ z0 = svrshr_m (p0, z0, 1))
+
+/*
+** rshr_1_u32_m_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u32_m_untied, svuint32_t,
+ z0 = svrshr_n_u32_m (p0, z1, 1),
+ z0 = svrshr_m (p0, z1, 1))
+
+/*
+** rshr_2_u32_m_tied1:
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u32_m_tied1, svuint32_t,
+ z0 = svrshr_n_u32_m (p0, z0, 2),
+ z0 = svrshr_m (p0, z0, 2))
+
+/*
+** rshr_2_u32_m_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u32_m_untied, svuint32_t,
+ z0 = svrshr_n_u32_m (p0, z1, 2),
+ z0 = svrshr_m (p0, z1, 2))
+
+/*
+** rshr_32_u32_m_tied1:
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_u32_m_tied1, svuint32_t,
+ z0 = svrshr_n_u32_m (p0, z0, 32),
+ z0 = svrshr_m (p0, z0, 32))
+
+/*
+** rshr_32_u32_m_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_u32_m_untied, svuint32_t,
+ z0 = svrshr_n_u32_m (p0, z1, 32),
+ z0 = svrshr_m (p0, z1, 32))
+
+/*
+** rshr_1_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u32_z_tied1, svuint32_t,
+ z0 = svrshr_n_u32_z (p0, z0, 1),
+ z0 = svrshr_z (p0, z0, 1))
+
+/*
+** rshr_1_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u32_z_untied, svuint32_t,
+ z0 = svrshr_n_u32_z (p0, z1, 1),
+ z0 = svrshr_z (p0, z1, 1))
+
+/*
+** rshr_2_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u32_z_tied1, svuint32_t,
+ z0 = svrshr_n_u32_z (p0, z0, 2),
+ z0 = svrshr_z (p0, z0, 2))
+
+/*
+** rshr_2_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u32_z_untied, svuint32_t,
+ z0 = svrshr_n_u32_z (p0, z1, 2),
+ z0 = svrshr_z (p0, z1, 2))
+
+/*
+** rshr_32_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_u32_z_tied1, svuint32_t,
+ z0 = svrshr_n_u32_z (p0, z0, 32),
+ z0 = svrshr_z (p0, z0, 32))
+
+/*
+** rshr_32_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_u32_z_untied, svuint32_t,
+ z0 = svrshr_n_u32_z (p0, z1, 32),
+ z0 = svrshr_z (p0, z1, 32))
+
+/*
+** rshr_1_u32_x_tied1:
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u32_x_tied1, svuint32_t,
+ z0 = svrshr_n_u32_x (p0, z0, 1),
+ z0 = svrshr_x (p0, z0, 1))
+
+/*
+** rshr_1_u32_x_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u32_x_untied, svuint32_t,
+ z0 = svrshr_n_u32_x (p0, z1, 1),
+ z0 = svrshr_x (p0, z1, 1))
+
+/*
+** rshr_2_u32_x_tied1:
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u32_x_tied1, svuint32_t,
+ z0 = svrshr_n_u32_x (p0, z0, 2),
+ z0 = svrshr_x (p0, z0, 2))
+
+/*
+** rshr_2_u32_x_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u32_x_untied, svuint32_t,
+ z0 = svrshr_n_u32_x (p0, z1, 2),
+ z0 = svrshr_x (p0, z1, 2))
+
+/*
+** rshr_32_u32_x_tied1:
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_u32_x_tied1, svuint32_t,
+ z0 = svrshr_n_u32_x (p0, z0, 32),
+ z0 = svrshr_x (p0, z0, 32))
+
+/*
+** rshr_32_u32_x_untied:
+** movprfx z0, z1
+** urshr z0\.s, p0/m, z0\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rshr_32_u32_x_untied, svuint32_t,
+ z0 = svrshr_n_u32_x (p0, z1, 32),
+ z0 = svrshr_x (p0, z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshr_1_u64_m_tied1:
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u64_m_tied1, svuint64_t,
+ z0 = svrshr_n_u64_m (p0, z0, 1),
+ z0 = svrshr_m (p0, z0, 1))
+
+/*
+** rshr_1_u64_m_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u64_m_untied, svuint64_t,
+ z0 = svrshr_n_u64_m (p0, z1, 1),
+ z0 = svrshr_m (p0, z1, 1))
+
+/*
+** rshr_2_u64_m_tied1:
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u64_m_tied1, svuint64_t,
+ z0 = svrshr_n_u64_m (p0, z0, 2),
+ z0 = svrshr_m (p0, z0, 2))
+
+/*
+** rshr_2_u64_m_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u64_m_untied, svuint64_t,
+ z0 = svrshr_n_u64_m (p0, z1, 2),
+ z0 = svrshr_m (p0, z1, 2))
+
+/*
+** rshr_64_u64_m_tied1:
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_u64_m_tied1, svuint64_t,
+ z0 = svrshr_n_u64_m (p0, z0, 64),
+ z0 = svrshr_m (p0, z0, 64))
+
+/*
+** rshr_64_u64_m_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_u64_m_untied, svuint64_t,
+ z0 = svrshr_n_u64_m (p0, z1, 64),
+ z0 = svrshr_m (p0, z1, 64))
+
+/*
+** rshr_1_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u64_z_tied1, svuint64_t,
+ z0 = svrshr_n_u64_z (p0, z0, 1),
+ z0 = svrshr_z (p0, z0, 1))
+
+/*
+** rshr_1_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u64_z_untied, svuint64_t,
+ z0 = svrshr_n_u64_z (p0, z1, 1),
+ z0 = svrshr_z (p0, z1, 1))
+
+/*
+** rshr_2_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u64_z_tied1, svuint64_t,
+ z0 = svrshr_n_u64_z (p0, z0, 2),
+ z0 = svrshr_z (p0, z0, 2))
+
+/*
+** rshr_2_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u64_z_untied, svuint64_t,
+ z0 = svrshr_n_u64_z (p0, z1, 2),
+ z0 = svrshr_z (p0, z1, 2))
+
+/*
+** rshr_64_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_u64_z_tied1, svuint64_t,
+ z0 = svrshr_n_u64_z (p0, z0, 64),
+ z0 = svrshr_z (p0, z0, 64))
+
+/*
+** rshr_64_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_u64_z_untied, svuint64_t,
+ z0 = svrshr_n_u64_z (p0, z1, 64),
+ z0 = svrshr_z (p0, z1, 64))
+
+/*
+** rshr_1_u64_x_tied1:
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u64_x_tied1, svuint64_t,
+ z0 = svrshr_n_u64_x (p0, z0, 1),
+ z0 = svrshr_x (p0, z0, 1))
+
+/*
+** rshr_1_u64_x_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u64_x_untied, svuint64_t,
+ z0 = svrshr_n_u64_x (p0, z1, 1),
+ z0 = svrshr_x (p0, z1, 1))
+
+/*
+** rshr_2_u64_x_tied1:
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u64_x_tied1, svuint64_t,
+ z0 = svrshr_n_u64_x (p0, z0, 2),
+ z0 = svrshr_x (p0, z0, 2))
+
+/*
+** rshr_2_u64_x_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u64_x_untied, svuint64_t,
+ z0 = svrshr_n_u64_x (p0, z1, 2),
+ z0 = svrshr_x (p0, z1, 2))
+
+/*
+** rshr_64_u64_x_tied1:
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_u64_x_tied1, svuint64_t,
+ z0 = svrshr_n_u64_x (p0, z0, 64),
+ z0 = svrshr_x (p0, z0, 64))
+
+/*
+** rshr_64_u64_x_untied:
+** movprfx z0, z1
+** urshr z0\.d, p0/m, z0\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rshr_64_u64_x_untied, svuint64_t,
+ z0 = svrshr_n_u64_x (p0, z1, 64),
+ z0 = svrshr_x (p0, z1, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshr_1_u8_m_tied1:
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u8_m_tied1, svuint8_t,
+ z0 = svrshr_n_u8_m (p0, z0, 1),
+ z0 = svrshr_m (p0, z0, 1))
+
+/*
+** rshr_1_u8_m_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u8_m_untied, svuint8_t,
+ z0 = svrshr_n_u8_m (p0, z1, 1),
+ z0 = svrshr_m (p0, z1, 1))
+
+/*
+** rshr_2_u8_m_tied1:
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u8_m_tied1, svuint8_t,
+ z0 = svrshr_n_u8_m (p0, z0, 2),
+ z0 = svrshr_m (p0, z0, 2))
+
+/*
+** rshr_2_u8_m_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u8_m_untied, svuint8_t,
+ z0 = svrshr_n_u8_m (p0, z1, 2),
+ z0 = svrshr_m (p0, z1, 2))
+
+/*
+** rshr_8_u8_m_tied1:
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_u8_m_tied1, svuint8_t,
+ z0 = svrshr_n_u8_m (p0, z0, 8),
+ z0 = svrshr_m (p0, z0, 8))
+
+/*
+** rshr_8_u8_m_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_u8_m_untied, svuint8_t,
+ z0 = svrshr_n_u8_m (p0, z1, 8),
+ z0 = svrshr_m (p0, z1, 8))
+
+/*
+** rshr_1_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u8_z_tied1, svuint8_t,
+ z0 = svrshr_n_u8_z (p0, z0, 1),
+ z0 = svrshr_z (p0, z0, 1))
+
+/*
+** rshr_1_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u8_z_untied, svuint8_t,
+ z0 = svrshr_n_u8_z (p0, z1, 1),
+ z0 = svrshr_z (p0, z1, 1))
+
+/*
+** rshr_2_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u8_z_tied1, svuint8_t,
+ z0 = svrshr_n_u8_z (p0, z0, 2),
+ z0 = svrshr_z (p0, z0, 2))
+
+/*
+** rshr_2_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u8_z_untied, svuint8_t,
+ z0 = svrshr_n_u8_z (p0, z1, 2),
+ z0 = svrshr_z (p0, z1, 2))
+
+/*
+** rshr_8_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_u8_z_tied1, svuint8_t,
+ z0 = svrshr_n_u8_z (p0, z0, 8),
+ z0 = svrshr_z (p0, z0, 8))
+
+/*
+** rshr_8_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_u8_z_untied, svuint8_t,
+ z0 = svrshr_n_u8_z (p0, z1, 8),
+ z0 = svrshr_z (p0, z1, 8))
+
+/*
+** rshr_1_u8_x_tied1:
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u8_x_tied1, svuint8_t,
+ z0 = svrshr_n_u8_x (p0, z0, 1),
+ z0 = svrshr_x (p0, z0, 1))
+
+/*
+** rshr_1_u8_x_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rshr_1_u8_x_untied, svuint8_t,
+ z0 = svrshr_n_u8_x (p0, z1, 1),
+ z0 = svrshr_x (p0, z1, 1))
+
+/*
+** rshr_2_u8_x_tied1:
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u8_x_tied1, svuint8_t,
+ z0 = svrshr_n_u8_x (p0, z0, 2),
+ z0 = svrshr_x (p0, z0, 2))
+
+/*
+** rshr_2_u8_x_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rshr_2_u8_x_untied, svuint8_t,
+ z0 = svrshr_n_u8_x (p0, z1, 2),
+ z0 = svrshr_x (p0, z1, 2))
+
+/*
+** rshr_8_u8_x_tied1:
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_u8_x_tied1, svuint8_t,
+ z0 = svrshr_n_u8_x (p0, z0, 8),
+ z0 = svrshr_x (p0, z0, 8))
+
+/*
+** rshr_8_u8_x_untied:
+** movprfx z0, z1
+** urshr z0\.b, p0/m, z0\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rshr_8_u8_x_untied, svuint8_t,
+ z0 = svrshr_n_u8_x (p0, z1, 8),
+ z0 = svrshr_x (p0, z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnb_1_s16:
+** rshrnb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_1_s16, svint8_t, svint16_t,
+ z0_res = svrshrnb_n_s16 (z0, 1),
+ z0_res = svrshrnb (z0, 1))
+
+/*
+** rshrnb_2_s16:
+** rshrnb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_2_s16, svint8_t, svint16_t,
+ z0_res = svrshrnb_n_s16 (z0, 2),
+ z0_res = svrshrnb (z0, 2))
+
+/*
+** rshrnb_8_s16_tied1:
+** rshrnb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_8_s16_tied1, svint8_t, svint16_t,
+ z0_res = svrshrnb_n_s16 (z0, 8),
+ z0_res = svrshrnb (z0, 8))
+
+/*
+** rshrnb_8_s16_untied:
+** rshrnb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_8_s16_untied, svint8_t, svint16_t,
+ z0_res = svrshrnb_n_s16 (z1, 8),
+ z0_res = svrshrnb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnb_1_s32:
+** rshrnb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_1_s32, svint16_t, svint32_t,
+ z0_res = svrshrnb_n_s32 (z0, 1),
+ z0_res = svrshrnb (z0, 1))
+
+/*
+** rshrnb_2_s32:
+** rshrnb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_2_s32, svint16_t, svint32_t,
+ z0_res = svrshrnb_n_s32 (z0, 2),
+ z0_res = svrshrnb (z0, 2))
+
+/*
+** rshrnb_16_s32_tied1:
+** rshrnb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_16_s32_tied1, svint16_t, svint32_t,
+ z0_res = svrshrnb_n_s32 (z0, 16),
+ z0_res = svrshrnb (z0, 16))
+
+/*
+** rshrnb_16_s32_untied:
+** rshrnb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_16_s32_untied, svint16_t, svint32_t,
+ z0_res = svrshrnb_n_s32 (z1, 16),
+ z0_res = svrshrnb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnb_1_s64:
+** rshrnb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_1_s64, svint32_t, svint64_t,
+ z0_res = svrshrnb_n_s64 (z0, 1),
+ z0_res = svrshrnb (z0, 1))
+
+/*
+** rshrnb_2_s64:
+** rshrnb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_2_s64, svint32_t, svint64_t,
+ z0_res = svrshrnb_n_s64 (z0, 2),
+ z0_res = svrshrnb (z0, 2))
+
+/*
+** rshrnb_32_s64_tied1:
+** rshrnb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_32_s64_tied1, svint32_t, svint64_t,
+ z0_res = svrshrnb_n_s64 (z0, 32),
+ z0_res = svrshrnb (z0, 32))
+
+/*
+** rshrnb_32_s64_untied:
+** rshrnb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_32_s64_untied, svint32_t, svint64_t,
+ z0_res = svrshrnb_n_s64 (z1, 32),
+ z0_res = svrshrnb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnb_1_u16:
+** rshrnb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_1_u16, svuint8_t, svuint16_t,
+ z0_res = svrshrnb_n_u16 (z0, 1),
+ z0_res = svrshrnb (z0, 1))
+
+/*
+** rshrnb_2_u16:
+** rshrnb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_2_u16, svuint8_t, svuint16_t,
+ z0_res = svrshrnb_n_u16 (z0, 2),
+ z0_res = svrshrnb (z0, 2))
+
+/*
+** rshrnb_8_u16_tied1:
+** rshrnb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_8_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svrshrnb_n_u16 (z0, 8),
+ z0_res = svrshrnb (z0, 8))
+
+/*
+** rshrnb_8_u16_untied:
+** rshrnb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_8_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svrshrnb_n_u16 (z1, 8),
+ z0_res = svrshrnb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnb_1_u32:
+** rshrnb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_1_u32, svuint16_t, svuint32_t,
+ z0_res = svrshrnb_n_u32 (z0, 1),
+ z0_res = svrshrnb (z0, 1))
+
+/*
+** rshrnb_2_u32:
+** rshrnb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_2_u32, svuint16_t, svuint32_t,
+ z0_res = svrshrnb_n_u32 (z0, 2),
+ z0_res = svrshrnb (z0, 2))
+
+/*
+** rshrnb_16_u32_tied1:
+** rshrnb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_16_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svrshrnb_n_u32 (z0, 16),
+ z0_res = svrshrnb (z0, 16))
+
+/*
+** rshrnb_16_u32_untied:
+** rshrnb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_16_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svrshrnb_n_u32 (z1, 16),
+ z0_res = svrshrnb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnb_1_u64:
+** rshrnb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_1_u64, svuint32_t, svuint64_t,
+ z0_res = svrshrnb_n_u64 (z0, 1),
+ z0_res = svrshrnb (z0, 1))
+
+/*
+** rshrnb_2_u64:
+** rshrnb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_2_u64, svuint32_t, svuint64_t,
+ z0_res = svrshrnb_n_u64 (z0, 2),
+ z0_res = svrshrnb (z0, 2))
+
+/*
+** rshrnb_32_u64_tied1:
+** rshrnb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_32_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svrshrnb_n_u64 (z0, 32),
+ z0_res = svrshrnb (z0, 32))
+
+/*
+** rshrnb_32_u64_untied:
+** rshrnb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rshrnb_32_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svrshrnb_n_u64 (z1, 32),
+ z0_res = svrshrnb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnt_1_s16:
+** rshrnt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (rshrnt_1_s16, svint8_t, svint16_t,
+ z0 = svrshrnt_n_s16 (z0, z4, 1),
+ z0 = svrshrnt (z0, z4, 1))
+
+/*
+** rshrnt_2_s16:
+** rshrnt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (rshrnt_2_s16, svint8_t, svint16_t,
+ z0 = svrshrnt_n_s16 (z0, z4, 2),
+ z0 = svrshrnt (z0, z4, 2))
+
+/*
+** rshrnt_8_s16_tied1:
+** rshrnt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (rshrnt_8_s16_tied1, svint8_t, svint16_t,
+ z0 = svrshrnt_n_s16 (z0, z4, 8),
+ z0 = svrshrnt (z0, z4, 8))
+
+/*
+** rshrnt_8_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** rshrnt z0\.b, z4\.h, #8
+** |
+** rshrnt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshrnt_8_s16_untied, svint8_t, svint16_t,
+ z0 = svrshrnt_n_s16 (z1, z4, 8),
+ z0 = svrshrnt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnt_1_s32:
+** rshrnt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (rshrnt_1_s32, svint16_t, svint32_t,
+ z0 = svrshrnt_n_s32 (z0, z4, 1),
+ z0 = svrshrnt (z0, z4, 1))
+
+/*
+** rshrnt_2_s32:
+** rshrnt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (rshrnt_2_s32, svint16_t, svint32_t,
+ z0 = svrshrnt_n_s32 (z0, z4, 2),
+ z0 = svrshrnt (z0, z4, 2))
+
+/*
+** rshrnt_16_s32_tied1:
+** rshrnt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (rshrnt_16_s32_tied1, svint16_t, svint32_t,
+ z0 = svrshrnt_n_s32 (z0, z4, 16),
+ z0 = svrshrnt (z0, z4, 16))
+
+/*
+** rshrnt_16_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** rshrnt z0\.h, z4\.s, #16
+** |
+** rshrnt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshrnt_16_s32_untied, svint16_t, svint32_t,
+ z0 = svrshrnt_n_s32 (z1, z4, 16),
+ z0 = svrshrnt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnt_1_s64:
+** rshrnt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (rshrnt_1_s64, svint32_t, svint64_t,
+ z0 = svrshrnt_n_s64 (z0, z4, 1),
+ z0 = svrshrnt (z0, z4, 1))
+
+/*
+** rshrnt_2_s64:
+** rshrnt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (rshrnt_2_s64, svint32_t, svint64_t,
+ z0 = svrshrnt_n_s64 (z0, z4, 2),
+ z0 = svrshrnt (z0, z4, 2))
+
+/*
+** rshrnt_32_s64_tied1:
+** rshrnt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (rshrnt_32_s64_tied1, svint32_t, svint64_t,
+ z0 = svrshrnt_n_s64 (z0, z4, 32),
+ z0 = svrshrnt (z0, z4, 32))
+
+/*
+** rshrnt_32_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** rshrnt z0\.s, z4\.d, #32
+** |
+** rshrnt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshrnt_32_s64_untied, svint32_t, svint64_t,
+ z0 = svrshrnt_n_s64 (z1, z4, 32),
+ z0 = svrshrnt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnt_1_u16:
+** rshrnt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (rshrnt_1_u16, svuint8_t, svuint16_t,
+ z0 = svrshrnt_n_u16 (z0, z4, 1),
+ z0 = svrshrnt (z0, z4, 1))
+
+/*
+** rshrnt_2_u16:
+** rshrnt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (rshrnt_2_u16, svuint8_t, svuint16_t,
+ z0 = svrshrnt_n_u16 (z0, z4, 2),
+ z0 = svrshrnt (z0, z4, 2))
+
+/*
+** rshrnt_8_u16_tied1:
+** rshrnt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (rshrnt_8_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svrshrnt_n_u16 (z0, z4, 8),
+ z0 = svrshrnt (z0, z4, 8))
+
+/*
+** rshrnt_8_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** rshrnt z0\.b, z4\.h, #8
+** |
+** rshrnt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshrnt_8_u16_untied, svuint8_t, svuint16_t,
+ z0 = svrshrnt_n_u16 (z1, z4, 8),
+ z0 = svrshrnt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnt_1_u32:
+** rshrnt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (rshrnt_1_u32, svuint16_t, svuint32_t,
+ z0 = svrshrnt_n_u32 (z0, z4, 1),
+ z0 = svrshrnt (z0, z4, 1))
+
+/*
+** rshrnt_2_u32:
+** rshrnt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (rshrnt_2_u32, svuint16_t, svuint32_t,
+ z0 = svrshrnt_n_u32 (z0, z4, 2),
+ z0 = svrshrnt (z0, z4, 2))
+
+/*
+** rshrnt_16_u32_tied1:
+** rshrnt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (rshrnt_16_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svrshrnt_n_u32 (z0, z4, 16),
+ z0 = svrshrnt (z0, z4, 16))
+
+/*
+** rshrnt_16_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** rshrnt z0\.h, z4\.s, #16
+** |
+** rshrnt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshrnt_16_u32_untied, svuint16_t, svuint32_t,
+ z0 = svrshrnt_n_u32 (z1, z4, 16),
+ z0 = svrshrnt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rshrnt_1_u64:
+** rshrnt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (rshrnt_1_u64, svuint32_t, svuint64_t,
+ z0 = svrshrnt_n_u64 (z0, z4, 1),
+ z0 = svrshrnt (z0, z4, 1))
+
+/*
+** rshrnt_2_u64:
+** rshrnt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (rshrnt_2_u64, svuint32_t, svuint64_t,
+ z0 = svrshrnt_n_u64 (z0, z4, 2),
+ z0 = svrshrnt (z0, z4, 2))
+
+/*
+** rshrnt_32_u64_tied1:
+** rshrnt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (rshrnt_32_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svrshrnt_n_u64 (z0, z4, 32),
+ z0 = svrshrnt (z0, z4, 32))
+
+/*
+** rshrnt_32_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** rshrnt z0\.s, z4\.d, #32
+** |
+** rshrnt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rshrnt_32_u64_untied, svuint32_t, svuint64_t,
+ z0 = svrshrnt_n_u64 (z1, z4, 32),
+ z0 = svrshrnt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsqrte_u32_m_tied12:
+** ursqrte z0\.s, p0/m, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_m_tied12, svuint32_t,
+ z0 = svrsqrte_u32_m (z0, p0, z0),
+ z0 = svrsqrte_m (z0, p0, z0))
+
+/*
+** rsqrte_u32_m_tied1:
+** ursqrte z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_m_tied1, svuint32_t,
+ z0 = svrsqrte_u32_m (z0, p0, z1),
+ z0 = svrsqrte_m (z0, p0, z1))
+
+/*
+** rsqrte_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursqrte z0\.s, p0/m, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_m_tied2, svuint32_t,
+ z0 = svrsqrte_u32_m (z1, p0, z0),
+ z0 = svrsqrte_m (z1, p0, z0))
+
+/*
+** rsqrte_u32_m_untied:
+** movprfx z0, z2
+** ursqrte z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_m_untied, svuint32_t,
+ z0 = svrsqrte_u32_m (z2, p0, z1),
+ z0 = svrsqrte_m (z2, p0, z1))
+
+/*
+** rsqrte_u32_z_tied1:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.s, p0/z, \1\.s
+** ursqrte z0\.s, p0/m, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_z_tied1, svuint32_t,
+ z0 = svrsqrte_u32_z (p0, z0),
+ z0 = svrsqrte_z (p0, z0))
+
+/*
+** rsqrte_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** ursqrte z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_z_untied, svuint32_t,
+ z0 = svrsqrte_u32_z (p0, z1),
+ z0 = svrsqrte_z (p0, z1))
+
+/*
+** rsqrte_u32_x_tied1:
+** ursqrte z0\.s, p0/m, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_x_tied1, svuint32_t,
+ z0 = svrsqrte_u32_x (p0, z0),
+ z0 = svrsqrte_x (p0, z0))
+
+/*
+** rsqrte_u32_x_untied:
+** ursqrte z0\.s, p0/m, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (rsqrte_u32_x_untied, svuint32_t,
+ z0 = svrsqrte_u32_x (p0, z1),
+ z0 = svrsqrte_x (p0, z1))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsra_1_s16_tied1:
+** srsra z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s16_tied1, svint16_t,
+ z0 = svrsra_n_s16 (z0, z1, 1),
+ z0 = svrsra (z0, z1, 1))
+
+/*
+** rsra_1_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srsra z0\.h, \1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s16_tied2, svint16_t,
+ z0 = svrsra_n_s16 (z1, z0, 1),
+ z0 = svrsra (z1, z0, 1))
+
+/*
+** rsra_1_s16_untied:
+** movprfx z0, z1
+** srsra z0\.h, z2\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s16_untied, svint16_t,
+ z0 = svrsra_n_s16 (z1, z2, 1),
+ z0 = svrsra (z1, z2, 1))
+
+/*
+** rsra_2_s16_tied1:
+** srsra z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s16_tied1, svint16_t,
+ z0 = svrsra_n_s16 (z0, z1, 2),
+ z0 = svrsra (z0, z1, 2))
+
+/*
+** rsra_2_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srsra z0\.h, \1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s16_tied2, svint16_t,
+ z0 = svrsra_n_s16 (z1, z0, 2),
+ z0 = svrsra (z1, z0, 2))
+
+/*
+** rsra_2_s16_untied:
+** movprfx z0, z1
+** srsra z0\.h, z2\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s16_untied, svint16_t,
+ z0 = svrsra_n_s16 (z1, z2, 2),
+ z0 = svrsra (z1, z2, 2))
+
+/*
+** rsra_16_s16_tied1:
+** srsra z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rsra_16_s16_tied1, svint16_t,
+ z0 = svrsra_n_s16 (z0, z1, 16),
+ z0 = svrsra (z0, z1, 16))
+
+/*
+** rsra_16_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srsra z0\.h, \1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rsra_16_s16_tied2, svint16_t,
+ z0 = svrsra_n_s16 (z1, z0, 16),
+ z0 = svrsra (z1, z0, 16))
+
+/*
+** rsra_16_s16_untied:
+** movprfx z0, z1
+** srsra z0\.h, z2\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rsra_16_s16_untied, svint16_t,
+ z0 = svrsra_n_s16 (z1, z2, 16),
+ z0 = svrsra (z1, z2, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsra_1_s32_tied1:
+** srsra z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s32_tied1, svint32_t,
+ z0 = svrsra_n_s32 (z0, z1, 1),
+ z0 = svrsra (z0, z1, 1))
+
+/*
+** rsra_1_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srsra z0\.s, \1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s32_tied2, svint32_t,
+ z0 = svrsra_n_s32 (z1, z0, 1),
+ z0 = svrsra (z1, z0, 1))
+
+/*
+** rsra_1_s32_untied:
+** movprfx z0, z1
+** srsra z0\.s, z2\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s32_untied, svint32_t,
+ z0 = svrsra_n_s32 (z1, z2, 1),
+ z0 = svrsra (z1, z2, 1))
+
+/*
+** rsra_2_s32_tied1:
+** srsra z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s32_tied1, svint32_t,
+ z0 = svrsra_n_s32 (z0, z1, 2),
+ z0 = svrsra (z0, z1, 2))
+
+/*
+** rsra_2_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srsra z0\.s, \1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s32_tied2, svint32_t,
+ z0 = svrsra_n_s32 (z1, z0, 2),
+ z0 = svrsra (z1, z0, 2))
+
+/*
+** rsra_2_s32_untied:
+** movprfx z0, z1
+** srsra z0\.s, z2\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s32_untied, svint32_t,
+ z0 = svrsra_n_s32 (z1, z2, 2),
+ z0 = svrsra (z1, z2, 2))
+
+/*
+** rsra_32_s32_tied1:
+** srsra z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rsra_32_s32_tied1, svint32_t,
+ z0 = svrsra_n_s32 (z0, z1, 32),
+ z0 = svrsra (z0, z1, 32))
+
+/*
+** rsra_32_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srsra z0\.s, \1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rsra_32_s32_tied2, svint32_t,
+ z0 = svrsra_n_s32 (z1, z0, 32),
+ z0 = svrsra (z1, z0, 32))
+
+/*
+** rsra_32_s32_untied:
+** movprfx z0, z1
+** srsra z0\.s, z2\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rsra_32_s32_untied, svint32_t,
+ z0 = svrsra_n_s32 (z1, z2, 32),
+ z0 = svrsra (z1, z2, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsra_1_s64_tied1:
+** srsra z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s64_tied1, svint64_t,
+ z0 = svrsra_n_s64 (z0, z1, 1),
+ z0 = svrsra (z0, z1, 1))
+
+/*
+** rsra_1_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** srsra z0\.d, \1, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s64_tied2, svint64_t,
+ z0 = svrsra_n_s64 (z1, z0, 1),
+ z0 = svrsra (z1, z0, 1))
+
+/*
+** rsra_1_s64_untied:
+** movprfx z0, z1
+** srsra z0\.d, z2\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s64_untied, svint64_t,
+ z0 = svrsra_n_s64 (z1, z2, 1),
+ z0 = svrsra (z1, z2, 1))
+
+/*
+** rsra_2_s64_tied1:
+** srsra z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s64_tied1, svint64_t,
+ z0 = svrsra_n_s64 (z0, z1, 2),
+ z0 = svrsra (z0, z1, 2))
+
+/*
+** rsra_2_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** srsra z0\.d, \1, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s64_tied2, svint64_t,
+ z0 = svrsra_n_s64 (z1, z0, 2),
+ z0 = svrsra (z1, z0, 2))
+
+/*
+** rsra_2_s64_untied:
+** movprfx z0, z1
+** srsra z0\.d, z2\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s64_untied, svint64_t,
+ z0 = svrsra_n_s64 (z1, z2, 2),
+ z0 = svrsra (z1, z2, 2))
+
+/*
+** rsra_64_s64_tied1:
+** srsra z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rsra_64_s64_tied1, svint64_t,
+ z0 = svrsra_n_s64 (z0, z1, 64),
+ z0 = svrsra (z0, z1, 64))
+
+/*
+** rsra_64_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** srsra z0\.d, \1, #64
+** ret
+*/
+TEST_UNIFORM_Z (rsra_64_s64_tied2, svint64_t,
+ z0 = svrsra_n_s64 (z1, z0, 64),
+ z0 = svrsra (z1, z0, 64))
+
+/*
+** rsra_64_s64_untied:
+** movprfx z0, z1
+** srsra z0\.d, z2\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rsra_64_s64_untied, svint64_t,
+ z0 = svrsra_n_s64 (z1, z2, 64),
+ z0 = svrsra (z1, z2, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsra_1_s8_tied1:
+** srsra z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s8_tied1, svint8_t,
+ z0 = svrsra_n_s8 (z0, z1, 1),
+ z0 = svrsra (z0, z1, 1))
+
+/*
+** rsra_1_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srsra z0\.b, \1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s8_tied2, svint8_t,
+ z0 = svrsra_n_s8 (z1, z0, 1),
+ z0 = svrsra (z1, z0, 1))
+
+/*
+** rsra_1_s8_untied:
+** movprfx z0, z1
+** srsra z0\.b, z2\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_s8_untied, svint8_t,
+ z0 = svrsra_n_s8 (z1, z2, 1),
+ z0 = svrsra (z1, z2, 1))
+
+/*
+** rsra_2_s8_tied1:
+** srsra z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s8_tied1, svint8_t,
+ z0 = svrsra_n_s8 (z0, z1, 2),
+ z0 = svrsra (z0, z1, 2))
+
+/*
+** rsra_2_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srsra z0\.b, \1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s8_tied2, svint8_t,
+ z0 = svrsra_n_s8 (z1, z0, 2),
+ z0 = svrsra (z1, z0, 2))
+
+/*
+** rsra_2_s8_untied:
+** movprfx z0, z1
+** srsra z0\.b, z2\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_s8_untied, svint8_t,
+ z0 = svrsra_n_s8 (z1, z2, 2),
+ z0 = svrsra (z1, z2, 2))
+
+/*
+** rsra_8_s8_tied1:
+** srsra z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rsra_8_s8_tied1, svint8_t,
+ z0 = svrsra_n_s8 (z0, z1, 8),
+ z0 = svrsra (z0, z1, 8))
+
+/*
+** rsra_8_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** srsra z0\.b, \1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rsra_8_s8_tied2, svint8_t,
+ z0 = svrsra_n_s8 (z1, z0, 8),
+ z0 = svrsra (z1, z0, 8))
+
+/*
+** rsra_8_s8_untied:
+** movprfx z0, z1
+** srsra z0\.b, z2\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rsra_8_s8_untied, svint8_t,
+ z0 = svrsra_n_s8 (z1, z2, 8),
+ z0 = svrsra (z1, z2, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsra_1_u16_tied1:
+** ursra z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u16_tied1, svuint16_t,
+ z0 = svrsra_n_u16 (z0, z1, 1),
+ z0 = svrsra (z0, z1, 1))
+
+/*
+** rsra_1_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursra z0\.h, \1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u16_tied2, svuint16_t,
+ z0 = svrsra_n_u16 (z1, z0, 1),
+ z0 = svrsra (z1, z0, 1))
+
+/*
+** rsra_1_u16_untied:
+** movprfx z0, z1
+** ursra z0\.h, z2\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u16_untied, svuint16_t,
+ z0 = svrsra_n_u16 (z1, z2, 1),
+ z0 = svrsra (z1, z2, 1))
+
+/*
+** rsra_2_u16_tied1:
+** ursra z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u16_tied1, svuint16_t,
+ z0 = svrsra_n_u16 (z0, z1, 2),
+ z0 = svrsra (z0, z1, 2))
+
+/*
+** rsra_2_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursra z0\.h, \1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u16_tied2, svuint16_t,
+ z0 = svrsra_n_u16 (z1, z0, 2),
+ z0 = svrsra (z1, z0, 2))
+
+/*
+** rsra_2_u16_untied:
+** movprfx z0, z1
+** ursra z0\.h, z2\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u16_untied, svuint16_t,
+ z0 = svrsra_n_u16 (z1, z2, 2),
+ z0 = svrsra (z1, z2, 2))
+
+/*
+** rsra_16_u16_tied1:
+** ursra z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rsra_16_u16_tied1, svuint16_t,
+ z0 = svrsra_n_u16 (z0, z1, 16),
+ z0 = svrsra (z0, z1, 16))
+
+/*
+** rsra_16_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursra z0\.h, \1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rsra_16_u16_tied2, svuint16_t,
+ z0 = svrsra_n_u16 (z1, z0, 16),
+ z0 = svrsra (z1, z0, 16))
+
+/*
+** rsra_16_u16_untied:
+** movprfx z0, z1
+** ursra z0\.h, z2\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (rsra_16_u16_untied, svuint16_t,
+ z0 = svrsra_n_u16 (z1, z2, 16),
+ z0 = svrsra (z1, z2, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsra_1_u32_tied1:
+** ursra z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u32_tied1, svuint32_t,
+ z0 = svrsra_n_u32 (z0, z1, 1),
+ z0 = svrsra (z0, z1, 1))
+
+/*
+** rsra_1_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursra z0\.s, \1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u32_tied2, svuint32_t,
+ z0 = svrsra_n_u32 (z1, z0, 1),
+ z0 = svrsra (z1, z0, 1))
+
+/*
+** rsra_1_u32_untied:
+** movprfx z0, z1
+** ursra z0\.s, z2\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u32_untied, svuint32_t,
+ z0 = svrsra_n_u32 (z1, z2, 1),
+ z0 = svrsra (z1, z2, 1))
+
+/*
+** rsra_2_u32_tied1:
+** ursra z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u32_tied1, svuint32_t,
+ z0 = svrsra_n_u32 (z0, z1, 2),
+ z0 = svrsra (z0, z1, 2))
+
+/*
+** rsra_2_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursra z0\.s, \1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u32_tied2, svuint32_t,
+ z0 = svrsra_n_u32 (z1, z0, 2),
+ z0 = svrsra (z1, z0, 2))
+
+/*
+** rsra_2_u32_untied:
+** movprfx z0, z1
+** ursra z0\.s, z2\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u32_untied, svuint32_t,
+ z0 = svrsra_n_u32 (z1, z2, 2),
+ z0 = svrsra (z1, z2, 2))
+
+/*
+** rsra_32_u32_tied1:
+** ursra z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rsra_32_u32_tied1, svuint32_t,
+ z0 = svrsra_n_u32 (z0, z1, 32),
+ z0 = svrsra (z0, z1, 32))
+
+/*
+** rsra_32_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursra z0\.s, \1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rsra_32_u32_tied2, svuint32_t,
+ z0 = svrsra_n_u32 (z1, z0, 32),
+ z0 = svrsra (z1, z0, 32))
+
+/*
+** rsra_32_u32_untied:
+** movprfx z0, z1
+** ursra z0\.s, z2\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (rsra_32_u32_untied, svuint32_t,
+ z0 = svrsra_n_u32 (z1, z2, 32),
+ z0 = svrsra (z1, z2, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsra_1_u64_tied1:
+** ursra z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u64_tied1, svuint64_t,
+ z0 = svrsra_n_u64 (z0, z1, 1),
+ z0 = svrsra (z0, z1, 1))
+
+/*
+** rsra_1_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** ursra z0\.d, \1, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u64_tied2, svuint64_t,
+ z0 = svrsra_n_u64 (z1, z0, 1),
+ z0 = svrsra (z1, z0, 1))
+
+/*
+** rsra_1_u64_untied:
+** movprfx z0, z1
+** ursra z0\.d, z2\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u64_untied, svuint64_t,
+ z0 = svrsra_n_u64 (z1, z2, 1),
+ z0 = svrsra (z1, z2, 1))
+
+/*
+** rsra_2_u64_tied1:
+** ursra z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u64_tied1, svuint64_t,
+ z0 = svrsra_n_u64 (z0, z1, 2),
+ z0 = svrsra (z0, z1, 2))
+
+/*
+** rsra_2_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** ursra z0\.d, \1, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u64_tied2, svuint64_t,
+ z0 = svrsra_n_u64 (z1, z0, 2),
+ z0 = svrsra (z1, z0, 2))
+
+/*
+** rsra_2_u64_untied:
+** movprfx z0, z1
+** ursra z0\.d, z2\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u64_untied, svuint64_t,
+ z0 = svrsra_n_u64 (z1, z2, 2),
+ z0 = svrsra (z1, z2, 2))
+
+/*
+** rsra_64_u64_tied1:
+** ursra z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rsra_64_u64_tied1, svuint64_t,
+ z0 = svrsra_n_u64 (z0, z1, 64),
+ z0 = svrsra (z0, z1, 64))
+
+/*
+** rsra_64_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** ursra z0\.d, \1, #64
+** ret
+*/
+TEST_UNIFORM_Z (rsra_64_u64_tied2, svuint64_t,
+ z0 = svrsra_n_u64 (z1, z0, 64),
+ z0 = svrsra (z1, z0, 64))
+
+/*
+** rsra_64_u64_untied:
+** movprfx z0, z1
+** ursra z0\.d, z2\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (rsra_64_u64_untied, svuint64_t,
+ z0 = svrsra_n_u64 (z1, z2, 64),
+ z0 = svrsra (z1, z2, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsra_1_u8_tied1:
+** ursra z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u8_tied1, svuint8_t,
+ z0 = svrsra_n_u8 (z0, z1, 1),
+ z0 = svrsra (z0, z1, 1))
+
+/*
+** rsra_1_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursra z0\.b, \1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u8_tied2, svuint8_t,
+ z0 = svrsra_n_u8 (z1, z0, 1),
+ z0 = svrsra (z1, z0, 1))
+
+/*
+** rsra_1_u8_untied:
+** movprfx z0, z1
+** ursra z0\.b, z2\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (rsra_1_u8_untied, svuint8_t,
+ z0 = svrsra_n_u8 (z1, z2, 1),
+ z0 = svrsra (z1, z2, 1))
+
+/*
+** rsra_2_u8_tied1:
+** ursra z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u8_tied1, svuint8_t,
+ z0 = svrsra_n_u8 (z0, z1, 2),
+ z0 = svrsra (z0, z1, 2))
+
+/*
+** rsra_2_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursra z0\.b, \1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u8_tied2, svuint8_t,
+ z0 = svrsra_n_u8 (z1, z0, 2),
+ z0 = svrsra (z1, z0, 2))
+
+/*
+** rsra_2_u8_untied:
+** movprfx z0, z1
+** ursra z0\.b, z2\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (rsra_2_u8_untied, svuint8_t,
+ z0 = svrsra_n_u8 (z1, z2, 2),
+ z0 = svrsra (z1, z2, 2))
+
+/*
+** rsra_8_u8_tied1:
+** ursra z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rsra_8_u8_tied1, svuint8_t,
+ z0 = svrsra_n_u8 (z0, z1, 8),
+ z0 = svrsra (z0, z1, 8))
+
+/*
+** rsra_8_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ursra z0\.b, \1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rsra_8_u8_tied2, svuint8_t,
+ z0 = svrsra_n_u8 (z1, z0, 8),
+ z0 = svrsra (z1, z0, 8))
+
+/*
+** rsra_8_u8_untied:
+** movprfx z0, z1
+** ursra z0\.b, z2\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (rsra_8_u8_untied, svuint8_t,
+ z0 = svrsra_n_u8 (z1, z2, 8),
+ z0 = svrsra (z1, z2, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnb_s16_tied1:
+** rsubhnb z0\.b, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_s16_tied1, svint8_t, svint16_t,
+ z0_res = svrsubhnb_s16 (z0, z1),
+ z0_res = svrsubhnb (z0, z1))
+
+/*
+** rsubhnb_s16_tied2:
+** rsubhnb z0\.b, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_s16_tied2, svint8_t, svint16_t,
+ z0_res = svrsubhnb_s16 (z1, z0),
+ z0_res = svrsubhnb (z1, z0))
+
+/*
+** rsubhnb_s16_untied:
+** rsubhnb z0\.b, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_s16_untied, svint8_t, svint16_t,
+ z0_res = svrsubhnb_s16 (z1, z2),
+ z0_res = svrsubhnb (z1, z2))
+
+/*
+** rsubhnb_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** rsubhnb z0\.b, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_w0_s16_tied1, svint8_t, svint16_t, int16_t,
+ z0_res = svrsubhnb_n_s16 (z0, x0),
+ z0_res = svrsubhnb (z0, x0))
+
+/*
+** rsubhnb_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** rsubhnb z0\.b, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_w0_s16_untied, svint8_t, svint16_t, int16_t,
+ z0_res = svrsubhnb_n_s16 (z1, x0),
+ z0_res = svrsubhnb (z1, x0))
+
+/*
+** rsubhnb_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** rsubhnb z0\.b, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_s16_tied1, svint8_t, svint16_t,
+ z0_res = svrsubhnb_n_s16 (z0, 11),
+ z0_res = svrsubhnb (z0, 11))
+
+/*
+** rsubhnb_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** rsubhnb z0\.b, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_s16_untied, svint8_t, svint16_t,
+ z0_res = svrsubhnb_n_s16 (z1, 11),
+ z0_res = svrsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnb_s32_tied1:
+** rsubhnb z0\.h, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_s32_tied1, svint16_t, svint32_t,
+ z0_res = svrsubhnb_s32 (z0, z1),
+ z0_res = svrsubhnb (z0, z1))
+
+/*
+** rsubhnb_s32_tied2:
+** rsubhnb z0\.h, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_s32_tied2, svint16_t, svint32_t,
+ z0_res = svrsubhnb_s32 (z1, z0),
+ z0_res = svrsubhnb (z1, z0))
+
+/*
+** rsubhnb_s32_untied:
+** rsubhnb z0\.h, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_s32_untied, svint16_t, svint32_t,
+ z0_res = svrsubhnb_s32 (z1, z2),
+ z0_res = svrsubhnb (z1, z2))
+
+/*
+** rsubhnb_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** rsubhnb z0\.h, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_w0_s32_tied1, svint16_t, svint32_t, int32_t,
+ z0_res = svrsubhnb_n_s32 (z0, x0),
+ z0_res = svrsubhnb (z0, x0))
+
+/*
+** rsubhnb_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** rsubhnb z0\.h, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_w0_s32_untied, svint16_t, svint32_t, int32_t,
+ z0_res = svrsubhnb_n_s32 (z1, x0),
+ z0_res = svrsubhnb (z1, x0))
+
+/*
+** rsubhnb_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** rsubhnb z0\.h, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_s32_tied1, svint16_t, svint32_t,
+ z0_res = svrsubhnb_n_s32 (z0, 11),
+ z0_res = svrsubhnb (z0, 11))
+
+/*
+** rsubhnb_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** rsubhnb z0\.h, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_s32_untied, svint16_t, svint32_t,
+ z0_res = svrsubhnb_n_s32 (z1, 11),
+ z0_res = svrsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnb_s64_tied1:
+** rsubhnb z0\.s, z0\.d, z1\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_s64_tied1, svint32_t, svint64_t,
+ z0_res = svrsubhnb_s64 (z0, z1),
+ z0_res = svrsubhnb (z0, z1))
+
+/*
+** rsubhnb_s64_tied2:
+** rsubhnb z0\.s, z1\.d, z0\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_s64_tied2, svint32_t, svint64_t,
+ z0_res = svrsubhnb_s64 (z1, z0),
+ z0_res = svrsubhnb (z1, z0))
+
+/*
+** rsubhnb_s64_untied:
+** rsubhnb z0\.s, z1\.d, z2\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_s64_untied, svint32_t, svint64_t,
+ z0_res = svrsubhnb_s64 (z1, z2),
+ z0_res = svrsubhnb (z1, z2))
+
+/*
+** rsubhnb_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** rsubhnb z0\.s, z0\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_x0_s64_tied1, svint32_t, svint64_t, int64_t,
+ z0_res = svrsubhnb_n_s64 (z0, x0),
+ z0_res = svrsubhnb (z0, x0))
+
+/*
+** rsubhnb_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** rsubhnb z0\.s, z1\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_x0_s64_untied, svint32_t, svint64_t, int64_t,
+ z0_res = svrsubhnb_n_s64 (z1, x0),
+ z0_res = svrsubhnb (z1, x0))
+
+/*
+** rsubhnb_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** rsubhnb z0\.s, z0\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_s64_tied1, svint32_t, svint64_t,
+ z0_res = svrsubhnb_n_s64 (z0, 11),
+ z0_res = svrsubhnb (z0, 11))
+
+/*
+** rsubhnb_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** rsubhnb z0\.s, z1\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_s64_untied, svint32_t, svint64_t,
+ z0_res = svrsubhnb_n_s64 (z1, 11),
+ z0_res = svrsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnb_u16_tied1:
+** rsubhnb z0\.b, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svrsubhnb_u16 (z0, z1),
+ z0_res = svrsubhnb (z0, z1))
+
+/*
+** rsubhnb_u16_tied2:
+** rsubhnb z0\.b, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_u16_tied2, svuint8_t, svuint16_t,
+ z0_res = svrsubhnb_u16 (z1, z0),
+ z0_res = svrsubhnb (z1, z0))
+
+/*
+** rsubhnb_u16_untied:
+** rsubhnb z0\.b, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svrsubhnb_u16 (z1, z2),
+ z0_res = svrsubhnb (z1, z2))
+
+/*
+** rsubhnb_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** rsubhnb z0\.b, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_w0_u16_tied1, svuint8_t, svuint16_t, uint16_t,
+ z0_res = svrsubhnb_n_u16 (z0, x0),
+ z0_res = svrsubhnb (z0, x0))
+
+/*
+** rsubhnb_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** rsubhnb z0\.b, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_w0_u16_untied, svuint8_t, svuint16_t, uint16_t,
+ z0_res = svrsubhnb_n_u16 (z1, x0),
+ z0_res = svrsubhnb (z1, x0))
+
+/*
+** rsubhnb_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** rsubhnb z0\.b, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svrsubhnb_n_u16 (z0, 11),
+ z0_res = svrsubhnb (z0, 11))
+
+/*
+** rsubhnb_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** rsubhnb z0\.b, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svrsubhnb_n_u16 (z1, 11),
+ z0_res = svrsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnb_u32_tied1:
+** rsubhnb z0\.h, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svrsubhnb_u32 (z0, z1),
+ z0_res = svrsubhnb (z0, z1))
+
+/*
+** rsubhnb_u32_tied2:
+** rsubhnb z0\.h, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_u32_tied2, svuint16_t, svuint32_t,
+ z0_res = svrsubhnb_u32 (z1, z0),
+ z0_res = svrsubhnb (z1, z0))
+
+/*
+** rsubhnb_u32_untied:
+** rsubhnb z0\.h, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svrsubhnb_u32 (z1, z2),
+ z0_res = svrsubhnb (z1, z2))
+
+/*
+** rsubhnb_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** rsubhnb z0\.h, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_w0_u32_tied1, svuint16_t, svuint32_t, uint32_t,
+ z0_res = svrsubhnb_n_u32 (z0, x0),
+ z0_res = svrsubhnb (z0, x0))
+
+/*
+** rsubhnb_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** rsubhnb z0\.h, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_w0_u32_untied, svuint16_t, svuint32_t, uint32_t,
+ z0_res = svrsubhnb_n_u32 (z1, x0),
+ z0_res = svrsubhnb (z1, x0))
+
+/*
+** rsubhnb_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** rsubhnb z0\.h, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svrsubhnb_n_u32 (z0, 11),
+ z0_res = svrsubhnb (z0, 11))
+
+/*
+** rsubhnb_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** rsubhnb z0\.h, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svrsubhnb_n_u32 (z1, 11),
+ z0_res = svrsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnb_u64_tied1:
+** rsubhnb z0\.s, z0\.d, z1\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svrsubhnb_u64 (z0, z1),
+ z0_res = svrsubhnb (z0, z1))
+
+/*
+** rsubhnb_u64_tied2:
+** rsubhnb z0\.s, z1\.d, z0\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_u64_tied2, svuint32_t, svuint64_t,
+ z0_res = svrsubhnb_u64 (z1, z0),
+ z0_res = svrsubhnb (z1, z0))
+
+/*
+** rsubhnb_u64_untied:
+** rsubhnb z0\.s, z1\.d, z2\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svrsubhnb_u64 (z1, z2),
+ z0_res = svrsubhnb (z1, z2))
+
+/*
+** rsubhnb_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** rsubhnb z0\.s, z0\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_x0_u64_tied1, svuint32_t, svuint64_t, uint64_t,
+ z0_res = svrsubhnb_n_u64 (z0, x0),
+ z0_res = svrsubhnb (z0, x0))
+
+/*
+** rsubhnb_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** rsubhnb z0\.s, z1\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (rsubhnb_x0_u64_untied, svuint32_t, svuint64_t, uint64_t,
+ z0_res = svrsubhnb_n_u64 (z1, x0),
+ z0_res = svrsubhnb (z1, x0))
+
+/*
+** rsubhnb_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** rsubhnb z0\.s, z0\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svrsubhnb_n_u64 (z0, 11),
+ z0_res = svrsubhnb (z0, 11))
+
+/*
+** rsubhnb_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** rsubhnb z0\.s, z1\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (rsubhnb_11_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svrsubhnb_n_u64 (z1, 11),
+ z0_res = svrsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnt_s16_tied1:
+** rsubhnt z0\.b, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_s16_tied1, svint8_t, svint16_t,
+ z0 = svrsubhnt_s16 (z0, z4, z5),
+ z0 = svrsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_s16_tied2, svint8_t, svint16_t,
+ z0_res = svrsubhnt_s16 (z4, z0, z1),
+ z0_res = svrsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_s16_tied3, svint8_t, svint16_t,
+ z0_res = svrsubhnt_s16 (z4, z1, z0),
+ z0_res = svrsubhnt (z4, z1, z0))
+
+/*
+** rsubhnt_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.b, z4\.h, z5\.h
+** |
+** rsubhnt z1\.b, z4\.h, z5\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_s16_untied, svint8_t, svint16_t,
+ z0 = svrsubhnt_s16 (z1, z4, z5),
+ z0 = svrsubhnt (z1, z4, z5))
+
+/*
+** rsubhnt_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** rsubhnt z0\.b, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_w0_s16_tied1, svint8_t, svint16_t, int16_t,
+ z0 = svrsubhnt_n_s16 (z0, z4, x0),
+ z0 = svrsubhnt (z0, z4, x0))
+
+/*
+** rsubhnt_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.b, z4\.h, \1
+** |
+** rsubhnt z1\.b, z4\.h, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_w0_s16_untied, svint8_t, svint16_t, int16_t,
+ z0 = svrsubhnt_n_s16 (z1, z4, x0),
+ z0 = svrsubhnt (z1, z4, x0))
+
+/*
+** rsubhnt_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** rsubhnt z0\.b, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_s16_tied1, svint8_t, svint16_t,
+ z0 = svrsubhnt_n_s16 (z0, z4, 11),
+ z0 = svrsubhnt (z0, z4, 11))
+
+/*
+** rsubhnt_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.b, z4\.h, \1
+** |
+** rsubhnt z1\.b, z4\.h, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_s16_untied, svint8_t, svint16_t,
+ z0 = svrsubhnt_n_s16 (z1, z4, 11),
+ z0 = svrsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnt_s32_tied1:
+** rsubhnt z0\.h, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_s32_tied1, svint16_t, svint32_t,
+ z0 = svrsubhnt_s32 (z0, z4, z5),
+ z0 = svrsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_s32_tied2, svint16_t, svint32_t,
+ z0_res = svrsubhnt_s32 (z4, z0, z1),
+ z0_res = svrsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_s32_tied3, svint16_t, svint32_t,
+ z0_res = svrsubhnt_s32 (z4, z1, z0),
+ z0_res = svrsubhnt (z4, z1, z0))
+
+/*
+** rsubhnt_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.h, z4\.s, z5\.s
+** |
+** rsubhnt z1\.h, z4\.s, z5\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_s32_untied, svint16_t, svint32_t,
+ z0 = svrsubhnt_s32 (z1, z4, z5),
+ z0 = svrsubhnt (z1, z4, z5))
+
+/*
+** rsubhnt_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** rsubhnt z0\.h, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_w0_s32_tied1, svint16_t, svint32_t, int32_t,
+ z0 = svrsubhnt_n_s32 (z0, z4, x0),
+ z0 = svrsubhnt (z0, z4, x0))
+
+/*
+** rsubhnt_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.h, z4\.s, \1
+** |
+** rsubhnt z1\.h, z4\.s, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_w0_s32_untied, svint16_t, svint32_t, int32_t,
+ z0 = svrsubhnt_n_s32 (z1, z4, x0),
+ z0 = svrsubhnt (z1, z4, x0))
+
+/*
+** rsubhnt_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** rsubhnt z0\.h, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_s32_tied1, svint16_t, svint32_t,
+ z0 = svrsubhnt_n_s32 (z0, z4, 11),
+ z0 = svrsubhnt (z0, z4, 11))
+
+/*
+** rsubhnt_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.h, z4\.s, \1
+** |
+** rsubhnt z1\.h, z4\.s, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_s32_untied, svint16_t, svint32_t,
+ z0 = svrsubhnt_n_s32 (z1, z4, 11),
+ z0 = svrsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnt_s64_tied1:
+** rsubhnt z0\.s, z4\.d, z5\.d
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_s64_tied1, svint32_t, svint64_t,
+ z0 = svrsubhnt_s64 (z0, z4, z5),
+ z0 = svrsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_s64_tied2, svint32_t, svint64_t,
+ z0_res = svrsubhnt_s64 (z4, z0, z1),
+ z0_res = svrsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_s64_tied3, svint32_t, svint64_t,
+ z0_res = svrsubhnt_s64 (z4, z1, z0),
+ z0_res = svrsubhnt (z4, z1, z0))
+
+/*
+** rsubhnt_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.s, z4\.d, z5\.d
+** |
+** rsubhnt z1\.s, z4\.d, z5\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_s64_untied, svint32_t, svint64_t,
+ z0 = svrsubhnt_s64 (z1, z4, z5),
+ z0 = svrsubhnt (z1, z4, z5))
+
+/*
+** rsubhnt_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** rsubhnt z0\.s, z4\.d, \1
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_x0_s64_tied1, svint32_t, svint64_t, int64_t,
+ z0 = svrsubhnt_n_s64 (z0, z4, x0),
+ z0 = svrsubhnt (z0, z4, x0))
+
+/*
+** rsubhnt_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.s, z4\.d, \1
+** |
+** rsubhnt z1\.s, z4\.d, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_x0_s64_untied, svint32_t, svint64_t, int64_t,
+ z0 = svrsubhnt_n_s64 (z1, z4, x0),
+ z0 = svrsubhnt (z1, z4, x0))
+
+/*
+** rsubhnt_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** rsubhnt z0\.s, z4\.d, \1
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_s64_tied1, svint32_t, svint64_t,
+ z0 = svrsubhnt_n_s64 (z0, z4, 11),
+ z0 = svrsubhnt (z0, z4, 11))
+
+/*
+** rsubhnt_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.s, z4\.d, \1
+** |
+** rsubhnt z1\.s, z4\.d, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_s64_untied, svint32_t, svint64_t,
+ z0 = svrsubhnt_n_s64 (z1, z4, 11),
+ z0 = svrsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnt_u16_tied1:
+** rsubhnt z0\.b, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svrsubhnt_u16 (z0, z4, z5),
+ z0 = svrsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_u16_tied2, svuint8_t, svuint16_t,
+ z0_res = svrsubhnt_u16 (z4, z0, z1),
+ z0_res = svrsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_u16_tied3, svuint8_t, svuint16_t,
+ z0_res = svrsubhnt_u16 (z4, z1, z0),
+ z0_res = svrsubhnt (z4, z1, z0))
+
+/*
+** rsubhnt_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.b, z4\.h, z5\.h
+** |
+** rsubhnt z1\.b, z4\.h, z5\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_u16_untied, svuint8_t, svuint16_t,
+ z0 = svrsubhnt_u16 (z1, z4, z5),
+ z0 = svrsubhnt (z1, z4, z5))
+
+/*
+** rsubhnt_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** rsubhnt z0\.b, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_w0_u16_tied1, svuint8_t, svuint16_t, uint16_t,
+ z0 = svrsubhnt_n_u16 (z0, z4, x0),
+ z0 = svrsubhnt (z0, z4, x0))
+
+/*
+** rsubhnt_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.b, z4\.h, \1
+** |
+** rsubhnt z1\.b, z4\.h, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_w0_u16_untied, svuint8_t, svuint16_t, uint16_t,
+ z0 = svrsubhnt_n_u16 (z1, z4, x0),
+ z0 = svrsubhnt (z1, z4, x0))
+
+/*
+** rsubhnt_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** rsubhnt z0\.b, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svrsubhnt_n_u16 (z0, z4, 11),
+ z0 = svrsubhnt (z0, z4, 11))
+
+/*
+** rsubhnt_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.b, z4\.h, \1
+** |
+** rsubhnt z1\.b, z4\.h, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_u16_untied, svuint8_t, svuint16_t,
+ z0 = svrsubhnt_n_u16 (z1, z4, 11),
+ z0 = svrsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnt_u32_tied1:
+** rsubhnt z0\.h, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svrsubhnt_u32 (z0, z4, z5),
+ z0 = svrsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_u32_tied2, svuint16_t, svuint32_t,
+ z0_res = svrsubhnt_u32 (z4, z0, z1),
+ z0_res = svrsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_u32_tied3, svuint16_t, svuint32_t,
+ z0_res = svrsubhnt_u32 (z4, z1, z0),
+ z0_res = svrsubhnt (z4, z1, z0))
+
+/*
+** rsubhnt_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.h, z4\.s, z5\.s
+** |
+** rsubhnt z1\.h, z4\.s, z5\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_u32_untied, svuint16_t, svuint32_t,
+ z0 = svrsubhnt_u32 (z1, z4, z5),
+ z0 = svrsubhnt (z1, z4, z5))
+
+/*
+** rsubhnt_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** rsubhnt z0\.h, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_w0_u32_tied1, svuint16_t, svuint32_t, uint32_t,
+ z0 = svrsubhnt_n_u32 (z0, z4, x0),
+ z0 = svrsubhnt (z0, z4, x0))
+
+/*
+** rsubhnt_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.h, z4\.s, \1
+** |
+** rsubhnt z1\.h, z4\.s, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_w0_u32_untied, svuint16_t, svuint32_t, uint32_t,
+ z0 = svrsubhnt_n_u32 (z1, z4, x0),
+ z0 = svrsubhnt (z1, z4, x0))
+
+/*
+** rsubhnt_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** rsubhnt z0\.h, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svrsubhnt_n_u32 (z0, z4, 11),
+ z0 = svrsubhnt (z0, z4, 11))
+
+/*
+** rsubhnt_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.h, z4\.s, \1
+** |
+** rsubhnt z1\.h, z4\.s, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_u32_untied, svuint16_t, svuint32_t,
+ z0 = svrsubhnt_n_u32 (z1, z4, 11),
+ z0 = svrsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** rsubhnt_u64_tied1:
+** rsubhnt z0\.s, z4\.d, z5\.d
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svrsubhnt_u64 (z0, z4, z5),
+ z0 = svrsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_u64_tied2, svuint32_t, svuint64_t,
+ z0_res = svrsubhnt_u64 (z4, z0, z1),
+ z0_res = svrsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (rsubhnt_u64_tied3, svuint32_t, svuint64_t,
+ z0_res = svrsubhnt_u64 (z4, z1, z0),
+ z0_res = svrsubhnt (z4, z1, z0))
+
+/*
+** rsubhnt_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.s, z4\.d, z5\.d
+** |
+** rsubhnt z1\.s, z4\.d, z5\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_u64_untied, svuint32_t, svuint64_t,
+ z0 = svrsubhnt_u64 (z1, z4, z5),
+ z0 = svrsubhnt (z1, z4, z5))
+
+/*
+** rsubhnt_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** rsubhnt z0\.s, z4\.d, \1
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_x0_u64_tied1, svuint32_t, svuint64_t, uint64_t,
+ z0 = svrsubhnt_n_u64 (z0, z4, x0),
+ z0 = svrsubhnt (z0, z4, x0))
+
+/*
+** rsubhnt_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.s, z4\.d, \1
+** |
+** rsubhnt z1\.s, z4\.d, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (rsubhnt_x0_u64_untied, svuint32_t, svuint64_t, uint64_t,
+ z0 = svrsubhnt_n_u64 (z1, z4, x0),
+ z0 = svrsubhnt (z1, z4, x0))
+
+/*
+** rsubhnt_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** rsubhnt z0\.s, z4\.d, \1
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svrsubhnt_n_u64 (z0, z4, 11),
+ z0 = svrsubhnt (z0, z4, 11))
+
+/*
+** rsubhnt_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** mov z0\.d, z1\.d
+** rsubhnt z0\.s, z4\.d, \1
+** |
+** rsubhnt z1\.s, z4\.d, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (rsubhnt_11_u64_untied, svuint32_t, svuint64_t,
+ z0 = svrsubhnt_n_u64 (z1, z4, 11),
+ z0 = svrsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sbclb_u32_tied1:
+** sbclb z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_u32_tied1, svuint32_t,
+ z0 = svsbclb_u32 (z0, z1, z2),
+ z0 = svsbclb (z0, z1, z2))
+
+/*
+** sbclb_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sbclb z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_u32_tied2, svuint32_t,
+ z0 = svsbclb_u32 (z1, z0, z2),
+ z0 = svsbclb (z1, z0, z2))
+
+/*
+** sbclb_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sbclb z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_u32_tied3, svuint32_t,
+ z0 = svsbclb_u32 (z1, z2, z0),
+ z0 = svsbclb (z1, z2, z0))
+
+/*
+** sbclb_u32_untied:
+** movprfx z0, z1
+** sbclb z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_u32_untied, svuint32_t,
+ z0 = svsbclb_u32 (z1, z2, z3),
+ z0 = svsbclb (z1, z2, z3))
+
+/*
+** sbclb_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** sbclb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclb_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svsbclb_n_u32 (z0, z1, x0),
+ z0 = svsbclb (z0, z1, x0))
+
+/*
+** sbclb_w0_u32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sbclb z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclb_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svsbclb_n_u32 (z1, z0, x0),
+ z0 = svsbclb (z1, z0, x0))
+
+/*
+** sbclb_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sbclb z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclb_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svsbclb_n_u32 (z1, z2, x0),
+ z0 = svsbclb (z1, z2, x0))
+
+/*
+** sbclb_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** sbclb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_11_u32_tied1, svuint32_t,
+ z0 = svsbclb_n_u32 (z0, z1, 11),
+ z0 = svsbclb (z0, z1, 11))
+
+/*
+** sbclb_11_u32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sbclb z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_11_u32_tied2, svuint32_t,
+ z0 = svsbclb_n_u32 (z1, z0, 11),
+ z0 = svsbclb (z1, z0, 11))
+
+/*
+** sbclb_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sbclb z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_11_u32_untied, svuint32_t,
+ z0 = svsbclb_n_u32 (z1, z2, 11),
+ z0 = svsbclb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sbclb_u64_tied1:
+** sbclb z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_u64_tied1, svuint64_t,
+ z0 = svsbclb_u64 (z0, z1, z2),
+ z0 = svsbclb (z0, z1, z2))
+
+/*
+** sbclb_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sbclb z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_u64_tied2, svuint64_t,
+ z0 = svsbclb_u64 (z1, z0, z2),
+ z0 = svsbclb (z1, z0, z2))
+
+/*
+** sbclb_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sbclb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_u64_tied3, svuint64_t,
+ z0 = svsbclb_u64 (z1, z2, z0),
+ z0 = svsbclb (z1, z2, z0))
+
+/*
+** sbclb_u64_untied:
+** movprfx z0, z1
+** sbclb z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_u64_untied, svuint64_t,
+ z0 = svsbclb_u64 (z1, z2, z3),
+ z0 = svsbclb (z1, z2, z3))
+
+/*
+** sbclb_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** sbclb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclb_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svsbclb_n_u64 (z0, z1, x0),
+ z0 = svsbclb (z0, z1, x0))
+
+/*
+** sbclb_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sbclb z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclb_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svsbclb_n_u64 (z1, z0, x0),
+ z0 = svsbclb (z1, z0, x0))
+
+/*
+** sbclb_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** sbclb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclb_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svsbclb_n_u64 (z1, z2, x0),
+ z0 = svsbclb (z1, z2, x0))
+
+/*
+** sbclb_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** sbclb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_11_u64_tied1, svuint64_t,
+ z0 = svsbclb_n_u64 (z0, z1, 11),
+ z0 = svsbclb (z0, z1, 11))
+
+/*
+** sbclb_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sbclb z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_11_u64_tied2, svuint64_t,
+ z0 = svsbclb_n_u64 (z1, z0, 11),
+ z0 = svsbclb (z1, z0, 11))
+
+/*
+** sbclb_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** sbclb z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclb_11_u64_untied, svuint64_t,
+ z0 = svsbclb_n_u64 (z1, z2, 11),
+ z0 = svsbclb (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sbclt_u32_tied1:
+** sbclt z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_u32_tied1, svuint32_t,
+ z0 = svsbclt_u32 (z0, z1, z2),
+ z0 = svsbclt (z0, z1, z2))
+
+/*
+** sbclt_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sbclt z0\.s, \1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_u32_tied2, svuint32_t,
+ z0 = svsbclt_u32 (z1, z0, z2),
+ z0 = svsbclt (z1, z0, z2))
+
+/*
+** sbclt_u32_tied3:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sbclt z0\.s, z2\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_u32_tied3, svuint32_t,
+ z0 = svsbclt_u32 (z1, z2, z0),
+ z0 = svsbclt (z1, z2, z0))
+
+/*
+** sbclt_u32_untied:
+** movprfx z0, z1
+** sbclt z0\.s, z2\.s, z3\.s
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_u32_untied, svuint32_t,
+ z0 = svsbclt_u32 (z1, z2, z3),
+ z0 = svsbclt (z1, z2, z3))
+
+/*
+** sbclt_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** sbclt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclt_w0_u32_tied1, svuint32_t, uint32_t,
+ z0 = svsbclt_n_u32 (z0, z1, x0),
+ z0 = svsbclt (z0, z1, x0))
+
+/*
+** sbclt_w0_u32_tied2:
+** mov (z[0-9]+\.s), w0
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sbclt z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclt_w0_u32_tied2, svuint32_t, uint32_t,
+ z0 = svsbclt_n_u32 (z1, z0, x0),
+ z0 = svsbclt (z1, z0, x0))
+
+/*
+** sbclt_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** sbclt z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclt_w0_u32_untied, svuint32_t, uint32_t,
+ z0 = svsbclt_n_u32 (z1, z2, x0),
+ z0 = svsbclt (z1, z2, x0))
+
+/*
+** sbclt_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** sbclt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_11_u32_tied1, svuint32_t,
+ z0 = svsbclt_n_u32 (z0, z1, 11),
+ z0 = svsbclt (z0, z1, 11))
+
+/*
+** sbclt_11_u32_tied2:
+** mov (z[0-9]+\.s), #11
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** sbclt z0\.s, \2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_11_u32_tied2, svuint32_t,
+ z0 = svsbclt_n_u32 (z1, z0, 11),
+ z0 = svsbclt (z1, z0, 11))
+
+/*
+** sbclt_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** movprfx z0, z1
+** sbclt z0\.s, z2\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_11_u32_untied, svuint32_t,
+ z0 = svsbclt_n_u32 (z1, z2, 11),
+ z0 = svsbclt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sbclt_u64_tied1:
+** sbclt z0\.d, z1\.d, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_u64_tied1, svuint64_t,
+ z0 = svsbclt_u64 (z0, z1, z2),
+ z0 = svsbclt (z0, z1, z2))
+
+/*
+** sbclt_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sbclt z0\.d, \1, z2\.d
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_u64_tied2, svuint64_t,
+ z0 = svsbclt_u64 (z1, z0, z2),
+ z0 = svsbclt (z1, z0, z2))
+
+/*
+** sbclt_u64_tied3:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sbclt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_u64_tied3, svuint64_t,
+ z0 = svsbclt_u64 (z1, z2, z0),
+ z0 = svsbclt (z1, z2, z0))
+
+/*
+** sbclt_u64_untied:
+** movprfx z0, z1
+** sbclt z0\.d, z2\.d, z3\.d
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_u64_untied, svuint64_t,
+ z0 = svsbclt_u64 (z1, z2, z3),
+ z0 = svsbclt (z1, z2, z3))
+
+/*
+** sbclt_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** sbclt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclt_x0_u64_tied1, svuint64_t, uint64_t,
+ z0 = svsbclt_n_u64 (z0, z1, x0),
+ z0 = svsbclt (z0, z1, x0))
+
+/*
+** sbclt_x0_u64_tied2:
+** mov (z[0-9]+\.d), x0
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sbclt z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclt_x0_u64_tied2, svuint64_t, uint64_t,
+ z0 = svsbclt_n_u64 (z1, z0, x0),
+ z0 = svsbclt (z1, z0, x0))
+
+/*
+** sbclt_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** sbclt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sbclt_x0_u64_untied, svuint64_t, uint64_t,
+ z0 = svsbclt_n_u64 (z1, z2, x0),
+ z0 = svsbclt (z1, z2, x0))
+
+/*
+** sbclt_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** sbclt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_11_u64_tied1, svuint64_t,
+ z0 = svsbclt_n_u64 (z0, z1, 11),
+ z0 = svsbclt (z0, z1, 11))
+
+/*
+** sbclt_11_u64_tied2:
+** mov (z[0-9]+\.d), #11
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** sbclt z0\.d, \2, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_11_u64_tied2, svuint64_t,
+ z0 = svsbclt_n_u64 (z1, z0, 11),
+ z0 = svsbclt (z1, z0, 11))
+
+/*
+** sbclt_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** movprfx z0, z1
+** sbclt z0\.d, z2\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sbclt_11_u64_untied, svuint64_t,
+ z0 = svsbclt_n_u64 (z1, z2, 11),
+ z0 = svsbclt (z1, z2, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllb_0_s16_tied1:
+** sshllb z0\.h, z0\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_s16_tied1, svint16_t, svint8_t,
+ z0_res = svshllb_n_s16 (z0, 0),
+ z0_res = svshllb (z0, 0))
+
+/*
+** shllb_0_s16_untied:
+** sshllb z0\.h, z1\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_s16_untied, svint16_t, svint8_t,
+ z0_res = svshllb_n_s16 (z1, 0),
+ z0_res = svshllb (z1, 0))
+
+/*
+** shllb_1_s16_tied1:
+** sshllb z0\.h, z0\.b, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_s16_tied1, svint16_t, svint8_t,
+ z0_res = svshllb_n_s16 (z0, 1),
+ z0_res = svshllb (z0, 1))
+
+/*
+** shllb_1_s16_untied:
+** sshllb z0\.h, z1\.b, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_s16_untied, svint16_t, svint8_t,
+ z0_res = svshllb_n_s16 (z1, 1),
+ z0_res = svshllb (z1, 1))
+
+/*
+** shllb_7_s16_tied1:
+** sshllb z0\.h, z0\.b, #7
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_7_s16_tied1, svint16_t, svint8_t,
+ z0_res = svshllb_n_s16 (z0, 7),
+ z0_res = svshllb (z0, 7))
+
+/*
+** shllb_7_s16_untied:
+** sshllb z0\.h, z1\.b, #7
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_7_s16_untied, svint16_t, svint8_t,
+ z0_res = svshllb_n_s16 (z1, 7),
+ z0_res = svshllb (z1, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllb_0_s32_tied1:
+** sshllb z0\.s, z0\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_s32_tied1, svint32_t, svint16_t,
+ z0_res = svshllb_n_s32 (z0, 0),
+ z0_res = svshllb (z0, 0))
+
+/*
+** shllb_0_s32_untied:
+** sshllb z0\.s, z1\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_s32_untied, svint32_t, svint16_t,
+ z0_res = svshllb_n_s32 (z1, 0),
+ z0_res = svshllb (z1, 0))
+
+/*
+** shllb_1_s32_tied1:
+** sshllb z0\.s, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_s32_tied1, svint32_t, svint16_t,
+ z0_res = svshllb_n_s32 (z0, 1),
+ z0_res = svshllb (z0, 1))
+
+/*
+** shllb_1_s32_untied:
+** sshllb z0\.s, z1\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_s32_untied, svint32_t, svint16_t,
+ z0_res = svshllb_n_s32 (z1, 1),
+ z0_res = svshllb (z1, 1))
+
+/*
+** shllb_15_s32_tied1:
+** sshllb z0\.s, z0\.h, #15
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_15_s32_tied1, svint32_t, svint16_t,
+ z0_res = svshllb_n_s32 (z0, 15),
+ z0_res = svshllb (z0, 15))
+
+/*
+** shllb_15_s32_untied:
+** sshllb z0\.s, z1\.h, #15
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_15_s32_untied, svint32_t, svint16_t,
+ z0_res = svshllb_n_s32 (z1, 15),
+ z0_res = svshllb (z1, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllb_0_s64_tied1:
+** sshllb z0\.d, z0\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_s64_tied1, svint64_t, svint32_t,
+ z0_res = svshllb_n_s64 (z0, 0),
+ z0_res = svshllb (z0, 0))
+
+/*
+** shllb_0_s64_untied:
+** sshllb z0\.d, z1\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_s64_untied, svint64_t, svint32_t,
+ z0_res = svshllb_n_s64 (z1, 0),
+ z0_res = svshllb (z1, 0))
+
+/*
+** shllb_1_s64_tied1:
+** sshllb z0\.d, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_s64_tied1, svint64_t, svint32_t,
+ z0_res = svshllb_n_s64 (z0, 1),
+ z0_res = svshllb (z0, 1))
+
+/*
+** shllb_1_s64_untied:
+** sshllb z0\.d, z1\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_s64_untied, svint64_t, svint32_t,
+ z0_res = svshllb_n_s64 (z1, 1),
+ z0_res = svshllb (z1, 1))
+
+/*
+** shllb_31_s64_tied1:
+** sshllb z0\.d, z0\.s, #31
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_31_s64_tied1, svint64_t, svint32_t,
+ z0_res = svshllb_n_s64 (z0, 31),
+ z0_res = svshllb (z0, 31))
+
+/*
+** shllb_31_s64_untied:
+** sshllb z0\.d, z1\.s, #31
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_31_s64_untied, svint64_t, svint32_t,
+ z0_res = svshllb_n_s64 (z1, 31),
+ z0_res = svshllb (z1, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllb_0_u16_tied1:
+** ushllb z0\.h, z0\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svshllb_n_u16 (z0, 0),
+ z0_res = svshllb (z0, 0))
+
+/*
+** shllb_0_u16_untied:
+** ushllb z0\.h, z1\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svshllb_n_u16 (z1, 0),
+ z0_res = svshllb (z1, 0))
+
+/*
+** shllb_1_u16_tied1:
+** ushllb z0\.h, z0\.b, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svshllb_n_u16 (z0, 1),
+ z0_res = svshllb (z0, 1))
+
+/*
+** shllb_1_u16_untied:
+** ushllb z0\.h, z1\.b, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svshllb_n_u16 (z1, 1),
+ z0_res = svshllb (z1, 1))
+
+/*
+** shllb_7_u16_tied1:
+** ushllb z0\.h, z0\.b, #7
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_7_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svshllb_n_u16 (z0, 7),
+ z0_res = svshllb (z0, 7))
+
+/*
+** shllb_7_u16_untied:
+** ushllb z0\.h, z1\.b, #7
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_7_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svshllb_n_u16 (z1, 7),
+ z0_res = svshllb (z1, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllb_0_u32_tied1:
+** ushllb z0\.s, z0\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svshllb_n_u32 (z0, 0),
+ z0_res = svshllb (z0, 0))
+
+/*
+** shllb_0_u32_untied:
+** ushllb z0\.s, z1\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svshllb_n_u32 (z1, 0),
+ z0_res = svshllb (z1, 0))
+
+/*
+** shllb_1_u32_tied1:
+** ushllb z0\.s, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svshllb_n_u32 (z0, 1),
+ z0_res = svshllb (z0, 1))
+
+/*
+** shllb_1_u32_untied:
+** ushllb z0\.s, z1\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svshllb_n_u32 (z1, 1),
+ z0_res = svshllb (z1, 1))
+
+/*
+** shllb_15_u32_tied1:
+** ushllb z0\.s, z0\.h, #15
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_15_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svshllb_n_u32 (z0, 15),
+ z0_res = svshllb (z0, 15))
+
+/*
+** shllb_15_u32_untied:
+** ushllb z0\.s, z1\.h, #15
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_15_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svshllb_n_u32 (z1, 15),
+ z0_res = svshllb (z1, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllb_0_u64_tied1:
+** ushllb z0\.d, z0\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svshllb_n_u64 (z0, 0),
+ z0_res = svshllb (z0, 0))
+
+/*
+** shllb_0_u64_untied:
+** ushllb z0\.d, z1\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_0_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svshllb_n_u64 (z1, 0),
+ z0_res = svshllb (z1, 0))
+
+/*
+** shllb_1_u64_tied1:
+** ushllb z0\.d, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svshllb_n_u64 (z0, 1),
+ z0_res = svshllb (z0, 1))
+
+/*
+** shllb_1_u64_untied:
+** ushllb z0\.d, z1\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_1_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svshllb_n_u64 (z1, 1),
+ z0_res = svshllb (z1, 1))
+
+/*
+** shllb_31_u64_tied1:
+** ushllb z0\.d, z0\.s, #31
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_31_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svshllb_n_u64 (z0, 31),
+ z0_res = svshllb (z0, 31))
+
+/*
+** shllb_31_u64_untied:
+** ushllb z0\.d, z1\.s, #31
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllb_31_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svshllb_n_u64 (z1, 31),
+ z0_res = svshllb (z1, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllt_0_s16_tied1:
+** sshllt z0\.h, z0\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_s16_tied1, svint16_t, svint8_t,
+ z0_res = svshllt_n_s16 (z0, 0),
+ z0_res = svshllt (z0, 0))
+
+/*
+** shllt_0_s16_untied:
+** sshllt z0\.h, z1\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_s16_untied, svint16_t, svint8_t,
+ z0_res = svshllt_n_s16 (z1, 0),
+ z0_res = svshllt (z1, 0))
+
+/*
+** shllt_1_s16_tied1:
+** sshllt z0\.h, z0\.b, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_s16_tied1, svint16_t, svint8_t,
+ z0_res = svshllt_n_s16 (z0, 1),
+ z0_res = svshllt (z0, 1))
+
+/*
+** shllt_1_s16_untied:
+** sshllt z0\.h, z1\.b, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_s16_untied, svint16_t, svint8_t,
+ z0_res = svshllt_n_s16 (z1, 1),
+ z0_res = svshllt (z1, 1))
+
+/*
+** shllt_7_s16_tied1:
+** sshllt z0\.h, z0\.b, #7
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_7_s16_tied1, svint16_t, svint8_t,
+ z0_res = svshllt_n_s16 (z0, 7),
+ z0_res = svshllt (z0, 7))
+
+/*
+** shllt_7_s16_untied:
+** sshllt z0\.h, z1\.b, #7
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_7_s16_untied, svint16_t, svint8_t,
+ z0_res = svshllt_n_s16 (z1, 7),
+ z0_res = svshllt (z1, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllt_0_s32_tied1:
+** sshllt z0\.s, z0\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_s32_tied1, svint32_t, svint16_t,
+ z0_res = svshllt_n_s32 (z0, 0),
+ z0_res = svshllt (z0, 0))
+
+/*
+** shllt_0_s32_untied:
+** sshllt z0\.s, z1\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_s32_untied, svint32_t, svint16_t,
+ z0_res = svshllt_n_s32 (z1, 0),
+ z0_res = svshllt (z1, 0))
+
+/*
+** shllt_1_s32_tied1:
+** sshllt z0\.s, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_s32_tied1, svint32_t, svint16_t,
+ z0_res = svshllt_n_s32 (z0, 1),
+ z0_res = svshllt (z0, 1))
+
+/*
+** shllt_1_s32_untied:
+** sshllt z0\.s, z1\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_s32_untied, svint32_t, svint16_t,
+ z0_res = svshllt_n_s32 (z1, 1),
+ z0_res = svshllt (z1, 1))
+
+/*
+** shllt_15_s32_tied1:
+** sshllt z0\.s, z0\.h, #15
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_15_s32_tied1, svint32_t, svint16_t,
+ z0_res = svshllt_n_s32 (z0, 15),
+ z0_res = svshllt (z0, 15))
+
+/*
+** shllt_15_s32_untied:
+** sshllt z0\.s, z1\.h, #15
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_15_s32_untied, svint32_t, svint16_t,
+ z0_res = svshllt_n_s32 (z1, 15),
+ z0_res = svshllt (z1, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllt_0_s64_tied1:
+** sshllt z0\.d, z0\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_s64_tied1, svint64_t, svint32_t,
+ z0_res = svshllt_n_s64 (z0, 0),
+ z0_res = svshllt (z0, 0))
+
+/*
+** shllt_0_s64_untied:
+** sshllt z0\.d, z1\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_s64_untied, svint64_t, svint32_t,
+ z0_res = svshllt_n_s64 (z1, 0),
+ z0_res = svshllt (z1, 0))
+
+/*
+** shllt_1_s64_tied1:
+** sshllt z0\.d, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_s64_tied1, svint64_t, svint32_t,
+ z0_res = svshllt_n_s64 (z0, 1),
+ z0_res = svshllt (z0, 1))
+
+/*
+** shllt_1_s64_untied:
+** sshllt z0\.d, z1\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_s64_untied, svint64_t, svint32_t,
+ z0_res = svshllt_n_s64 (z1, 1),
+ z0_res = svshllt (z1, 1))
+
+/*
+** shllt_31_s64_tied1:
+** sshllt z0\.d, z0\.s, #31
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_31_s64_tied1, svint64_t, svint32_t,
+ z0_res = svshllt_n_s64 (z0, 31),
+ z0_res = svshllt (z0, 31))
+
+/*
+** shllt_31_s64_untied:
+** sshllt z0\.d, z1\.s, #31
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_31_s64_untied, svint64_t, svint32_t,
+ z0_res = svshllt_n_s64 (z1, 31),
+ z0_res = svshllt (z1, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllt_0_u16_tied1:
+** ushllt z0\.h, z0\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svshllt_n_u16 (z0, 0),
+ z0_res = svshllt (z0, 0))
+
+/*
+** shllt_0_u16_untied:
+** ushllt z0\.h, z1\.b, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svshllt_n_u16 (z1, 0),
+ z0_res = svshllt (z1, 0))
+
+/*
+** shllt_1_u16_tied1:
+** ushllt z0\.h, z0\.b, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svshllt_n_u16 (z0, 1),
+ z0_res = svshllt (z0, 1))
+
+/*
+** shllt_1_u16_untied:
+** ushllt z0\.h, z1\.b, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svshllt_n_u16 (z1, 1),
+ z0_res = svshllt (z1, 1))
+
+/*
+** shllt_7_u16_tied1:
+** ushllt z0\.h, z0\.b, #7
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_7_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svshllt_n_u16 (z0, 7),
+ z0_res = svshllt (z0, 7))
+
+/*
+** shllt_7_u16_untied:
+** ushllt z0\.h, z1\.b, #7
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_7_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svshllt_n_u16 (z1, 7),
+ z0_res = svshllt (z1, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllt_0_u32_tied1:
+** ushllt z0\.s, z0\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svshllt_n_u32 (z0, 0),
+ z0_res = svshllt (z0, 0))
+
+/*
+** shllt_0_u32_untied:
+** ushllt z0\.s, z1\.h, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svshllt_n_u32 (z1, 0),
+ z0_res = svshllt (z1, 0))
+
+/*
+** shllt_1_u32_tied1:
+** ushllt z0\.s, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svshllt_n_u32 (z0, 1),
+ z0_res = svshllt (z0, 1))
+
+/*
+** shllt_1_u32_untied:
+** ushllt z0\.s, z1\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svshllt_n_u32 (z1, 1),
+ z0_res = svshllt (z1, 1))
+
+/*
+** shllt_15_u32_tied1:
+** ushllt z0\.s, z0\.h, #15
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_15_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svshllt_n_u32 (z0, 15),
+ z0_res = svshllt (z0, 15))
+
+/*
+** shllt_15_u32_untied:
+** ushllt z0\.s, z1\.h, #15
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_15_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svshllt_n_u32 (z1, 15),
+ z0_res = svshllt (z1, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shllt_0_u64_tied1:
+** ushllt z0\.d, z0\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svshllt_n_u64 (z0, 0),
+ z0_res = svshllt (z0, 0))
+
+/*
+** shllt_0_u64_untied:
+** ushllt z0\.d, z1\.s, #0
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_0_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svshllt_n_u64 (z1, 0),
+ z0_res = svshllt (z1, 0))
+
+/*
+** shllt_1_u64_tied1:
+** ushllt z0\.d, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svshllt_n_u64 (z0, 1),
+ z0_res = svshllt (z0, 1))
+
+/*
+** shllt_1_u64_untied:
+** ushllt z0\.d, z1\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_1_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svshllt_n_u64 (z1, 1),
+ z0_res = svshllt (z1, 1))
+
+/*
+** shllt_31_u64_tied1:
+** ushllt z0\.d, z0\.s, #31
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_31_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svshllt_n_u64 (z0, 31),
+ z0_res = svshllt (z0, 31))
+
+/*
+** shllt_31_u64_untied:
+** ushllt z0\.d, z1\.s, #31
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shllt_31_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svshllt_n_u64 (z1, 31),
+ z0_res = svshllt (z1, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnb_1_s16:
+** shrnb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_1_s16, svint8_t, svint16_t,
+ z0_res = svshrnb_n_s16 (z0, 1),
+ z0_res = svshrnb (z0, 1))
+
+/*
+** shrnb_2_s16:
+** shrnb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_2_s16, svint8_t, svint16_t,
+ z0_res = svshrnb_n_s16 (z0, 2),
+ z0_res = svshrnb (z0, 2))
+
+/*
+** shrnb_8_s16_tied1:
+** shrnb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_8_s16_tied1, svint8_t, svint16_t,
+ z0_res = svshrnb_n_s16 (z0, 8),
+ z0_res = svshrnb (z0, 8))
+
+/*
+** shrnb_8_s16_untied:
+** shrnb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_8_s16_untied, svint8_t, svint16_t,
+ z0_res = svshrnb_n_s16 (z1, 8),
+ z0_res = svshrnb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnb_1_s32:
+** shrnb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_1_s32, svint16_t, svint32_t,
+ z0_res = svshrnb_n_s32 (z0, 1),
+ z0_res = svshrnb (z0, 1))
+
+/*
+** shrnb_2_s32:
+** shrnb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_2_s32, svint16_t, svint32_t,
+ z0_res = svshrnb_n_s32 (z0, 2),
+ z0_res = svshrnb (z0, 2))
+
+/*
+** shrnb_16_s32_tied1:
+** shrnb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_16_s32_tied1, svint16_t, svint32_t,
+ z0_res = svshrnb_n_s32 (z0, 16),
+ z0_res = svshrnb (z0, 16))
+
+/*
+** shrnb_16_s32_untied:
+** shrnb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_16_s32_untied, svint16_t, svint32_t,
+ z0_res = svshrnb_n_s32 (z1, 16),
+ z0_res = svshrnb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnb_1_s64:
+** shrnb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_1_s64, svint32_t, svint64_t,
+ z0_res = svshrnb_n_s64 (z0, 1),
+ z0_res = svshrnb (z0, 1))
+
+/*
+** shrnb_2_s64:
+** shrnb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_2_s64, svint32_t, svint64_t,
+ z0_res = svshrnb_n_s64 (z0, 2),
+ z0_res = svshrnb (z0, 2))
+
+/*
+** shrnb_32_s64_tied1:
+** shrnb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_32_s64_tied1, svint32_t, svint64_t,
+ z0_res = svshrnb_n_s64 (z0, 32),
+ z0_res = svshrnb (z0, 32))
+
+/*
+** shrnb_32_s64_untied:
+** shrnb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_32_s64_untied, svint32_t, svint64_t,
+ z0_res = svshrnb_n_s64 (z1, 32),
+ z0_res = svshrnb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnb_1_u16:
+** shrnb z0\.b, z0\.h, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_1_u16, svuint8_t, svuint16_t,
+ z0_res = svshrnb_n_u16 (z0, 1),
+ z0_res = svshrnb (z0, 1))
+
+/*
+** shrnb_2_u16:
+** shrnb z0\.b, z0\.h, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_2_u16, svuint8_t, svuint16_t,
+ z0_res = svshrnb_n_u16 (z0, 2),
+ z0_res = svshrnb (z0, 2))
+
+/*
+** shrnb_8_u16_tied1:
+** shrnb z0\.b, z0\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_8_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svshrnb_n_u16 (z0, 8),
+ z0_res = svshrnb (z0, 8))
+
+/*
+** shrnb_8_u16_untied:
+** shrnb z0\.b, z1\.h, #8
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_8_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svshrnb_n_u16 (z1, 8),
+ z0_res = svshrnb (z1, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnb_1_u32:
+** shrnb z0\.h, z0\.s, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_1_u32, svuint16_t, svuint32_t,
+ z0_res = svshrnb_n_u32 (z0, 1),
+ z0_res = svshrnb (z0, 1))
+
+/*
+** shrnb_2_u32:
+** shrnb z0\.h, z0\.s, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_2_u32, svuint16_t, svuint32_t,
+ z0_res = svshrnb_n_u32 (z0, 2),
+ z0_res = svshrnb (z0, 2))
+
+/*
+** shrnb_16_u32_tied1:
+** shrnb z0\.h, z0\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_16_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svshrnb_n_u32 (z0, 16),
+ z0_res = svshrnb (z0, 16))
+
+/*
+** shrnb_16_u32_untied:
+** shrnb z0\.h, z1\.s, #16
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_16_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svshrnb_n_u32 (z1, 16),
+ z0_res = svshrnb (z1, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnb_1_u64:
+** shrnb z0\.s, z0\.d, #1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_1_u64, svuint32_t, svuint64_t,
+ z0_res = svshrnb_n_u64 (z0, 1),
+ z0_res = svshrnb (z0, 1))
+
+/*
+** shrnb_2_u64:
+** shrnb z0\.s, z0\.d, #2
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_2_u64, svuint32_t, svuint64_t,
+ z0_res = svshrnb_n_u64 (z0, 2),
+ z0_res = svshrnb (z0, 2))
+
+/*
+** shrnb_32_u64_tied1:
+** shrnb z0\.s, z0\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_32_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svshrnb_n_u64 (z0, 32),
+ z0_res = svshrnb (z0, 32))
+
+/*
+** shrnb_32_u64_untied:
+** shrnb z0\.s, z1\.d, #32
+** ret
+*/
+TEST_TYPE_CHANGE_Z (shrnb_32_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svshrnb_n_u64 (z1, 32),
+ z0_res = svshrnb (z1, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnt_1_s16:
+** shrnt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (shrnt_1_s16, svint8_t, svint16_t,
+ z0 = svshrnt_n_s16 (z0, z4, 1),
+ z0 = svshrnt (z0, z4, 1))
+
+/*
+** shrnt_2_s16:
+** shrnt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (shrnt_2_s16, svint8_t, svint16_t,
+ z0 = svshrnt_n_s16 (z0, z4, 2),
+ z0 = svshrnt (z0, z4, 2))
+
+/*
+** shrnt_8_s16_tied1:
+** shrnt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (shrnt_8_s16_tied1, svint8_t, svint16_t,
+ z0 = svshrnt_n_s16 (z0, z4, 8),
+ z0 = svshrnt (z0, z4, 8))
+
+/*
+** shrnt_8_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** shrnt z0\.b, z4\.h, #8
+** |
+** shrnt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (shrnt_8_s16_untied, svint8_t, svint16_t,
+ z0 = svshrnt_n_s16 (z1, z4, 8),
+ z0 = svshrnt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnt_1_s32:
+** shrnt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (shrnt_1_s32, svint16_t, svint32_t,
+ z0 = svshrnt_n_s32 (z0, z4, 1),
+ z0 = svshrnt (z0, z4, 1))
+
+/*
+** shrnt_2_s32:
+** shrnt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (shrnt_2_s32, svint16_t, svint32_t,
+ z0 = svshrnt_n_s32 (z0, z4, 2),
+ z0 = svshrnt (z0, z4, 2))
+
+/*
+** shrnt_16_s32_tied1:
+** shrnt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (shrnt_16_s32_tied1, svint16_t, svint32_t,
+ z0 = svshrnt_n_s32 (z0, z4, 16),
+ z0 = svshrnt (z0, z4, 16))
+
+/*
+** shrnt_16_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** shrnt z0\.h, z4\.s, #16
+** |
+** shrnt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (shrnt_16_s32_untied, svint16_t, svint32_t,
+ z0 = svshrnt_n_s32 (z1, z4, 16),
+ z0 = svshrnt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnt_1_s64:
+** shrnt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (shrnt_1_s64, svint32_t, svint64_t,
+ z0 = svshrnt_n_s64 (z0, z4, 1),
+ z0 = svshrnt (z0, z4, 1))
+
+/*
+** shrnt_2_s64:
+** shrnt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (shrnt_2_s64, svint32_t, svint64_t,
+ z0 = svshrnt_n_s64 (z0, z4, 2),
+ z0 = svshrnt (z0, z4, 2))
+
+/*
+** shrnt_32_s64_tied1:
+** shrnt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (shrnt_32_s64_tied1, svint32_t, svint64_t,
+ z0 = svshrnt_n_s64 (z0, z4, 32),
+ z0 = svshrnt (z0, z4, 32))
+
+/*
+** shrnt_32_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** shrnt z0\.s, z4\.d, #32
+** |
+** shrnt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (shrnt_32_s64_untied, svint32_t, svint64_t,
+ z0 = svshrnt_n_s64 (z1, z4, 32),
+ z0 = svshrnt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnt_1_u16:
+** shrnt z0\.b, z4\.h, #1
+** ret
+*/
+TEST_DUAL_Z (shrnt_1_u16, svuint8_t, svuint16_t,
+ z0 = svshrnt_n_u16 (z0, z4, 1),
+ z0 = svshrnt (z0, z4, 1))
+
+/*
+** shrnt_2_u16:
+** shrnt z0\.b, z4\.h, #2
+** ret
+*/
+TEST_DUAL_Z (shrnt_2_u16, svuint8_t, svuint16_t,
+ z0 = svshrnt_n_u16 (z0, z4, 2),
+ z0 = svshrnt (z0, z4, 2))
+
+/*
+** shrnt_8_u16_tied1:
+** shrnt z0\.b, z4\.h, #8
+** ret
+*/
+TEST_DUAL_Z (shrnt_8_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svshrnt_n_u16 (z0, z4, 8),
+ z0 = svshrnt (z0, z4, 8))
+
+/*
+** shrnt_8_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** shrnt z0\.b, z4\.h, #8
+** |
+** shrnt z1\.b, z4\.h, #8
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (shrnt_8_u16_untied, svuint8_t, svuint16_t,
+ z0 = svshrnt_n_u16 (z1, z4, 8),
+ z0 = svshrnt (z1, z4, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnt_1_u32:
+** shrnt z0\.h, z4\.s, #1
+** ret
+*/
+TEST_DUAL_Z (shrnt_1_u32, svuint16_t, svuint32_t,
+ z0 = svshrnt_n_u32 (z0, z4, 1),
+ z0 = svshrnt (z0, z4, 1))
+
+/*
+** shrnt_2_u32:
+** shrnt z0\.h, z4\.s, #2
+** ret
+*/
+TEST_DUAL_Z (shrnt_2_u32, svuint16_t, svuint32_t,
+ z0 = svshrnt_n_u32 (z0, z4, 2),
+ z0 = svshrnt (z0, z4, 2))
+
+/*
+** shrnt_16_u32_tied1:
+** shrnt z0\.h, z4\.s, #16
+** ret
+*/
+TEST_DUAL_Z (shrnt_16_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svshrnt_n_u32 (z0, z4, 16),
+ z0 = svshrnt (z0, z4, 16))
+
+/*
+** shrnt_16_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** shrnt z0\.h, z4\.s, #16
+** |
+** shrnt z1\.h, z4\.s, #16
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (shrnt_16_u32_untied, svuint16_t, svuint32_t,
+ z0 = svshrnt_n_u32 (z1, z4, 16),
+ z0 = svshrnt (z1, z4, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** shrnt_1_u64:
+** shrnt z0\.s, z4\.d, #1
+** ret
+*/
+TEST_DUAL_Z (shrnt_1_u64, svuint32_t, svuint64_t,
+ z0 = svshrnt_n_u64 (z0, z4, 1),
+ z0 = svshrnt (z0, z4, 1))
+
+/*
+** shrnt_2_u64:
+** shrnt z0\.s, z4\.d, #2
+** ret
+*/
+TEST_DUAL_Z (shrnt_2_u64, svuint32_t, svuint64_t,
+ z0 = svshrnt_n_u64 (z0, z4, 2),
+ z0 = svshrnt (z0, z4, 2))
+
+/*
+** shrnt_32_u64_tied1:
+** shrnt z0\.s, z4\.d, #32
+** ret
+*/
+TEST_DUAL_Z (shrnt_32_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svshrnt_n_u64 (z0, z4, 32),
+ z0 = svshrnt (z0, z4, 32))
+
+/*
+** shrnt_32_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** shrnt z0\.s, z4\.d, #32
+** |
+** shrnt z1\.s, z4\.d, #32
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (shrnt_32_u64_untied, svuint32_t, svuint64_t,
+ z0 = svshrnt_n_u64 (z1, z4, 32),
+ z0 = svshrnt (z1, z4, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sli_0_s16_tied1:
+** sli z0\.h, z1\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_s16_tied1, svint16_t,
+ z0 = svsli_n_s16 (z0, z1, 0),
+ z0 = svsli (z0, z1, 0))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_0_s16_tied2, svint16_t,
+ z0 = svsli_n_s16 (z1, z0, 0),
+ z0 = svsli (z1, z0, 0))
+
+/*
+** sli_0_s16_untied:
+** mov z0\.d, z1\.d
+** sli z0\.h, z2\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_s16_untied, svint16_t,
+ z0 = svsli_n_s16 (z1, z2, 0),
+ z0 = svsli (z1, z2, 0))
+
+/*
+** sli_1_s16_tied1:
+** sli z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_s16_tied1, svint16_t,
+ z0 = svsli_n_s16 (z0, z1, 1),
+ z0 = svsli (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_1_s16_tied2, svint16_t,
+ z0 = svsli_n_s16 (z1, z0, 1),
+ z0 = svsli (z1, z0, 1))
+
+/*
+** sli_1_s16_untied:
+** mov z0\.d, z1\.d
+** sli z0\.h, z2\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_s16_untied, svint16_t,
+ z0 = svsli_n_s16 (z1, z2, 1),
+ z0 = svsli (z1, z2, 1))
+
+/*
+** sli_15_s16_tied1:
+** sli z0\.h, z1\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (sli_15_s16_tied1, svint16_t,
+ z0 = svsli_n_s16 (z0, z1, 15),
+ z0 = svsli (z0, z1, 15))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_15_s16_tied2, svint16_t,
+ z0 = svsli_n_s16 (z1, z0, 15),
+ z0 = svsli (z1, z0, 15))
+
+/*
+** sli_15_s16_untied:
+** mov z0\.d, z1\.d
+** sli z0\.h, z2\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (sli_15_s16_untied, svint16_t,
+ z0 = svsli_n_s16 (z1, z2, 15),
+ z0 = svsli (z1, z2, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sli_0_s32_tied1:
+** sli z0\.s, z1\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_s32_tied1, svint32_t,
+ z0 = svsli_n_s32 (z0, z1, 0),
+ z0 = svsli (z0, z1, 0))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_0_s32_tied2, svint32_t,
+ z0 = svsli_n_s32 (z1, z0, 0),
+ z0 = svsli (z1, z0, 0))
+
+/*
+** sli_0_s32_untied:
+** mov z0\.d, z1\.d
+** sli z0\.s, z2\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_s32_untied, svint32_t,
+ z0 = svsli_n_s32 (z1, z2, 0),
+ z0 = svsli (z1, z2, 0))
+
+/*
+** sli_1_s32_tied1:
+** sli z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_s32_tied1, svint32_t,
+ z0 = svsli_n_s32 (z0, z1, 1),
+ z0 = svsli (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_1_s32_tied2, svint32_t,
+ z0 = svsli_n_s32 (z1, z0, 1),
+ z0 = svsli (z1, z0, 1))
+
+/*
+** sli_1_s32_untied:
+** mov z0\.d, z1\.d
+** sli z0\.s, z2\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_s32_untied, svint32_t,
+ z0 = svsli_n_s32 (z1, z2, 1),
+ z0 = svsli (z1, z2, 1))
+
+/*
+** sli_31_s32_tied1:
+** sli z0\.s, z1\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (sli_31_s32_tied1, svint32_t,
+ z0 = svsli_n_s32 (z0, z1, 31),
+ z0 = svsli (z0, z1, 31))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_31_s32_tied2, svint32_t,
+ z0 = svsli_n_s32 (z1, z0, 31),
+ z0 = svsli (z1, z0, 31))
+
+/*
+** sli_31_s32_untied:
+** mov z0\.d, z1\.d
+** sli z0\.s, z2\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (sli_31_s32_untied, svint32_t,
+ z0 = svsli_n_s32 (z1, z2, 31),
+ z0 = svsli (z1, z2, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sli_0_s64_tied1:
+** sli z0\.d, z1\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_s64_tied1, svint64_t,
+ z0 = svsli_n_s64 (z0, z1, 0),
+ z0 = svsli (z0, z1, 0))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_0_s64_tied2, svint64_t,
+ z0 = svsli_n_s64 (z1, z0, 0),
+ z0 = svsli (z1, z0, 0))
+
+/*
+** sli_0_s64_untied:
+** mov z0\.d, z1\.d
+** sli z0\.d, z2\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_s64_untied, svint64_t,
+ z0 = svsli_n_s64 (z1, z2, 0),
+ z0 = svsli (z1, z2, 0))
+
+/*
+** sli_1_s64_tied1:
+** sli z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_s64_tied1, svint64_t,
+ z0 = svsli_n_s64 (z0, z1, 1),
+ z0 = svsli (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_1_s64_tied2, svint64_t,
+ z0 = svsli_n_s64 (z1, z0, 1),
+ z0 = svsli (z1, z0, 1))
+
+/*
+** sli_1_s64_untied:
+** mov z0\.d, z1\.d
+** sli z0\.d, z2\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_s64_untied, svint64_t,
+ z0 = svsli_n_s64 (z1, z2, 1),
+ z0 = svsli (z1, z2, 1))
+
+/*
+** sli_63_s64_tied1:
+** sli z0\.d, z1\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (sli_63_s64_tied1, svint64_t,
+ z0 = svsli_n_s64 (z0, z1, 63),
+ z0 = svsli (z0, z1, 63))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_63_s64_tied2, svint64_t,
+ z0 = svsli_n_s64 (z1, z0, 63),
+ z0 = svsli (z1, z0, 63))
+
+/*
+** sli_63_s64_untied:
+** mov z0\.d, z1\.d
+** sli z0\.d, z2\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (sli_63_s64_untied, svint64_t,
+ z0 = svsli_n_s64 (z1, z2, 63),
+ z0 = svsli (z1, z2, 63))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sli_0_s8_tied1:
+** sli z0\.b, z1\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_s8_tied1, svint8_t,
+ z0 = svsli_n_s8 (z0, z1, 0),
+ z0 = svsli (z0, z1, 0))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_0_s8_tied2, svint8_t,
+ z0 = svsli_n_s8 (z1, z0, 0),
+ z0 = svsli (z1, z0, 0))
+
+/*
+** sli_0_s8_untied:
+** mov z0\.d, z1\.d
+** sli z0\.b, z2\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_s8_untied, svint8_t,
+ z0 = svsli_n_s8 (z1, z2, 0),
+ z0 = svsli (z1, z2, 0))
+
+/*
+** sli_1_s8_tied1:
+** sli z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_s8_tied1, svint8_t,
+ z0 = svsli_n_s8 (z0, z1, 1),
+ z0 = svsli (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_1_s8_tied2, svint8_t,
+ z0 = svsli_n_s8 (z1, z0, 1),
+ z0 = svsli (z1, z0, 1))
+
+/*
+** sli_1_s8_untied:
+** mov z0\.d, z1\.d
+** sli z0\.b, z2\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_s8_untied, svint8_t,
+ z0 = svsli_n_s8 (z1, z2, 1),
+ z0 = svsli (z1, z2, 1))
+
+/*
+** sli_7_s8_tied1:
+** sli z0\.b, z1\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (sli_7_s8_tied1, svint8_t,
+ z0 = svsli_n_s8 (z0, z1, 7),
+ z0 = svsli (z0, z1, 7))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_7_s8_tied2, svint8_t,
+ z0 = svsli_n_s8 (z1, z0, 7),
+ z0 = svsli (z1, z0, 7))
+
+/*
+** sli_7_s8_untied:
+** mov z0\.d, z1\.d
+** sli z0\.b, z2\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (sli_7_s8_untied, svint8_t,
+ z0 = svsli_n_s8 (z1, z2, 7),
+ z0 = svsli (z1, z2, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sli_0_u16_tied1:
+** sli z0\.h, z1\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_u16_tied1, svuint16_t,
+ z0 = svsli_n_u16 (z0, z1, 0),
+ z0 = svsli (z0, z1, 0))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_0_u16_tied2, svuint16_t,
+ z0 = svsli_n_u16 (z1, z0, 0),
+ z0 = svsli (z1, z0, 0))
+
+/*
+** sli_0_u16_untied:
+** mov z0\.d, z1\.d
+** sli z0\.h, z2\.h, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_u16_untied, svuint16_t,
+ z0 = svsli_n_u16 (z1, z2, 0),
+ z0 = svsli (z1, z2, 0))
+
+/*
+** sli_1_u16_tied1:
+** sli z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_u16_tied1, svuint16_t,
+ z0 = svsli_n_u16 (z0, z1, 1),
+ z0 = svsli (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_1_u16_tied2, svuint16_t,
+ z0 = svsli_n_u16 (z1, z0, 1),
+ z0 = svsli (z1, z0, 1))
+
+/*
+** sli_1_u16_untied:
+** mov z0\.d, z1\.d
+** sli z0\.h, z2\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_u16_untied, svuint16_t,
+ z0 = svsli_n_u16 (z1, z2, 1),
+ z0 = svsli (z1, z2, 1))
+
+/*
+** sli_15_u16_tied1:
+** sli z0\.h, z1\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (sli_15_u16_tied1, svuint16_t,
+ z0 = svsli_n_u16 (z0, z1, 15),
+ z0 = svsli (z0, z1, 15))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_15_u16_tied2, svuint16_t,
+ z0 = svsli_n_u16 (z1, z0, 15),
+ z0 = svsli (z1, z0, 15))
+
+/*
+** sli_15_u16_untied:
+** mov z0\.d, z1\.d
+** sli z0\.h, z2\.h, #15
+** ret
+*/
+TEST_UNIFORM_Z (sli_15_u16_untied, svuint16_t,
+ z0 = svsli_n_u16 (z1, z2, 15),
+ z0 = svsli (z1, z2, 15))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sli_0_u32_tied1:
+** sli z0\.s, z1\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_u32_tied1, svuint32_t,
+ z0 = svsli_n_u32 (z0, z1, 0),
+ z0 = svsli (z0, z1, 0))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_0_u32_tied2, svuint32_t,
+ z0 = svsli_n_u32 (z1, z0, 0),
+ z0 = svsli (z1, z0, 0))
+
+/*
+** sli_0_u32_untied:
+** mov z0\.d, z1\.d
+** sli z0\.s, z2\.s, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_u32_untied, svuint32_t,
+ z0 = svsli_n_u32 (z1, z2, 0),
+ z0 = svsli (z1, z2, 0))
+
+/*
+** sli_1_u32_tied1:
+** sli z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_u32_tied1, svuint32_t,
+ z0 = svsli_n_u32 (z0, z1, 1),
+ z0 = svsli (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_1_u32_tied2, svuint32_t,
+ z0 = svsli_n_u32 (z1, z0, 1),
+ z0 = svsli (z1, z0, 1))
+
+/*
+** sli_1_u32_untied:
+** mov z0\.d, z1\.d
+** sli z0\.s, z2\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_u32_untied, svuint32_t,
+ z0 = svsli_n_u32 (z1, z2, 1),
+ z0 = svsli (z1, z2, 1))
+
+/*
+** sli_31_u32_tied1:
+** sli z0\.s, z1\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (sli_31_u32_tied1, svuint32_t,
+ z0 = svsli_n_u32 (z0, z1, 31),
+ z0 = svsli (z0, z1, 31))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_31_u32_tied2, svuint32_t,
+ z0 = svsli_n_u32 (z1, z0, 31),
+ z0 = svsli (z1, z0, 31))
+
+/*
+** sli_31_u32_untied:
+** mov z0\.d, z1\.d
+** sli z0\.s, z2\.s, #31
+** ret
+*/
+TEST_UNIFORM_Z (sli_31_u32_untied, svuint32_t,
+ z0 = svsli_n_u32 (z1, z2, 31),
+ z0 = svsli (z1, z2, 31))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sli_0_u64_tied1:
+** sli z0\.d, z1\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_u64_tied1, svuint64_t,
+ z0 = svsli_n_u64 (z0, z1, 0),
+ z0 = svsli (z0, z1, 0))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_0_u64_tied2, svuint64_t,
+ z0 = svsli_n_u64 (z1, z0, 0),
+ z0 = svsli (z1, z0, 0))
+
+/*
+** sli_0_u64_untied:
+** mov z0\.d, z1\.d
+** sli z0\.d, z2\.d, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_u64_untied, svuint64_t,
+ z0 = svsli_n_u64 (z1, z2, 0),
+ z0 = svsli (z1, z2, 0))
+
+/*
+** sli_1_u64_tied1:
+** sli z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_u64_tied1, svuint64_t,
+ z0 = svsli_n_u64 (z0, z1, 1),
+ z0 = svsli (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_1_u64_tied2, svuint64_t,
+ z0 = svsli_n_u64 (z1, z0, 1),
+ z0 = svsli (z1, z0, 1))
+
+/*
+** sli_1_u64_untied:
+** mov z0\.d, z1\.d
+** sli z0\.d, z2\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_u64_untied, svuint64_t,
+ z0 = svsli_n_u64 (z1, z2, 1),
+ z0 = svsli (z1, z2, 1))
+
+/*
+** sli_63_u64_tied1:
+** sli z0\.d, z1\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (sli_63_u64_tied1, svuint64_t,
+ z0 = svsli_n_u64 (z0, z1, 63),
+ z0 = svsli (z0, z1, 63))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_63_u64_tied2, svuint64_t,
+ z0 = svsli_n_u64 (z1, z0, 63),
+ z0 = svsli (z1, z0, 63))
+
+/*
+** sli_63_u64_untied:
+** mov z0\.d, z1\.d
+** sli z0\.d, z2\.d, #63
+** ret
+*/
+TEST_UNIFORM_Z (sli_63_u64_untied, svuint64_t,
+ z0 = svsli_n_u64 (z1, z2, 63),
+ z0 = svsli (z1, z2, 63))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sli_0_u8_tied1:
+** sli z0\.b, z1\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_u8_tied1, svuint8_t,
+ z0 = svsli_n_u8 (z0, z1, 0),
+ z0 = svsli (z0, z1, 0))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_0_u8_tied2, svuint8_t,
+ z0 = svsli_n_u8 (z1, z0, 0),
+ z0 = svsli (z1, z0, 0))
+
+/*
+** sli_0_u8_untied:
+** mov z0\.d, z1\.d
+** sli z0\.b, z2\.b, #0
+** ret
+*/
+TEST_UNIFORM_Z (sli_0_u8_untied, svuint8_t,
+ z0 = svsli_n_u8 (z1, z2, 0),
+ z0 = svsli (z1, z2, 0))
+
+/*
+** sli_1_u8_tied1:
+** sli z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_u8_tied1, svuint8_t,
+ z0 = svsli_n_u8 (z0, z1, 1),
+ z0 = svsli (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_1_u8_tied2, svuint8_t,
+ z0 = svsli_n_u8 (z1, z0, 1),
+ z0 = svsli (z1, z0, 1))
+
+/*
+** sli_1_u8_untied:
+** mov z0\.d, z1\.d
+** sli z0\.b, z2\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sli_1_u8_untied, svuint8_t,
+ z0 = svsli_n_u8 (z1, z2, 1),
+ z0 = svsli (z1, z2, 1))
+
+/*
+** sli_7_u8_tied1:
+** sli z0\.b, z1\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (sli_7_u8_tied1, svuint8_t,
+ z0 = svsli_n_u8 (z0, z1, 7),
+ z0 = svsli (z0, z1, 7))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sli_7_u8_tied2, svuint8_t,
+ z0 = svsli_n_u8 (z1, z0, 7),
+ z0 = svsli (z1, z0, 7))
+
+/*
+** sli_7_u8_untied:
+** mov z0\.d, z1\.d
+** sli z0\.b, z2\.b, #7
+** ret
+*/
+TEST_UNIFORM_Z (sli_7_u8_untied, svuint8_t,
+ z0 = svsli_n_u8 (z1, z2, 7),
+ z0 = svsli (z1, z2, 7))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-sm4"
+
+/*
+** sm4e_u32_tied1:
+** sm4e z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (sm4e_u32_tied1, svuint32_t,
+ z0 = svsm4e_u32 (z0, z1),
+ z0 = svsm4e (z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sm4e_u32_tied2, svuint32_t,
+ z0 = svsm4e_u32 (z1, z0),
+ z0 = svsm4e (z1, z0))
+
+/*
+** sm4e_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** sm4e z0\.s, z0\.s, z2\.s
+** |
+** sm4e z1\.s, z0\.s, z2\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_UNIFORM_Z (sm4e_u32_untied, svuint32_t,
+ z0 = svsm4e_u32 (z1, z2),
+ z0 = svsm4e (z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+#pragma GCC target "+sve2-sm4"
+
+/*
+** sm4ekey_u32_tied1:
+** sm4ekey z0\.s, z0\.s, z1\.s
+** ret
+*/
+TEST_UNIFORM_Z (sm4ekey_u32_tied1, svuint32_t,
+ z0 = svsm4ekey_u32 (z0, z1),
+ z0 = svsm4ekey (z0, z1))
+
+/*
+** sm4ekey_u32_tied2:
+** sm4ekey z0\.s, z1\.s, z0\.s
+** ret
+*/
+TEST_UNIFORM_Z (sm4ekey_u32_tied2, svuint32_t,
+ z0 = svsm4ekey_u32 (z1, z0),
+ z0 = svsm4ekey (z1, z0))
+
+/*
+** sm4ekey_u32_untied:
+** sm4ekey z0\.s, z1\.s, z2\.s
+** ret
+*/
+TEST_UNIFORM_Z (sm4ekey_u32_untied, svuint32_t,
+ z0 = svsm4ekey_u32 (z1, z2),
+ z0 = svsm4ekey (z1, z2))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sqadd_u16_m_tied1:
+** usqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (sqadd_u16_m_tied1, svuint16_t, svint16_t,
+ z0 = svsqadd_u16_m (p0, z0, z4),
+ z0 = svsqadd_m (p0, z0, z4))
+
+/*
+** sqadd_u16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** usqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u16_m_tied2, svuint16_t, svint16_t,
+ z0_res = svsqadd_u16_m (p0, z4, z0),
+ z0_res = svsqadd_m (p0, z4, z0))
+
+/*
+** sqadd_u16_m_untied:
+** movprfx z0, z1
+** usqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (sqadd_u16_m_untied, svuint16_t, svint16_t,
+ z0 = svsqadd_u16_m (p0, z1, z4),
+ z0 = svsqadd_m (p0, z1, z4))
+
+/*
+** sqadd_w0_u16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u16_m_tied1, svuint16_t, int16_t,
+ z0 = svsqadd_n_u16_m (p0, z0, x0),
+ z0 = svsqadd_m (p0, z0, x0))
+
+/*
+** sqadd_w0_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u16_m_untied, svuint16_t, int16_t,
+ z0 = svsqadd_n_u16_m (p0, z1, x0),
+ z0 = svsqadd_m (p0, z1, x0))
+
+/*
+** sqadd_1_u16_m_tied1:
+** mov (z[0-9]+\.h), #1
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u16_m_tied1, svuint16_t,
+ z0 = svsqadd_n_u16_m (p0, z0, 1),
+ z0 = svsqadd_m (p0, z0, 1))
+
+/*
+** sqadd_1_u16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #1
+** movprfx z0, z1
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u16_m_untied, svuint16_t,
+ z0 = svsqadd_n_u16_m (p0, z1, 1),
+ z0 = svsqadd_m (p0, z1, 1))
+
+/*
+** sqadd_127_u16_m:
+** mov (z[0-9]+\.h), #127
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u16_m, svuint16_t,
+ z0 = svsqadd_n_u16_m (p0, z0, 127),
+ z0 = svsqadd_m (p0, z0, 127))
+
+/*
+** sqadd_128_u16_m:
+** mov (z[0-9]+\.h), #128
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u16_m, svuint16_t,
+ z0 = svsqadd_n_u16_m (p0, z0, 128),
+ z0 = svsqadd_m (p0, z0, 128))
+
+/*
+** sqadd_255_u16_m:
+** mov (z[0-9]+\.h), #255
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u16_m, svuint16_t,
+ z0 = svsqadd_n_u16_m (p0, z0, 255),
+ z0 = svsqadd_m (p0, z0, 255))
+
+/*
+** sqadd_m1_u16_m:
+** mov (z[0-9]+)\.b, #-1
+** usqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u16_m, svuint16_t,
+ z0 = svsqadd_n_u16_m (p0, z0, -1),
+ z0 = svsqadd_m (p0, z0, -1))
+
+/*
+** sqadd_m127_u16_m:
+** mov (z[0-9]+\.h), #-127
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u16_m, svuint16_t,
+ z0 = svsqadd_n_u16_m (p0, z0, -127),
+ z0 = svsqadd_m (p0, z0, -127))
+
+/*
+** sqadd_m128_u16_m:
+** mov (z[0-9]+\.h), #-128
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u16_m, svuint16_t,
+ z0 = svsqadd_n_u16_m (p0, z0, -128),
+ z0 = svsqadd_m (p0, z0, -128))
+
+/*
+** sqadd_u16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** usqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (sqadd_u16_z_tied1, svuint16_t, svint16_t,
+ z0 = svsqadd_u16_z (p0, z0, z4),
+ z0 = svsqadd_z (p0, z0, z4))
+
+/*
+** sqadd_u16_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.h, p0/z, z4\.h
+** usqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u16_z_tied2, svuint16_t, svint16_t,
+ z0_res = svsqadd_u16_z (p0, z4, z0),
+ z0_res = svsqadd_z (p0, z4, z0))
+
+/*
+** sqadd_u16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** usqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (sqadd_u16_z_untied, svuint16_t, svint16_t,
+ z0 = svsqadd_u16_z (p0, z1, z4),
+ z0 = svsqadd_z (p0, z1, z4))
+
+/*
+** sqadd_w0_u16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u16_z_tied1, svuint16_t, int16_t,
+ z0 = svsqadd_n_u16_z (p0, z0, x0),
+ z0 = svsqadd_z (p0, z0, x0))
+
+/*
+** sqadd_w0_u16_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z1\.h
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u16_z_untied, svuint16_t, int16_t,
+ z0 = svsqadd_n_u16_z (p0, z1, x0),
+ z0 = svsqadd_z (p0, z1, x0))
+
+/*
+** sqadd_1_u16_z_tied1:
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z0\.h
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u16_z_tied1, svuint16_t,
+ z0 = svsqadd_n_u16_z (p0, z0, 1),
+ z0 = svsqadd_z (p0, z0, 1))
+
+/*
+** sqadd_1_u16_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z1\.h
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u16_z_untied, svuint16_t,
+ z0 = svsqadd_n_u16_z (p0, z1, 1),
+ z0 = svsqadd_z (p0, z1, 1))
+
+/*
+** sqadd_127_u16_z:
+** mov (z[0-9]+\.h), #127
+** movprfx z0\.h, p0/z, z0\.h
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u16_z, svuint16_t,
+ z0 = svsqadd_n_u16_z (p0, z0, 127),
+ z0 = svsqadd_z (p0, z0, 127))
+
+/*
+** sqadd_128_u16_z:
+** mov (z[0-9]+\.h), #128
+** movprfx z0\.h, p0/z, z0\.h
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u16_z, svuint16_t,
+ z0 = svsqadd_n_u16_z (p0, z0, 128),
+ z0 = svsqadd_z (p0, z0, 128))
+
+/*
+** sqadd_255_u16_z:
+** mov (z[0-9]+\.h), #255
+** movprfx z0\.h, p0/z, z0\.h
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u16_z, svuint16_t,
+ z0 = svsqadd_n_u16_z (p0, z0, 255),
+ z0 = svsqadd_z (p0, z0, 255))
+
+/*
+** sqadd_m1_u16_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.h, p0/z, z0\.h
+** usqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u16_z, svuint16_t,
+ z0 = svsqadd_n_u16_z (p0, z0, -1),
+ z0 = svsqadd_z (p0, z0, -1))
+
+/*
+** sqadd_m127_u16_z:
+** mov (z[0-9]+\.h), #-127
+** movprfx z0\.h, p0/z, z0\.h
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u16_z, svuint16_t,
+ z0 = svsqadd_n_u16_z (p0, z0, -127),
+ z0 = svsqadd_z (p0, z0, -127))
+
+/*
+** sqadd_m128_u16_z:
+** mov (z[0-9]+\.h), #-128
+** movprfx z0\.h, p0/z, z0\.h
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u16_z, svuint16_t,
+ z0 = svsqadd_n_u16_z (p0, z0, -128),
+ z0 = svsqadd_z (p0, z0, -128))
+
+/*
+** sqadd_u16_x_tied1:
+** usqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (sqadd_u16_x_tied1, svuint16_t, svint16_t,
+ z0 = svsqadd_u16_x (p0, z0, z4),
+ z0 = svsqadd_x (p0, z0, z4))
+
+/*
+** sqadd_u16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** usqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u16_x_tied2, svuint16_t, svint16_t,
+ z0_res = svsqadd_u16_x (p0, z4, z0),
+ z0_res = svsqadd_x (p0, z4, z0))
+
+/*
+** sqadd_u16_x_untied:
+** movprfx z0, z1
+** usqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (sqadd_u16_x_untied, svuint16_t, svint16_t,
+ z0 = svsqadd_u16_x (p0, z1, z4),
+ z0 = svsqadd_x (p0, z1, z4))
+
+/*
+** sqadd_w0_u16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u16_x_tied1, svuint16_t, int16_t,
+ z0 = svsqadd_n_u16_x (p0, z0, x0),
+ z0 = svsqadd_x (p0, z0, x0))
+
+/*
+** sqadd_w0_u16_x_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u16_x_untied, svuint16_t, int16_t,
+ z0 = svsqadd_n_u16_x (p0, z1, x0),
+ z0 = svsqadd_x (p0, z1, x0))
+
+/*
+** sqadd_1_u16_x_tied1:
+** uqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u16_x_tied1, svuint16_t,
+ z0 = svsqadd_n_u16_x (p0, z0, 1),
+ z0 = svsqadd_x (p0, z0, 1))
+
+/*
+** sqadd_1_u16_x_untied:
+** movprfx z0, z1
+** uqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u16_x_untied, svuint16_t,
+ z0 = svsqadd_n_u16_x (p0, z1, 1),
+ z0 = svsqadd_x (p0, z1, 1))
+
+/*
+** sqadd_127_u16_x:
+** uqadd z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u16_x, svuint16_t,
+ z0 = svsqadd_n_u16_x (p0, z0, 127),
+ z0 = svsqadd_x (p0, z0, 127))
+
+/*
+** sqadd_128_u16_x:
+** uqadd z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u16_x, svuint16_t,
+ z0 = svsqadd_n_u16_x (p0, z0, 128),
+ z0 = svsqadd_x (p0, z0, 128))
+
+/*
+** sqadd_255_u16_x:
+** uqadd z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u16_x, svuint16_t,
+ z0 = svsqadd_n_u16_x (p0, z0, 255),
+ z0 = svsqadd_x (p0, z0, 255))
+
+/*
+** sqadd_m1_u16_x:
+** mov (z[0-9]+)\.b, #-1
+** usqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u16_x, svuint16_t,
+ z0 = svsqadd_n_u16_x (p0, z0, -1),
+ z0 = svsqadd_x (p0, z0, -1))
+
+/*
+** sqadd_m127_u16_x:
+** mov (z[0-9]+\.h), #-127
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u16_x, svuint16_t,
+ z0 = svsqadd_n_u16_x (p0, z0, -127),
+ z0 = svsqadd_x (p0, z0, -127))
+
+/*
+** sqadd_m128_u16_x:
+** mov (z[0-9]+\.h), #-128
+** usqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u16_x, svuint16_t,
+ z0 = svsqadd_n_u16_x (p0, z0, -128),
+ z0 = svsqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sqadd_u32_m_tied1:
+** usqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (sqadd_u32_m_tied1, svuint32_t, svint32_t,
+ z0 = svsqadd_u32_m (p0, z0, z4),
+ z0 = svsqadd_m (p0, z0, z4))
+
+/*
+** sqadd_u32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** usqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u32_m_tied2, svuint32_t, svint32_t,
+ z0_res = svsqadd_u32_m (p0, z4, z0),
+ z0_res = svsqadd_m (p0, z4, z0))
+
+/*
+** sqadd_u32_m_untied:
+** movprfx z0, z1
+** usqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (sqadd_u32_m_untied, svuint32_t, svint32_t,
+ z0 = svsqadd_u32_m (p0, z1, z4),
+ z0 = svsqadd_m (p0, z1, z4))
+
+/*
+** sqadd_w0_u32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u32_m_tied1, svuint32_t, int32_t,
+ z0 = svsqadd_n_u32_m (p0, z0, x0),
+ z0 = svsqadd_m (p0, z0, x0))
+
+/*
+** sqadd_w0_u32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u32_m_untied, svuint32_t, int32_t,
+ z0 = svsqadd_n_u32_m (p0, z1, x0),
+ z0 = svsqadd_m (p0, z1, x0))
+
+/*
+** sqadd_1_u32_m_tied1:
+** mov (z[0-9]+\.s), #1
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u32_m_tied1, svuint32_t,
+ z0 = svsqadd_n_u32_m (p0, z0, 1),
+ z0 = svsqadd_m (p0, z0, 1))
+
+/*
+** sqadd_1_u32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #1
+** movprfx z0, z1
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u32_m_untied, svuint32_t,
+ z0 = svsqadd_n_u32_m (p0, z1, 1),
+ z0 = svsqadd_m (p0, z1, 1))
+
+/*
+** sqadd_127_u32_m:
+** mov (z[0-9]+\.s), #127
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u32_m, svuint32_t,
+ z0 = svsqadd_n_u32_m (p0, z0, 127),
+ z0 = svsqadd_m (p0, z0, 127))
+
+/*
+** sqadd_128_u32_m:
+** mov (z[0-9]+\.s), #128
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u32_m, svuint32_t,
+ z0 = svsqadd_n_u32_m (p0, z0, 128),
+ z0 = svsqadd_m (p0, z0, 128))
+
+/*
+** sqadd_255_u32_m:
+** mov (z[0-9]+\.s), #255
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u32_m, svuint32_t,
+ z0 = svsqadd_n_u32_m (p0, z0, 255),
+ z0 = svsqadd_m (p0, z0, 255))
+
+/*
+** sqadd_m1_u32_m:
+** mov (z[0-9]+)\.b, #-1
+** usqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u32_m, svuint32_t,
+ z0 = svsqadd_n_u32_m (p0, z0, -1),
+ z0 = svsqadd_m (p0, z0, -1))
+
+/*
+** sqadd_m127_u32_m:
+** mov (z[0-9]+\.s), #-127
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u32_m, svuint32_t,
+ z0 = svsqadd_n_u32_m (p0, z0, -127),
+ z0 = svsqadd_m (p0, z0, -127))
+
+/*
+** sqadd_m128_u32_m:
+** mov (z[0-9]+\.s), #-128
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u32_m, svuint32_t,
+ z0 = svsqadd_n_u32_m (p0, z0, -128),
+ z0 = svsqadd_m (p0, z0, -128))
+
+/*
+** sqadd_u32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** usqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (sqadd_u32_z_tied1, svuint32_t, svint32_t,
+ z0 = svsqadd_u32_z (p0, z0, z4),
+ z0 = svsqadd_z (p0, z0, z4))
+
+/*
+** sqadd_u32_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.s, p0/z, z4\.s
+** usqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u32_z_tied2, svuint32_t, svint32_t,
+ z0_res = svsqadd_u32_z (p0, z4, z0),
+ z0_res = svsqadd_z (p0, z4, z0))
+
+/*
+** sqadd_u32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** usqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (sqadd_u32_z_untied, svuint32_t, svint32_t,
+ z0 = svsqadd_u32_z (p0, z1, z4),
+ z0 = svsqadd_z (p0, z1, z4))
+
+/*
+** sqadd_w0_u32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u32_z_tied1, svuint32_t, int32_t,
+ z0 = svsqadd_n_u32_z (p0, z0, x0),
+ z0 = svsqadd_z (p0, z0, x0))
+
+/*
+** sqadd_w0_u32_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z1\.s
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u32_z_untied, svuint32_t, int32_t,
+ z0 = svsqadd_n_u32_z (p0, z1, x0),
+ z0 = svsqadd_z (p0, z1, x0))
+
+/*
+** sqadd_1_u32_z_tied1:
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z0\.s
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u32_z_tied1, svuint32_t,
+ z0 = svsqadd_n_u32_z (p0, z0, 1),
+ z0 = svsqadd_z (p0, z0, 1))
+
+/*
+** sqadd_1_u32_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z1\.s
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u32_z_untied, svuint32_t,
+ z0 = svsqadd_n_u32_z (p0, z1, 1),
+ z0 = svsqadd_z (p0, z1, 1))
+
+/*
+** sqadd_127_u32_z:
+** mov (z[0-9]+\.s), #127
+** movprfx z0\.s, p0/z, z0\.s
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u32_z, svuint32_t,
+ z0 = svsqadd_n_u32_z (p0, z0, 127),
+ z0 = svsqadd_z (p0, z0, 127))
+
+/*
+** sqadd_128_u32_z:
+** mov (z[0-9]+\.s), #128
+** movprfx z0\.s, p0/z, z0\.s
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u32_z, svuint32_t,
+ z0 = svsqadd_n_u32_z (p0, z0, 128),
+ z0 = svsqadd_z (p0, z0, 128))
+
+/*
+** sqadd_255_u32_z:
+** mov (z[0-9]+\.s), #255
+** movprfx z0\.s, p0/z, z0\.s
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u32_z, svuint32_t,
+ z0 = svsqadd_n_u32_z (p0, z0, 255),
+ z0 = svsqadd_z (p0, z0, 255))
+
+/*
+** sqadd_m1_u32_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.s, p0/z, z0\.s
+** usqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u32_z, svuint32_t,
+ z0 = svsqadd_n_u32_z (p0, z0, -1),
+ z0 = svsqadd_z (p0, z0, -1))
+
+/*
+** sqadd_m127_u32_z:
+** mov (z[0-9]+\.s), #-127
+** movprfx z0\.s, p0/z, z0\.s
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u32_z, svuint32_t,
+ z0 = svsqadd_n_u32_z (p0, z0, -127),
+ z0 = svsqadd_z (p0, z0, -127))
+
+/*
+** sqadd_m128_u32_z:
+** mov (z[0-9]+\.s), #-128
+** movprfx z0\.s, p0/z, z0\.s
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u32_z, svuint32_t,
+ z0 = svsqadd_n_u32_z (p0, z0, -128),
+ z0 = svsqadd_z (p0, z0, -128))
+
+/*
+** sqadd_u32_x_tied1:
+** usqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (sqadd_u32_x_tied1, svuint32_t, svint32_t,
+ z0 = svsqadd_u32_x (p0, z0, z4),
+ z0 = svsqadd_x (p0, z0, z4))
+
+/*
+** sqadd_u32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** usqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u32_x_tied2, svuint32_t, svint32_t,
+ z0_res = svsqadd_u32_x (p0, z4, z0),
+ z0_res = svsqadd_x (p0, z4, z0))
+
+/*
+** sqadd_u32_x_untied:
+** movprfx z0, z1
+** usqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (sqadd_u32_x_untied, svuint32_t, svint32_t,
+ z0 = svsqadd_u32_x (p0, z1, z4),
+ z0 = svsqadd_x (p0, z1, z4))
+
+/*
+** sqadd_w0_u32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u32_x_tied1, svuint32_t, int32_t,
+ z0 = svsqadd_n_u32_x (p0, z0, x0),
+ z0 = svsqadd_x (p0, z0, x0))
+
+/*
+** sqadd_w0_u32_x_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u32_x_untied, svuint32_t, int32_t,
+ z0 = svsqadd_n_u32_x (p0, z1, x0),
+ z0 = svsqadd_x (p0, z1, x0))
+
+/*
+** sqadd_1_u32_x_tied1:
+** uqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u32_x_tied1, svuint32_t,
+ z0 = svsqadd_n_u32_x (p0, z0, 1),
+ z0 = svsqadd_x (p0, z0, 1))
+
+/*
+** sqadd_1_u32_x_untied:
+** movprfx z0, z1
+** uqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u32_x_untied, svuint32_t,
+ z0 = svsqadd_n_u32_x (p0, z1, 1),
+ z0 = svsqadd_x (p0, z1, 1))
+
+/*
+** sqadd_127_u32_x:
+** uqadd z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u32_x, svuint32_t,
+ z0 = svsqadd_n_u32_x (p0, z0, 127),
+ z0 = svsqadd_x (p0, z0, 127))
+
+/*
+** sqadd_128_u32_x:
+** uqadd z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u32_x, svuint32_t,
+ z0 = svsqadd_n_u32_x (p0, z0, 128),
+ z0 = svsqadd_x (p0, z0, 128))
+
+/*
+** sqadd_255_u32_x:
+** uqadd z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u32_x, svuint32_t,
+ z0 = svsqadd_n_u32_x (p0, z0, 255),
+ z0 = svsqadd_x (p0, z0, 255))
+
+/*
+** sqadd_m1_u32_x:
+** mov (z[0-9]+)\.b, #-1
+** usqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u32_x, svuint32_t,
+ z0 = svsqadd_n_u32_x (p0, z0, -1),
+ z0 = svsqadd_x (p0, z0, -1))
+
+/*
+** sqadd_m127_u32_x:
+** mov (z[0-9]+\.s), #-127
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u32_x, svuint32_t,
+ z0 = svsqadd_n_u32_x (p0, z0, -127),
+ z0 = svsqadd_x (p0, z0, -127))
+
+/*
+** sqadd_m128_u32_x:
+** mov (z[0-9]+\.s), #-128
+** usqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u32_x, svuint32_t,
+ z0 = svsqadd_n_u32_x (p0, z0, -128),
+ z0 = svsqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sqadd_u64_m_tied1:
+** usqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (sqadd_u64_m_tied1, svuint64_t, svint64_t,
+ z0 = svsqadd_u64_m (p0, z0, z4),
+ z0 = svsqadd_m (p0, z0, z4))
+
+/*
+** sqadd_u64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u64_m_tied2, svuint64_t, svint64_t,
+ z0_res = svsqadd_u64_m (p0, z4, z0),
+ z0_res = svsqadd_m (p0, z4, z0))
+
+/*
+** sqadd_u64_m_untied:
+** movprfx z0, z1
+** usqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (sqadd_u64_m_untied, svuint64_t, svint64_t,
+ z0 = svsqadd_u64_m (p0, z1, z4),
+ z0 = svsqadd_m (p0, z1, z4))
+
+/*
+** sqadd_x0_u64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_x0_u64_m_tied1, svuint64_t, int64_t,
+ z0 = svsqadd_n_u64_m (p0, z0, x0),
+ z0 = svsqadd_m (p0, z0, x0))
+
+/*
+** sqadd_x0_u64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_x0_u64_m_untied, svuint64_t, int64_t,
+ z0 = svsqadd_n_u64_m (p0, z1, x0),
+ z0 = svsqadd_m (p0, z1, x0))
+
+/*
+** sqadd_1_u64_m_tied1:
+** mov (z[0-9]+\.d), #1
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u64_m_tied1, svuint64_t,
+ z0 = svsqadd_n_u64_m (p0, z0, 1),
+ z0 = svsqadd_m (p0, z0, 1))
+
+/*
+** sqadd_1_u64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #1
+** movprfx z0, z1
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u64_m_untied, svuint64_t,
+ z0 = svsqadd_n_u64_m (p0, z1, 1),
+ z0 = svsqadd_m (p0, z1, 1))
+
+/*
+** sqadd_127_u64_m:
+** mov (z[0-9]+\.d), #127
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u64_m, svuint64_t,
+ z0 = svsqadd_n_u64_m (p0, z0, 127),
+ z0 = svsqadd_m (p0, z0, 127))
+
+/*
+** sqadd_128_u64_m:
+** mov (z[0-9]+\.d), #128
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u64_m, svuint64_t,
+ z0 = svsqadd_n_u64_m (p0, z0, 128),
+ z0 = svsqadd_m (p0, z0, 128))
+
+/*
+** sqadd_255_u64_m:
+** mov (z[0-9]+\.d), #255
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u64_m, svuint64_t,
+ z0 = svsqadd_n_u64_m (p0, z0, 255),
+ z0 = svsqadd_m (p0, z0, 255))
+
+/*
+** sqadd_m1_u64_m:
+** mov (z[0-9]+)\.b, #-1
+** usqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u64_m, svuint64_t,
+ z0 = svsqadd_n_u64_m (p0, z0, -1),
+ z0 = svsqadd_m (p0, z0, -1))
+
+/*
+** sqadd_m127_u64_m:
+** mov (z[0-9]+\.d), #-127
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u64_m, svuint64_t,
+ z0 = svsqadd_n_u64_m (p0, z0, -127),
+ z0 = svsqadd_m (p0, z0, -127))
+
+/*
+** sqadd_m128_u64_m:
+** mov (z[0-9]+\.d), #-128
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u64_m, svuint64_t,
+ z0 = svsqadd_n_u64_m (p0, z0, -128),
+ z0 = svsqadd_m (p0, z0, -128))
+
+/*
+** sqadd_u64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** usqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (sqadd_u64_z_tied1, svuint64_t, svint64_t,
+ z0 = svsqadd_u64_z (p0, z0, z4),
+ z0 = svsqadd_z (p0, z0, z4))
+
+/*
+** sqadd_u64_z_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0\.d, p0/z, z4\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u64_z_tied2, svuint64_t, svint64_t,
+ z0_res = svsqadd_u64_z (p0, z4, z0),
+ z0_res = svsqadd_z (p0, z4, z0))
+
+/*
+** sqadd_u64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** usqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (sqadd_u64_z_untied, svuint64_t, svint64_t,
+ z0 = svsqadd_u64_z (p0, z1, z4),
+ z0 = svsqadd_z (p0, z1, z4))
+
+/*
+** sqadd_x0_u64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_x0_u64_z_tied1, svuint64_t, int64_t,
+ z0 = svsqadd_n_u64_z (p0, z0, x0),
+ z0 = svsqadd_z (p0, z0, x0))
+
+/*
+** sqadd_x0_u64_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z1\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_x0_u64_z_untied, svuint64_t, int64_t,
+ z0 = svsqadd_n_u64_z (p0, z1, x0),
+ z0 = svsqadd_z (p0, z1, x0))
+
+/*
+** sqadd_1_u64_z_tied1:
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z0\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u64_z_tied1, svuint64_t,
+ z0 = svsqadd_n_u64_z (p0, z0, 1),
+ z0 = svsqadd_z (p0, z0, 1))
+
+/*
+** sqadd_1_u64_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z1\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u64_z_untied, svuint64_t,
+ z0 = svsqadd_n_u64_z (p0, z1, 1),
+ z0 = svsqadd_z (p0, z1, 1))
+
+/*
+** sqadd_127_u64_z:
+** mov (z[0-9]+\.d), #127
+** movprfx z0\.d, p0/z, z0\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u64_z, svuint64_t,
+ z0 = svsqadd_n_u64_z (p0, z0, 127),
+ z0 = svsqadd_z (p0, z0, 127))
+
+/*
+** sqadd_128_u64_z:
+** mov (z[0-9]+\.d), #128
+** movprfx z0\.d, p0/z, z0\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u64_z, svuint64_t,
+ z0 = svsqadd_n_u64_z (p0, z0, 128),
+ z0 = svsqadd_z (p0, z0, 128))
+
+/*
+** sqadd_255_u64_z:
+** mov (z[0-9]+\.d), #255
+** movprfx z0\.d, p0/z, z0\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u64_z, svuint64_t,
+ z0 = svsqadd_n_u64_z (p0, z0, 255),
+ z0 = svsqadd_z (p0, z0, 255))
+
+/*
+** sqadd_m1_u64_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.d, p0/z, z0\.d
+** usqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u64_z, svuint64_t,
+ z0 = svsqadd_n_u64_z (p0, z0, -1),
+ z0 = svsqadd_z (p0, z0, -1))
+
+/*
+** sqadd_m127_u64_z:
+** mov (z[0-9]+\.d), #-127
+** movprfx z0\.d, p0/z, z0\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u64_z, svuint64_t,
+ z0 = svsqadd_n_u64_z (p0, z0, -127),
+ z0 = svsqadd_z (p0, z0, -127))
+
+/*
+** sqadd_m128_u64_z:
+** mov (z[0-9]+\.d), #-128
+** movprfx z0\.d, p0/z, z0\.d
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u64_z, svuint64_t,
+ z0 = svsqadd_n_u64_z (p0, z0, -128),
+ z0 = svsqadd_z (p0, z0, -128))
+
+/*
+** sqadd_u64_x_tied1:
+** usqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (sqadd_u64_x_tied1, svuint64_t, svint64_t,
+ z0 = svsqadd_u64_x (p0, z0, z4),
+ z0 = svsqadd_x (p0, z0, z4))
+
+/*
+** sqadd_u64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u64_x_tied2, svuint64_t, svint64_t,
+ z0_res = svsqadd_u64_x (p0, z4, z0),
+ z0_res = svsqadd_x (p0, z4, z0))
+
+/*
+** sqadd_u64_x_untied:
+** movprfx z0, z1
+** usqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (sqadd_u64_x_untied, svuint64_t, svint64_t,
+ z0 = svsqadd_u64_x (p0, z1, z4),
+ z0 = svsqadd_x (p0, z1, z4))
+
+/*
+** sqadd_x0_u64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_x0_u64_x_tied1, svuint64_t, int64_t,
+ z0 = svsqadd_n_u64_x (p0, z0, x0),
+ z0 = svsqadd_x (p0, z0, x0))
+
+/*
+** sqadd_x0_u64_x_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_x0_u64_x_untied, svuint64_t, int64_t,
+ z0 = svsqadd_n_u64_x (p0, z1, x0),
+ z0 = svsqadd_x (p0, z1, x0))
+
+/*
+** sqadd_1_u64_x_tied1:
+** uqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u64_x_tied1, svuint64_t,
+ z0 = svsqadd_n_u64_x (p0, z0, 1),
+ z0 = svsqadd_x (p0, z0, 1))
+
+/*
+** sqadd_1_u64_x_untied:
+** movprfx z0, z1
+** uqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u64_x_untied, svuint64_t,
+ z0 = svsqadd_n_u64_x (p0, z1, 1),
+ z0 = svsqadd_x (p0, z1, 1))
+
+/*
+** sqadd_127_u64_x:
+** uqadd z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u64_x, svuint64_t,
+ z0 = svsqadd_n_u64_x (p0, z0, 127),
+ z0 = svsqadd_x (p0, z0, 127))
+
+/*
+** sqadd_128_u64_x:
+** uqadd z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u64_x, svuint64_t,
+ z0 = svsqadd_n_u64_x (p0, z0, 128),
+ z0 = svsqadd_x (p0, z0, 128))
+
+/*
+** sqadd_255_u64_x:
+** uqadd z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u64_x, svuint64_t,
+ z0 = svsqadd_n_u64_x (p0, z0, 255),
+ z0 = svsqadd_x (p0, z0, 255))
+
+/*
+** sqadd_m1_u64_x:
+** mov (z[0-9]+)\.b, #-1
+** usqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u64_x, svuint64_t,
+ z0 = svsqadd_n_u64_x (p0, z0, -1),
+ z0 = svsqadd_x (p0, z0, -1))
+
+/*
+** sqadd_m127_u64_x:
+** mov (z[0-9]+\.d), #-127
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u64_x, svuint64_t,
+ z0 = svsqadd_n_u64_x (p0, z0, -127),
+ z0 = svsqadd_x (p0, z0, -127))
+
+/*
+** sqadd_m128_u64_x:
+** mov (z[0-9]+\.d), #-128
+** usqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u64_x, svuint64_t,
+ z0 = svsqadd_n_u64_x (p0, z0, -128),
+ z0 = svsqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sqadd_u8_m_tied1:
+** usqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (sqadd_u8_m_tied1, svuint8_t, svint8_t,
+ z0 = svsqadd_u8_m (p0, z0, z4),
+ z0 = svsqadd_m (p0, z0, z4))
+
+/*
+** sqadd_u8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** usqadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u8_m_tied2, svuint8_t, svint8_t,
+ z0_res = svsqadd_u8_m (p0, z4, z0),
+ z0_res = svsqadd_m (p0, z4, z0))
+
+/*
+** sqadd_u8_m_untied:
+** movprfx z0, z1
+** usqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (sqadd_u8_m_untied, svuint8_t, svint8_t,
+ z0 = svsqadd_u8_m (p0, z1, z4),
+ z0 = svsqadd_m (p0, z1, z4))
+
+/*
+** sqadd_w0_u8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u8_m_tied1, svuint8_t, int8_t,
+ z0 = svsqadd_n_u8_m (p0, z0, x0),
+ z0 = svsqadd_m (p0, z0, x0))
+
+/*
+** sqadd_w0_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u8_m_untied, svuint8_t, int8_t,
+ z0 = svsqadd_n_u8_m (p0, z1, x0),
+ z0 = svsqadd_m (p0, z1, x0))
+
+/*
+** sqadd_1_u8_m_tied1:
+** mov (z[0-9]+\.b), #1
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u8_m_tied1, svuint8_t,
+ z0 = svsqadd_n_u8_m (p0, z0, 1),
+ z0 = svsqadd_m (p0, z0, 1))
+
+/*
+** sqadd_1_u8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #1
+** movprfx z0, z1
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u8_m_untied, svuint8_t,
+ z0 = svsqadd_n_u8_m (p0, z1, 1),
+ z0 = svsqadd_m (p0, z1, 1))
+
+/*
+** sqadd_127_u8_m:
+** mov (z[0-9]+\.b), #127
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u8_m, svuint8_t,
+ z0 = svsqadd_n_u8_m (p0, z0, 127),
+ z0 = svsqadd_m (p0, z0, 127))
+
+/*
+** sqadd_128_u8_m:
+** mov (z[0-9]+\.b), #-128
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u8_m, svuint8_t,
+ z0 = svsqadd_n_u8_m (p0, z0, 128),
+ z0 = svsqadd_m (p0, z0, 128))
+
+/*
+** sqadd_255_u8_m:
+** mov (z[0-9]+\.b), #-1
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u8_m, svuint8_t,
+ z0 = svsqadd_n_u8_m (p0, z0, 255),
+ z0 = svsqadd_m (p0, z0, 255))
+
+/*
+** sqadd_m1_u8_m:
+** mov (z[0-9]+\.b), #-1
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u8_m, svuint8_t,
+ z0 = svsqadd_n_u8_m (p0, z0, -1),
+ z0 = svsqadd_m (p0, z0, -1))
+
+/*
+** sqadd_m127_u8_m:
+** mov (z[0-9]+\.b), #-127
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u8_m, svuint8_t,
+ z0 = svsqadd_n_u8_m (p0, z0, -127),
+ z0 = svsqadd_m (p0, z0, -127))
+
+/*
+** sqadd_m128_u8_m:
+** mov (z[0-9]+\.b), #-128
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u8_m, svuint8_t,
+ z0 = svsqadd_n_u8_m (p0, z0, -128),
+ z0 = svsqadd_m (p0, z0, -128))
+
+/*
+** sqadd_u8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** usqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (sqadd_u8_z_tied1, svuint8_t, svint8_t,
+ z0 = svsqadd_u8_z (p0, z0, z4),
+ z0 = svsqadd_z (p0, z0, z4))
+
+/*
+** sqadd_u8_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.b, p0/z, z4\.b
+** usqadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u8_z_tied2, svuint8_t, svint8_t,
+ z0_res = svsqadd_u8_z (p0, z4, z0),
+ z0_res = svsqadd_z (p0, z4, z0))
+
+/*
+** sqadd_u8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** usqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (sqadd_u8_z_untied, svuint8_t, svint8_t,
+ z0 = svsqadd_u8_z (p0, z1, z4),
+ z0 = svsqadd_z (p0, z1, z4))
+
+/*
+** sqadd_w0_u8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u8_z_tied1, svuint8_t, int8_t,
+ z0 = svsqadd_n_u8_z (p0, z0, x0),
+ z0 = svsqadd_z (p0, z0, x0))
+
+/*
+** sqadd_w0_u8_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z1\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u8_z_untied, svuint8_t, int8_t,
+ z0 = svsqadd_n_u8_z (p0, z1, x0),
+ z0 = svsqadd_z (p0, z1, x0))
+
+/*
+** sqadd_1_u8_z_tied1:
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z0\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u8_z_tied1, svuint8_t,
+ z0 = svsqadd_n_u8_z (p0, z0, 1),
+ z0 = svsqadd_z (p0, z0, 1))
+
+/*
+** sqadd_1_u8_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z1\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u8_z_untied, svuint8_t,
+ z0 = svsqadd_n_u8_z (p0, z1, 1),
+ z0 = svsqadd_z (p0, z1, 1))
+
+/*
+** sqadd_127_u8_z:
+** mov (z[0-9]+\.b), #127
+** movprfx z0\.b, p0/z, z0\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u8_z, svuint8_t,
+ z0 = svsqadd_n_u8_z (p0, z0, 127),
+ z0 = svsqadd_z (p0, z0, 127))
+
+/*
+** sqadd_128_u8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u8_z, svuint8_t,
+ z0 = svsqadd_n_u8_z (p0, z0, 128),
+ z0 = svsqadd_z (p0, z0, 128))
+
+/*
+** sqadd_255_u8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u8_z, svuint8_t,
+ z0 = svsqadd_n_u8_z (p0, z0, 255),
+ z0 = svsqadd_z (p0, z0, 255))
+
+/*
+** sqadd_m1_u8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u8_z, svuint8_t,
+ z0 = svsqadd_n_u8_z (p0, z0, -1),
+ z0 = svsqadd_z (p0, z0, -1))
+
+/*
+** sqadd_m127_u8_z:
+** mov (z[0-9]+\.b), #-127
+** movprfx z0\.b, p0/z, z0\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u8_z, svuint8_t,
+ z0 = svsqadd_n_u8_z (p0, z0, -127),
+ z0 = svsqadd_z (p0, z0, -127))
+
+/*
+** sqadd_m128_u8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u8_z, svuint8_t,
+ z0 = svsqadd_n_u8_z (p0, z0, -128),
+ z0 = svsqadd_z (p0, z0, -128))
+
+/*
+** sqadd_u8_x_tied1:
+** usqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (sqadd_u8_x_tied1, svuint8_t, svint8_t,
+ z0 = svsqadd_u8_x (p0, z0, z4),
+ z0 = svsqadd_x (p0, z0, z4))
+
+/*
+** sqadd_u8_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** usqadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (sqadd_u8_x_tied2, svuint8_t, svint8_t,
+ z0_res = svsqadd_u8_x (p0, z4, z0),
+ z0_res = svsqadd_x (p0, z4, z0))
+
+/*
+** sqadd_u8_x_untied:
+** movprfx z0, z1
+** usqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (sqadd_u8_x_untied, svuint8_t, svint8_t,
+ z0 = svsqadd_u8_x (p0, z1, z4),
+ z0 = svsqadd_x (p0, z1, z4))
+
+/*
+** sqadd_w0_u8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u8_x_tied1, svuint8_t, int8_t,
+ z0 = svsqadd_n_u8_x (p0, z0, x0),
+ z0 = svsqadd_x (p0, z0, x0))
+
+/*
+** sqadd_w0_u8_x_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (sqadd_w0_u8_x_untied, svuint8_t, int8_t,
+ z0 = svsqadd_n_u8_x (p0, z1, x0),
+ z0 = svsqadd_x (p0, z1, x0))
+
+/*
+** sqadd_1_u8_x_tied1:
+** uqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u8_x_tied1, svuint8_t,
+ z0 = svsqadd_n_u8_x (p0, z0, 1),
+ z0 = svsqadd_x (p0, z0, 1))
+
+/*
+** sqadd_1_u8_x_untied:
+** movprfx z0, z1
+** uqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_1_u8_x_untied, svuint8_t,
+ z0 = svsqadd_n_u8_x (p0, z1, 1),
+ z0 = svsqadd_x (p0, z1, 1))
+
+/*
+** sqadd_127_u8_x:
+** uqadd z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_127_u8_x, svuint8_t,
+ z0 = svsqadd_n_u8_x (p0, z0, 127),
+ z0 = svsqadd_x (p0, z0, 127))
+
+/*
+** sqadd_128_u8_x:
+** mov (z[0-9]+\.b), #-128
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_128_u8_x, svuint8_t,
+ z0 = svsqadd_n_u8_x (p0, z0, 128),
+ z0 = svsqadd_x (p0, z0, 128))
+
+/*
+** sqadd_255_u8_x:
+** mov (z[0-9]+\.b), #-1
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_255_u8_x, svuint8_t,
+ z0 = svsqadd_n_u8_x (p0, z0, 255),
+ z0 = svsqadd_x (p0, z0, 255))
+
+/*
+** sqadd_m1_u8_x:
+** mov (z[0-9]+\.b), #-1
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m1_u8_x, svuint8_t,
+ z0 = svsqadd_n_u8_x (p0, z0, -1),
+ z0 = svsqadd_x (p0, z0, -1))
+
+/*
+** sqadd_m127_u8_x:
+** mov (z[0-9]+\.b), #-127
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m127_u8_x, svuint8_t,
+ z0 = svsqadd_n_u8_x (p0, z0, -127),
+ z0 = svsqadd_x (p0, z0, -127))
+
+/*
+** sqadd_m128_u8_x:
+** mov (z[0-9]+\.b), #-128
+** usqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (sqadd_m128_u8_x, svuint8_t,
+ z0 = svsqadd_n_u8_x (p0, z0, -128),
+ z0 = svsqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sra_1_s16_tied1:
+** ssra z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s16_tied1, svint16_t,
+ z0 = svsra_n_s16 (z0, z1, 1),
+ z0 = svsra (z0, z1, 1))
+
+/*
+** sra_1_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ssra z0\.h, \1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s16_tied2, svint16_t,
+ z0 = svsra_n_s16 (z1, z0, 1),
+ z0 = svsra (z1, z0, 1))
+
+/*
+** sra_1_s16_untied:
+** movprfx z0, z1
+** ssra z0\.h, z2\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s16_untied, svint16_t,
+ z0 = svsra_n_s16 (z1, z2, 1),
+ z0 = svsra (z1, z2, 1))
+
+/*
+** sra_2_s16_tied1:
+** ssra z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s16_tied1, svint16_t,
+ z0 = svsra_n_s16 (z0, z1, 2),
+ z0 = svsra (z0, z1, 2))
+
+/*
+** sra_2_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ssra z0\.h, \1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s16_tied2, svint16_t,
+ z0 = svsra_n_s16 (z1, z0, 2),
+ z0 = svsra (z1, z0, 2))
+
+/*
+** sra_2_s16_untied:
+** movprfx z0, z1
+** ssra z0\.h, z2\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s16_untied, svint16_t,
+ z0 = svsra_n_s16 (z1, z2, 2),
+ z0 = svsra (z1, z2, 2))
+
+/*
+** sra_16_s16_tied1:
+** ssra z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sra_16_s16_tied1, svint16_t,
+ z0 = svsra_n_s16 (z0, z1, 16),
+ z0 = svsra (z0, z1, 16))
+
+/*
+** sra_16_s16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ssra z0\.h, \1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sra_16_s16_tied2, svint16_t,
+ z0 = svsra_n_s16 (z1, z0, 16),
+ z0 = svsra (z1, z0, 16))
+
+/*
+** sra_16_s16_untied:
+** movprfx z0, z1
+** ssra z0\.h, z2\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sra_16_s16_untied, svint16_t,
+ z0 = svsra_n_s16 (z1, z2, 16),
+ z0 = svsra (z1, z2, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sra_1_s32_tied1:
+** ssra z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s32_tied1, svint32_t,
+ z0 = svsra_n_s32 (z0, z1, 1),
+ z0 = svsra (z0, z1, 1))
+
+/*
+** sra_1_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ssra z0\.s, \1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s32_tied2, svint32_t,
+ z0 = svsra_n_s32 (z1, z0, 1),
+ z0 = svsra (z1, z0, 1))
+
+/*
+** sra_1_s32_untied:
+** movprfx z0, z1
+** ssra z0\.s, z2\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s32_untied, svint32_t,
+ z0 = svsra_n_s32 (z1, z2, 1),
+ z0 = svsra (z1, z2, 1))
+
+/*
+** sra_2_s32_tied1:
+** ssra z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s32_tied1, svint32_t,
+ z0 = svsra_n_s32 (z0, z1, 2),
+ z0 = svsra (z0, z1, 2))
+
+/*
+** sra_2_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ssra z0\.s, \1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s32_tied2, svint32_t,
+ z0 = svsra_n_s32 (z1, z0, 2),
+ z0 = svsra (z1, z0, 2))
+
+/*
+** sra_2_s32_untied:
+** movprfx z0, z1
+** ssra z0\.s, z2\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s32_untied, svint32_t,
+ z0 = svsra_n_s32 (z1, z2, 2),
+ z0 = svsra (z1, z2, 2))
+
+/*
+** sra_32_s32_tied1:
+** ssra z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sra_32_s32_tied1, svint32_t,
+ z0 = svsra_n_s32 (z0, z1, 32),
+ z0 = svsra (z0, z1, 32))
+
+/*
+** sra_32_s32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ssra z0\.s, \1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sra_32_s32_tied2, svint32_t,
+ z0 = svsra_n_s32 (z1, z0, 32),
+ z0 = svsra (z1, z0, 32))
+
+/*
+** sra_32_s32_untied:
+** movprfx z0, z1
+** ssra z0\.s, z2\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sra_32_s32_untied, svint32_t,
+ z0 = svsra_n_s32 (z1, z2, 32),
+ z0 = svsra (z1, z2, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sra_1_s64_tied1:
+** ssra z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s64_tied1, svint64_t,
+ z0 = svsra_n_s64 (z0, z1, 1),
+ z0 = svsra (z0, z1, 1))
+
+/*
+** sra_1_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** ssra z0\.d, \1, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s64_tied2, svint64_t,
+ z0 = svsra_n_s64 (z1, z0, 1),
+ z0 = svsra (z1, z0, 1))
+
+/*
+** sra_1_s64_untied:
+** movprfx z0, z1
+** ssra z0\.d, z2\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s64_untied, svint64_t,
+ z0 = svsra_n_s64 (z1, z2, 1),
+ z0 = svsra (z1, z2, 1))
+
+/*
+** sra_2_s64_tied1:
+** ssra z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s64_tied1, svint64_t,
+ z0 = svsra_n_s64 (z0, z1, 2),
+ z0 = svsra (z0, z1, 2))
+
+/*
+** sra_2_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** ssra z0\.d, \1, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s64_tied2, svint64_t,
+ z0 = svsra_n_s64 (z1, z0, 2),
+ z0 = svsra (z1, z0, 2))
+
+/*
+** sra_2_s64_untied:
+** movprfx z0, z1
+** ssra z0\.d, z2\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s64_untied, svint64_t,
+ z0 = svsra_n_s64 (z1, z2, 2),
+ z0 = svsra (z1, z2, 2))
+
+/*
+** sra_64_s64_tied1:
+** ssra z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (sra_64_s64_tied1, svint64_t,
+ z0 = svsra_n_s64 (z0, z1, 64),
+ z0 = svsra (z0, z1, 64))
+
+/*
+** sra_64_s64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** ssra z0\.d, \1, #64
+** ret
+*/
+TEST_UNIFORM_Z (sra_64_s64_tied2, svint64_t,
+ z0 = svsra_n_s64 (z1, z0, 64),
+ z0 = svsra (z1, z0, 64))
+
+/*
+** sra_64_s64_untied:
+** movprfx z0, z1
+** ssra z0\.d, z2\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (sra_64_s64_untied, svint64_t,
+ z0 = svsra_n_s64 (z1, z2, 64),
+ z0 = svsra (z1, z2, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sra_1_s8_tied1:
+** ssra z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s8_tied1, svint8_t,
+ z0 = svsra_n_s8 (z0, z1, 1),
+ z0 = svsra (z0, z1, 1))
+
+/*
+** sra_1_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ssra z0\.b, \1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s8_tied2, svint8_t,
+ z0 = svsra_n_s8 (z1, z0, 1),
+ z0 = svsra (z1, z0, 1))
+
+/*
+** sra_1_s8_untied:
+** movprfx z0, z1
+** ssra z0\.b, z2\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_s8_untied, svint8_t,
+ z0 = svsra_n_s8 (z1, z2, 1),
+ z0 = svsra (z1, z2, 1))
+
+/*
+** sra_2_s8_tied1:
+** ssra z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s8_tied1, svint8_t,
+ z0 = svsra_n_s8 (z0, z1, 2),
+ z0 = svsra (z0, z1, 2))
+
+/*
+** sra_2_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ssra z0\.b, \1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s8_tied2, svint8_t,
+ z0 = svsra_n_s8 (z1, z0, 2),
+ z0 = svsra (z1, z0, 2))
+
+/*
+** sra_2_s8_untied:
+** movprfx z0, z1
+** ssra z0\.b, z2\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_s8_untied, svint8_t,
+ z0 = svsra_n_s8 (z1, z2, 2),
+ z0 = svsra (z1, z2, 2))
+
+/*
+** sra_8_s8_tied1:
+** ssra z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sra_8_s8_tied1, svint8_t,
+ z0 = svsra_n_s8 (z0, z1, 8),
+ z0 = svsra (z0, z1, 8))
+
+/*
+** sra_8_s8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** ssra z0\.b, \1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sra_8_s8_tied2, svint8_t,
+ z0 = svsra_n_s8 (z1, z0, 8),
+ z0 = svsra (z1, z0, 8))
+
+/*
+** sra_8_s8_untied:
+** movprfx z0, z1
+** ssra z0\.b, z2\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sra_8_s8_untied, svint8_t,
+ z0 = svsra_n_s8 (z1, z2, 8),
+ z0 = svsra (z1, z2, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sra_1_u16_tied1:
+** usra z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u16_tied1, svuint16_t,
+ z0 = svsra_n_u16 (z0, z1, 1),
+ z0 = svsra (z0, z1, 1))
+
+/*
+** sra_1_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** usra z0\.h, \1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u16_tied2, svuint16_t,
+ z0 = svsra_n_u16 (z1, z0, 1),
+ z0 = svsra (z1, z0, 1))
+
+/*
+** sra_1_u16_untied:
+** movprfx z0, z1
+** usra z0\.h, z2\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u16_untied, svuint16_t,
+ z0 = svsra_n_u16 (z1, z2, 1),
+ z0 = svsra (z1, z2, 1))
+
+/*
+** sra_2_u16_tied1:
+** usra z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u16_tied1, svuint16_t,
+ z0 = svsra_n_u16 (z0, z1, 2),
+ z0 = svsra (z0, z1, 2))
+
+/*
+** sra_2_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** usra z0\.h, \1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u16_tied2, svuint16_t,
+ z0 = svsra_n_u16 (z1, z0, 2),
+ z0 = svsra (z1, z0, 2))
+
+/*
+** sra_2_u16_untied:
+** movprfx z0, z1
+** usra z0\.h, z2\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u16_untied, svuint16_t,
+ z0 = svsra_n_u16 (z1, z2, 2),
+ z0 = svsra (z1, z2, 2))
+
+/*
+** sra_16_u16_tied1:
+** usra z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sra_16_u16_tied1, svuint16_t,
+ z0 = svsra_n_u16 (z0, z1, 16),
+ z0 = svsra (z0, z1, 16))
+
+/*
+** sra_16_u16_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** usra z0\.h, \1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sra_16_u16_tied2, svuint16_t,
+ z0 = svsra_n_u16 (z1, z0, 16),
+ z0 = svsra (z1, z0, 16))
+
+/*
+** sra_16_u16_untied:
+** movprfx z0, z1
+** usra z0\.h, z2\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sra_16_u16_untied, svuint16_t,
+ z0 = svsra_n_u16 (z1, z2, 16),
+ z0 = svsra (z1, z2, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sra_1_u32_tied1:
+** usra z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u32_tied1, svuint32_t,
+ z0 = svsra_n_u32 (z0, z1, 1),
+ z0 = svsra (z0, z1, 1))
+
+/*
+** sra_1_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** usra z0\.s, \1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u32_tied2, svuint32_t,
+ z0 = svsra_n_u32 (z1, z0, 1),
+ z0 = svsra (z1, z0, 1))
+
+/*
+** sra_1_u32_untied:
+** movprfx z0, z1
+** usra z0\.s, z2\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u32_untied, svuint32_t,
+ z0 = svsra_n_u32 (z1, z2, 1),
+ z0 = svsra (z1, z2, 1))
+
+/*
+** sra_2_u32_tied1:
+** usra z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u32_tied1, svuint32_t,
+ z0 = svsra_n_u32 (z0, z1, 2),
+ z0 = svsra (z0, z1, 2))
+
+/*
+** sra_2_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** usra z0\.s, \1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u32_tied2, svuint32_t,
+ z0 = svsra_n_u32 (z1, z0, 2),
+ z0 = svsra (z1, z0, 2))
+
+/*
+** sra_2_u32_untied:
+** movprfx z0, z1
+** usra z0\.s, z2\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u32_untied, svuint32_t,
+ z0 = svsra_n_u32 (z1, z2, 2),
+ z0 = svsra (z1, z2, 2))
+
+/*
+** sra_32_u32_tied1:
+** usra z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sra_32_u32_tied1, svuint32_t,
+ z0 = svsra_n_u32 (z0, z1, 32),
+ z0 = svsra (z0, z1, 32))
+
+/*
+** sra_32_u32_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** usra z0\.s, \1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sra_32_u32_tied2, svuint32_t,
+ z0 = svsra_n_u32 (z1, z0, 32),
+ z0 = svsra (z1, z0, 32))
+
+/*
+** sra_32_u32_untied:
+** movprfx z0, z1
+** usra z0\.s, z2\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sra_32_u32_untied, svuint32_t,
+ z0 = svsra_n_u32 (z1, z2, 32),
+ z0 = svsra (z1, z2, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sra_1_u64_tied1:
+** usra z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u64_tied1, svuint64_t,
+ z0 = svsra_n_u64 (z0, z1, 1),
+ z0 = svsra (z0, z1, 1))
+
+/*
+** sra_1_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** usra z0\.d, \1, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u64_tied2, svuint64_t,
+ z0 = svsra_n_u64 (z1, z0, 1),
+ z0 = svsra (z1, z0, 1))
+
+/*
+** sra_1_u64_untied:
+** movprfx z0, z1
+** usra z0\.d, z2\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u64_untied, svuint64_t,
+ z0 = svsra_n_u64 (z1, z2, 1),
+ z0 = svsra (z1, z2, 1))
+
+/*
+** sra_2_u64_tied1:
+** usra z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u64_tied1, svuint64_t,
+ z0 = svsra_n_u64 (z0, z1, 2),
+ z0 = svsra (z0, z1, 2))
+
+/*
+** sra_2_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** usra z0\.d, \1, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u64_tied2, svuint64_t,
+ z0 = svsra_n_u64 (z1, z0, 2),
+ z0 = svsra (z1, z0, 2))
+
+/*
+** sra_2_u64_untied:
+** movprfx z0, z1
+** usra z0\.d, z2\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u64_untied, svuint64_t,
+ z0 = svsra_n_u64 (z1, z2, 2),
+ z0 = svsra (z1, z2, 2))
+
+/*
+** sra_64_u64_tied1:
+** usra z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (sra_64_u64_tied1, svuint64_t,
+ z0 = svsra_n_u64 (z0, z1, 64),
+ z0 = svsra (z0, z1, 64))
+
+/*
+** sra_64_u64_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z1
+** usra z0\.d, \1, #64
+** ret
+*/
+TEST_UNIFORM_Z (sra_64_u64_tied2, svuint64_t,
+ z0 = svsra_n_u64 (z1, z0, 64),
+ z0 = svsra (z1, z0, 64))
+
+/*
+** sra_64_u64_untied:
+** movprfx z0, z1
+** usra z0\.d, z2\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (sra_64_u64_untied, svuint64_t,
+ z0 = svsra_n_u64 (z1, z2, 64),
+ z0 = svsra (z1, z2, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sra_1_u8_tied1:
+** usra z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u8_tied1, svuint8_t,
+ z0 = svsra_n_u8 (z0, z1, 1),
+ z0 = svsra (z0, z1, 1))
+
+/*
+** sra_1_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** usra z0\.b, \1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u8_tied2, svuint8_t,
+ z0 = svsra_n_u8 (z1, z0, 1),
+ z0 = svsra (z1, z0, 1))
+
+/*
+** sra_1_u8_untied:
+** movprfx z0, z1
+** usra z0\.b, z2\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sra_1_u8_untied, svuint8_t,
+ z0 = svsra_n_u8 (z1, z2, 1),
+ z0 = svsra (z1, z2, 1))
+
+/*
+** sra_2_u8_tied1:
+** usra z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u8_tied1, svuint8_t,
+ z0 = svsra_n_u8 (z0, z1, 2),
+ z0 = svsra (z0, z1, 2))
+
+/*
+** sra_2_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** usra z0\.b, \1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u8_tied2, svuint8_t,
+ z0 = svsra_n_u8 (z1, z0, 2),
+ z0 = svsra (z1, z0, 2))
+
+/*
+** sra_2_u8_untied:
+** movprfx z0, z1
+** usra z0\.b, z2\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sra_2_u8_untied, svuint8_t,
+ z0 = svsra_n_u8 (z1, z2, 2),
+ z0 = svsra (z1, z2, 2))
+
+/*
+** sra_8_u8_tied1:
+** usra z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sra_8_u8_tied1, svuint8_t,
+ z0 = svsra_n_u8 (z0, z1, 8),
+ z0 = svsra (z0, z1, 8))
+
+/*
+** sra_8_u8_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z1
+** usra z0\.b, \1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sra_8_u8_tied2, svuint8_t,
+ z0 = svsra_n_u8 (z1, z0, 8),
+ z0 = svsra (z1, z0, 8))
+
+/*
+** sra_8_u8_untied:
+** movprfx z0, z1
+** usra z0\.b, z2\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sra_8_u8_untied, svuint8_t,
+ z0 = svsra_n_u8 (z1, z2, 8),
+ z0 = svsra (z1, z2, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sri_1_s16_tied1:
+** sri z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_s16_tied1, svint16_t,
+ z0 = svsri_n_s16 (z0, z1, 1),
+ z0 = svsri (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_1_s16_tied2, svint16_t,
+ z0 = svsri_n_s16 (z1, z0, 1),
+ z0 = svsri (z1, z0, 1))
+
+/*
+** sri_1_s16_untied:
+** mov z0\.d, z1\.d
+** sri z0\.h, z2\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_s16_untied, svint16_t,
+ z0 = svsri_n_s16 (z1, z2, 1),
+ z0 = svsri (z1, z2, 1))
+
+/*
+** sri_2_s16_tied1:
+** sri z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_s16_tied1, svint16_t,
+ z0 = svsri_n_s16 (z0, z1, 2),
+ z0 = svsri (z0, z1, 2))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_2_s16_tied2, svint16_t,
+ z0 = svsri_n_s16 (z1, z0, 2),
+ z0 = svsri (z1, z0, 2))
+
+/*
+** sri_2_s16_untied:
+** mov z0\.d, z1\.d
+** sri z0\.h, z2\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_s16_untied, svint16_t,
+ z0 = svsri_n_s16 (z1, z2, 2),
+ z0 = svsri (z1, z2, 2))
+
+/*
+** sri_16_s16_tied1:
+** sri z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sri_16_s16_tied1, svint16_t,
+ z0 = svsri_n_s16 (z0, z1, 16),
+ z0 = svsri (z0, z1, 16))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_16_s16_tied2, svint16_t,
+ z0 = svsri_n_s16 (z1, z0, 16),
+ z0 = svsri (z1, z0, 16))
+
+/*
+** sri_16_s16_untied:
+** mov z0\.d, z1\.d
+** sri z0\.h, z2\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sri_16_s16_untied, svint16_t,
+ z0 = svsri_n_s16 (z1, z2, 16),
+ z0 = svsri (z1, z2, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sri_1_s32_tied1:
+** sri z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_s32_tied1, svint32_t,
+ z0 = svsri_n_s32 (z0, z1, 1),
+ z0 = svsri (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_1_s32_tied2, svint32_t,
+ z0 = svsri_n_s32 (z1, z0, 1),
+ z0 = svsri (z1, z0, 1))
+
+/*
+** sri_1_s32_untied:
+** mov z0\.d, z1\.d
+** sri z0\.s, z2\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_s32_untied, svint32_t,
+ z0 = svsri_n_s32 (z1, z2, 1),
+ z0 = svsri (z1, z2, 1))
+
+/*
+** sri_2_s32_tied1:
+** sri z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_s32_tied1, svint32_t,
+ z0 = svsri_n_s32 (z0, z1, 2),
+ z0 = svsri (z0, z1, 2))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_2_s32_tied2, svint32_t,
+ z0 = svsri_n_s32 (z1, z0, 2),
+ z0 = svsri (z1, z0, 2))
+
+/*
+** sri_2_s32_untied:
+** mov z0\.d, z1\.d
+** sri z0\.s, z2\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_s32_untied, svint32_t,
+ z0 = svsri_n_s32 (z1, z2, 2),
+ z0 = svsri (z1, z2, 2))
+
+/*
+** sri_32_s32_tied1:
+** sri z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sri_32_s32_tied1, svint32_t,
+ z0 = svsri_n_s32 (z0, z1, 32),
+ z0 = svsri (z0, z1, 32))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_32_s32_tied2, svint32_t,
+ z0 = svsri_n_s32 (z1, z0, 32),
+ z0 = svsri (z1, z0, 32))
+
+/*
+** sri_32_s32_untied:
+** mov z0\.d, z1\.d
+** sri z0\.s, z2\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sri_32_s32_untied, svint32_t,
+ z0 = svsri_n_s32 (z1, z2, 32),
+ z0 = svsri (z1, z2, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sri_1_s64_tied1:
+** sri z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_s64_tied1, svint64_t,
+ z0 = svsri_n_s64 (z0, z1, 1),
+ z0 = svsri (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_1_s64_tied2, svint64_t,
+ z0 = svsri_n_s64 (z1, z0, 1),
+ z0 = svsri (z1, z0, 1))
+
+/*
+** sri_1_s64_untied:
+** mov z0\.d, z1\.d
+** sri z0\.d, z2\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_s64_untied, svint64_t,
+ z0 = svsri_n_s64 (z1, z2, 1),
+ z0 = svsri (z1, z2, 1))
+
+/*
+** sri_2_s64_tied1:
+** sri z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_s64_tied1, svint64_t,
+ z0 = svsri_n_s64 (z0, z1, 2),
+ z0 = svsri (z0, z1, 2))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_2_s64_tied2, svint64_t,
+ z0 = svsri_n_s64 (z1, z0, 2),
+ z0 = svsri (z1, z0, 2))
+
+/*
+** sri_2_s64_untied:
+** mov z0\.d, z1\.d
+** sri z0\.d, z2\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_s64_untied, svint64_t,
+ z0 = svsri_n_s64 (z1, z2, 2),
+ z0 = svsri (z1, z2, 2))
+
+/*
+** sri_64_s64_tied1:
+** sri z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (sri_64_s64_tied1, svint64_t,
+ z0 = svsri_n_s64 (z0, z1, 64),
+ z0 = svsri (z0, z1, 64))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_64_s64_tied2, svint64_t,
+ z0 = svsri_n_s64 (z1, z0, 64),
+ z0 = svsri (z1, z0, 64))
+
+/*
+** sri_64_s64_untied:
+** mov z0\.d, z1\.d
+** sri z0\.d, z2\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (sri_64_s64_untied, svint64_t,
+ z0 = svsri_n_s64 (z1, z2, 64),
+ z0 = svsri (z1, z2, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sri_1_s8_tied1:
+** sri z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_s8_tied1, svint8_t,
+ z0 = svsri_n_s8 (z0, z1, 1),
+ z0 = svsri (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_1_s8_tied2, svint8_t,
+ z0 = svsri_n_s8 (z1, z0, 1),
+ z0 = svsri (z1, z0, 1))
+
+/*
+** sri_1_s8_untied:
+** mov z0\.d, z1\.d
+** sri z0\.b, z2\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_s8_untied, svint8_t,
+ z0 = svsri_n_s8 (z1, z2, 1),
+ z0 = svsri (z1, z2, 1))
+
+/*
+** sri_2_s8_tied1:
+** sri z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_s8_tied1, svint8_t,
+ z0 = svsri_n_s8 (z0, z1, 2),
+ z0 = svsri (z0, z1, 2))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_2_s8_tied2, svint8_t,
+ z0 = svsri_n_s8 (z1, z0, 2),
+ z0 = svsri (z1, z0, 2))
+
+/*
+** sri_2_s8_untied:
+** mov z0\.d, z1\.d
+** sri z0\.b, z2\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_s8_untied, svint8_t,
+ z0 = svsri_n_s8 (z1, z2, 2),
+ z0 = svsri (z1, z2, 2))
+
+/*
+** sri_8_s8_tied1:
+** sri z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sri_8_s8_tied1, svint8_t,
+ z0 = svsri_n_s8 (z0, z1, 8),
+ z0 = svsri (z0, z1, 8))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_8_s8_tied2, svint8_t,
+ z0 = svsri_n_s8 (z1, z0, 8),
+ z0 = svsri (z1, z0, 8))
+
+/*
+** sri_8_s8_untied:
+** mov z0\.d, z1\.d
+** sri z0\.b, z2\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sri_8_s8_untied, svint8_t,
+ z0 = svsri_n_s8 (z1, z2, 8),
+ z0 = svsri (z1, z2, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sri_1_u16_tied1:
+** sri z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_u16_tied1, svuint16_t,
+ z0 = svsri_n_u16 (z0, z1, 1),
+ z0 = svsri (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_1_u16_tied2, svuint16_t,
+ z0 = svsri_n_u16 (z1, z0, 1),
+ z0 = svsri (z1, z0, 1))
+
+/*
+** sri_1_u16_untied:
+** mov z0\.d, z1\.d
+** sri z0\.h, z2\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_u16_untied, svuint16_t,
+ z0 = svsri_n_u16 (z1, z2, 1),
+ z0 = svsri (z1, z2, 1))
+
+/*
+** sri_2_u16_tied1:
+** sri z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_u16_tied1, svuint16_t,
+ z0 = svsri_n_u16 (z0, z1, 2),
+ z0 = svsri (z0, z1, 2))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_2_u16_tied2, svuint16_t,
+ z0 = svsri_n_u16 (z1, z0, 2),
+ z0 = svsri (z1, z0, 2))
+
+/*
+** sri_2_u16_untied:
+** mov z0\.d, z1\.d
+** sri z0\.h, z2\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_u16_untied, svuint16_t,
+ z0 = svsri_n_u16 (z1, z2, 2),
+ z0 = svsri (z1, z2, 2))
+
+/*
+** sri_16_u16_tied1:
+** sri z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sri_16_u16_tied1, svuint16_t,
+ z0 = svsri_n_u16 (z0, z1, 16),
+ z0 = svsri (z0, z1, 16))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_16_u16_tied2, svuint16_t,
+ z0 = svsri_n_u16 (z1, z0, 16),
+ z0 = svsri (z1, z0, 16))
+
+/*
+** sri_16_u16_untied:
+** mov z0\.d, z1\.d
+** sri z0\.h, z2\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (sri_16_u16_untied, svuint16_t,
+ z0 = svsri_n_u16 (z1, z2, 16),
+ z0 = svsri (z1, z2, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sri_1_u32_tied1:
+** sri z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_u32_tied1, svuint32_t,
+ z0 = svsri_n_u32 (z0, z1, 1),
+ z0 = svsri (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_1_u32_tied2, svuint32_t,
+ z0 = svsri_n_u32 (z1, z0, 1),
+ z0 = svsri (z1, z0, 1))
+
+/*
+** sri_1_u32_untied:
+** mov z0\.d, z1\.d
+** sri z0\.s, z2\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_u32_untied, svuint32_t,
+ z0 = svsri_n_u32 (z1, z2, 1),
+ z0 = svsri (z1, z2, 1))
+
+/*
+** sri_2_u32_tied1:
+** sri z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_u32_tied1, svuint32_t,
+ z0 = svsri_n_u32 (z0, z1, 2),
+ z0 = svsri (z0, z1, 2))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_2_u32_tied2, svuint32_t,
+ z0 = svsri_n_u32 (z1, z0, 2),
+ z0 = svsri (z1, z0, 2))
+
+/*
+** sri_2_u32_untied:
+** mov z0\.d, z1\.d
+** sri z0\.s, z2\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_u32_untied, svuint32_t,
+ z0 = svsri_n_u32 (z1, z2, 2),
+ z0 = svsri (z1, z2, 2))
+
+/*
+** sri_32_u32_tied1:
+** sri z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sri_32_u32_tied1, svuint32_t,
+ z0 = svsri_n_u32 (z0, z1, 32),
+ z0 = svsri (z0, z1, 32))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_32_u32_tied2, svuint32_t,
+ z0 = svsri_n_u32 (z1, z0, 32),
+ z0 = svsri (z1, z0, 32))
+
+/*
+** sri_32_u32_untied:
+** mov z0\.d, z1\.d
+** sri z0\.s, z2\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (sri_32_u32_untied, svuint32_t,
+ z0 = svsri_n_u32 (z1, z2, 32),
+ z0 = svsri (z1, z2, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sri_1_u64_tied1:
+** sri z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_u64_tied1, svuint64_t,
+ z0 = svsri_n_u64 (z0, z1, 1),
+ z0 = svsri (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_1_u64_tied2, svuint64_t,
+ z0 = svsri_n_u64 (z1, z0, 1),
+ z0 = svsri (z1, z0, 1))
+
+/*
+** sri_1_u64_untied:
+** mov z0\.d, z1\.d
+** sri z0\.d, z2\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_u64_untied, svuint64_t,
+ z0 = svsri_n_u64 (z1, z2, 1),
+ z0 = svsri (z1, z2, 1))
+
+/*
+** sri_2_u64_tied1:
+** sri z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_u64_tied1, svuint64_t,
+ z0 = svsri_n_u64 (z0, z1, 2),
+ z0 = svsri (z0, z1, 2))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_2_u64_tied2, svuint64_t,
+ z0 = svsri_n_u64 (z1, z0, 2),
+ z0 = svsri (z1, z0, 2))
+
+/*
+** sri_2_u64_untied:
+** mov z0\.d, z1\.d
+** sri z0\.d, z2\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_u64_untied, svuint64_t,
+ z0 = svsri_n_u64 (z1, z2, 2),
+ z0 = svsri (z1, z2, 2))
+
+/*
+** sri_64_u64_tied1:
+** sri z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (sri_64_u64_tied1, svuint64_t,
+ z0 = svsri_n_u64 (z0, z1, 64),
+ z0 = svsri (z0, z1, 64))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_64_u64_tied2, svuint64_t,
+ z0 = svsri_n_u64 (z1, z0, 64),
+ z0 = svsri (z1, z0, 64))
+
+/*
+** sri_64_u64_untied:
+** mov z0\.d, z1\.d
+** sri z0\.d, z2\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (sri_64_u64_untied, svuint64_t,
+ z0 = svsri_n_u64 (z1, z2, 64),
+ z0 = svsri (z1, z2, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sri_1_u8_tied1:
+** sri z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_u8_tied1, svuint8_t,
+ z0 = svsri_n_u8 (z0, z1, 1),
+ z0 = svsri (z0, z1, 1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_1_u8_tied2, svuint8_t,
+ z0 = svsri_n_u8 (z1, z0, 1),
+ z0 = svsri (z1, z0, 1))
+
+/*
+** sri_1_u8_untied:
+** mov z0\.d, z1\.d
+** sri z0\.b, z2\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (sri_1_u8_untied, svuint8_t,
+ z0 = svsri_n_u8 (z1, z2, 1),
+ z0 = svsri (z1, z2, 1))
+
+/*
+** sri_2_u8_tied1:
+** sri z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_u8_tied1, svuint8_t,
+ z0 = svsri_n_u8 (z0, z1, 2),
+ z0 = svsri (z0, z1, 2))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_2_u8_tied2, svuint8_t,
+ z0 = svsri_n_u8 (z1, z0, 2),
+ z0 = svsri (z1, z0, 2))
+
+/*
+** sri_2_u8_untied:
+** mov z0\.d, z1\.d
+** sri z0\.b, z2\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (sri_2_u8_untied, svuint8_t,
+ z0 = svsri_n_u8 (z1, z2, 2),
+ z0 = svsri (z1, z2, 2))
+
+/*
+** sri_8_u8_tied1:
+** sri z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sri_8_u8_tied1, svuint8_t,
+ z0 = svsri_n_u8 (z0, z1, 8),
+ z0 = svsri (z0, z1, 8))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_UNIFORM_Z (sri_8_u8_tied2, svuint8_t,
+ z0 = svsri_n_u8 (z1, z0, 8),
+ z0 = svsri (z1, z0, 8))
+
+/*
+** sri_8_u8_untied:
+** mov z0\.d, z1\.d
+** sri z0\.b, z2\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (sri_8_u8_untied, svuint8_t,
+ z0 = svsri_n_u8 (z1, z2, 8),
+ z0 = svsri (z1, z2, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1_scatter_f32:
+** stnt1w z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_f32, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_f32 (p0, z1, z0),
+ svstnt1_scatter (p0, z1, z0))
+
+/*
+** stnt1_scatter_x0_f32_offset:
+** stnt1w z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_f32_offset, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_f32 (p0, z1, x0, z0),
+ svstnt1_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m4_f32_offset:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m4_f32_offset, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_f32 (p0, z1, -4, z0),
+ svstnt1_scatter_offset (p0, z1, -4, z0))
+
+/*
+** stnt1_scatter_0_f32_offset:
+** stnt1w z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_f32_offset, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_f32 (p0, z1, 0, z0),
+ svstnt1_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_5_f32_offset:
+** mov (x[0-9]+), #?5
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_5_f32_offset, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_f32 (p0, z1, 5, z0),
+ svstnt1_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1_scatter_6_f32_offset:
+** mov (x[0-9]+), #?6
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_6_f32_offset, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_f32 (p0, z1, 6, z0),
+ svstnt1_scatter_offset (p0, z1, 6, z0))
+
+/*
+** stnt1_scatter_7_f32_offset:
+** mov (x[0-9]+), #?7
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_7_f32_offset, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_f32 (p0, z1, 7, z0),
+ svstnt1_scatter_offset (p0, z1, 7, z0))
+
+/*
+** stnt1_scatter_8_f32_offset:
+** mov (x[0-9]+), #?8
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_8_f32_offset, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_f32 (p0, z1, 8, z0),
+ svstnt1_scatter_offset (p0, z1, 8, z0))
+
+/*
+** stnt1_scatter_124_f32_offset:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_124_f32_offset, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_f32 (p0, z1, 124, z0),
+ svstnt1_scatter_offset (p0, z1, 124, z0))
+
+/*
+** stnt1_scatter_128_f32_offset:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_128_f32_offset, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_f32 (p0, z1, 128, z0),
+ svstnt1_scatter_offset (p0, z1, 128, z0))
+
+/*
+** stnt1_scatter_x0_f32_index:
+** lsl (x[0-9]+), x0, #?2
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_f32_index, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_f32 (p0, z1, x0, z0),
+ svstnt1_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m1_f32_index:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m1_f32_index, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_f32 (p0, z1, -1, z0),
+ svstnt1_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1_scatter_0_f32_index:
+** stnt1w z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_f32_index, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_f32 (p0, z1, 0, z0),
+ svstnt1_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_5_f32_index:
+** mov (x[0-9]+), #?20
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_5_f32_index, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_f32 (p0, z1, 5, z0),
+ svstnt1_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1_scatter_31_f32_index:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_31_f32_index, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_f32 (p0, z1, 31, z0),
+ svstnt1_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1_scatter_32_f32_index:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_32_f32_index, svfloat32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_f32 (p0, z1, 32, z0),
+ svstnt1_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1_scatter_x0_f32_u32offset:
+** stnt1w z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_f32_u32offset, svfloat32_t, float32_t, svuint32_t,
+ svstnt1_scatter_u32offset_f32 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_f32_u32offset:
+** stnt1w z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_f32_u32offset, svfloat32_t, float32_t, svuint32_t,
+ svstnt1_scatter_u32offset_f32 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1_scatter_f64:
+** stnt1d z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_f64, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_f64 (p0, z1, z0),
+ svstnt1_scatter (p0, z1, z0))
+
+/*
+** stnt1_scatter_x0_f64_offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, x0, z0),
+ svstnt1_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m8_f64_offset:
+** mov (x[0-9]+), #?-8
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m8_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, -8, z0),
+ svstnt1_scatter_offset (p0, z1, -8, z0))
+
+/*
+** stnt1_scatter_0_f64_offset:
+** stnt1d z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 0, z0),
+ svstnt1_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_9_f64_offset:
+** mov (x[0-9]+), #?9
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_9_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 9, z0),
+ svstnt1_scatter_offset (p0, z1, 9, z0))
+
+/*
+** stnt1_scatter_10_f64_offset:
+** mov (x[0-9]+), #?10
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_10_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 10, z0),
+ svstnt1_scatter_offset (p0, z1, 10, z0))
+
+/*
+** stnt1_scatter_11_f64_offset:
+** mov (x[0-9]+), #?11
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_11_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 11, z0),
+ svstnt1_scatter_offset (p0, z1, 11, z0))
+
+/*
+** stnt1_scatter_12_f64_offset:
+** mov (x[0-9]+), #?12
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_12_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 12, z0),
+ svstnt1_scatter_offset (p0, z1, 12, z0))
+
+/*
+** stnt1_scatter_13_f64_offset:
+** mov (x[0-9]+), #?13
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_13_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 13, z0),
+ svstnt1_scatter_offset (p0, z1, 13, z0))
+
+/*
+** stnt1_scatter_14_f64_offset:
+** mov (x[0-9]+), #?14
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_14_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 14, z0),
+ svstnt1_scatter_offset (p0, z1, 14, z0))
+
+/*
+** stnt1_scatter_15_f64_offset:
+** mov (x[0-9]+), #?15
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_15_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 15, z0),
+ svstnt1_scatter_offset (p0, z1, 15, z0))
+
+/*
+** stnt1_scatter_16_f64_offset:
+** mov (x[0-9]+), #?16
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_16_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 16, z0),
+ svstnt1_scatter_offset (p0, z1, 16, z0))
+
+/*
+** stnt1_scatter_248_f64_offset:
+** mov (x[0-9]+), #?248
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_248_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 248, z0),
+ svstnt1_scatter_offset (p0, z1, 248, z0))
+
+/*
+** stnt1_scatter_256_f64_offset:
+** mov (x[0-9]+), #?256
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_256_f64_offset, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_f64 (p0, z1, 256, z0),
+ svstnt1_scatter_offset (p0, z1, 256, z0))
+
+/*
+** stnt1_scatter_x0_f64_index:
+** lsl (x[0-9]+), x0, #?3
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_f64_index, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_f64 (p0, z1, x0, z0),
+ svstnt1_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m1_f64_index:
+** mov (x[0-9]+), #?-8
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m1_f64_index, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_f64 (p0, z1, -1, z0),
+ svstnt1_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1_scatter_0_f64_index:
+** stnt1d z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_f64_index, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_f64 (p0, z1, 0, z0),
+ svstnt1_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_5_f64_index:
+** mov (x[0-9]+), #?40
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_5_f64_index, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_f64 (p0, z1, 5, z0),
+ svstnt1_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1_scatter_31_f64_index:
+** mov (x[0-9]+), #?248
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_31_f64_index, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_f64 (p0, z1, 31, z0),
+ svstnt1_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1_scatter_32_f64_index:
+** mov (x[0-9]+), #?256
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_32_f64_index, svfloat64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_f64 (p0, z1, 32, z0),
+ svstnt1_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1_scatter_x0_f64_s64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_f64_s64offset, svfloat64_t, float64_t, svint64_t,
+ svstnt1_scatter_s64offset_f64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_f64_s64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_f64_s64offset, svfloat64_t, float64_t, svint64_t,
+ svstnt1_scatter_s64offset_f64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_x0_f64_u64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_f64_u64offset, svfloat64_t, float64_t, svuint64_t,
+ svstnt1_scatter_u64offset_f64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_f64_u64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_f64_u64offset, svfloat64_t, float64_t, svuint64_t,
+ svstnt1_scatter_u64offset_f64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_x0_f64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_f64_s64index, svfloat64_t, float64_t, svint64_t,
+ svstnt1_scatter_s64index_f64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_f64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_f64_s64index, svfloat64_t, float64_t, svint64_t,
+ svstnt1_scatter_s64index_f64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_x0_f64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_f64_u64index, svfloat64_t, float64_t, svuint64_t,
+ svstnt1_scatter_u64index_f64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_f64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_f64_u64index, svfloat64_t, float64_t, svuint64_t,
+ svstnt1_scatter_u64index_f64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1_scatter_s32:
+** stnt1w z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_s32, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_s32 (p0, z1, z0),
+ svstnt1_scatter (p0, z1, z0))
+
+/*
+** stnt1_scatter_x0_s32_offset:
+** stnt1w z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_s32_offset, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_s32 (p0, z1, x0, z0),
+ svstnt1_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m4_s32_offset:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m4_s32_offset, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_s32 (p0, z1, -4, z0),
+ svstnt1_scatter_offset (p0, z1, -4, z0))
+
+/*
+** stnt1_scatter_0_s32_offset:
+** stnt1w z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_s32_offset, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_s32 (p0, z1, 0, z0),
+ svstnt1_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_5_s32_offset:
+** mov (x[0-9]+), #?5
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_5_s32_offset, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_s32 (p0, z1, 5, z0),
+ svstnt1_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1_scatter_6_s32_offset:
+** mov (x[0-9]+), #?6
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_6_s32_offset, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_s32 (p0, z1, 6, z0),
+ svstnt1_scatter_offset (p0, z1, 6, z0))
+
+/*
+** stnt1_scatter_7_s32_offset:
+** mov (x[0-9]+), #?7
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_7_s32_offset, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_s32 (p0, z1, 7, z0),
+ svstnt1_scatter_offset (p0, z1, 7, z0))
+
+/*
+** stnt1_scatter_8_s32_offset:
+** mov (x[0-9]+), #?8
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_8_s32_offset, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_s32 (p0, z1, 8, z0),
+ svstnt1_scatter_offset (p0, z1, 8, z0))
+
+/*
+** stnt1_scatter_124_s32_offset:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_124_s32_offset, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_s32 (p0, z1, 124, z0),
+ svstnt1_scatter_offset (p0, z1, 124, z0))
+
+/*
+** stnt1_scatter_128_s32_offset:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_128_s32_offset, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_s32 (p0, z1, 128, z0),
+ svstnt1_scatter_offset (p0, z1, 128, z0))
+
+/*
+** stnt1_scatter_x0_s32_index:
+** lsl (x[0-9]+), x0, #?2
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_s32_index, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_s32 (p0, z1, x0, z0),
+ svstnt1_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m1_s32_index:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m1_s32_index, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_s32 (p0, z1, -1, z0),
+ svstnt1_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1_scatter_0_s32_index:
+** stnt1w z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_s32_index, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_s32 (p0, z1, 0, z0),
+ svstnt1_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_5_s32_index:
+** mov (x[0-9]+), #?20
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_5_s32_index, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_s32 (p0, z1, 5, z0),
+ svstnt1_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1_scatter_31_s32_index:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_31_s32_index, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_s32 (p0, z1, 31, z0),
+ svstnt1_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1_scatter_32_s32_index:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_32_s32_index, svint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_s32 (p0, z1, 32, z0),
+ svstnt1_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1_scatter_x0_s32_u32offset:
+** stnt1w z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_s32_u32offset, svint32_t, int32_t, svuint32_t,
+ svstnt1_scatter_u32offset_s32 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_s32_u32offset:
+** stnt1w z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_s32_u32offset, svint32_t, int32_t, svuint32_t,
+ svstnt1_scatter_u32offset_s32 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1_scatter_s64:
+** stnt1d z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_s64, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_s64 (p0, z1, z0),
+ svstnt1_scatter (p0, z1, z0))
+
+/*
+** stnt1_scatter_x0_s64_offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, x0, z0),
+ svstnt1_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m8_s64_offset:
+** mov (x[0-9]+), #?-8
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m8_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, -8, z0),
+ svstnt1_scatter_offset (p0, z1, -8, z0))
+
+/*
+** stnt1_scatter_0_s64_offset:
+** stnt1d z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 0, z0),
+ svstnt1_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_9_s64_offset:
+** mov (x[0-9]+), #?9
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_9_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 9, z0),
+ svstnt1_scatter_offset (p0, z1, 9, z0))
+
+/*
+** stnt1_scatter_10_s64_offset:
+** mov (x[0-9]+), #?10
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_10_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 10, z0),
+ svstnt1_scatter_offset (p0, z1, 10, z0))
+
+/*
+** stnt1_scatter_11_s64_offset:
+** mov (x[0-9]+), #?11
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_11_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 11, z0),
+ svstnt1_scatter_offset (p0, z1, 11, z0))
+
+/*
+** stnt1_scatter_12_s64_offset:
+** mov (x[0-9]+), #?12
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_12_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 12, z0),
+ svstnt1_scatter_offset (p0, z1, 12, z0))
+
+/*
+** stnt1_scatter_13_s64_offset:
+** mov (x[0-9]+), #?13
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_13_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 13, z0),
+ svstnt1_scatter_offset (p0, z1, 13, z0))
+
+/*
+** stnt1_scatter_14_s64_offset:
+** mov (x[0-9]+), #?14
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_14_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 14, z0),
+ svstnt1_scatter_offset (p0, z1, 14, z0))
+
+/*
+** stnt1_scatter_15_s64_offset:
+** mov (x[0-9]+), #?15
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_15_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 15, z0),
+ svstnt1_scatter_offset (p0, z1, 15, z0))
+
+/*
+** stnt1_scatter_16_s64_offset:
+** mov (x[0-9]+), #?16
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_16_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 16, z0),
+ svstnt1_scatter_offset (p0, z1, 16, z0))
+
+/*
+** stnt1_scatter_248_s64_offset:
+** mov (x[0-9]+), #?248
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_248_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 248, z0),
+ svstnt1_scatter_offset (p0, z1, 248, z0))
+
+/*
+** stnt1_scatter_256_s64_offset:
+** mov (x[0-9]+), #?256
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_256_s64_offset, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_s64 (p0, z1, 256, z0),
+ svstnt1_scatter_offset (p0, z1, 256, z0))
+
+/*
+** stnt1_scatter_x0_s64_index:
+** lsl (x[0-9]+), x0, #?3
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_s64_index, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_s64 (p0, z1, x0, z0),
+ svstnt1_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m1_s64_index:
+** mov (x[0-9]+), #?-8
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m1_s64_index, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_s64 (p0, z1, -1, z0),
+ svstnt1_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1_scatter_0_s64_index:
+** stnt1d z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_s64_index, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_s64 (p0, z1, 0, z0),
+ svstnt1_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_5_s64_index:
+** mov (x[0-9]+), #?40
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_5_s64_index, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_s64 (p0, z1, 5, z0),
+ svstnt1_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1_scatter_31_s64_index:
+** mov (x[0-9]+), #?248
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_31_s64_index, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_s64 (p0, z1, 31, z0),
+ svstnt1_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1_scatter_32_s64_index:
+** mov (x[0-9]+), #?256
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_32_s64_index, svint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_s64 (p0, z1, 32, z0),
+ svstnt1_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1_scatter_x0_s64_s64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_s64_s64offset, svint64_t, int64_t, svint64_t,
+ svstnt1_scatter_s64offset_s64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_s64_s64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_s64_s64offset, svint64_t, int64_t, svint64_t,
+ svstnt1_scatter_s64offset_s64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_x0_s64_u64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_s64_u64offset, svint64_t, int64_t, svuint64_t,
+ svstnt1_scatter_u64offset_s64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_s64_u64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_s64_u64offset, svint64_t, int64_t, svuint64_t,
+ svstnt1_scatter_u64offset_s64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_x0_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_s64_s64index, svint64_t, int64_t, svint64_t,
+ svstnt1_scatter_s64index_s64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_s64_s64index, svint64_t, int64_t, svint64_t,
+ svstnt1_scatter_s64index_s64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_x0_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_s64_u64index, svint64_t, int64_t, svuint64_t,
+ svstnt1_scatter_u64index_s64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_s64_u64index, svint64_t, int64_t, svuint64_t,
+ svstnt1_scatter_u64index_s64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1_scatter_u32:
+** stnt1w z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_u32, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_u32 (p0, z1, z0),
+ svstnt1_scatter (p0, z1, z0))
+
+/*
+** stnt1_scatter_x0_u32_offset:
+** stnt1w z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_u32_offset, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_u32 (p0, z1, x0, z0),
+ svstnt1_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m4_u32_offset:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m4_u32_offset, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_u32 (p0, z1, -4, z0),
+ svstnt1_scatter_offset (p0, z1, -4, z0))
+
+/*
+** stnt1_scatter_0_u32_offset:
+** stnt1w z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_u32_offset, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_u32 (p0, z1, 0, z0),
+ svstnt1_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_5_u32_offset:
+** mov (x[0-9]+), #?5
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_5_u32_offset, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_u32 (p0, z1, 5, z0),
+ svstnt1_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1_scatter_6_u32_offset:
+** mov (x[0-9]+), #?6
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_6_u32_offset, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_u32 (p0, z1, 6, z0),
+ svstnt1_scatter_offset (p0, z1, 6, z0))
+
+/*
+** stnt1_scatter_7_u32_offset:
+** mov (x[0-9]+), #?7
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_7_u32_offset, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_u32 (p0, z1, 7, z0),
+ svstnt1_scatter_offset (p0, z1, 7, z0))
+
+/*
+** stnt1_scatter_8_u32_offset:
+** mov (x[0-9]+), #?8
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_8_u32_offset, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_u32 (p0, z1, 8, z0),
+ svstnt1_scatter_offset (p0, z1, 8, z0))
+
+/*
+** stnt1_scatter_124_u32_offset:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_124_u32_offset, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_u32 (p0, z1, 124, z0),
+ svstnt1_scatter_offset (p0, z1, 124, z0))
+
+/*
+** stnt1_scatter_128_u32_offset:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_128_u32_offset, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_offset_u32 (p0, z1, 128, z0),
+ svstnt1_scatter_offset (p0, z1, 128, z0))
+
+/*
+** stnt1_scatter_x0_u32_index:
+** lsl (x[0-9]+), x0, #?2
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_u32_index, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_u32 (p0, z1, x0, z0),
+ svstnt1_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m1_u32_index:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m1_u32_index, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_u32 (p0, z1, -1, z0),
+ svstnt1_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1_scatter_0_u32_index:
+** stnt1w z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_u32_index, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_u32 (p0, z1, 0, z0),
+ svstnt1_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_5_u32_index:
+** mov (x[0-9]+), #?20
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_5_u32_index, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_u32 (p0, z1, 5, z0),
+ svstnt1_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1_scatter_31_u32_index:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_31_u32_index, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_u32 (p0, z1, 31, z0),
+ svstnt1_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1_scatter_32_u32_index:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_32_u32_index, svuint32_t, svuint32_t,
+ svstnt1_scatter_u32base_index_u32 (p0, z1, 32, z0),
+ svstnt1_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1_scatter_x0_u32_u32offset:
+** stnt1w z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_u32_u32offset, svuint32_t, uint32_t, svuint32_t,
+ svstnt1_scatter_u32offset_u32 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_u32_u32offset:
+** stnt1w z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_u32_u32offset, svuint32_t, uint32_t, svuint32_t,
+ svstnt1_scatter_u32offset_u32 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1_scatter_u64:
+** stnt1d z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_u64, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_u64 (p0, z1, z0),
+ svstnt1_scatter (p0, z1, z0))
+
+/*
+** stnt1_scatter_x0_u64_offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, x0, z0),
+ svstnt1_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m8_u64_offset:
+** mov (x[0-9]+), #?-8
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m8_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, -8, z0),
+ svstnt1_scatter_offset (p0, z1, -8, z0))
+
+/*
+** stnt1_scatter_0_u64_offset:
+** stnt1d z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 0, z0),
+ svstnt1_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_9_u64_offset:
+** mov (x[0-9]+), #?9
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_9_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 9, z0),
+ svstnt1_scatter_offset (p0, z1, 9, z0))
+
+/*
+** stnt1_scatter_10_u64_offset:
+** mov (x[0-9]+), #?10
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_10_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 10, z0),
+ svstnt1_scatter_offset (p0, z1, 10, z0))
+
+/*
+** stnt1_scatter_11_u64_offset:
+** mov (x[0-9]+), #?11
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_11_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 11, z0),
+ svstnt1_scatter_offset (p0, z1, 11, z0))
+
+/*
+** stnt1_scatter_12_u64_offset:
+** mov (x[0-9]+), #?12
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_12_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 12, z0),
+ svstnt1_scatter_offset (p0, z1, 12, z0))
+
+/*
+** stnt1_scatter_13_u64_offset:
+** mov (x[0-9]+), #?13
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_13_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 13, z0),
+ svstnt1_scatter_offset (p0, z1, 13, z0))
+
+/*
+** stnt1_scatter_14_u64_offset:
+** mov (x[0-9]+), #?14
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_14_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 14, z0),
+ svstnt1_scatter_offset (p0, z1, 14, z0))
+
+/*
+** stnt1_scatter_15_u64_offset:
+** mov (x[0-9]+), #?15
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_15_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 15, z0),
+ svstnt1_scatter_offset (p0, z1, 15, z0))
+
+/*
+** stnt1_scatter_16_u64_offset:
+** mov (x[0-9]+), #?16
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_16_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 16, z0),
+ svstnt1_scatter_offset (p0, z1, 16, z0))
+
+/*
+** stnt1_scatter_248_u64_offset:
+** mov (x[0-9]+), #?248
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_248_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 248, z0),
+ svstnt1_scatter_offset (p0, z1, 248, z0))
+
+/*
+** stnt1_scatter_256_u64_offset:
+** mov (x[0-9]+), #?256
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_256_u64_offset, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_offset_u64 (p0, z1, 256, z0),
+ svstnt1_scatter_offset (p0, z1, 256, z0))
+
+/*
+** stnt1_scatter_x0_u64_index:
+** lsl (x[0-9]+), x0, #?3
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_x0_u64_index, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_u64 (p0, z1, x0, z0),
+ svstnt1_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1_scatter_m1_u64_index:
+** mov (x[0-9]+), #?-8
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_m1_u64_index, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_u64 (p0, z1, -1, z0),
+ svstnt1_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1_scatter_0_u64_index:
+** stnt1d z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_0_u64_index, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_u64 (p0, z1, 0, z0),
+ svstnt1_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1_scatter_5_u64_index:
+** mov (x[0-9]+), #?40
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_5_u64_index, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_u64 (p0, z1, 5, z0),
+ svstnt1_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1_scatter_31_u64_index:
+** mov (x[0-9]+), #?248
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_31_u64_index, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_u64 (p0, z1, 31, z0),
+ svstnt1_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1_scatter_32_u64_index:
+** mov (x[0-9]+), #?256
+** stnt1d z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1_scatter_32_u64_index, svuint64_t, svuint64_t,
+ svstnt1_scatter_u64base_index_u64 (p0, z1, 32, z0),
+ svstnt1_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1_scatter_x0_u64_s64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_u64_s64offset, svuint64_t, uint64_t, svint64_t,
+ svstnt1_scatter_s64offset_u64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_u64_s64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_u64_s64offset, svuint64_t, uint64_t, svint64_t,
+ svstnt1_scatter_s64offset_u64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_x0_u64_u64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_u64_u64offset, svuint64_t, uint64_t, svuint64_t,
+ svstnt1_scatter_u64offset_u64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_u64_u64offset:
+** stnt1d z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_u64_u64offset, svuint64_t, uint64_t, svuint64_t,
+ svstnt1_scatter_u64offset_u64 (p0, x0, z1, z0),
+ svstnt1_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_x0_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_u64_s64index, svuint64_t, uint64_t, svint64_t,
+ svstnt1_scatter_s64index_u64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_u64_s64index, svuint64_t, uint64_t, svint64_t,
+ svstnt1_scatter_s64index_u64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_x0_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_x0_u64_u64index, svuint64_t, uint64_t, svuint64_t,
+ svstnt1_scatter_u64index_u64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1_scatter_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #3
+** stnt1d z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1_scatter_u64_u64index, svuint64_t, uint64_t, svuint64_t,
+ svstnt1_scatter_u64index_u64 (p0, x0, z1, z0),
+ svstnt1_scatter_index (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1b_scatter_s32:
+** stnt1b z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_s32, svint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_s32 (p0, z1, z0),
+ svstnt1b_scatter (p0, z1, z0))
+
+/*
+** stnt1b_scatter_x0_s32_offset:
+** stnt1b z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_x0_s32_offset, svint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_s32 (p0, z1, x0, z0),
+ svstnt1b_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1b_scatter_m1_s32_offset:
+** mov (x[0-9]+), #?-1
+** stnt1b z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_m1_s32_offset, svint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_s32 (p0, z1, -1, z0),
+ svstnt1b_scatter_offset (p0, z1, -1, z0))
+
+/*
+** stnt1b_scatter_0_s32_offset:
+** stnt1b z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_0_s32_offset, svint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_s32 (p0, z1, 0, z0),
+ svstnt1b_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1b_scatter_5_s32_offset:
+** mov (x[0-9]+), #?5
+** stnt1b z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_5_s32_offset, svint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_s32 (p0, z1, 5, z0),
+ svstnt1b_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1b_scatter_31_s32_offset:
+** mov (x[0-9]+), #?31
+** stnt1b z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_31_s32_offset, svint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_s32 (p0, z1, 31, z0),
+ svstnt1b_scatter_offset (p0, z1, 31, z0))
+
+/*
+** stnt1b_scatter_32_s32_offset:
+** mov (x[0-9]+), #?32
+** stnt1b z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_32_s32_offset, svint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_s32 (p0, z1, 32, z0),
+ svstnt1b_scatter_offset (p0, z1, 32, z0))
+
+/*
+** stnt1b_scatter_x0_s32_u32offset:
+** stnt1b z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_x0_s32_u32offset, svint32_t, int8_t, svuint32_t,
+ svstnt1b_scatter_u32offset_s32 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1b_scatter_s32_u32offset:
+** stnt1b z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_s32_u32offset, svint32_t, int8_t, svuint32_t,
+ svstnt1b_scatter_u32offset_s32 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1b_scatter_s64:
+** stnt1b z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_s64, svint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_s64 (p0, z1, z0),
+ svstnt1b_scatter (p0, z1, z0))
+
+/*
+** stnt1b_scatter_x0_s64_offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_x0_s64_offset, svint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_s64 (p0, z1, x0, z0),
+ svstnt1b_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1b_scatter_m1_s64_offset:
+** mov (x[0-9]+), #?-1
+** stnt1b z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_m1_s64_offset, svint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_s64 (p0, z1, -1, z0),
+ svstnt1b_scatter_offset (p0, z1, -1, z0))
+
+/*
+** stnt1b_scatter_0_s64_offset:
+** stnt1b z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_0_s64_offset, svint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_s64 (p0, z1, 0, z0),
+ svstnt1b_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1b_scatter_5_s64_offset:
+** mov (x[0-9]+), #?5
+** stnt1b z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_5_s64_offset, svint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_s64 (p0, z1, 5, z0),
+ svstnt1b_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1b_scatter_31_s64_offset:
+** mov (x[0-9]+), #?31
+** stnt1b z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_31_s64_offset, svint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_s64 (p0, z1, 31, z0),
+ svstnt1b_scatter_offset (p0, z1, 31, z0))
+
+/*
+** stnt1b_scatter_32_s64_offset:
+** mov (x[0-9]+), #?32
+** stnt1b z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_32_s64_offset, svint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_s64 (p0, z1, 32, z0),
+ svstnt1b_scatter_offset (p0, z1, 32, z0))
+
+/*
+** stnt1b_scatter_x0_s64_s64offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_x0_s64_s64offset, svint64_t, int8_t, svint64_t,
+ svstnt1b_scatter_s64offset_s64 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1b_scatter_s64_s64offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_s64_s64offset, svint64_t, int8_t, svint64_t,
+ svstnt1b_scatter_s64offset_s64 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1b_scatter_x0_s64_u64offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_x0_s64_u64offset, svint64_t, int8_t, svuint64_t,
+ svstnt1b_scatter_u64offset_s64 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1b_scatter_s64_u64offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_s64_u64offset, svint64_t, int8_t, svuint64_t,
+ svstnt1b_scatter_u64offset_s64 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1b_scatter_u32:
+** stnt1b z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_u32, svuint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_u32 (p0, z1, z0),
+ svstnt1b_scatter (p0, z1, z0))
+
+/*
+** stnt1b_scatter_x0_u32_offset:
+** stnt1b z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_x0_u32_offset, svuint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_u32 (p0, z1, x0, z0),
+ svstnt1b_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1b_scatter_m1_u32_offset:
+** mov (x[0-9]+), #?-1
+** stnt1b z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_m1_u32_offset, svuint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_u32 (p0, z1, -1, z0),
+ svstnt1b_scatter_offset (p0, z1, -1, z0))
+
+/*
+** stnt1b_scatter_0_u32_offset:
+** stnt1b z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_0_u32_offset, svuint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_u32 (p0, z1, 0, z0),
+ svstnt1b_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1b_scatter_5_u32_offset:
+** mov (x[0-9]+), #?5
+** stnt1b z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_5_u32_offset, svuint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_u32 (p0, z1, 5, z0),
+ svstnt1b_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1b_scatter_31_u32_offset:
+** mov (x[0-9]+), #?31
+** stnt1b z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_31_u32_offset, svuint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_u32 (p0, z1, 31, z0),
+ svstnt1b_scatter_offset (p0, z1, 31, z0))
+
+/*
+** stnt1b_scatter_32_u32_offset:
+** mov (x[0-9]+), #?32
+** stnt1b z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_32_u32_offset, svuint32_t, svuint32_t,
+ svstnt1b_scatter_u32base_offset_u32 (p0, z1, 32, z0),
+ svstnt1b_scatter_offset (p0, z1, 32, z0))
+
+/*
+** stnt1b_scatter_x0_u32_u32offset:
+** stnt1b z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_x0_u32_u32offset, svuint32_t, uint8_t, svuint32_t,
+ svstnt1b_scatter_u32offset_u32 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1b_scatter_u32_u32offset:
+** stnt1b z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_u32_u32offset, svuint32_t, uint8_t, svuint32_t,
+ svstnt1b_scatter_u32offset_u32 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1b_scatter_u64:
+** stnt1b z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_u64, svuint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_u64 (p0, z1, z0),
+ svstnt1b_scatter (p0, z1, z0))
+
+/*
+** stnt1b_scatter_x0_u64_offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_x0_u64_offset, svuint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_u64 (p0, z1, x0, z0),
+ svstnt1b_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1b_scatter_m1_u64_offset:
+** mov (x[0-9]+), #?-1
+** stnt1b z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_m1_u64_offset, svuint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_u64 (p0, z1, -1, z0),
+ svstnt1b_scatter_offset (p0, z1, -1, z0))
+
+/*
+** stnt1b_scatter_0_u64_offset:
+** stnt1b z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_0_u64_offset, svuint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_u64 (p0, z1, 0, z0),
+ svstnt1b_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1b_scatter_5_u64_offset:
+** mov (x[0-9]+), #?5
+** stnt1b z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_5_u64_offset, svuint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_u64 (p0, z1, 5, z0),
+ svstnt1b_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1b_scatter_31_u64_offset:
+** mov (x[0-9]+), #?31
+** stnt1b z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_31_u64_offset, svuint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_u64 (p0, z1, 31, z0),
+ svstnt1b_scatter_offset (p0, z1, 31, z0))
+
+/*
+** stnt1b_scatter_32_u64_offset:
+** mov (x[0-9]+), #?32
+** stnt1b z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1b_scatter_32_u64_offset, svuint64_t, svuint64_t,
+ svstnt1b_scatter_u64base_offset_u64 (p0, z1, 32, z0),
+ svstnt1b_scatter_offset (p0, z1, 32, z0))
+
+/*
+** stnt1b_scatter_x0_u64_s64offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_x0_u64_s64offset, svuint64_t, uint8_t, svint64_t,
+ svstnt1b_scatter_s64offset_u64 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1b_scatter_u64_s64offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_u64_s64offset, svuint64_t, uint8_t, svint64_t,
+ svstnt1b_scatter_s64offset_u64 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1b_scatter_x0_u64_u64offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_x0_u64_u64offset, svuint64_t, uint8_t, svuint64_t,
+ svstnt1b_scatter_u64offset_u64 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1b_scatter_u64_u64offset:
+** stnt1b z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1b_scatter_u64_u64offset, svuint64_t, uint8_t, svuint64_t,
+ svstnt1b_scatter_u64offset_u64 (p0, x0, z1, z0),
+ svstnt1b_scatter_offset (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1h_scatter_s32:
+** stnt1h z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_s32, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_s32 (p0, z1, z0),
+ svstnt1h_scatter (p0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_s32_offset:
+** stnt1h z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_x0_s32_offset, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_s32 (p0, z1, x0, z0),
+ svstnt1h_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1h_scatter_m2_s32_offset:
+** mov (x[0-9]+), #?-2
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_m2_s32_offset, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_s32 (p0, z1, -2, z0),
+ svstnt1h_scatter_offset (p0, z1, -2, z0))
+
+/*
+** stnt1h_scatter_0_s32_offset:
+** stnt1h z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_0_s32_offset, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_s32 (p0, z1, 0, z0),
+ svstnt1h_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1h_scatter_5_s32_offset:
+** mov (x[0-9]+), #?5
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_5_s32_offset, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_s32 (p0, z1, 5, z0),
+ svstnt1h_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1h_scatter_6_s32_offset:
+** mov (x[0-9]+), #?6
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_6_s32_offset, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_s32 (p0, z1, 6, z0),
+ svstnt1h_scatter_offset (p0, z1, 6, z0))
+
+/*
+** stnt1h_scatter_62_s32_offset:
+** mov (x[0-9]+), #?62
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_62_s32_offset, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_s32 (p0, z1, 62, z0),
+ svstnt1h_scatter_offset (p0, z1, 62, z0))
+
+/*
+** stnt1h_scatter_64_s32_offset:
+** mov (x[0-9]+), #?64
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_64_s32_offset, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_s32 (p0, z1, 64, z0),
+ svstnt1h_scatter_offset (p0, z1, 64, z0))
+
+/*
+** stnt1h_scatter_x0_s32_index:
+** lsl (x[0-9]+), x0, #?1
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_x0_s32_index, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_s32 (p0, z1, x0, z0),
+ svstnt1h_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1h_scatter_m1_s32_index:
+** mov (x[0-9]+), #?-2
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_m1_s32_index, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_s32 (p0, z1, -1, z0),
+ svstnt1h_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1h_scatter_0_s32_index:
+** stnt1h z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_0_s32_index, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_s32 (p0, z1, 0, z0),
+ svstnt1h_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1h_scatter_5_s32_index:
+** mov (x[0-9]+), #?10
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_5_s32_index, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_s32 (p0, z1, 5, z0),
+ svstnt1h_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1h_scatter_31_s32_index:
+** mov (x[0-9]+), #?62
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_31_s32_index, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_s32 (p0, z1, 31, z0),
+ svstnt1h_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1h_scatter_32_s32_index:
+** mov (x[0-9]+), #?64
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_32_s32_index, svint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_s32 (p0, z1, 32, z0),
+ svstnt1h_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1h_scatter_x0_s32_u32offset:
+** stnt1h z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_s32_u32offset, svint32_t, int16_t, svuint32_t,
+ svstnt1h_scatter_u32offset_s32 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_s32_u32offset:
+** stnt1h z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_s32_u32offset, svint32_t, int16_t, svuint32_t,
+ svstnt1h_scatter_u32offset_s32 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1h_scatter_s64:
+** stnt1h z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_s64, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_s64 (p0, z1, z0),
+ svstnt1h_scatter (p0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_s64_offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_x0_s64_offset, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_s64 (p0, z1, x0, z0),
+ svstnt1h_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1h_scatter_m2_s64_offset:
+** mov (x[0-9]+), #?-2
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_m2_s64_offset, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_s64 (p0, z1, -2, z0),
+ svstnt1h_scatter_offset (p0, z1, -2, z0))
+
+/*
+** stnt1h_scatter_0_s64_offset:
+** stnt1h z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_0_s64_offset, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_s64 (p0, z1, 0, z0),
+ svstnt1h_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1h_scatter_5_s64_offset:
+** mov (x[0-9]+), #?5
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_5_s64_offset, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_s64 (p0, z1, 5, z0),
+ svstnt1h_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1h_scatter_6_s64_offset:
+** mov (x[0-9]+), #?6
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_6_s64_offset, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_s64 (p0, z1, 6, z0),
+ svstnt1h_scatter_offset (p0, z1, 6, z0))
+
+/*
+** stnt1h_scatter_62_s64_offset:
+** mov (x[0-9]+), #?62
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_62_s64_offset, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_s64 (p0, z1, 62, z0),
+ svstnt1h_scatter_offset (p0, z1, 62, z0))
+
+/*
+** stnt1h_scatter_64_s64_offset:
+** mov (x[0-9]+), #?64
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_64_s64_offset, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_s64 (p0, z1, 64, z0),
+ svstnt1h_scatter_offset (p0, z1, 64, z0))
+
+/*
+** stnt1h_scatter_x0_s64_index:
+** lsl (x[0-9]+), x0, #?1
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_x0_s64_index, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_s64 (p0, z1, x0, z0),
+ svstnt1h_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1h_scatter_m1_s64_index:
+** mov (x[0-9]+), #?-2
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_m1_s64_index, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_s64 (p0, z1, -1, z0),
+ svstnt1h_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1h_scatter_0_s64_index:
+** stnt1h z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_0_s64_index, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_s64 (p0, z1, 0, z0),
+ svstnt1h_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1h_scatter_5_s64_index:
+** mov (x[0-9]+), #?10
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_5_s64_index, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_s64 (p0, z1, 5, z0),
+ svstnt1h_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1h_scatter_31_s64_index:
+** mov (x[0-9]+), #?62
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_31_s64_index, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_s64 (p0, z1, 31, z0),
+ svstnt1h_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1h_scatter_32_s64_index:
+** mov (x[0-9]+), #?64
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_32_s64_index, svint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_s64 (p0, z1, 32, z0),
+ svstnt1h_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1h_scatter_x0_s64_s64offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_s64_s64offset, svint64_t, int16_t, svint64_t,
+ svstnt1h_scatter_s64offset_s64 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_s64_s64offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_s64_s64offset, svint64_t, int16_t, svint64_t,
+ svstnt1h_scatter_s64offset_s64 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_s64_u64offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_s64_u64offset, svint64_t, int16_t, svuint64_t,
+ svstnt1h_scatter_u64offset_s64 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_s64_u64offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_s64_u64offset, svint64_t, int16_t, svuint64_t,
+ svstnt1h_scatter_u64offset_s64 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** stnt1h z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_s64_s64index, svint64_t, int16_t, svint64_t,
+ svstnt1h_scatter_s64index_s64 (p0, x0, z1, z0),
+ svstnt1h_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** stnt1h z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_s64_s64index, svint64_t, int16_t, svint64_t,
+ svstnt1h_scatter_s64index_s64 (p0, x0, z1, z0),
+ svstnt1h_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** stnt1h z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_s64_u64index, svint64_t, int16_t, svuint64_t,
+ svstnt1h_scatter_u64index_s64 (p0, x0, z1, z0),
+ svstnt1h_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** stnt1h z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_s64_u64index, svint64_t, int16_t, svuint64_t,
+ svstnt1h_scatter_u64index_s64 (p0, x0, z1, z0),
+ svstnt1h_scatter_index (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1h_scatter_u32:
+** stnt1h z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_u32, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_u32 (p0, z1, z0),
+ svstnt1h_scatter (p0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_u32_offset:
+** stnt1h z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_x0_u32_offset, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_u32 (p0, z1, x0, z0),
+ svstnt1h_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1h_scatter_m2_u32_offset:
+** mov (x[0-9]+), #?-2
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_m2_u32_offset, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_u32 (p0, z1, -2, z0),
+ svstnt1h_scatter_offset (p0, z1, -2, z0))
+
+/*
+** stnt1h_scatter_0_u32_offset:
+** stnt1h z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_0_u32_offset, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_u32 (p0, z1, 0, z0),
+ svstnt1h_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1h_scatter_5_u32_offset:
+** mov (x[0-9]+), #?5
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_5_u32_offset, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_u32 (p0, z1, 5, z0),
+ svstnt1h_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1h_scatter_6_u32_offset:
+** mov (x[0-9]+), #?6
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_6_u32_offset, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_u32 (p0, z1, 6, z0),
+ svstnt1h_scatter_offset (p0, z1, 6, z0))
+
+/*
+** stnt1h_scatter_62_u32_offset:
+** mov (x[0-9]+), #?62
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_62_u32_offset, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_u32 (p0, z1, 62, z0),
+ svstnt1h_scatter_offset (p0, z1, 62, z0))
+
+/*
+** stnt1h_scatter_64_u32_offset:
+** mov (x[0-9]+), #?64
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_64_u32_offset, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_offset_u32 (p0, z1, 64, z0),
+ svstnt1h_scatter_offset (p0, z1, 64, z0))
+
+/*
+** stnt1h_scatter_x0_u32_index:
+** lsl (x[0-9]+), x0, #?1
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_x0_u32_index, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_u32 (p0, z1, x0, z0),
+ svstnt1h_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1h_scatter_m1_u32_index:
+** mov (x[0-9]+), #?-2
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_m1_u32_index, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_u32 (p0, z1, -1, z0),
+ svstnt1h_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1h_scatter_0_u32_index:
+** stnt1h z0\.s, p0, \[z1\.s\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_0_u32_index, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_u32 (p0, z1, 0, z0),
+ svstnt1h_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1h_scatter_5_u32_index:
+** mov (x[0-9]+), #?10
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_5_u32_index, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_u32 (p0, z1, 5, z0),
+ svstnt1h_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1h_scatter_31_u32_index:
+** mov (x[0-9]+), #?62
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_31_u32_index, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_u32 (p0, z1, 31, z0),
+ svstnt1h_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1h_scatter_32_u32_index:
+** mov (x[0-9]+), #?64
+** stnt1h z0\.s, p0, \[z1\.s, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_32_u32_index, svuint32_t, svuint32_t,
+ svstnt1h_scatter_u32base_index_u32 (p0, z1, 32, z0),
+ svstnt1h_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1h_scatter_x0_u32_u32offset:
+** stnt1h z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_u32_u32offset, svuint32_t, uint16_t, svuint32_t,
+ svstnt1h_scatter_u32offset_u32 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_u32_u32offset:
+** stnt1h z0\.s, p0, \[z1\.s, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_u32_u32offset, svuint32_t, uint16_t, svuint32_t,
+ svstnt1h_scatter_u32offset_u32 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1h_scatter_u64:
+** stnt1h z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_u64, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_u64 (p0, z1, z0),
+ svstnt1h_scatter (p0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_u64_offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_x0_u64_offset, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_u64 (p0, z1, x0, z0),
+ svstnt1h_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1h_scatter_m2_u64_offset:
+** mov (x[0-9]+), #?-2
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_m2_u64_offset, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_u64 (p0, z1, -2, z0),
+ svstnt1h_scatter_offset (p0, z1, -2, z0))
+
+/*
+** stnt1h_scatter_0_u64_offset:
+** stnt1h z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_0_u64_offset, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_u64 (p0, z1, 0, z0),
+ svstnt1h_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1h_scatter_5_u64_offset:
+** mov (x[0-9]+), #?5
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_5_u64_offset, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_u64 (p0, z1, 5, z0),
+ svstnt1h_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1h_scatter_6_u64_offset:
+** mov (x[0-9]+), #?6
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_6_u64_offset, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_u64 (p0, z1, 6, z0),
+ svstnt1h_scatter_offset (p0, z1, 6, z0))
+
+/*
+** stnt1h_scatter_62_u64_offset:
+** mov (x[0-9]+), #?62
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_62_u64_offset, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_u64 (p0, z1, 62, z0),
+ svstnt1h_scatter_offset (p0, z1, 62, z0))
+
+/*
+** stnt1h_scatter_64_u64_offset:
+** mov (x[0-9]+), #?64
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_64_u64_offset, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_offset_u64 (p0, z1, 64, z0),
+ svstnt1h_scatter_offset (p0, z1, 64, z0))
+
+/*
+** stnt1h_scatter_x0_u64_index:
+** lsl (x[0-9]+), x0, #?1
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_x0_u64_index, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_u64 (p0, z1, x0, z0),
+ svstnt1h_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1h_scatter_m1_u64_index:
+** mov (x[0-9]+), #?-2
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_m1_u64_index, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_u64 (p0, z1, -1, z0),
+ svstnt1h_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1h_scatter_0_u64_index:
+** stnt1h z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_0_u64_index, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_u64 (p0, z1, 0, z0),
+ svstnt1h_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1h_scatter_5_u64_index:
+** mov (x[0-9]+), #?10
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_5_u64_index, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_u64 (p0, z1, 5, z0),
+ svstnt1h_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1h_scatter_31_u64_index:
+** mov (x[0-9]+), #?62
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_31_u64_index, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_u64 (p0, z1, 31, z0),
+ svstnt1h_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1h_scatter_32_u64_index:
+** mov (x[0-9]+), #?64
+** stnt1h z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1h_scatter_32_u64_index, svuint64_t, svuint64_t,
+ svstnt1h_scatter_u64base_index_u64 (p0, z1, 32, z0),
+ svstnt1h_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1h_scatter_x0_u64_s64offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_u64_s64offset, svuint64_t, uint16_t, svint64_t,
+ svstnt1h_scatter_s64offset_u64 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_u64_s64offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_u64_s64offset, svuint64_t, uint16_t, svint64_t,
+ svstnt1h_scatter_s64offset_u64 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_u64_u64offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_u64_u64offset, svuint64_t, uint16_t, svuint64_t,
+ svstnt1h_scatter_u64offset_u64 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_u64_u64offset:
+** stnt1h z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_u64_u64offset, svuint64_t, uint16_t, svuint64_t,
+ svstnt1h_scatter_u64offset_u64 (p0, x0, z1, z0),
+ svstnt1h_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** stnt1h z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_u64_s64index, svuint64_t, uint16_t, svint64_t,
+ svstnt1h_scatter_s64index_u64 (p0, x0, z1, z0),
+ svstnt1h_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** stnt1h z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_u64_s64index, svuint64_t, uint16_t, svint64_t,
+ svstnt1h_scatter_s64index_u64 (p0, x0, z1, z0),
+ svstnt1h_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_x0_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** stnt1h z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_x0_u64_u64index, svuint64_t, uint16_t, svuint64_t,
+ svstnt1h_scatter_u64index_u64 (p0, x0, z1, z0),
+ svstnt1h_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1h_scatter_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #1
+** stnt1h z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1h_scatter_u64_u64index, svuint64_t, uint16_t, svuint64_t,
+ svstnt1h_scatter_u64index_u64 (p0, x0, z1, z0),
+ svstnt1h_scatter_index (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1w_scatter_s64:
+** stnt1w z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_s64, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_s64 (p0, z1, z0),
+ svstnt1w_scatter (p0, z1, z0))
+
+/*
+** stnt1w_scatter_x0_s64_offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_x0_s64_offset, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_s64 (p0, z1, x0, z0),
+ svstnt1w_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1w_scatter_m4_s64_offset:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_m4_s64_offset, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_s64 (p0, z1, -4, z0),
+ svstnt1w_scatter_offset (p0, z1, -4, z0))
+
+/*
+** stnt1w_scatter_0_s64_offset:
+** stnt1w z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_0_s64_offset, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_s64 (p0, z1, 0, z0),
+ svstnt1w_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1w_scatter_5_s64_offset:
+** mov (x[0-9]+), #?5
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_5_s64_offset, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_s64 (p0, z1, 5, z0),
+ svstnt1w_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1w_scatter_6_s64_offset:
+** mov (x[0-9]+), #?6
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_6_s64_offset, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_s64 (p0, z1, 6, z0),
+ svstnt1w_scatter_offset (p0, z1, 6, z0))
+
+/*
+** stnt1w_scatter_7_s64_offset:
+** mov (x[0-9]+), #?7
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_7_s64_offset, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_s64 (p0, z1, 7, z0),
+ svstnt1w_scatter_offset (p0, z1, 7, z0))
+
+/*
+** stnt1w_scatter_8_s64_offset:
+** mov (x[0-9]+), #?8
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_8_s64_offset, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_s64 (p0, z1, 8, z0),
+ svstnt1w_scatter_offset (p0, z1, 8, z0))
+
+/*
+** stnt1w_scatter_124_s64_offset:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_124_s64_offset, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_s64 (p0, z1, 124, z0),
+ svstnt1w_scatter_offset (p0, z1, 124, z0))
+
+/*
+** stnt1w_scatter_128_s64_offset:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_128_s64_offset, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_s64 (p0, z1, 128, z0),
+ svstnt1w_scatter_offset (p0, z1, 128, z0))
+
+/*
+** stnt1w_scatter_x0_s64_index:
+** lsl (x[0-9]+), x0, #?2
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_x0_s64_index, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_s64 (p0, z1, x0, z0),
+ svstnt1w_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1w_scatter_m1_s64_index:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_m1_s64_index, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_s64 (p0, z1, -1, z0),
+ svstnt1w_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1w_scatter_0_s64_index:
+** stnt1w z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_0_s64_index, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_s64 (p0, z1, 0, z0),
+ svstnt1w_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1w_scatter_5_s64_index:
+** mov (x[0-9]+), #?20
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_5_s64_index, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_s64 (p0, z1, 5, z0),
+ svstnt1w_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1w_scatter_31_s64_index:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_31_s64_index, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_s64 (p0, z1, 31, z0),
+ svstnt1w_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1w_scatter_32_s64_index:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_32_s64_index, svint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_s64 (p0, z1, 32, z0),
+ svstnt1w_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1w_scatter_x0_s64_s64offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_x0_s64_s64offset, svint64_t, int32_t, svint64_t,
+ svstnt1w_scatter_s64offset_s64 (p0, x0, z1, z0),
+ svstnt1w_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_s64_s64offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_s64_s64offset, svint64_t, int32_t, svint64_t,
+ svstnt1w_scatter_s64offset_s64 (p0, x0, z1, z0),
+ svstnt1w_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_x0_s64_u64offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_x0_s64_u64offset, svint64_t, int32_t, svuint64_t,
+ svstnt1w_scatter_u64offset_s64 (p0, x0, z1, z0),
+ svstnt1w_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_s64_u64offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_s64_u64offset, svint64_t, int32_t, svuint64_t,
+ svstnt1w_scatter_u64offset_s64 (p0, x0, z1, z0),
+ svstnt1w_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_x0_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** stnt1w z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_x0_s64_s64index, svint64_t, int32_t, svint64_t,
+ svstnt1w_scatter_s64index_s64 (p0, x0, z1, z0),
+ svstnt1w_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_s64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** stnt1w z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_s64_s64index, svint64_t, int32_t, svint64_t,
+ svstnt1w_scatter_s64index_s64 (p0, x0, z1, z0),
+ svstnt1w_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_x0_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** stnt1w z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_x0_s64_u64index, svint64_t, int32_t, svuint64_t,
+ svstnt1w_scatter_u64index_s64 (p0, x0, z1, z0),
+ svstnt1w_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_s64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** stnt1w z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_s64_u64index, svint64_t, int32_t, svuint64_t,
+ svstnt1w_scatter_u64index_s64 (p0, x0, z1, z0),
+ svstnt1w_scatter_index (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** stnt1w_scatter_u64:
+** stnt1w z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_u64, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_u64 (p0, z1, z0),
+ svstnt1w_scatter (p0, z1, z0))
+
+/*
+** stnt1w_scatter_x0_u64_offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_x0_u64_offset, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_u64 (p0, z1, x0, z0),
+ svstnt1w_scatter_offset (p0, z1, x0, z0))
+
+/*
+** stnt1w_scatter_m4_u64_offset:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_m4_u64_offset, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_u64 (p0, z1, -4, z0),
+ svstnt1w_scatter_offset (p0, z1, -4, z0))
+
+/*
+** stnt1w_scatter_0_u64_offset:
+** stnt1w z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_0_u64_offset, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_u64 (p0, z1, 0, z0),
+ svstnt1w_scatter_offset (p0, z1, 0, z0))
+
+/*
+** stnt1w_scatter_5_u64_offset:
+** mov (x[0-9]+), #?5
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_5_u64_offset, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_u64 (p0, z1, 5, z0),
+ svstnt1w_scatter_offset (p0, z1, 5, z0))
+
+/*
+** stnt1w_scatter_6_u64_offset:
+** mov (x[0-9]+), #?6
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_6_u64_offset, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_u64 (p0, z1, 6, z0),
+ svstnt1w_scatter_offset (p0, z1, 6, z0))
+
+/*
+** stnt1w_scatter_7_u64_offset:
+** mov (x[0-9]+), #?7
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_7_u64_offset, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_u64 (p0, z1, 7, z0),
+ svstnt1w_scatter_offset (p0, z1, 7, z0))
+
+/*
+** stnt1w_scatter_8_u64_offset:
+** mov (x[0-9]+), #?8
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_8_u64_offset, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_u64 (p0, z1, 8, z0),
+ svstnt1w_scatter_offset (p0, z1, 8, z0))
+
+/*
+** stnt1w_scatter_124_u64_offset:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_124_u64_offset, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_u64 (p0, z1, 124, z0),
+ svstnt1w_scatter_offset (p0, z1, 124, z0))
+
+/*
+** stnt1w_scatter_128_u64_offset:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_128_u64_offset, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_offset_u64 (p0, z1, 128, z0),
+ svstnt1w_scatter_offset (p0, z1, 128, z0))
+
+/*
+** stnt1w_scatter_x0_u64_index:
+** lsl (x[0-9]+), x0, #?2
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_x0_u64_index, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_u64 (p0, z1, x0, z0),
+ svstnt1w_scatter_index (p0, z1, x0, z0))
+
+/*
+** stnt1w_scatter_m1_u64_index:
+** mov (x[0-9]+), #?-4
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_m1_u64_index, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_u64 (p0, z1, -1, z0),
+ svstnt1w_scatter_index (p0, z1, -1, z0))
+
+/*
+** stnt1w_scatter_0_u64_index:
+** stnt1w z0\.d, p0, \[z1\.d\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_0_u64_index, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_u64 (p0, z1, 0, z0),
+ svstnt1w_scatter_index (p0, z1, 0, z0))
+
+/*
+** stnt1w_scatter_5_u64_index:
+** mov (x[0-9]+), #?20
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_5_u64_index, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_u64 (p0, z1, 5, z0),
+ svstnt1w_scatter_index (p0, z1, 5, z0))
+
+/*
+** stnt1w_scatter_31_u64_index:
+** mov (x[0-9]+), #?124
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_31_u64_index, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_u64 (p0, z1, 31, z0),
+ svstnt1w_scatter_index (p0, z1, 31, z0))
+
+/*
+** stnt1w_scatter_32_u64_index:
+** mov (x[0-9]+), #?128
+** stnt1w z0\.d, p0, \[z1\.d, \1\]
+** ret
+*/
+TEST_STORE_SCATTER_ZS (stnt1w_scatter_32_u64_index, svuint64_t, svuint64_t,
+ svstnt1w_scatter_u64base_index_u64 (p0, z1, 32, z0),
+ svstnt1w_scatter_index (p0, z1, 32, z0))
+
+/*
+** stnt1w_scatter_x0_u64_s64offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_x0_u64_s64offset, svuint64_t, uint32_t, svint64_t,
+ svstnt1w_scatter_s64offset_u64 (p0, x0, z1, z0),
+ svstnt1w_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_u64_s64offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_u64_s64offset, svuint64_t, uint32_t, svint64_t,
+ svstnt1w_scatter_s64offset_u64 (p0, x0, z1, z0),
+ svstnt1w_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_x0_u64_u64offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_x0_u64_u64offset, svuint64_t, uint32_t, svuint64_t,
+ svstnt1w_scatter_u64offset_u64 (p0, x0, z1, z0),
+ svstnt1w_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_u64_u64offset:
+** stnt1w z0\.d, p0, \[z1\.d, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_u64_u64offset, svuint64_t, uint32_t, svuint64_t,
+ svstnt1w_scatter_u64offset_u64 (p0, x0, z1, z0),
+ svstnt1w_scatter_offset (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_x0_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** stnt1w z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_x0_u64_s64index, svuint64_t, uint32_t, svint64_t,
+ svstnt1w_scatter_s64index_u64 (p0, x0, z1, z0),
+ svstnt1w_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_u64_s64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** stnt1w z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_u64_s64index, svuint64_t, uint32_t, svint64_t,
+ svstnt1w_scatter_s64index_u64 (p0, x0, z1, z0),
+ svstnt1w_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_x0_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** stnt1w z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_x0_u64_u64index, svuint64_t, uint32_t, svuint64_t,
+ svstnt1w_scatter_u64index_u64 (p0, x0, z1, z0),
+ svstnt1w_scatter_index (p0, x0, z1, z0))
+
+/*
+** stnt1w_scatter_u64_u64index:
+** lsl (z[0-9]+\.d), z1\.d, #2
+** stnt1w z0\.d, p0, \[\1, x0\]
+** ret
+*/
+TEST_STORE_SCATTER_SZ (stnt1w_scatter_u64_u64index, svuint64_t, uint32_t, svuint64_t,
+ svstnt1w_scatter_u64index_u64 (p0, x0, z1, z0),
+ svstnt1w_scatter_index (p0, x0, z1, z0))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnb_s16_tied1:
+** subhnb z0\.b, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_s16_tied1, svint8_t, svint16_t,
+ z0_res = svsubhnb_s16 (z0, z1),
+ z0_res = svsubhnb (z0, z1))
+
+/*
+** subhnb_s16_tied2:
+** subhnb z0\.b, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_s16_tied2, svint8_t, svint16_t,
+ z0_res = svsubhnb_s16 (z1, z0),
+ z0_res = svsubhnb (z1, z0))
+
+/*
+** subhnb_s16_untied:
+** subhnb z0\.b, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_s16_untied, svint8_t, svint16_t,
+ z0_res = svsubhnb_s16 (z1, z2),
+ z0_res = svsubhnb (z1, z2))
+
+/*
+** subhnb_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** subhnb z0\.b, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_w0_s16_tied1, svint8_t, svint16_t, int16_t,
+ z0_res = svsubhnb_n_s16 (z0, x0),
+ z0_res = svsubhnb (z0, x0))
+
+/*
+** subhnb_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** subhnb z0\.b, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_w0_s16_untied, svint8_t, svint16_t, int16_t,
+ z0_res = svsubhnb_n_s16 (z1, x0),
+ z0_res = svsubhnb (z1, x0))
+
+/*
+** subhnb_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** subhnb z0\.b, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_s16_tied1, svint8_t, svint16_t,
+ z0_res = svsubhnb_n_s16 (z0, 11),
+ z0_res = svsubhnb (z0, 11))
+
+/*
+** subhnb_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** subhnb z0\.b, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_s16_untied, svint8_t, svint16_t,
+ z0_res = svsubhnb_n_s16 (z1, 11),
+ z0_res = svsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnb_s32_tied1:
+** subhnb z0\.h, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_s32_tied1, svint16_t, svint32_t,
+ z0_res = svsubhnb_s32 (z0, z1),
+ z0_res = svsubhnb (z0, z1))
+
+/*
+** subhnb_s32_tied2:
+** subhnb z0\.h, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_s32_tied2, svint16_t, svint32_t,
+ z0_res = svsubhnb_s32 (z1, z0),
+ z0_res = svsubhnb (z1, z0))
+
+/*
+** subhnb_s32_untied:
+** subhnb z0\.h, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_s32_untied, svint16_t, svint32_t,
+ z0_res = svsubhnb_s32 (z1, z2),
+ z0_res = svsubhnb (z1, z2))
+
+/*
+** subhnb_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** subhnb z0\.h, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_w0_s32_tied1, svint16_t, svint32_t, int32_t,
+ z0_res = svsubhnb_n_s32 (z0, x0),
+ z0_res = svsubhnb (z0, x0))
+
+/*
+** subhnb_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** subhnb z0\.h, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_w0_s32_untied, svint16_t, svint32_t, int32_t,
+ z0_res = svsubhnb_n_s32 (z1, x0),
+ z0_res = svsubhnb (z1, x0))
+
+/*
+** subhnb_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** subhnb z0\.h, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_s32_tied1, svint16_t, svint32_t,
+ z0_res = svsubhnb_n_s32 (z0, 11),
+ z0_res = svsubhnb (z0, 11))
+
+/*
+** subhnb_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** subhnb z0\.h, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_s32_untied, svint16_t, svint32_t,
+ z0_res = svsubhnb_n_s32 (z1, 11),
+ z0_res = svsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnb_s64_tied1:
+** subhnb z0\.s, z0\.d, z1\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_s64_tied1, svint32_t, svint64_t,
+ z0_res = svsubhnb_s64 (z0, z1),
+ z0_res = svsubhnb (z0, z1))
+
+/*
+** subhnb_s64_tied2:
+** subhnb z0\.s, z1\.d, z0\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_s64_tied2, svint32_t, svint64_t,
+ z0_res = svsubhnb_s64 (z1, z0),
+ z0_res = svsubhnb (z1, z0))
+
+/*
+** subhnb_s64_untied:
+** subhnb z0\.s, z1\.d, z2\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_s64_untied, svint32_t, svint64_t,
+ z0_res = svsubhnb_s64 (z1, z2),
+ z0_res = svsubhnb (z1, z2))
+
+/*
+** subhnb_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** subhnb z0\.s, z0\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_x0_s64_tied1, svint32_t, svint64_t, int64_t,
+ z0_res = svsubhnb_n_s64 (z0, x0),
+ z0_res = svsubhnb (z0, x0))
+
+/*
+** subhnb_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** subhnb z0\.s, z1\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_x0_s64_untied, svint32_t, svint64_t, int64_t,
+ z0_res = svsubhnb_n_s64 (z1, x0),
+ z0_res = svsubhnb (z1, x0))
+
+/*
+** subhnb_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** subhnb z0\.s, z0\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_s64_tied1, svint32_t, svint64_t,
+ z0_res = svsubhnb_n_s64 (z0, 11),
+ z0_res = svsubhnb (z0, 11))
+
+/*
+** subhnb_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** subhnb z0\.s, z1\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_s64_untied, svint32_t, svint64_t,
+ z0_res = svsubhnb_n_s64 (z1, 11),
+ z0_res = svsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnb_u16_tied1:
+** subhnb z0\.b, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svsubhnb_u16 (z0, z1),
+ z0_res = svsubhnb (z0, z1))
+
+/*
+** subhnb_u16_tied2:
+** subhnb z0\.b, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_u16_tied2, svuint8_t, svuint16_t,
+ z0_res = svsubhnb_u16 (z1, z0),
+ z0_res = svsubhnb (z1, z0))
+
+/*
+** subhnb_u16_untied:
+** subhnb z0\.b, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svsubhnb_u16 (z1, z2),
+ z0_res = svsubhnb (z1, z2))
+
+/*
+** subhnb_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** subhnb z0\.b, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_w0_u16_tied1, svuint8_t, svuint16_t, uint16_t,
+ z0_res = svsubhnb_n_u16 (z0, x0),
+ z0_res = svsubhnb (z0, x0))
+
+/*
+** subhnb_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** subhnb z0\.b, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_w0_u16_untied, svuint8_t, svuint16_t, uint16_t,
+ z0_res = svsubhnb_n_u16 (z1, x0),
+ z0_res = svsubhnb (z1, x0))
+
+/*
+** subhnb_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** subhnb z0\.b, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_u16_tied1, svuint8_t, svuint16_t,
+ z0_res = svsubhnb_n_u16 (z0, 11),
+ z0_res = svsubhnb (z0, 11))
+
+/*
+** subhnb_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** subhnb z0\.b, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_u16_untied, svuint8_t, svuint16_t,
+ z0_res = svsubhnb_n_u16 (z1, 11),
+ z0_res = svsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnb_u32_tied1:
+** subhnb z0\.h, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svsubhnb_u32 (z0, z1),
+ z0_res = svsubhnb (z0, z1))
+
+/*
+** subhnb_u32_tied2:
+** subhnb z0\.h, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_u32_tied2, svuint16_t, svuint32_t,
+ z0_res = svsubhnb_u32 (z1, z0),
+ z0_res = svsubhnb (z1, z0))
+
+/*
+** subhnb_u32_untied:
+** subhnb z0\.h, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svsubhnb_u32 (z1, z2),
+ z0_res = svsubhnb (z1, z2))
+
+/*
+** subhnb_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** subhnb z0\.h, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_w0_u32_tied1, svuint16_t, svuint32_t, uint32_t,
+ z0_res = svsubhnb_n_u32 (z0, x0),
+ z0_res = svsubhnb (z0, x0))
+
+/*
+** subhnb_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** subhnb z0\.h, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_w0_u32_untied, svuint16_t, svuint32_t, uint32_t,
+ z0_res = svsubhnb_n_u32 (z1, x0),
+ z0_res = svsubhnb (z1, x0))
+
+/*
+** subhnb_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** subhnb z0\.h, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_u32_tied1, svuint16_t, svuint32_t,
+ z0_res = svsubhnb_n_u32 (z0, 11),
+ z0_res = svsubhnb (z0, 11))
+
+/*
+** subhnb_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** subhnb z0\.h, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_u32_untied, svuint16_t, svuint32_t,
+ z0_res = svsubhnb_n_u32 (z1, 11),
+ z0_res = svsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnb_u64_tied1:
+** subhnb z0\.s, z0\.d, z1\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svsubhnb_u64 (z0, z1),
+ z0_res = svsubhnb (z0, z1))
+
+/*
+** subhnb_u64_tied2:
+** subhnb z0\.s, z1\.d, z0\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_u64_tied2, svuint32_t, svuint64_t,
+ z0_res = svsubhnb_u64 (z1, z0),
+ z0_res = svsubhnb (z1, z0))
+
+/*
+** subhnb_u64_untied:
+** subhnb z0\.s, z1\.d, z2\.d
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svsubhnb_u64 (z1, z2),
+ z0_res = svsubhnb (z1, z2))
+
+/*
+** subhnb_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** subhnb z0\.s, z0\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_x0_u64_tied1, svuint32_t, svuint64_t, uint64_t,
+ z0_res = svsubhnb_n_u64 (z0, x0),
+ z0_res = svsubhnb (z0, x0))
+
+/*
+** subhnb_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** subhnb z0\.s, z1\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subhnb_x0_u64_untied, svuint32_t, svuint64_t, uint64_t,
+ z0_res = svsubhnb_n_u64 (z1, x0),
+ z0_res = svsubhnb (z1, x0))
+
+/*
+** subhnb_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** subhnb z0\.s, z0\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_u64_tied1, svuint32_t, svuint64_t,
+ z0_res = svsubhnb_n_u64 (z0, 11),
+ z0_res = svsubhnb (z0, 11))
+
+/*
+** subhnb_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** subhnb z0\.s, z1\.d, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subhnb_11_u64_untied, svuint32_t, svuint64_t,
+ z0_res = svsubhnb_n_u64 (z1, 11),
+ z0_res = svsubhnb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnt_s16_tied1:
+** subhnt z0\.b, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (subhnt_s16_tied1, svint8_t, svint16_t,
+ z0 = svsubhnt_s16 (z0, z4, z5),
+ z0 = svsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_s16_tied2, svint8_t, svint16_t,
+ z0_res = svsubhnt_s16 (z4, z0, z1),
+ z0_res = svsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_s16_tied3, svint8_t, svint16_t,
+ z0_res = svsubhnt_s16 (z4, z1, z0),
+ z0_res = svsubhnt (z4, z1, z0))
+
+/*
+** subhnt_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.b, z4\.h, z5\.h
+** |
+** subhnt z1\.b, z4\.h, z5\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_s16_untied, svint8_t, svint16_t,
+ z0 = svsubhnt_s16 (z1, z4, z5),
+ z0 = svsubhnt (z1, z4, z5))
+
+/*
+** subhnt_w0_s16_tied1:
+** mov (z[0-9]+\.h), w0
+** subhnt z0\.b, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (subhnt_w0_s16_tied1, svint8_t, svint16_t, int16_t,
+ z0 = svsubhnt_n_s16 (z0, z4, x0),
+ z0 = svsubhnt (z0, z4, x0))
+
+/*
+** subhnt_w0_s16_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.b, z4\.h, \1
+** |
+** subhnt z1\.b, z4\.h, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (subhnt_w0_s16_untied, svint8_t, svint16_t, int16_t,
+ z0 = svsubhnt_n_s16 (z1, z4, x0),
+ z0 = svsubhnt (z1, z4, x0))
+
+/*
+** subhnt_11_s16_tied1:
+** mov (z[0-9]+\.h), #11
+** subhnt z0\.b, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_s16_tied1, svint8_t, svint16_t,
+ z0 = svsubhnt_n_s16 (z0, z4, 11),
+ z0 = svsubhnt (z0, z4, 11))
+
+/*
+** subhnt_11_s16_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.b, z4\.h, \1
+** |
+** subhnt z1\.b, z4\.h, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_s16_untied, svint8_t, svint16_t,
+ z0 = svsubhnt_n_s16 (z1, z4, 11),
+ z0 = svsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnt_s32_tied1:
+** subhnt z0\.h, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (subhnt_s32_tied1, svint16_t, svint32_t,
+ z0 = svsubhnt_s32 (z0, z4, z5),
+ z0 = svsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_s32_tied2, svint16_t, svint32_t,
+ z0_res = svsubhnt_s32 (z4, z0, z1),
+ z0_res = svsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_s32_tied3, svint16_t, svint32_t,
+ z0_res = svsubhnt_s32 (z4, z1, z0),
+ z0_res = svsubhnt (z4, z1, z0))
+
+/*
+** subhnt_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.h, z4\.s, z5\.s
+** |
+** subhnt z1\.h, z4\.s, z5\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_s32_untied, svint16_t, svint32_t,
+ z0 = svsubhnt_s32 (z1, z4, z5),
+ z0 = svsubhnt (z1, z4, z5))
+
+/*
+** subhnt_w0_s32_tied1:
+** mov (z[0-9]+\.s), w0
+** subhnt z0\.h, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (subhnt_w0_s32_tied1, svint16_t, svint32_t, int32_t,
+ z0 = svsubhnt_n_s32 (z0, z4, x0),
+ z0 = svsubhnt (z0, z4, x0))
+
+/*
+** subhnt_w0_s32_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.h, z4\.s, \1
+** |
+** subhnt z1\.h, z4\.s, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (subhnt_w0_s32_untied, svint16_t, svint32_t, int32_t,
+ z0 = svsubhnt_n_s32 (z1, z4, x0),
+ z0 = svsubhnt (z1, z4, x0))
+
+/*
+** subhnt_11_s32_tied1:
+** mov (z[0-9]+\.s), #11
+** subhnt z0\.h, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_s32_tied1, svint16_t, svint32_t,
+ z0 = svsubhnt_n_s32 (z0, z4, 11),
+ z0 = svsubhnt (z0, z4, 11))
+
+/*
+** subhnt_11_s32_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.h, z4\.s, \1
+** |
+** subhnt z1\.h, z4\.s, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_s32_untied, svint16_t, svint32_t,
+ z0 = svsubhnt_n_s32 (z1, z4, 11),
+ z0 = svsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnt_s64_tied1:
+** subhnt z0\.s, z4\.d, z5\.d
+** ret
+*/
+TEST_DUAL_Z (subhnt_s64_tied1, svint32_t, svint64_t,
+ z0 = svsubhnt_s64 (z0, z4, z5),
+ z0 = svsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_s64_tied2, svint32_t, svint64_t,
+ z0_res = svsubhnt_s64 (z4, z0, z1),
+ z0_res = svsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_s64_tied3, svint32_t, svint64_t,
+ z0_res = svsubhnt_s64 (z4, z1, z0),
+ z0_res = svsubhnt (z4, z1, z0))
+
+/*
+** subhnt_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.s, z4\.d, z5\.d
+** |
+** subhnt z1\.s, z4\.d, z5\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_s64_untied, svint32_t, svint64_t,
+ z0 = svsubhnt_s64 (z1, z4, z5),
+ z0 = svsubhnt (z1, z4, z5))
+
+/*
+** subhnt_x0_s64_tied1:
+** mov (z[0-9]+\.d), x0
+** subhnt z0\.s, z4\.d, \1
+** ret
+*/
+TEST_DUAL_ZX (subhnt_x0_s64_tied1, svint32_t, svint64_t, int64_t,
+ z0 = svsubhnt_n_s64 (z0, z4, x0),
+ z0 = svsubhnt (z0, z4, x0))
+
+/*
+** subhnt_x0_s64_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.s, z4\.d, \1
+** |
+** subhnt z1\.s, z4\.d, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (subhnt_x0_s64_untied, svint32_t, svint64_t, int64_t,
+ z0 = svsubhnt_n_s64 (z1, z4, x0),
+ z0 = svsubhnt (z1, z4, x0))
+
+/*
+** subhnt_11_s64_tied1:
+** mov (z[0-9]+\.d), #11
+** subhnt z0\.s, z4\.d, \1
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_s64_tied1, svint32_t, svint64_t,
+ z0 = svsubhnt_n_s64 (z0, z4, 11),
+ z0 = svsubhnt (z0, z4, 11))
+
+/*
+** subhnt_11_s64_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.s, z4\.d, \1
+** |
+** subhnt z1\.s, z4\.d, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_s64_untied, svint32_t, svint64_t,
+ z0 = svsubhnt_n_s64 (z1, z4, 11),
+ z0 = svsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnt_u16_tied1:
+** subhnt z0\.b, z4\.h, z5\.h
+** ret
+*/
+TEST_DUAL_Z (subhnt_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svsubhnt_u16 (z0, z4, z5),
+ z0 = svsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_u16_tied2, svuint8_t, svuint16_t,
+ z0_res = svsubhnt_u16 (z4, z0, z1),
+ z0_res = svsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_u16_tied3, svuint8_t, svuint16_t,
+ z0_res = svsubhnt_u16 (z4, z1, z0),
+ z0_res = svsubhnt (z4, z1, z0))
+
+/*
+** subhnt_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.b, z4\.h, z5\.h
+** |
+** subhnt z1\.b, z4\.h, z5\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_u16_untied, svuint8_t, svuint16_t,
+ z0 = svsubhnt_u16 (z1, z4, z5),
+ z0 = svsubhnt (z1, z4, z5))
+
+/*
+** subhnt_w0_u16_tied1:
+** mov (z[0-9]+\.h), w0
+** subhnt z0\.b, z4\.h, \1
+** ret
+*/
+TEST_DUAL_ZX (subhnt_w0_u16_tied1, svuint8_t, svuint16_t, uint16_t,
+ z0 = svsubhnt_n_u16 (z0, z4, x0),
+ z0 = svsubhnt (z0, z4, x0))
+
+/*
+** subhnt_w0_u16_untied:
+** mov (z[0-9]+\.h), w0
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.b, z4\.h, \1
+** |
+** subhnt z1\.b, z4\.h, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (subhnt_w0_u16_untied, svuint8_t, svuint16_t, uint16_t,
+ z0 = svsubhnt_n_u16 (z1, z4, x0),
+ z0 = svsubhnt (z1, z4, x0))
+
+/*
+** subhnt_11_u16_tied1:
+** mov (z[0-9]+\.h), #11
+** subhnt z0\.b, z4\.h, \1
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_u16_tied1, svuint8_t, svuint16_t,
+ z0 = svsubhnt_n_u16 (z0, z4, 11),
+ z0 = svsubhnt (z0, z4, 11))
+
+/*
+** subhnt_11_u16_untied:
+** mov (z[0-9]+\.h), #11
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.b, z4\.h, \1
+** |
+** subhnt z1\.b, z4\.h, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_u16_untied, svuint8_t, svuint16_t,
+ z0 = svsubhnt_n_u16 (z1, z4, 11),
+ z0 = svsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnt_u32_tied1:
+** subhnt z0\.h, z4\.s, z5\.s
+** ret
+*/
+TEST_DUAL_Z (subhnt_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svsubhnt_u32 (z0, z4, z5),
+ z0 = svsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_u32_tied2, svuint16_t, svuint32_t,
+ z0_res = svsubhnt_u32 (z4, z0, z1),
+ z0_res = svsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_u32_tied3, svuint16_t, svuint32_t,
+ z0_res = svsubhnt_u32 (z4, z1, z0),
+ z0_res = svsubhnt (z4, z1, z0))
+
+/*
+** subhnt_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.h, z4\.s, z5\.s
+** |
+** subhnt z1\.h, z4\.s, z5\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_u32_untied, svuint16_t, svuint32_t,
+ z0 = svsubhnt_u32 (z1, z4, z5),
+ z0 = svsubhnt (z1, z4, z5))
+
+/*
+** subhnt_w0_u32_tied1:
+** mov (z[0-9]+\.s), w0
+** subhnt z0\.h, z4\.s, \1
+** ret
+*/
+TEST_DUAL_ZX (subhnt_w0_u32_tied1, svuint16_t, svuint32_t, uint32_t,
+ z0 = svsubhnt_n_u32 (z0, z4, x0),
+ z0 = svsubhnt (z0, z4, x0))
+
+/*
+** subhnt_w0_u32_untied:
+** mov (z[0-9]+\.s), w0
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.h, z4\.s, \1
+** |
+** subhnt z1\.h, z4\.s, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (subhnt_w0_u32_untied, svuint16_t, svuint32_t, uint32_t,
+ z0 = svsubhnt_n_u32 (z1, z4, x0),
+ z0 = svsubhnt (z1, z4, x0))
+
+/*
+** subhnt_11_u32_tied1:
+** mov (z[0-9]+\.s), #11
+** subhnt z0\.h, z4\.s, \1
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_u32_tied1, svuint16_t, svuint32_t,
+ z0 = svsubhnt_n_u32 (z0, z4, 11),
+ z0 = svsubhnt (z0, z4, 11))
+
+/*
+** subhnt_11_u32_untied:
+** mov (z[0-9]+\.s), #11
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.h, z4\.s, \1
+** |
+** subhnt z1\.h, z4\.s, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_u32_untied, svuint16_t, svuint32_t,
+ z0 = svsubhnt_n_u32 (z1, z4, 11),
+ z0 = svsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subhnt_u64_tied1:
+** subhnt z0\.s, z4\.d, z5\.d
+** ret
+*/
+TEST_DUAL_Z (subhnt_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svsubhnt_u64 (z0, z4, z5),
+ z0 = svsubhnt (z0, z4, z5))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_u64_tied2, svuint32_t, svuint64_t,
+ z0_res = svsubhnt_u64 (z4, z0, z1),
+ z0_res = svsubhnt (z4, z0, z1))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (subhnt_u64_tied3, svuint32_t, svuint64_t,
+ z0_res = svsubhnt_u64 (z4, z1, z0),
+ z0_res = svsubhnt (z4, z1, z0))
+
+/*
+** subhnt_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.s, z4\.d, z5\.d
+** |
+** subhnt z1\.s, z4\.d, z5\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_u64_untied, svuint32_t, svuint64_t,
+ z0 = svsubhnt_u64 (z1, z4, z5),
+ z0 = svsubhnt (z1, z4, z5))
+
+/*
+** subhnt_x0_u64_tied1:
+** mov (z[0-9]+\.d), x0
+** subhnt z0\.s, z4\.d, \1
+** ret
+*/
+TEST_DUAL_ZX (subhnt_x0_u64_tied1, svuint32_t, svuint64_t, uint64_t,
+ z0 = svsubhnt_n_u64 (z0, z4, x0),
+ z0 = svsubhnt (z0, z4, x0))
+
+/*
+** subhnt_x0_u64_untied:
+** mov (z[0-9]+\.d), x0
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.s, z4\.d, \1
+** |
+** subhnt z1\.s, z4\.d, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_ZX (subhnt_x0_u64_untied, svuint32_t, svuint64_t, uint64_t,
+ z0 = svsubhnt_n_u64 (z1, z4, x0),
+ z0 = svsubhnt (z1, z4, x0))
+
+/*
+** subhnt_11_u64_tied1:
+** mov (z[0-9]+\.d), #11
+** subhnt z0\.s, z4\.d, \1
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_u64_tied1, svuint32_t, svuint64_t,
+ z0 = svsubhnt_n_u64 (z0, z4, 11),
+ z0 = svsubhnt (z0, z4, 11))
+
+/*
+** subhnt_11_u64_untied:
+** mov (z[0-9]+\.d), #11
+** (
+** mov z0\.d, z1\.d
+** subhnt z0\.s, z4\.d, \1
+** |
+** subhnt z1\.s, z4\.d, \1
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (subhnt_11_u64_untied, svuint32_t, svuint64_t,
+ z0 = svsubhnt_n_u64 (z1, z4, 11),
+ z0 = svsubhnt (z1, z4, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublb_s16_tied1:
+** ssublb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_s16_tied1, svint16_t, svint8_t,
+ z0_res = svsublb_s16 (z0, z1),
+ z0_res = svsublb (z0, z1))
+
+/*
+** sublb_s16_tied2:
+** ssublb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svsublb_s16 (z1, z0),
+ z0_res = svsublb (z1, z0))
+
+/*
+** sublb_s16_untied:
+** ssublb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_s16_untied, svint16_t, svint8_t,
+ z0_res = svsublb_s16 (z1, z2),
+ z0_res = svsublb (z1, z2))
+
+/*
+** sublb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** ssublb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svsublb_n_s16 (z0, x0),
+ z0_res = svsublb (z0, x0))
+
+/*
+** sublb_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** ssublb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svsublb_n_s16 (z1, x0),
+ z0_res = svsublb (z1, x0))
+
+/*
+** sublb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** ssublb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svsublb_n_s16 (z0, 11),
+ z0_res = svsublb (z0, 11))
+
+/*
+** sublb_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** ssublb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svsublb_n_s16 (z1, 11),
+ z0_res = svsublb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublb_s32_tied1:
+** ssublb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_s32_tied1, svint32_t, svint16_t,
+ z0_res = svsublb_s32 (z0, z1),
+ z0_res = svsublb (z0, z1))
+
+/*
+** sublb_s32_tied2:
+** ssublb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svsublb_s32 (z1, z0),
+ z0_res = svsublb (z1, z0))
+
+/*
+** sublb_s32_untied:
+** ssublb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_s32_untied, svint32_t, svint16_t,
+ z0_res = svsublb_s32 (z1, z2),
+ z0_res = svsublb (z1, z2))
+
+/*
+** sublb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** ssublb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svsublb_n_s32 (z0, x0),
+ z0_res = svsublb (z0, x0))
+
+/*
+** sublb_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** ssublb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svsublb_n_s32 (z1, x0),
+ z0_res = svsublb (z1, x0))
+
+/*
+** sublb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** ssublb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svsublb_n_s32 (z0, 11),
+ z0_res = svsublb (z0, 11))
+
+/*
+** sublb_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** ssublb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svsublb_n_s32 (z1, 11),
+ z0_res = svsublb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublb_s64_tied1:
+** ssublb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_s64_tied1, svint64_t, svint32_t,
+ z0_res = svsublb_s64 (z0, z1),
+ z0_res = svsublb (z0, z1))
+
+/*
+** sublb_s64_tied2:
+** ssublb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svsublb_s64 (z1, z0),
+ z0_res = svsublb (z1, z0))
+
+/*
+** sublb_s64_untied:
+** ssublb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_s64_untied, svint64_t, svint32_t,
+ z0_res = svsublb_s64 (z1, z2),
+ z0_res = svsublb (z1, z2))
+
+/*
+** sublb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** ssublb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svsublb_n_s64 (z0, x0),
+ z0_res = svsublb (z0, x0))
+
+/*
+** sublb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** ssublb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svsublb_n_s64 (z1, x0),
+ z0_res = svsublb (z1, x0))
+
+/*
+** sublb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** ssublb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svsublb_n_s64 (z0, 11),
+ z0_res = svsublb (z0, 11))
+
+/*
+** sublb_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** ssublb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svsublb_n_s64 (z1, 11),
+ z0_res = svsublb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublb_u16_tied1:
+** usublb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svsublb_u16 (z0, z1),
+ z0_res = svsublb (z0, z1))
+
+/*
+** sublb_u16_tied2:
+** usublb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svsublb_u16 (z1, z0),
+ z0_res = svsublb (z1, z0))
+
+/*
+** sublb_u16_untied:
+** usublb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svsublb_u16 (z1, z2),
+ z0_res = svsublb (z1, z2))
+
+/*
+** sublb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** usublb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svsublb_n_u16 (z0, x0),
+ z0_res = svsublb (z0, x0))
+
+/*
+** sublb_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** usublb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svsublb_n_u16 (z1, x0),
+ z0_res = svsublb (z1, x0))
+
+/*
+** sublb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** usublb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svsublb_n_u16 (z0, 11),
+ z0_res = svsublb (z0, 11))
+
+/*
+** sublb_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** usublb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svsublb_n_u16 (z1, 11),
+ z0_res = svsublb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublb_u32_tied1:
+** usublb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svsublb_u32 (z0, z1),
+ z0_res = svsublb (z0, z1))
+
+/*
+** sublb_u32_tied2:
+** usublb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svsublb_u32 (z1, z0),
+ z0_res = svsublb (z1, z0))
+
+/*
+** sublb_u32_untied:
+** usublb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svsublb_u32 (z1, z2),
+ z0_res = svsublb (z1, z2))
+
+/*
+** sublb_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** usublb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svsublb_n_u32 (z0, x0),
+ z0_res = svsublb (z0, x0))
+
+/*
+** sublb_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** usublb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svsublb_n_u32 (z1, x0),
+ z0_res = svsublb (z1, x0))
+
+/*
+** sublb_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** usublb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svsublb_n_u32 (z0, 11),
+ z0_res = svsublb (z0, 11))
+
+/*
+** sublb_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** usublb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svsublb_n_u32 (z1, 11),
+ z0_res = svsublb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublb_u64_tied1:
+** usublb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svsublb_u64 (z0, z1),
+ z0_res = svsublb (z0, z1))
+
+/*
+** sublb_u64_tied2:
+** usublb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svsublb_u64 (z1, z0),
+ z0_res = svsublb (z1, z0))
+
+/*
+** sublb_u64_untied:
+** usublb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svsublb_u64 (z1, z2),
+ z0_res = svsublb (z1, z2))
+
+/*
+** sublb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** usublb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svsublb_n_u64 (z0, x0),
+ z0_res = svsublb (z0, x0))
+
+/*
+** sublb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** usublb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublb_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svsublb_n_u64 (z1, x0),
+ z0_res = svsublb (z1, x0))
+
+/*
+** sublb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** usublb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svsublb_n_u64 (z0, 11),
+ z0_res = svsublb (z0, 11))
+
+/*
+** sublb_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** usublb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublb_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svsublb_n_u64 (z1, 11),
+ z0_res = svsublb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublbt_s16_tied1:
+** ssublbt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_s16_tied1, svint16_t, svint8_t,
+ z0_res = svsublbt_s16 (z0, z1),
+ z0_res = svsublbt (z0, z1))
+
+/*
+** sublbt_s16_tied2:
+** ssublbt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svsublbt_s16 (z1, z0),
+ z0_res = svsublbt (z1, z0))
+
+/*
+** sublbt_s16_untied:
+** ssublbt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_s16_untied, svint16_t, svint8_t,
+ z0_res = svsublbt_s16 (z1, z2),
+ z0_res = svsublbt (z1, z2))
+
+/*
+** sublbt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** ssublbt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublbt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svsublbt_n_s16 (z0, x0),
+ z0_res = svsublbt (z0, x0))
+
+/*
+** sublbt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** ssublbt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublbt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svsublbt_n_s16 (z1, x0),
+ z0_res = svsublbt (z1, x0))
+
+/*
+** sublbt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** ssublbt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svsublbt_n_s16 (z0, 11),
+ z0_res = svsublbt (z0, 11))
+
+/*
+** sublbt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** ssublbt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svsublbt_n_s16 (z1, 11),
+ z0_res = svsublbt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublbt_s32_tied1:
+** ssublbt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_s32_tied1, svint32_t, svint16_t,
+ z0_res = svsublbt_s32 (z0, z1),
+ z0_res = svsublbt (z0, z1))
+
+/*
+** sublbt_s32_tied2:
+** ssublbt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svsublbt_s32 (z1, z0),
+ z0_res = svsublbt (z1, z0))
+
+/*
+** sublbt_s32_untied:
+** ssublbt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_s32_untied, svint32_t, svint16_t,
+ z0_res = svsublbt_s32 (z1, z2),
+ z0_res = svsublbt (z1, z2))
+
+/*
+** sublbt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** ssublbt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublbt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svsublbt_n_s32 (z0, x0),
+ z0_res = svsublbt (z0, x0))
+
+/*
+** sublbt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** ssublbt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublbt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svsublbt_n_s32 (z1, x0),
+ z0_res = svsublbt (z1, x0))
+
+/*
+** sublbt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** ssublbt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svsublbt_n_s32 (z0, 11),
+ z0_res = svsublbt (z0, 11))
+
+/*
+** sublbt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** ssublbt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svsublbt_n_s32 (z1, 11),
+ z0_res = svsublbt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublbt_s64_tied1:
+** ssublbt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_s64_tied1, svint64_t, svint32_t,
+ z0_res = svsublbt_s64 (z0, z1),
+ z0_res = svsublbt (z0, z1))
+
+/*
+** sublbt_s64_tied2:
+** ssublbt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svsublbt_s64 (z1, z0),
+ z0_res = svsublbt (z1, z0))
+
+/*
+** sublbt_s64_untied:
+** ssublbt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_s64_untied, svint64_t, svint32_t,
+ z0_res = svsublbt_s64 (z1, z2),
+ z0_res = svsublbt (z1, z2))
+
+/*
+** sublbt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** ssublbt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublbt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svsublbt_n_s64 (z0, x0),
+ z0_res = svsublbt (z0, x0))
+
+/*
+** sublbt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** ssublbt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublbt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svsublbt_n_s64 (z1, x0),
+ z0_res = svsublbt (z1, x0))
+
+/*
+** sublbt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** ssublbt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svsublbt_n_s64 (z0, 11),
+ z0_res = svsublbt (z0, 11))
+
+/*
+** sublbt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** ssublbt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublbt_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svsublbt_n_s64 (z1, 11),
+ z0_res = svsublbt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublt_s16_tied1:
+** ssublt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_s16_tied1, svint16_t, svint8_t,
+ z0_res = svsublt_s16 (z0, z1),
+ z0_res = svsublt (z0, z1))
+
+/*
+** sublt_s16_tied2:
+** ssublt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svsublt_s16 (z1, z0),
+ z0_res = svsublt (z1, z0))
+
+/*
+** sublt_s16_untied:
+** ssublt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_s16_untied, svint16_t, svint8_t,
+ z0_res = svsublt_s16 (z1, z2),
+ z0_res = svsublt (z1, z2))
+
+/*
+** sublt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** ssublt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svsublt_n_s16 (z0, x0),
+ z0_res = svsublt (z0, x0))
+
+/*
+** sublt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** ssublt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svsublt_n_s16 (z1, x0),
+ z0_res = svsublt (z1, x0))
+
+/*
+** sublt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** ssublt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svsublt_n_s16 (z0, 11),
+ z0_res = svsublt (z0, 11))
+
+/*
+** sublt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** ssublt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svsublt_n_s16 (z1, 11),
+ z0_res = svsublt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublt_s32_tied1:
+** ssublt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_s32_tied1, svint32_t, svint16_t,
+ z0_res = svsublt_s32 (z0, z1),
+ z0_res = svsublt (z0, z1))
+
+/*
+** sublt_s32_tied2:
+** ssublt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svsublt_s32 (z1, z0),
+ z0_res = svsublt (z1, z0))
+
+/*
+** sublt_s32_untied:
+** ssublt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_s32_untied, svint32_t, svint16_t,
+ z0_res = svsublt_s32 (z1, z2),
+ z0_res = svsublt (z1, z2))
+
+/*
+** sublt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** ssublt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svsublt_n_s32 (z0, x0),
+ z0_res = svsublt (z0, x0))
+
+/*
+** sublt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** ssublt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svsublt_n_s32 (z1, x0),
+ z0_res = svsublt (z1, x0))
+
+/*
+** sublt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** ssublt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svsublt_n_s32 (z0, 11),
+ z0_res = svsublt (z0, 11))
+
+/*
+** sublt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** ssublt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svsublt_n_s32 (z1, 11),
+ z0_res = svsublt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublt_s64_tied1:
+** ssublt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_s64_tied1, svint64_t, svint32_t,
+ z0_res = svsublt_s64 (z0, z1),
+ z0_res = svsublt (z0, z1))
+
+/*
+** sublt_s64_tied2:
+** ssublt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svsublt_s64 (z1, z0),
+ z0_res = svsublt (z1, z0))
+
+/*
+** sublt_s64_untied:
+** ssublt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_s64_untied, svint64_t, svint32_t,
+ z0_res = svsublt_s64 (z1, z2),
+ z0_res = svsublt (z1, z2))
+
+/*
+** sublt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** ssublt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svsublt_n_s64 (z0, x0),
+ z0_res = svsublt (z0, x0))
+
+/*
+** sublt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** ssublt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svsublt_n_s64 (z1, x0),
+ z0_res = svsublt (z1, x0))
+
+/*
+** sublt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** ssublt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svsublt_n_s64 (z0, 11),
+ z0_res = svsublt (z0, 11))
+
+/*
+** sublt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** ssublt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svsublt_n_s64 (z1, 11),
+ z0_res = svsublt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublt_u16_tied1:
+** usublt z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svsublt_u16 (z0, z1),
+ z0_res = svsublt (z0, z1))
+
+/*
+** sublt_u16_tied2:
+** usublt z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svsublt_u16 (z1, z0),
+ z0_res = svsublt (z1, z0))
+
+/*
+** sublt_u16_untied:
+** usublt z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svsublt_u16 (z1, z2),
+ z0_res = svsublt (z1, z2))
+
+/*
+** sublt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** usublt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_u16_tied1, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svsublt_n_u16 (z0, x0),
+ z0_res = svsublt (z0, x0))
+
+/*
+** sublt_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** usublt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_u16_untied, svuint16_t, svuint8_t, uint8_t,
+ z0_res = svsublt_n_u16 (z1, x0),
+ z0_res = svsublt (z1, x0))
+
+/*
+** sublt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** usublt z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_u16_tied1, svuint16_t, svuint8_t,
+ z0_res = svsublt_n_u16 (z0, 11),
+ z0_res = svsublt (z0, 11))
+
+/*
+** sublt_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** usublt z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_u16_untied, svuint16_t, svuint8_t,
+ z0_res = svsublt_n_u16 (z1, 11),
+ z0_res = svsublt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublt_u32_tied1:
+** usublt z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svsublt_u32 (z0, z1),
+ z0_res = svsublt (z0, z1))
+
+/*
+** sublt_u32_tied2:
+** usublt z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svsublt_u32 (z1, z0),
+ z0_res = svsublt (z1, z0))
+
+/*
+** sublt_u32_untied:
+** usublt z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svsublt_u32 (z1, z2),
+ z0_res = svsublt (z1, z2))
+
+/*
+** sublt_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** usublt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_u32_tied1, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svsublt_n_u32 (z0, x0),
+ z0_res = svsublt (z0, x0))
+
+/*
+** sublt_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** usublt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_u32_untied, svuint32_t, svuint16_t, uint16_t,
+ z0_res = svsublt_n_u32 (z1, x0),
+ z0_res = svsublt (z1, x0))
+
+/*
+** sublt_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** usublt z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_u32_tied1, svuint32_t, svuint16_t,
+ z0_res = svsublt_n_u32 (z0, 11),
+ z0_res = svsublt (z0, 11))
+
+/*
+** sublt_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** usublt z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_u32_untied, svuint32_t, svuint16_t,
+ z0_res = svsublt_n_u32 (z1, 11),
+ z0_res = svsublt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** sublt_u64_tied1:
+** usublt z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svsublt_u64 (z0, z1),
+ z0_res = svsublt (z0, z1))
+
+/*
+** sublt_u64_tied2:
+** usublt z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svsublt_u64 (z1, z0),
+ z0_res = svsublt (z1, z0))
+
+/*
+** sublt_u64_untied:
+** usublt z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svsublt_u64 (z1, z2),
+ z0_res = svsublt (z1, z2))
+
+/*
+** sublt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** usublt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_u64_tied1, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svsublt_n_u64 (z0, x0),
+ z0_res = svsublt (z0, x0))
+
+/*
+** sublt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** usublt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (sublt_w0_u64_untied, svuint64_t, svuint32_t, uint32_t,
+ z0_res = svsublt_n_u64 (z1, x0),
+ z0_res = svsublt (z1, x0))
+
+/*
+** sublt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** usublt z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_u64_tied1, svuint64_t, svuint32_t,
+ z0_res = svsublt_n_u64 (z0, 11),
+ z0_res = svsublt (z0, 11))
+
+/*
+** sublt_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** usublt z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (sublt_11_u64_untied, svuint64_t, svuint32_t,
+ z0_res = svsublt_n_u64 (z1, 11),
+ z0_res = svsublt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subltb_s16_tied1:
+** ssubltb z0\.h, z0\.b, z1\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_s16_tied1, svint16_t, svint8_t,
+ z0_res = svsubltb_s16 (z0, z1),
+ z0_res = svsubltb (z0, z1))
+
+/*
+** subltb_s16_tied2:
+** ssubltb z0\.h, z1\.b, z0\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svsubltb_s16 (z1, z0),
+ z0_res = svsubltb (z1, z0))
+
+/*
+** subltb_s16_untied:
+** ssubltb z0\.h, z1\.b, z2\.b
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_s16_untied, svint16_t, svint8_t,
+ z0_res = svsubltb_s16 (z1, z2),
+ z0_res = svsubltb (z1, z2))
+
+/*
+** subltb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** ssubltb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subltb_w0_s16_tied1, svint16_t, svint8_t, int8_t,
+ z0_res = svsubltb_n_s16 (z0, x0),
+ z0_res = svsubltb (z0, x0))
+
+/*
+** subltb_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** ssubltb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subltb_w0_s16_untied, svint16_t, svint8_t, int8_t,
+ z0_res = svsubltb_n_s16 (z1, x0),
+ z0_res = svsubltb (z1, x0))
+
+/*
+** subltb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** ssubltb z0\.h, z0\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_11_s16_tied1, svint16_t, svint8_t,
+ z0_res = svsubltb_n_s16 (z0, 11),
+ z0_res = svsubltb (z0, 11))
+
+/*
+** subltb_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** ssubltb z0\.h, z1\.b, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_11_s16_untied, svint16_t, svint8_t,
+ z0_res = svsubltb_n_s16 (z1, 11),
+ z0_res = svsubltb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subltb_s32_tied1:
+** ssubltb z0\.s, z0\.h, z1\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_s32_tied1, svint32_t, svint16_t,
+ z0_res = svsubltb_s32 (z0, z1),
+ z0_res = svsubltb (z0, z1))
+
+/*
+** subltb_s32_tied2:
+** ssubltb z0\.s, z1\.h, z0\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svsubltb_s32 (z1, z0),
+ z0_res = svsubltb (z1, z0))
+
+/*
+** subltb_s32_untied:
+** ssubltb z0\.s, z1\.h, z2\.h
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_s32_untied, svint32_t, svint16_t,
+ z0_res = svsubltb_s32 (z1, z2),
+ z0_res = svsubltb (z1, z2))
+
+/*
+** subltb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** ssubltb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subltb_w0_s32_tied1, svint32_t, svint16_t, int16_t,
+ z0_res = svsubltb_n_s32 (z0, x0),
+ z0_res = svsubltb (z0, x0))
+
+/*
+** subltb_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** ssubltb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subltb_w0_s32_untied, svint32_t, svint16_t, int16_t,
+ z0_res = svsubltb_n_s32 (z1, x0),
+ z0_res = svsubltb (z1, x0))
+
+/*
+** subltb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** ssubltb z0\.s, z0\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_11_s32_tied1, svint32_t, svint16_t,
+ z0_res = svsubltb_n_s32 (z0, 11),
+ z0_res = svsubltb (z0, 11))
+
+/*
+** subltb_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** ssubltb z0\.s, z1\.h, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_11_s32_untied, svint32_t, svint16_t,
+ z0_res = svsubltb_n_s32 (z1, 11),
+ z0_res = svsubltb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subltb_s64_tied1:
+** ssubltb z0\.d, z0\.s, z1\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_s64_tied1, svint64_t, svint32_t,
+ z0_res = svsubltb_s64 (z0, z1),
+ z0_res = svsubltb (z0, z1))
+
+/*
+** subltb_s64_tied2:
+** ssubltb z0\.d, z1\.s, z0\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svsubltb_s64 (z1, z0),
+ z0_res = svsubltb (z1, z0))
+
+/*
+** subltb_s64_untied:
+** ssubltb z0\.d, z1\.s, z2\.s
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_s64_untied, svint64_t, svint32_t,
+ z0_res = svsubltb_s64 (z1, z2),
+ z0_res = svsubltb (z1, z2))
+
+/*
+** subltb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** ssubltb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subltb_w0_s64_tied1, svint64_t, svint32_t, int32_t,
+ z0_res = svsubltb_n_s64 (z0, x0),
+ z0_res = svsubltb (z0, x0))
+
+/*
+** subltb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** ssubltb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_ZX (subltb_w0_s64_untied, svint64_t, svint32_t, int32_t,
+ z0_res = svsubltb_n_s64 (z1, x0),
+ z0_res = svsubltb (z1, x0))
+
+/*
+** subltb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** ssubltb z0\.d, z0\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_11_s64_tied1, svint64_t, svint32_t,
+ z0_res = svsubltb_n_s64 (z0, 11),
+ z0_res = svsubltb (z0, 11))
+
+/*
+** subltb_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** ssubltb z0\.d, z1\.s, \1
+** ret
+*/
+TEST_TYPE_CHANGE_Z (subltb_11_s64_untied, svint64_t, svint32_t,
+ z0_res = svsubltb_n_s64 (z1, 11),
+ z0_res = svsubltb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwb_s16_tied1:
+** ssubwb z0\.h, z0\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (subwb_s16_tied1, svint16_t, svint8_t,
+ z0 = svsubwb_s16 (z0, z4),
+ z0 = svsubwb (z0, z4))
+
+/*
+** subwb_s16_tied2:
+** ssubwb z0\.h, z4\.h, z0\.b
+** ret
+*/
+TEST_DUAL_Z_REV (subwb_s16_tied2, svint16_t, svint8_t,
+ z0_res = svsubwb_s16 (z4, z0),
+ z0_res = svsubwb (z4, z0))
+
+/*
+** subwb_s16_untied:
+** ssubwb z0\.h, z1\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (subwb_s16_untied, svint16_t, svint8_t,
+ z0 = svsubwb_s16 (z1, z4),
+ z0 = svsubwb (z1, z4))
+
+/*
+** subwb_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** ssubwb z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_s16_tied1, svint16_t, int8_t,
+ z0 = svsubwb_n_s16 (z0, x0),
+ z0 = svsubwb (z0, x0))
+
+/*
+** subwb_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** ssubwb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_s16_untied, svint16_t, int8_t,
+ z0 = svsubwb_n_s16 (z1, x0),
+ z0 = svsubwb (z1, x0))
+
+/*
+** subwb_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** ssubwb z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_s16_tied1, svint16_t,
+ z0 = svsubwb_n_s16 (z0, 11),
+ z0 = svsubwb (z0, 11))
+
+/*
+** subwb_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** ssubwb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_s16_untied, svint16_t,
+ z0 = svsubwb_n_s16 (z1, 11),
+ z0 = svsubwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwb_s32_tied1:
+** ssubwb z0\.s, z0\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (subwb_s32_tied1, svint32_t, svint16_t,
+ z0 = svsubwb_s32 (z0, z4),
+ z0 = svsubwb (z0, z4))
+
+/*
+** subwb_s32_tied2:
+** ssubwb z0\.s, z4\.s, z0\.h
+** ret
+*/
+TEST_DUAL_Z_REV (subwb_s32_tied2, svint32_t, svint16_t,
+ z0_res = svsubwb_s32 (z4, z0),
+ z0_res = svsubwb (z4, z0))
+
+/*
+** subwb_s32_untied:
+** ssubwb z0\.s, z1\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (subwb_s32_untied, svint32_t, svint16_t,
+ z0 = svsubwb_s32 (z1, z4),
+ z0 = svsubwb (z1, z4))
+
+/*
+** subwb_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** ssubwb z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_s32_tied1, svint32_t, int16_t,
+ z0 = svsubwb_n_s32 (z0, x0),
+ z0 = svsubwb (z0, x0))
+
+/*
+** subwb_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** ssubwb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_s32_untied, svint32_t, int16_t,
+ z0 = svsubwb_n_s32 (z1, x0),
+ z0 = svsubwb (z1, x0))
+
+/*
+** subwb_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** ssubwb z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_s32_tied1, svint32_t,
+ z0 = svsubwb_n_s32 (z0, 11),
+ z0 = svsubwb (z0, 11))
+
+/*
+** subwb_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** ssubwb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_s32_untied, svint32_t,
+ z0 = svsubwb_n_s32 (z1, 11),
+ z0 = svsubwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwb_s64_tied1:
+** ssubwb z0\.d, z0\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (subwb_s64_tied1, svint64_t, svint32_t,
+ z0 = svsubwb_s64 (z0, z4),
+ z0 = svsubwb (z0, z4))
+
+/*
+** subwb_s64_tied2:
+** ssubwb z0\.d, z4\.d, z0\.s
+** ret
+*/
+TEST_DUAL_Z_REV (subwb_s64_tied2, svint64_t, svint32_t,
+ z0_res = svsubwb_s64 (z4, z0),
+ z0_res = svsubwb (z4, z0))
+
+/*
+** subwb_s64_untied:
+** ssubwb z0\.d, z1\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (subwb_s64_untied, svint64_t, svint32_t,
+ z0 = svsubwb_s64 (z1, z4),
+ z0 = svsubwb (z1, z4))
+
+/*
+** subwb_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** ssubwb z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_s64_tied1, svint64_t, int32_t,
+ z0 = svsubwb_n_s64 (z0, x0),
+ z0 = svsubwb (z0, x0))
+
+/*
+** subwb_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** ssubwb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_s64_untied, svint64_t, int32_t,
+ z0 = svsubwb_n_s64 (z1, x0),
+ z0 = svsubwb (z1, x0))
+
+/*
+** subwb_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** ssubwb z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_s64_tied1, svint64_t,
+ z0 = svsubwb_n_s64 (z0, 11),
+ z0 = svsubwb (z0, 11))
+
+/*
+** subwb_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** ssubwb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_s64_untied, svint64_t,
+ z0 = svsubwb_n_s64 (z1, 11),
+ z0 = svsubwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwb_u16_tied1:
+** usubwb z0\.h, z0\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (subwb_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svsubwb_u16 (z0, z4),
+ z0 = svsubwb (z0, z4))
+
+/*
+** subwb_u16_tied2:
+** usubwb z0\.h, z4\.h, z0\.b
+** ret
+*/
+TEST_DUAL_Z_REV (subwb_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svsubwb_u16 (z4, z0),
+ z0_res = svsubwb (z4, z0))
+
+/*
+** subwb_u16_untied:
+** usubwb z0\.h, z1\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (subwb_u16_untied, svuint16_t, svuint8_t,
+ z0 = svsubwb_u16 (z1, z4),
+ z0 = svsubwb (z1, z4))
+
+/*
+** subwb_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** usubwb z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_u16_tied1, svuint16_t, uint8_t,
+ z0 = svsubwb_n_u16 (z0, x0),
+ z0 = svsubwb (z0, x0))
+
+/*
+** subwb_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** usubwb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_u16_untied, svuint16_t, uint8_t,
+ z0 = svsubwb_n_u16 (z1, x0),
+ z0 = svsubwb (z1, x0))
+
+/*
+** subwb_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** usubwb z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_u16_tied1, svuint16_t,
+ z0 = svsubwb_n_u16 (z0, 11),
+ z0 = svsubwb (z0, 11))
+
+/*
+** subwb_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** usubwb z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_u16_untied, svuint16_t,
+ z0 = svsubwb_n_u16 (z1, 11),
+ z0 = svsubwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwb_u32_tied1:
+** usubwb z0\.s, z0\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (subwb_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svsubwb_u32 (z0, z4),
+ z0 = svsubwb (z0, z4))
+
+/*
+** subwb_u32_tied2:
+** usubwb z0\.s, z4\.s, z0\.h
+** ret
+*/
+TEST_DUAL_Z_REV (subwb_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svsubwb_u32 (z4, z0),
+ z0_res = svsubwb (z4, z0))
+
+/*
+** subwb_u32_untied:
+** usubwb z0\.s, z1\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (subwb_u32_untied, svuint32_t, svuint16_t,
+ z0 = svsubwb_u32 (z1, z4),
+ z0 = svsubwb (z1, z4))
+
+/*
+** subwb_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** usubwb z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_u32_tied1, svuint32_t, uint16_t,
+ z0 = svsubwb_n_u32 (z0, x0),
+ z0 = svsubwb (z0, x0))
+
+/*
+** subwb_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** usubwb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_u32_untied, svuint32_t, uint16_t,
+ z0 = svsubwb_n_u32 (z1, x0),
+ z0 = svsubwb (z1, x0))
+
+/*
+** subwb_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** usubwb z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_u32_tied1, svuint32_t,
+ z0 = svsubwb_n_u32 (z0, 11),
+ z0 = svsubwb (z0, 11))
+
+/*
+** subwb_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** usubwb z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_u32_untied, svuint32_t,
+ z0 = svsubwb_n_u32 (z1, 11),
+ z0 = svsubwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwb_u64_tied1:
+** usubwb z0\.d, z0\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (subwb_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svsubwb_u64 (z0, z4),
+ z0 = svsubwb (z0, z4))
+
+/*
+** subwb_u64_tied2:
+** usubwb z0\.d, z4\.d, z0\.s
+** ret
+*/
+TEST_DUAL_Z_REV (subwb_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svsubwb_u64 (z4, z0),
+ z0_res = svsubwb (z4, z0))
+
+/*
+** subwb_u64_untied:
+** usubwb z0\.d, z1\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (subwb_u64_untied, svuint64_t, svuint32_t,
+ z0 = svsubwb_u64 (z1, z4),
+ z0 = svsubwb (z1, z4))
+
+/*
+** subwb_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** usubwb z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_u64_tied1, svuint64_t, uint32_t,
+ z0 = svsubwb_n_u64 (z0, x0),
+ z0 = svsubwb (z0, x0))
+
+/*
+** subwb_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** usubwb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwb_w0_u64_untied, svuint64_t, uint32_t,
+ z0 = svsubwb_n_u64 (z1, x0),
+ z0 = svsubwb (z1, x0))
+
+/*
+** subwb_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** usubwb z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_u64_tied1, svuint64_t,
+ z0 = svsubwb_n_u64 (z0, 11),
+ z0 = svsubwb (z0, 11))
+
+/*
+** subwb_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** usubwb z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwb_11_u64_untied, svuint64_t,
+ z0 = svsubwb_n_u64 (z1, 11),
+ z0 = svsubwb (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwt_s16_tied1:
+** ssubwt z0\.h, z0\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (subwt_s16_tied1, svint16_t, svint8_t,
+ z0 = svsubwt_s16 (z0, z4),
+ z0 = svsubwt (z0, z4))
+
+/*
+** subwt_s16_tied2:
+** ssubwt z0\.h, z4\.h, z0\.b
+** ret
+*/
+TEST_DUAL_Z_REV (subwt_s16_tied2, svint16_t, svint8_t,
+ z0_res = svsubwt_s16 (z4, z0),
+ z0_res = svsubwt (z4, z0))
+
+/*
+** subwt_s16_untied:
+** ssubwt z0\.h, z1\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (subwt_s16_untied, svint16_t, svint8_t,
+ z0 = svsubwt_s16 (z1, z4),
+ z0 = svsubwt (z1, z4))
+
+/*
+** subwt_w0_s16_tied1:
+** mov (z[0-9]+\.b), w0
+** ssubwt z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_s16_tied1, svint16_t, int8_t,
+ z0 = svsubwt_n_s16 (z0, x0),
+ z0 = svsubwt (z0, x0))
+
+/*
+** subwt_w0_s16_untied:
+** mov (z[0-9]+\.b), w0
+** ssubwt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_s16_untied, svint16_t, int8_t,
+ z0 = svsubwt_n_s16 (z1, x0),
+ z0 = svsubwt (z1, x0))
+
+/*
+** subwt_11_s16_tied1:
+** mov (z[0-9]+\.b), #11
+** ssubwt z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_s16_tied1, svint16_t,
+ z0 = svsubwt_n_s16 (z0, 11),
+ z0 = svsubwt (z0, 11))
+
+/*
+** subwt_11_s16_untied:
+** mov (z[0-9]+\.b), #11
+** ssubwt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_s16_untied, svint16_t,
+ z0 = svsubwt_n_s16 (z1, 11),
+ z0 = svsubwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwt_s32_tied1:
+** ssubwt z0\.s, z0\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (subwt_s32_tied1, svint32_t, svint16_t,
+ z0 = svsubwt_s32 (z0, z4),
+ z0 = svsubwt (z0, z4))
+
+/*
+** subwt_s32_tied2:
+** ssubwt z0\.s, z4\.s, z0\.h
+** ret
+*/
+TEST_DUAL_Z_REV (subwt_s32_tied2, svint32_t, svint16_t,
+ z0_res = svsubwt_s32 (z4, z0),
+ z0_res = svsubwt (z4, z0))
+
+/*
+** subwt_s32_untied:
+** ssubwt z0\.s, z1\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (subwt_s32_untied, svint32_t, svint16_t,
+ z0 = svsubwt_s32 (z1, z4),
+ z0 = svsubwt (z1, z4))
+
+/*
+** subwt_w0_s32_tied1:
+** mov (z[0-9]+\.h), w0
+** ssubwt z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_s32_tied1, svint32_t, int16_t,
+ z0 = svsubwt_n_s32 (z0, x0),
+ z0 = svsubwt (z0, x0))
+
+/*
+** subwt_w0_s32_untied:
+** mov (z[0-9]+\.h), w0
+** ssubwt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_s32_untied, svint32_t, int16_t,
+ z0 = svsubwt_n_s32 (z1, x0),
+ z0 = svsubwt (z1, x0))
+
+/*
+** subwt_11_s32_tied1:
+** mov (z[0-9]+\.h), #11
+** ssubwt z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_s32_tied1, svint32_t,
+ z0 = svsubwt_n_s32 (z0, 11),
+ z0 = svsubwt (z0, 11))
+
+/*
+** subwt_11_s32_untied:
+** mov (z[0-9]+\.h), #11
+** ssubwt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_s32_untied, svint32_t,
+ z0 = svsubwt_n_s32 (z1, 11),
+ z0 = svsubwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwt_s64_tied1:
+** ssubwt z0\.d, z0\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (subwt_s64_tied1, svint64_t, svint32_t,
+ z0 = svsubwt_s64 (z0, z4),
+ z0 = svsubwt (z0, z4))
+
+/*
+** subwt_s64_tied2:
+** ssubwt z0\.d, z4\.d, z0\.s
+** ret
+*/
+TEST_DUAL_Z_REV (subwt_s64_tied2, svint64_t, svint32_t,
+ z0_res = svsubwt_s64 (z4, z0),
+ z0_res = svsubwt (z4, z0))
+
+/*
+** subwt_s64_untied:
+** ssubwt z0\.d, z1\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (subwt_s64_untied, svint64_t, svint32_t,
+ z0 = svsubwt_s64 (z1, z4),
+ z0 = svsubwt (z1, z4))
+
+/*
+** subwt_w0_s64_tied1:
+** mov (z[0-9]+\.s), w0
+** ssubwt z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_s64_tied1, svint64_t, int32_t,
+ z0 = svsubwt_n_s64 (z0, x0),
+ z0 = svsubwt (z0, x0))
+
+/*
+** subwt_w0_s64_untied:
+** mov (z[0-9]+\.s), w0
+** ssubwt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_s64_untied, svint64_t, int32_t,
+ z0 = svsubwt_n_s64 (z1, x0),
+ z0 = svsubwt (z1, x0))
+
+/*
+** subwt_11_s64_tied1:
+** mov (z[0-9]+\.s), #11
+** ssubwt z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_s64_tied1, svint64_t,
+ z0 = svsubwt_n_s64 (z0, 11),
+ z0 = svsubwt (z0, 11))
+
+/*
+** subwt_11_s64_untied:
+** mov (z[0-9]+\.s), #11
+** ssubwt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_s64_untied, svint64_t,
+ z0 = svsubwt_n_s64 (z1, 11),
+ z0 = svsubwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwt_u16_tied1:
+** usubwt z0\.h, z0\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (subwt_u16_tied1, svuint16_t, svuint8_t,
+ z0 = svsubwt_u16 (z0, z4),
+ z0 = svsubwt (z0, z4))
+
+/*
+** subwt_u16_tied2:
+** usubwt z0\.h, z4\.h, z0\.b
+** ret
+*/
+TEST_DUAL_Z_REV (subwt_u16_tied2, svuint16_t, svuint8_t,
+ z0_res = svsubwt_u16 (z4, z0),
+ z0_res = svsubwt (z4, z0))
+
+/*
+** subwt_u16_untied:
+** usubwt z0\.h, z1\.h, z4\.b
+** ret
+*/
+TEST_DUAL_Z (subwt_u16_untied, svuint16_t, svuint8_t,
+ z0 = svsubwt_u16 (z1, z4),
+ z0 = svsubwt (z1, z4))
+
+/*
+** subwt_w0_u16_tied1:
+** mov (z[0-9]+\.b), w0
+** usubwt z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_u16_tied1, svuint16_t, uint8_t,
+ z0 = svsubwt_n_u16 (z0, x0),
+ z0 = svsubwt (z0, x0))
+
+/*
+** subwt_w0_u16_untied:
+** mov (z[0-9]+\.b), w0
+** usubwt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_u16_untied, svuint16_t, uint8_t,
+ z0 = svsubwt_n_u16 (z1, x0),
+ z0 = svsubwt (z1, x0))
+
+/*
+** subwt_11_u16_tied1:
+** mov (z[0-9]+\.b), #11
+** usubwt z0\.h, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_u16_tied1, svuint16_t,
+ z0 = svsubwt_n_u16 (z0, 11),
+ z0 = svsubwt (z0, 11))
+
+/*
+** subwt_11_u16_untied:
+** mov (z[0-9]+\.b), #11
+** usubwt z0\.h, z1\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_u16_untied, svuint16_t,
+ z0 = svsubwt_n_u16 (z1, 11),
+ z0 = svsubwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwt_u32_tied1:
+** usubwt z0\.s, z0\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (subwt_u32_tied1, svuint32_t, svuint16_t,
+ z0 = svsubwt_u32 (z0, z4),
+ z0 = svsubwt (z0, z4))
+
+/*
+** subwt_u32_tied2:
+** usubwt z0\.s, z4\.s, z0\.h
+** ret
+*/
+TEST_DUAL_Z_REV (subwt_u32_tied2, svuint32_t, svuint16_t,
+ z0_res = svsubwt_u32 (z4, z0),
+ z0_res = svsubwt (z4, z0))
+
+/*
+** subwt_u32_untied:
+** usubwt z0\.s, z1\.s, z4\.h
+** ret
+*/
+TEST_DUAL_Z (subwt_u32_untied, svuint32_t, svuint16_t,
+ z0 = svsubwt_u32 (z1, z4),
+ z0 = svsubwt (z1, z4))
+
+/*
+** subwt_w0_u32_tied1:
+** mov (z[0-9]+\.h), w0
+** usubwt z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_u32_tied1, svuint32_t, uint16_t,
+ z0 = svsubwt_n_u32 (z0, x0),
+ z0 = svsubwt (z0, x0))
+
+/*
+** subwt_w0_u32_untied:
+** mov (z[0-9]+\.h), w0
+** usubwt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_u32_untied, svuint32_t, uint16_t,
+ z0 = svsubwt_n_u32 (z1, x0),
+ z0 = svsubwt (z1, x0))
+
+/*
+** subwt_11_u32_tied1:
+** mov (z[0-9]+\.h), #11
+** usubwt z0\.s, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_u32_tied1, svuint32_t,
+ z0 = svsubwt_n_u32 (z0, 11),
+ z0 = svsubwt (z0, 11))
+
+/*
+** subwt_11_u32_untied:
+** mov (z[0-9]+\.h), #11
+** usubwt z0\.s, z1\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_u32_untied, svuint32_t,
+ z0 = svsubwt_n_u32 (z1, 11),
+ z0 = svsubwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** subwt_u64_tied1:
+** usubwt z0\.d, z0\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (subwt_u64_tied1, svuint64_t, svuint32_t,
+ z0 = svsubwt_u64 (z0, z4),
+ z0 = svsubwt (z0, z4))
+
+/*
+** subwt_u64_tied2:
+** usubwt z0\.d, z4\.d, z0\.s
+** ret
+*/
+TEST_DUAL_Z_REV (subwt_u64_tied2, svuint64_t, svuint32_t,
+ z0_res = svsubwt_u64 (z4, z0),
+ z0_res = svsubwt (z4, z0))
+
+/*
+** subwt_u64_untied:
+** usubwt z0\.d, z1\.d, z4\.s
+** ret
+*/
+TEST_DUAL_Z (subwt_u64_untied, svuint64_t, svuint32_t,
+ z0 = svsubwt_u64 (z1, z4),
+ z0 = svsubwt (z1, z4))
+
+/*
+** subwt_w0_u64_tied1:
+** mov (z[0-9]+\.s), w0
+** usubwt z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_u64_tied1, svuint64_t, uint32_t,
+ z0 = svsubwt_n_u64 (z0, x0),
+ z0 = svsubwt (z0, x0))
+
+/*
+** subwt_w0_u64_untied:
+** mov (z[0-9]+\.s), w0
+** usubwt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (subwt_w0_u64_untied, svuint64_t, uint32_t,
+ z0 = svsubwt_n_u64 (z1, x0),
+ z0 = svsubwt (z1, x0))
+
+/*
+** subwt_11_u64_tied1:
+** mov (z[0-9]+\.s), #11
+** usubwt z0\.d, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_u64_tied1, svuint64_t,
+ z0 = svsubwt_n_u64 (z0, 11),
+ z0 = svsubwt (z0, 11))
+
+/*
+** subwt_11_u64_untied:
+** mov (z[0-9]+\.s), #11
+** usubwt z0\.d, z1\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (subwt_11_u64_untied, svuint64_t,
+ z0 = svsubwt_n_u64 (z1, 11),
+ z0 = svsubwt (z1, 11))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_f16_tied1:
+** tbl z0\.h, {z0\.h(?:, | - )z1\.h}, z4\.h
+** ret
+*/
+TEST_TBL2 (tbl2_f16_tied1, svfloat16x2_t, svfloat16_t, svuint16_t,
+ z0_res = svtbl2_f16 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_f16_tied2:
+** tbl z0\.h, {z1\.h(?:, | - )z2\.h}, z0\.h
+** ret
+*/
+TEST_TBL2_REV (tbl2_f16_tied2, svfloat16x2_t, svfloat16_t, svuint16_t,
+ z0_res = svtbl2_f16 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_f16_untied:
+** tbl z0\.h, {z2\.h(?:, | - )z3\.h}, z4\.h
+** ret
+*/
+TEST_TBL2 (tbl2_f16_untied, svfloat16x2_t, svfloat16_t, svuint16_t,
+ z0_res = svtbl2_f16 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_f32_tied1:
+** tbl z0\.s, {z0\.s(?:, | - )z1\.s}, z4\.s
+** ret
+*/
+TEST_TBL2 (tbl2_f32_tied1, svfloat32x2_t, svfloat32_t, svuint32_t,
+ z0_res = svtbl2_f32 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_f32_tied2:
+** tbl z0\.s, {z1\.s(?:, | - )z2\.s}, z0\.s
+** ret
+*/
+TEST_TBL2_REV (tbl2_f32_tied2, svfloat32x2_t, svfloat32_t, svuint32_t,
+ z0_res = svtbl2_f32 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_f32_untied:
+** tbl z0\.s, {z2\.s(?:, | - )z3\.s}, z4\.s
+** ret
+*/
+TEST_TBL2 (tbl2_f32_untied, svfloat32x2_t, svfloat32_t, svuint32_t,
+ z0_res = svtbl2_f32 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_f64_tied1:
+** tbl z0\.d, {z0\.d(?:, | - )z1\.d}, z4\.d
+** ret
+*/
+TEST_TBL2 (tbl2_f64_tied1, svfloat64x2_t, svfloat64_t, svuint64_t,
+ z0_res = svtbl2_f64 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_f64_tied2:
+** tbl z0\.d, {z1\.d(?:, | - )z2\.d}, z0\.d
+** ret
+*/
+TEST_TBL2_REV (tbl2_f64_tied2, svfloat64x2_t, svfloat64_t, svuint64_t,
+ z0_res = svtbl2_f64 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_f64_untied:
+** tbl z0\.d, {z2\.d(?:, | - )z3\.d}, z4\.d
+** ret
+*/
+TEST_TBL2 (tbl2_f64_untied, svfloat64x2_t, svfloat64_t, svuint64_t,
+ z0_res = svtbl2_f64 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_s16_tied1:
+** tbl z0\.h, {z0\.h(?:, | - )z1\.h}, z4\.h
+** ret
+*/
+TEST_TBL2 (tbl2_s16_tied1, svint16x2_t, svint16_t, svuint16_t,
+ z0_res = svtbl2_s16 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_s16_tied2:
+** tbl z0\.h, {z1\.h(?:, | - )z2\.h}, z0\.h
+** ret
+*/
+TEST_TBL2_REV (tbl2_s16_tied2, svint16x2_t, svint16_t, svuint16_t,
+ z0_res = svtbl2_s16 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_s16_untied:
+** tbl z0\.h, {z2\.h(?:, | - )z3\.h}, z4\.h
+** ret
+*/
+TEST_TBL2 (tbl2_s16_untied, svint16x2_t, svint16_t, svuint16_t,
+ z0_res = svtbl2_s16 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_s32_tied1:
+** tbl z0\.s, {z0\.s(?:, | - )z1\.s}, z4\.s
+** ret
+*/
+TEST_TBL2 (tbl2_s32_tied1, svint32x2_t, svint32_t, svuint32_t,
+ z0_res = svtbl2_s32 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_s32_tied2:
+** tbl z0\.s, {z1\.s(?:, | - )z2\.s}, z0\.s
+** ret
+*/
+TEST_TBL2_REV (tbl2_s32_tied2, svint32x2_t, svint32_t, svuint32_t,
+ z0_res = svtbl2_s32 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_s32_untied:
+** tbl z0\.s, {z2\.s(?:, | - )z3\.s}, z4\.s
+** ret
+*/
+TEST_TBL2 (tbl2_s32_untied, svint32x2_t, svint32_t, svuint32_t,
+ z0_res = svtbl2_s32 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_s64_tied1:
+** tbl z0\.d, {z0\.d(?:, | - )z1\.d}, z4\.d
+** ret
+*/
+TEST_TBL2 (tbl2_s64_tied1, svint64x2_t, svint64_t, svuint64_t,
+ z0_res = svtbl2_s64 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_s64_tied2:
+** tbl z0\.d, {z1\.d(?:, | - )z2\.d}, z0\.d
+** ret
+*/
+TEST_TBL2_REV (tbl2_s64_tied2, svint64x2_t, svint64_t, svuint64_t,
+ z0_res = svtbl2_s64 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_s64_untied:
+** tbl z0\.d, {z2\.d(?:, | - )z3\.d}, z4\.d
+** ret
+*/
+TEST_TBL2 (tbl2_s64_untied, svint64x2_t, svint64_t, svuint64_t,
+ z0_res = svtbl2_s64 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_s8_tied1:
+** tbl z0\.b, {z0\.b(?:, | - )z1\.b}, z4\.b
+** ret
+*/
+TEST_TBL2 (tbl2_s8_tied1, svint8x2_t, svint8_t, svuint8_t,
+ z0_res = svtbl2_s8 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_s8_tied2:
+** tbl z0\.b, {z1\.b(?:, | - )z2\.b}, z0\.b
+** ret
+*/
+TEST_TBL2_REV (tbl2_s8_tied2, svint8x2_t, svint8_t, svuint8_t,
+ z0_res = svtbl2_s8 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_s8_untied:
+** tbl z0\.b, {z2\.b(?:, | - )z3\.b}, z4\.b
+** ret
+*/
+TEST_TBL2 (tbl2_s8_untied, svint8x2_t, svint8_t, svuint8_t,
+ z0_res = svtbl2_s8 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_u16_tied1:
+** tbl z0\.h, {z0\.h(?:, | - )z1\.h}, z4\.h
+** ret
+*/
+TEST_TBL2 (tbl2_u16_tied1, svuint16x2_t, svuint16_t, svuint16_t,
+ z0_res = svtbl2_u16 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_u16_tied2:
+** tbl z0\.h, {z1\.h(?:, | - )z2\.h}, z0\.h
+** ret
+*/
+TEST_TBL2_REV (tbl2_u16_tied2, svuint16x2_t, svuint16_t, svuint16_t,
+ z0_res = svtbl2_u16 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_u16_untied:
+** tbl z0\.h, {z2\.h(?:, | - )z3\.h}, z4\.h
+** ret
+*/
+TEST_TBL2 (tbl2_u16_untied, svuint16x2_t, svuint16_t, svuint16_t,
+ z0_res = svtbl2_u16 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_u32_tied1:
+** tbl z0\.s, {z0\.s(?:, | - )z1\.s}, z4\.s
+** ret
+*/
+TEST_TBL2 (tbl2_u32_tied1, svuint32x2_t, svuint32_t, svuint32_t,
+ z0_res = svtbl2_u32 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_u32_tied2:
+** tbl z0\.s, {z1\.s(?:, | - )z2\.s}, z0\.s
+** ret
+*/
+TEST_TBL2_REV (tbl2_u32_tied2, svuint32x2_t, svuint32_t, svuint32_t,
+ z0_res = svtbl2_u32 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_u32_untied:
+** tbl z0\.s, {z2\.s(?:, | - )z3\.s}, z4\.s
+** ret
+*/
+TEST_TBL2 (tbl2_u32_untied, svuint32x2_t, svuint32_t, svuint32_t,
+ z0_res = svtbl2_u32 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_u64_tied1:
+** tbl z0\.d, {z0\.d(?:, | - )z1\.d}, z4\.d
+** ret
+*/
+TEST_TBL2 (tbl2_u64_tied1, svuint64x2_t, svuint64_t, svuint64_t,
+ z0_res = svtbl2_u64 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_u64_tied2:
+** tbl z0\.d, {z1\.d(?:, | - )z2\.d}, z0\.d
+** ret
+*/
+TEST_TBL2_REV (tbl2_u64_tied2, svuint64x2_t, svuint64_t, svuint64_t,
+ z0_res = svtbl2_u64 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_u64_untied:
+** tbl z0\.d, {z2\.d(?:, | - )z3\.d}, z4\.d
+** ret
+*/
+TEST_TBL2 (tbl2_u64_untied, svuint64x2_t, svuint64_t, svuint64_t,
+ z0_res = svtbl2_u64 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbl2_u8_tied1:
+** tbl z0\.b, {z0\.b(?:, | - )z1\.b}, z4\.b
+** ret
+*/
+TEST_TBL2 (tbl2_u8_tied1, svuint8x2_t, svuint8_t, svuint8_t,
+ z0_res = svtbl2_u8 (z0, z4),
+ z0_res = svtbl2 (z0, z4))
+
+/*
+** tbl2_u8_tied2:
+** tbl z0\.b, {z1\.b(?:, | - )z2\.b}, z0\.b
+** ret
+*/
+TEST_TBL2_REV (tbl2_u8_tied2, svuint8x2_t, svuint8_t, svuint8_t,
+ z0_res = svtbl2_u8 (z1, z0),
+ z0_res = svtbl2 (z1, z0))
+
+/*
+** tbl2_u8_untied:
+** tbl z0\.b, {z2\.b(?:, | - )z3\.b}, z4\.b
+** ret
+*/
+TEST_TBL2 (tbl2_u8_untied, svuint8x2_t, svuint8_t, svuint8_t,
+ z0_res = svtbl2_u8 (z2, z4),
+ z0_res = svtbl2 (z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_f16_tied1:
+** tbx z0\.h, z1\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (tbx_f16_tied1, svfloat16_t, svuint16_t,
+ z0 = svtbx_f16 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_f16_tied2, svfloat16_t, svuint16_t,
+ z0 = svtbx_f16 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_f16_tied3, svfloat16_t, svuint16_t,
+ z0_res = svtbx_f16 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_f16_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.h, z2\.h, z4\.h
+** |
+** tbx z1\.h, z2\.h, z4\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_f16_untied, svfloat16_t, svuint16_t,
+ z0 = svtbx_f16 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_f32_tied1:
+** tbx z0\.s, z1\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (tbx_f32_tied1, svfloat32_t, svuint32_t,
+ z0 = svtbx_f32 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_f32_tied2, svfloat32_t, svuint32_t,
+ z0 = svtbx_f32 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_f32_tied3, svfloat32_t, svuint32_t,
+ z0_res = svtbx_f32 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_f32_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.s, z2\.s, z4\.s
+** |
+** tbx z1\.s, z2\.s, z4\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_f32_untied, svfloat32_t, svuint32_t,
+ z0 = svtbx_f32 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_f64_tied1:
+** tbx z0\.d, z1\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (tbx_f64_tied1, svfloat64_t, svuint64_t,
+ z0 = svtbx_f64 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_f64_tied2, svfloat64_t, svuint64_t,
+ z0 = svtbx_f64 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_f64_tied3, svfloat64_t, svuint64_t,
+ z0_res = svtbx_f64 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_f64_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.d, z2\.d, z4\.d
+** |
+** tbx z1\.d, z2\.d, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_f64_untied, svfloat64_t, svuint64_t,
+ z0 = svtbx_f64 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_s16_tied1:
+** tbx z0\.h, z1\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (tbx_s16_tied1, svint16_t, svuint16_t,
+ z0 = svtbx_s16 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_s16_tied2, svint16_t, svuint16_t,
+ z0 = svtbx_s16 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_s16_tied3, svint16_t, svuint16_t,
+ z0_res = svtbx_s16 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_s16_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.h, z2\.h, z4\.h
+** |
+** tbx z1\.h, z2\.h, z4\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_s16_untied, svint16_t, svuint16_t,
+ z0 = svtbx_s16 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_s32_tied1:
+** tbx z0\.s, z1\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (tbx_s32_tied1, svint32_t, svuint32_t,
+ z0 = svtbx_s32 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_s32_tied2, svint32_t, svuint32_t,
+ z0 = svtbx_s32 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_s32_tied3, svint32_t, svuint32_t,
+ z0_res = svtbx_s32 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_s32_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.s, z2\.s, z4\.s
+** |
+** tbx z1\.s, z2\.s, z4\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_s32_untied, svint32_t, svuint32_t,
+ z0 = svtbx_s32 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_s64_tied1:
+** tbx z0\.d, z1\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (tbx_s64_tied1, svint64_t, svuint64_t,
+ z0 = svtbx_s64 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_s64_tied2, svint64_t, svuint64_t,
+ z0 = svtbx_s64 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_s64_tied3, svint64_t, svuint64_t,
+ z0_res = svtbx_s64 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_s64_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.d, z2\.d, z4\.d
+** |
+** tbx z1\.d, z2\.d, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_s64_untied, svint64_t, svuint64_t,
+ z0 = svtbx_s64 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_s8_tied1:
+** tbx z0\.b, z1\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (tbx_s8_tied1, svint8_t, svuint8_t,
+ z0 = svtbx_s8 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_s8_tied2, svint8_t, svuint8_t,
+ z0 = svtbx_s8 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_s8_tied3, svint8_t, svuint8_t,
+ z0_res = svtbx_s8 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_s8_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.b, z2\.b, z4\.b
+** |
+** tbx z1\.b, z2\.b, z4\.b
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_s8_untied, svint8_t, svuint8_t,
+ z0 = svtbx_s8 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_u16_tied1:
+** tbx z0\.h, z1\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (tbx_u16_tied1, svuint16_t, svuint16_t,
+ z0 = svtbx_u16 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_u16_tied2, svuint16_t, svuint16_t,
+ z0 = svtbx_u16 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_u16_tied3, svuint16_t, svuint16_t,
+ z0_res = svtbx_u16 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_u16_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.h, z2\.h, z4\.h
+** |
+** tbx z1\.h, z2\.h, z4\.h
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_u16_untied, svuint16_t, svuint16_t,
+ z0 = svtbx_u16 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_u32_tied1:
+** tbx z0\.s, z1\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (tbx_u32_tied1, svuint32_t, svuint32_t,
+ z0 = svtbx_u32 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_u32_tied2, svuint32_t, svuint32_t,
+ z0 = svtbx_u32 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_u32_tied3, svuint32_t, svuint32_t,
+ z0_res = svtbx_u32 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_u32_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.s, z2\.s, z4\.s
+** |
+** tbx z1\.s, z2\.s, z4\.s
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_u32_untied, svuint32_t, svuint32_t,
+ z0 = svtbx_u32 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_u64_tied1:
+** tbx z0\.d, z1\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (tbx_u64_tied1, svuint64_t, svuint64_t,
+ z0 = svtbx_u64 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_u64_tied2, svuint64_t, svuint64_t,
+ z0 = svtbx_u64 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_u64_tied3, svuint64_t, svuint64_t,
+ z0_res = svtbx_u64 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_u64_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.d, z2\.d, z4\.d
+** |
+** tbx z1\.d, z2\.d, z4\.d
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_u64_untied, svuint64_t, svuint64_t,
+ z0 = svtbx_u64 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** tbx_u8_tied1:
+** tbx z0\.b, z1\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (tbx_u8_tied1, svuint8_t, svuint8_t,
+ z0 = svtbx_u8 (z0, z1, z4),
+ z0 = svtbx (z0, z1, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z (tbx_u8_tied2, svuint8_t, svuint8_t,
+ z0 = svtbx_u8 (z1, z0, z4),
+ z0 = svtbx (z1, z0, z4))
+
+/* Bad RA choice: no preferred output sequence. */
+TEST_DUAL_Z_REV (tbx_u8_tied3, svuint8_t, svuint8_t,
+ z0_res = svtbx_u8 (z4, z5, z0),
+ z0_res = svtbx (z4, z5, z0))
+
+/*
+** tbx_u8_untied:
+** (
+** mov z0\.d, z1\.d
+** tbx z0\.b, z2\.b, z4\.b
+** |
+** tbx z1\.b, z2\.b, z4\.b
+** mov z0\.d, z1\.d
+** )
+** ret
+*/
+TEST_DUAL_Z (tbx_u8_untied, svuint8_t, svuint8_t,
+ z0 = svtbx_u8 (z1, z2, z4),
+ z0 = svtbx (z1, z2, z4))
--- /dev/null
+#include "../../../sve/acle/asm/test_sve_acle.h"
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** uqadd_s16_m_tied1:
+** suqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (uqadd_s16_m_tied1, svint16_t, svuint16_t,
+ z0 = svuqadd_s16_m (p0, z0, z4),
+ z0 = svuqadd_m (p0, z0, z4))
+
+/*
+** uqadd_s16_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** suqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s16_m_tied2, svint16_t, svuint16_t,
+ z0_res = svuqadd_s16_m (p0, z4, z0),
+ z0_res = svuqadd_m (p0, z4, z0))
+
+/*
+** uqadd_s16_m_untied:
+** movprfx z0, z1
+** suqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (uqadd_s16_m_untied, svint16_t, svuint16_t,
+ z0 = svuqadd_s16_m (p0, z1, z4),
+ z0 = svuqadd_m (p0, z1, z4))
+
+/*
+** uqadd_w0_s16_m_tied1:
+** mov (z[0-9]+\.h), w0
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s16_m_tied1, svint16_t, uint16_t,
+ z0 = svuqadd_n_s16_m (p0, z0, x0),
+ z0 = svuqadd_m (p0, z0, x0))
+
+/*
+** uqadd_w0_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s16_m_untied, svint16_t, uint16_t,
+ z0 = svuqadd_n_s16_m (p0, z1, x0),
+ z0 = svuqadd_m (p0, z1, x0))
+
+/*
+** uqadd_1_s16_m_tied1:
+** mov (z[0-9]+\.h), #1
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s16_m_tied1, svint16_t,
+ z0 = svuqadd_n_s16_m (p0, z0, 1),
+ z0 = svuqadd_m (p0, z0, 1))
+
+/*
+** uqadd_1_s16_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #1
+** movprfx z0, z1
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s16_m_untied, svint16_t,
+ z0 = svuqadd_n_s16_m (p0, z1, 1),
+ z0 = svuqadd_m (p0, z1, 1))
+
+/*
+** uqadd_127_s16_m:
+** mov (z[0-9]+\.h), #127
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s16_m, svint16_t,
+ z0 = svuqadd_n_s16_m (p0, z0, 127),
+ z0 = svuqadd_m (p0, z0, 127))
+
+/*
+** uqadd_128_s16_m:
+** mov (z[0-9]+\.h), #128
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s16_m, svint16_t,
+ z0 = svuqadd_n_s16_m (p0, z0, 128),
+ z0 = svuqadd_m (p0, z0, 128))
+
+/*
+** uqadd_255_s16_m:
+** mov (z[0-9]+\.h), #255
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s16_m, svint16_t,
+ z0 = svuqadd_n_s16_m (p0, z0, 255),
+ z0 = svuqadd_m (p0, z0, 255))
+
+/*
+** uqadd_m1_s16_m:
+** mov (z[0-9]+)\.b, #-1
+** suqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s16_m, svint16_t,
+ z0 = svuqadd_n_s16_m (p0, z0, -1),
+ z0 = svuqadd_m (p0, z0, -1))
+
+/*
+** uqadd_m127_s16_m:
+** mov (z[0-9]+\.h), #-127
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s16_m, svint16_t,
+ z0 = svuqadd_n_s16_m (p0, z0, -127),
+ z0 = svuqadd_m (p0, z0, -127))
+
+/*
+** uqadd_m128_s16_m:
+** mov (z[0-9]+\.h), #-128
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s16_m, svint16_t,
+ z0 = svuqadd_n_s16_m (p0, z0, -128),
+ z0 = svuqadd_m (p0, z0, -128))
+
+/*
+** uqadd_s16_z_tied1:
+** movprfx z0\.h, p0/z, z0\.h
+** suqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (uqadd_s16_z_tied1, svint16_t, svuint16_t,
+ z0 = svuqadd_s16_z (p0, z0, z4),
+ z0 = svuqadd_z (p0, z0, z4))
+
+/*
+** uqadd_s16_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.h, p0/z, z4\.h
+** suqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s16_z_tied2, svint16_t, svuint16_t,
+ z0_res = svuqadd_s16_z (p0, z4, z0),
+ z0_res = svuqadd_z (p0, z4, z0))
+
+/*
+** uqadd_s16_z_untied:
+** movprfx z0\.h, p0/z, z1\.h
+** suqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (uqadd_s16_z_untied, svint16_t, svuint16_t,
+ z0 = svuqadd_s16_z (p0, z1, z4),
+ z0 = svuqadd_z (p0, z1, z4))
+
+/*
+** uqadd_w0_s16_z_tied1:
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z0\.h
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s16_z_tied1, svint16_t, uint16_t,
+ z0 = svuqadd_n_s16_z (p0, z0, x0),
+ z0 = svuqadd_z (p0, z0, x0))
+
+/*
+** uqadd_w0_s16_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0\.h, p0/z, z1\.h
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s16_z_untied, svint16_t, uint16_t,
+ z0 = svuqadd_n_s16_z (p0, z1, x0),
+ z0 = svuqadd_z (p0, z1, x0))
+
+/*
+** uqadd_1_s16_z_tied1:
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z0\.h
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s16_z_tied1, svint16_t,
+ z0 = svuqadd_n_s16_z (p0, z0, 1),
+ z0 = svuqadd_z (p0, z0, 1))
+
+/*
+** uqadd_1_s16_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), #1
+** movprfx z0\.h, p0/z, z1\.h
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s16_z_untied, svint16_t,
+ z0 = svuqadd_n_s16_z (p0, z1, 1),
+ z0 = svuqadd_z (p0, z1, 1))
+
+/*
+** uqadd_127_s16_z:
+** mov (z[0-9]+\.h), #127
+** movprfx z0\.h, p0/z, z0\.h
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s16_z, svint16_t,
+ z0 = svuqadd_n_s16_z (p0, z0, 127),
+ z0 = svuqadd_z (p0, z0, 127))
+
+/*
+** uqadd_128_s16_z:
+** mov (z[0-9]+\.h), #128
+** movprfx z0\.h, p0/z, z0\.h
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s16_z, svint16_t,
+ z0 = svuqadd_n_s16_z (p0, z0, 128),
+ z0 = svuqadd_z (p0, z0, 128))
+
+/*
+** uqadd_255_s16_z:
+** mov (z[0-9]+\.h), #255
+** movprfx z0\.h, p0/z, z0\.h
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s16_z, svint16_t,
+ z0 = svuqadd_n_s16_z (p0, z0, 255),
+ z0 = svuqadd_z (p0, z0, 255))
+
+/*
+** uqadd_m1_s16_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.h, p0/z, z0\.h
+** suqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s16_z, svint16_t,
+ z0 = svuqadd_n_s16_z (p0, z0, -1),
+ z0 = svuqadd_z (p0, z0, -1))
+
+/*
+** uqadd_m127_s16_z:
+** mov (z[0-9]+\.h), #-127
+** movprfx z0\.h, p0/z, z0\.h
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s16_z, svint16_t,
+ z0 = svuqadd_n_s16_z (p0, z0, -127),
+ z0 = svuqadd_z (p0, z0, -127))
+
+/*
+** uqadd_m128_s16_z:
+** mov (z[0-9]+\.h), #-128
+** movprfx z0\.h, p0/z, z0\.h
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s16_z, svint16_t,
+ z0 = svuqadd_n_s16_z (p0, z0, -128),
+ z0 = svuqadd_z (p0, z0, -128))
+
+/*
+** uqadd_s16_x_tied1:
+** suqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (uqadd_s16_x_tied1, svint16_t, svuint16_t,
+ z0 = svuqadd_s16_x (p0, z0, z4),
+ z0 = svuqadd_x (p0, z0, z4))
+
+/*
+** uqadd_s16_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** suqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s16_x_tied2, svint16_t, svuint16_t,
+ z0_res = svuqadd_s16_x (p0, z4, z0),
+ z0_res = svuqadd_x (p0, z4, z0))
+
+/*
+** uqadd_s16_x_untied:
+** movprfx z0, z1
+** suqadd z0\.h, p0/m, z0\.h, z4\.h
+** ret
+*/
+TEST_DUAL_Z (uqadd_s16_x_untied, svint16_t, svuint16_t,
+ z0 = svuqadd_s16_x (p0, z1, z4),
+ z0 = svuqadd_x (p0, z1, z4))
+
+/*
+** uqadd_w0_s16_x_tied1:
+** mov (z[0-9]+\.h), w0
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s16_x_tied1, svint16_t, uint16_t,
+ z0 = svuqadd_n_s16_x (p0, z0, x0),
+ z0 = svuqadd_x (p0, z0, x0))
+
+/*
+** uqadd_w0_s16_x_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.h), w0
+** movprfx z0, z1
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s16_x_untied, svint16_t, uint16_t,
+ z0 = svuqadd_n_s16_x (p0, z1, x0),
+ z0 = svuqadd_x (p0, z1, x0))
+
+/*
+** uqadd_1_s16_x_tied1:
+** sqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s16_x_tied1, svint16_t,
+ z0 = svuqadd_n_s16_x (p0, z0, 1),
+ z0 = svuqadd_x (p0, z0, 1))
+
+/*
+** uqadd_1_s16_x_untied:
+** movprfx z0, z1
+** sqadd z0\.h, z0\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s16_x_untied, svint16_t,
+ z0 = svuqadd_n_s16_x (p0, z1, 1),
+ z0 = svuqadd_x (p0, z1, 1))
+
+/*
+** uqadd_127_s16_x:
+** sqadd z0\.h, z0\.h, #127
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s16_x, svint16_t,
+ z0 = svuqadd_n_s16_x (p0, z0, 127),
+ z0 = svuqadd_x (p0, z0, 127))
+
+/*
+** uqadd_128_s16_x:
+** sqadd z0\.h, z0\.h, #128
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s16_x, svint16_t,
+ z0 = svuqadd_n_s16_x (p0, z0, 128),
+ z0 = svuqadd_x (p0, z0, 128))
+
+/*
+** uqadd_255_s16_x:
+** sqadd z0\.h, z0\.h, #255
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s16_x, svint16_t,
+ z0 = svuqadd_n_s16_x (p0, z0, 255),
+ z0 = svuqadd_x (p0, z0, 255))
+
+/*
+** uqadd_m1_s16_x:
+** mov (z[0-9]+)\.b, #-1
+** suqadd z0\.h, p0/m, z0\.h, \1\.h
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s16_x, svint16_t,
+ z0 = svuqadd_n_s16_x (p0, z0, -1),
+ z0 = svuqadd_x (p0, z0, -1))
+
+/*
+** uqadd_m127_s16_x:
+** mov (z[0-9]+\.h), #-127
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s16_x, svint16_t,
+ z0 = svuqadd_n_s16_x (p0, z0, -127),
+ z0 = svuqadd_x (p0, z0, -127))
+
+/*
+** uqadd_m128_s16_x:
+** mov (z[0-9]+\.h), #-128
+** suqadd z0\.h, p0/m, z0\.h, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s16_x, svint16_t,
+ z0 = svuqadd_n_s16_x (p0, z0, -128),
+ z0 = svuqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** uqadd_s32_m_tied1:
+** suqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (uqadd_s32_m_tied1, svint32_t, svuint32_t,
+ z0 = svuqadd_s32_m (p0, z0, z4),
+ z0 = svuqadd_m (p0, z0, z4))
+
+/*
+** uqadd_s32_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** suqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s32_m_tied2, svint32_t, svuint32_t,
+ z0_res = svuqadd_s32_m (p0, z4, z0),
+ z0_res = svuqadd_m (p0, z4, z0))
+
+/*
+** uqadd_s32_m_untied:
+** movprfx z0, z1
+** suqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (uqadd_s32_m_untied, svint32_t, svuint32_t,
+ z0 = svuqadd_s32_m (p0, z1, z4),
+ z0 = svuqadd_m (p0, z1, z4))
+
+/*
+** uqadd_w0_s32_m_tied1:
+** mov (z[0-9]+\.s), w0
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s32_m_tied1, svint32_t, uint32_t,
+ z0 = svuqadd_n_s32_m (p0, z0, x0),
+ z0 = svuqadd_m (p0, z0, x0))
+
+/*
+** uqadd_w0_s32_m_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s32_m_untied, svint32_t, uint32_t,
+ z0 = svuqadd_n_s32_m (p0, z1, x0),
+ z0 = svuqadd_m (p0, z1, x0))
+
+/*
+** uqadd_1_s32_m_tied1:
+** mov (z[0-9]+\.s), #1
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s32_m_tied1, svint32_t,
+ z0 = svuqadd_n_s32_m (p0, z0, 1),
+ z0 = svuqadd_m (p0, z0, 1))
+
+/*
+** uqadd_1_s32_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #1
+** movprfx z0, z1
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s32_m_untied, svint32_t,
+ z0 = svuqadd_n_s32_m (p0, z1, 1),
+ z0 = svuqadd_m (p0, z1, 1))
+
+/*
+** uqadd_127_s32_m:
+** mov (z[0-9]+\.s), #127
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s32_m, svint32_t,
+ z0 = svuqadd_n_s32_m (p0, z0, 127),
+ z0 = svuqadd_m (p0, z0, 127))
+
+/*
+** uqadd_128_s32_m:
+** mov (z[0-9]+\.s), #128
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s32_m, svint32_t,
+ z0 = svuqadd_n_s32_m (p0, z0, 128),
+ z0 = svuqadd_m (p0, z0, 128))
+
+/*
+** uqadd_255_s32_m:
+** mov (z[0-9]+\.s), #255
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s32_m, svint32_t,
+ z0 = svuqadd_n_s32_m (p0, z0, 255),
+ z0 = svuqadd_m (p0, z0, 255))
+
+/*
+** uqadd_m1_s32_m:
+** mov (z[0-9]+)\.b, #-1
+** suqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s32_m, svint32_t,
+ z0 = svuqadd_n_s32_m (p0, z0, -1),
+ z0 = svuqadd_m (p0, z0, -1))
+
+/*
+** uqadd_m127_s32_m:
+** mov (z[0-9]+\.s), #-127
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s32_m, svint32_t,
+ z0 = svuqadd_n_s32_m (p0, z0, -127),
+ z0 = svuqadd_m (p0, z0, -127))
+
+/*
+** uqadd_m128_s32_m:
+** mov (z[0-9]+\.s), #-128
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s32_m, svint32_t,
+ z0 = svuqadd_n_s32_m (p0, z0, -128),
+ z0 = svuqadd_m (p0, z0, -128))
+
+/*
+** uqadd_s32_z_tied1:
+** movprfx z0\.s, p0/z, z0\.s
+** suqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (uqadd_s32_z_tied1, svint32_t, svuint32_t,
+ z0 = svuqadd_s32_z (p0, z0, z4),
+ z0 = svuqadd_z (p0, z0, z4))
+
+/*
+** uqadd_s32_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.s, p0/z, z4\.s
+** suqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s32_z_tied2, svint32_t, svuint32_t,
+ z0_res = svuqadd_s32_z (p0, z4, z0),
+ z0_res = svuqadd_z (p0, z4, z0))
+
+/*
+** uqadd_s32_z_untied:
+** movprfx z0\.s, p0/z, z1\.s
+** suqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (uqadd_s32_z_untied, svint32_t, svuint32_t,
+ z0 = svuqadd_s32_z (p0, z1, z4),
+ z0 = svuqadd_z (p0, z1, z4))
+
+/*
+** uqadd_w0_s32_z_tied1:
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z0\.s
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s32_z_tied1, svint32_t, uint32_t,
+ z0 = svuqadd_n_s32_z (p0, z0, x0),
+ z0 = svuqadd_z (p0, z0, x0))
+
+/*
+** uqadd_w0_s32_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), w0
+** movprfx z0\.s, p0/z, z1\.s
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s32_z_untied, svint32_t, uint32_t,
+ z0 = svuqadd_n_s32_z (p0, z1, x0),
+ z0 = svuqadd_z (p0, z1, x0))
+
+/*
+** uqadd_1_s32_z_tied1:
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z0\.s
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s32_z_tied1, svint32_t,
+ z0 = svuqadd_n_s32_z (p0, z0, 1),
+ z0 = svuqadd_z (p0, z0, 1))
+
+/*
+** uqadd_1_s32_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.s), #1
+** movprfx z0\.s, p0/z, z1\.s
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s32_z_untied, svint32_t,
+ z0 = svuqadd_n_s32_z (p0, z1, 1),
+ z0 = svuqadd_z (p0, z1, 1))
+
+/*
+** uqadd_127_s32_z:
+** mov (z[0-9]+\.s), #127
+** movprfx z0\.s, p0/z, z0\.s
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s32_z, svint32_t,
+ z0 = svuqadd_n_s32_z (p0, z0, 127),
+ z0 = svuqadd_z (p0, z0, 127))
+
+/*
+** uqadd_128_s32_z:
+** mov (z[0-9]+\.s), #128
+** movprfx z0\.s, p0/z, z0\.s
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s32_z, svint32_t,
+ z0 = svuqadd_n_s32_z (p0, z0, 128),
+ z0 = svuqadd_z (p0, z0, 128))
+
+/*
+** uqadd_255_s32_z:
+** mov (z[0-9]+\.s), #255
+** movprfx z0\.s, p0/z, z0\.s
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s32_z, svint32_t,
+ z0 = svuqadd_n_s32_z (p0, z0, 255),
+ z0 = svuqadd_z (p0, z0, 255))
+
+/*
+** uqadd_m1_s32_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.s, p0/z, z0\.s
+** suqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s32_z, svint32_t,
+ z0 = svuqadd_n_s32_z (p0, z0, -1),
+ z0 = svuqadd_z (p0, z0, -1))
+
+/*
+** uqadd_m127_s32_z:
+** mov (z[0-9]+\.s), #-127
+** movprfx z0\.s, p0/z, z0\.s
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s32_z, svint32_t,
+ z0 = svuqadd_n_s32_z (p0, z0, -127),
+ z0 = svuqadd_z (p0, z0, -127))
+
+/*
+** uqadd_m128_s32_z:
+** mov (z[0-9]+\.s), #-128
+** movprfx z0\.s, p0/z, z0\.s
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s32_z, svint32_t,
+ z0 = svuqadd_n_s32_z (p0, z0, -128),
+ z0 = svuqadd_z (p0, z0, -128))
+
+/*
+** uqadd_s32_x_tied1:
+** suqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (uqadd_s32_x_tied1, svint32_t, svuint32_t,
+ z0 = svuqadd_s32_x (p0, z0, z4),
+ z0 = svuqadd_x (p0, z0, z4))
+
+/*
+** uqadd_s32_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** suqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s32_x_tied2, svint32_t, svuint32_t,
+ z0_res = svuqadd_s32_x (p0, z4, z0),
+ z0_res = svuqadd_x (p0, z4, z0))
+
+/*
+** uqadd_s32_x_untied:
+** movprfx z0, z1
+** suqadd z0\.s, p0/m, z0\.s, z4\.s
+** ret
+*/
+TEST_DUAL_Z (uqadd_s32_x_untied, svint32_t, svuint32_t,
+ z0 = svuqadd_s32_x (p0, z1, z4),
+ z0 = svuqadd_x (p0, z1, z4))
+
+/*
+** uqadd_w0_s32_x_tied1:
+** mov (z[0-9]+\.s), w0
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s32_x_tied1, svint32_t, uint32_t,
+ z0 = svuqadd_n_s32_x (p0, z0, x0),
+ z0 = svuqadd_x (p0, z0, x0))
+
+/*
+** uqadd_w0_s32_x_untied:
+** mov (z[0-9]+\.s), w0
+** movprfx z0, z1
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s32_x_untied, svint32_t, uint32_t,
+ z0 = svuqadd_n_s32_x (p0, z1, x0),
+ z0 = svuqadd_x (p0, z1, x0))
+
+/*
+** uqadd_1_s32_x_tied1:
+** sqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s32_x_tied1, svint32_t,
+ z0 = svuqadd_n_s32_x (p0, z0, 1),
+ z0 = svuqadd_x (p0, z0, 1))
+
+/*
+** uqadd_1_s32_x_untied:
+** movprfx z0, z1
+** sqadd z0\.s, z0\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s32_x_untied, svint32_t,
+ z0 = svuqadd_n_s32_x (p0, z1, 1),
+ z0 = svuqadd_x (p0, z1, 1))
+
+/*
+** uqadd_127_s32_x:
+** sqadd z0\.s, z0\.s, #127
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s32_x, svint32_t,
+ z0 = svuqadd_n_s32_x (p0, z0, 127),
+ z0 = svuqadd_x (p0, z0, 127))
+
+/*
+** uqadd_128_s32_x:
+** sqadd z0\.s, z0\.s, #128
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s32_x, svint32_t,
+ z0 = svuqadd_n_s32_x (p0, z0, 128),
+ z0 = svuqadd_x (p0, z0, 128))
+
+/*
+** uqadd_255_s32_x:
+** sqadd z0\.s, z0\.s, #255
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s32_x, svint32_t,
+ z0 = svuqadd_n_s32_x (p0, z0, 255),
+ z0 = svuqadd_x (p0, z0, 255))
+
+/*
+** uqadd_m1_s32_x:
+** mov (z[0-9]+)\.b, #-1
+** suqadd z0\.s, p0/m, z0\.s, \1\.s
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s32_x, svint32_t,
+ z0 = svuqadd_n_s32_x (p0, z0, -1),
+ z0 = svuqadd_x (p0, z0, -1))
+
+/*
+** uqadd_m127_s32_x:
+** mov (z[0-9]+\.s), #-127
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s32_x, svint32_t,
+ z0 = svuqadd_n_s32_x (p0, z0, -127),
+ z0 = svuqadd_x (p0, z0, -127))
+
+/*
+** uqadd_m128_s32_x:
+** mov (z[0-9]+\.s), #-128
+** suqadd z0\.s, p0/m, z0\.s, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s32_x, svint32_t,
+ z0 = svuqadd_n_s32_x (p0, z0, -128),
+ z0 = svuqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** uqadd_s64_m_tied1:
+** suqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (uqadd_s64_m_tied1, svint64_t, svuint64_t,
+ z0 = svuqadd_s64_m (p0, z0, z4),
+ z0 = svuqadd_m (p0, z0, z4))
+
+/*
+** uqadd_s64_m_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s64_m_tied2, svint64_t, svuint64_t,
+ z0_res = svuqadd_s64_m (p0, z4, z0),
+ z0_res = svuqadd_m (p0, z4, z0))
+
+/*
+** uqadd_s64_m_untied:
+** movprfx z0, z1
+** suqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (uqadd_s64_m_untied, svint64_t, svuint64_t,
+ z0 = svuqadd_s64_m (p0, z1, z4),
+ z0 = svuqadd_m (p0, z1, z4))
+
+/*
+** uqadd_x0_s64_m_tied1:
+** mov (z[0-9]+\.d), x0
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_x0_s64_m_tied1, svint64_t, uint64_t,
+ z0 = svuqadd_n_s64_m (p0, z0, x0),
+ z0 = svuqadd_m (p0, z0, x0))
+
+/*
+** uqadd_x0_s64_m_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_x0_s64_m_untied, svint64_t, uint64_t,
+ z0 = svuqadd_n_s64_m (p0, z1, x0),
+ z0 = svuqadd_m (p0, z1, x0))
+
+/*
+** uqadd_1_s64_m_tied1:
+** mov (z[0-9]+\.d), #1
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s64_m_tied1, svint64_t,
+ z0 = svuqadd_n_s64_m (p0, z0, 1),
+ z0 = svuqadd_m (p0, z0, 1))
+
+/*
+** uqadd_1_s64_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #1
+** movprfx z0, z1
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s64_m_untied, svint64_t,
+ z0 = svuqadd_n_s64_m (p0, z1, 1),
+ z0 = svuqadd_m (p0, z1, 1))
+
+/*
+** uqadd_127_s64_m:
+** mov (z[0-9]+\.d), #127
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s64_m, svint64_t,
+ z0 = svuqadd_n_s64_m (p0, z0, 127),
+ z0 = svuqadd_m (p0, z0, 127))
+
+/*
+** uqadd_128_s64_m:
+** mov (z[0-9]+\.d), #128
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s64_m, svint64_t,
+ z0 = svuqadd_n_s64_m (p0, z0, 128),
+ z0 = svuqadd_m (p0, z0, 128))
+
+/*
+** uqadd_255_s64_m:
+** mov (z[0-9]+\.d), #255
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s64_m, svint64_t,
+ z0 = svuqadd_n_s64_m (p0, z0, 255),
+ z0 = svuqadd_m (p0, z0, 255))
+
+/*
+** uqadd_m1_s64_m:
+** mov (z[0-9]+)\.b, #-1
+** suqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s64_m, svint64_t,
+ z0 = svuqadd_n_s64_m (p0, z0, -1),
+ z0 = svuqadd_m (p0, z0, -1))
+
+/*
+** uqadd_m127_s64_m:
+** mov (z[0-9]+\.d), #-127
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s64_m, svint64_t,
+ z0 = svuqadd_n_s64_m (p0, z0, -127),
+ z0 = svuqadd_m (p0, z0, -127))
+
+/*
+** uqadd_m128_s64_m:
+** mov (z[0-9]+\.d), #-128
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s64_m, svint64_t,
+ z0 = svuqadd_n_s64_m (p0, z0, -128),
+ z0 = svuqadd_m (p0, z0, -128))
+
+/*
+** uqadd_s64_z_tied1:
+** movprfx z0\.d, p0/z, z0\.d
+** suqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (uqadd_s64_z_tied1, svint64_t, svuint64_t,
+ z0 = svuqadd_s64_z (p0, z0, z4),
+ z0 = svuqadd_z (p0, z0, z4))
+
+/*
+** uqadd_s64_z_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0\.d, p0/z, z4\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s64_z_tied2, svint64_t, svuint64_t,
+ z0_res = svuqadd_s64_z (p0, z4, z0),
+ z0_res = svuqadd_z (p0, z4, z0))
+
+/*
+** uqadd_s64_z_untied:
+** movprfx z0\.d, p0/z, z1\.d
+** suqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (uqadd_s64_z_untied, svint64_t, svuint64_t,
+ z0 = svuqadd_s64_z (p0, z1, z4),
+ z0 = svuqadd_z (p0, z1, z4))
+
+/*
+** uqadd_x0_s64_z_tied1:
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z0\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_x0_s64_z_tied1, svint64_t, uint64_t,
+ z0 = svuqadd_n_s64_z (p0, z0, x0),
+ z0 = svuqadd_z (p0, z0, x0))
+
+/*
+** uqadd_x0_s64_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), x0
+** movprfx z0\.d, p0/z, z1\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_x0_s64_z_untied, svint64_t, uint64_t,
+ z0 = svuqadd_n_s64_z (p0, z1, x0),
+ z0 = svuqadd_z (p0, z1, x0))
+
+/*
+** uqadd_1_s64_z_tied1:
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z0\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s64_z_tied1, svint64_t,
+ z0 = svuqadd_n_s64_z (p0, z0, 1),
+ z0 = svuqadd_z (p0, z0, 1))
+
+/*
+** uqadd_1_s64_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.d), #1
+** movprfx z0\.d, p0/z, z1\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s64_z_untied, svint64_t,
+ z0 = svuqadd_n_s64_z (p0, z1, 1),
+ z0 = svuqadd_z (p0, z1, 1))
+
+/*
+** uqadd_127_s64_z:
+** mov (z[0-9]+\.d), #127
+** movprfx z0\.d, p0/z, z0\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s64_z, svint64_t,
+ z0 = svuqadd_n_s64_z (p0, z0, 127),
+ z0 = svuqadd_z (p0, z0, 127))
+
+/*
+** uqadd_128_s64_z:
+** mov (z[0-9]+\.d), #128
+** movprfx z0\.d, p0/z, z0\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s64_z, svint64_t,
+ z0 = svuqadd_n_s64_z (p0, z0, 128),
+ z0 = svuqadd_z (p0, z0, 128))
+
+/*
+** uqadd_255_s64_z:
+** mov (z[0-9]+\.d), #255
+** movprfx z0\.d, p0/z, z0\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s64_z, svint64_t,
+ z0 = svuqadd_n_s64_z (p0, z0, 255),
+ z0 = svuqadd_z (p0, z0, 255))
+
+/*
+** uqadd_m1_s64_z:
+** mov (z[0-9]+)\.b, #-1
+** movprfx z0\.d, p0/z, z0\.d
+** suqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s64_z, svint64_t,
+ z0 = svuqadd_n_s64_z (p0, z0, -1),
+ z0 = svuqadd_z (p0, z0, -1))
+
+/*
+** uqadd_m127_s64_z:
+** mov (z[0-9]+\.d), #-127
+** movprfx z0\.d, p0/z, z0\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s64_z, svint64_t,
+ z0 = svuqadd_n_s64_z (p0, z0, -127),
+ z0 = svuqadd_z (p0, z0, -127))
+
+/*
+** uqadd_m128_s64_z:
+** mov (z[0-9]+\.d), #-128
+** movprfx z0\.d, p0/z, z0\.d
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s64_z, svint64_t,
+ z0 = svuqadd_n_s64_z (p0, z0, -128),
+ z0 = svuqadd_z (p0, z0, -128))
+
+/*
+** uqadd_s64_x_tied1:
+** suqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (uqadd_s64_x_tied1, svint64_t, svuint64_t,
+ z0 = svuqadd_s64_x (p0, z0, z4),
+ z0 = svuqadd_x (p0, z0, z4))
+
+/*
+** uqadd_s64_x_tied2:
+** mov (z[0-9]+\.d), z0\.d
+** movprfx z0, z4
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s64_x_tied2, svint64_t, svuint64_t,
+ z0_res = svuqadd_s64_x (p0, z4, z0),
+ z0_res = svuqadd_x (p0, z4, z0))
+
+/*
+** uqadd_s64_x_untied:
+** movprfx z0, z1
+** suqadd z0\.d, p0/m, z0\.d, z4\.d
+** ret
+*/
+TEST_DUAL_Z (uqadd_s64_x_untied, svint64_t, svuint64_t,
+ z0 = svuqadd_s64_x (p0, z1, z4),
+ z0 = svuqadd_x (p0, z1, z4))
+
+/*
+** uqadd_x0_s64_x_tied1:
+** mov (z[0-9]+\.d), x0
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_x0_s64_x_tied1, svint64_t, uint64_t,
+ z0 = svuqadd_n_s64_x (p0, z0, x0),
+ z0 = svuqadd_x (p0, z0, x0))
+
+/*
+** uqadd_x0_s64_x_untied:
+** mov (z[0-9]+\.d), x0
+** movprfx z0, z1
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_x0_s64_x_untied, svint64_t, uint64_t,
+ z0 = svuqadd_n_s64_x (p0, z1, x0),
+ z0 = svuqadd_x (p0, z1, x0))
+
+/*
+** uqadd_1_s64_x_tied1:
+** sqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s64_x_tied1, svint64_t,
+ z0 = svuqadd_n_s64_x (p0, z0, 1),
+ z0 = svuqadd_x (p0, z0, 1))
+
+/*
+** uqadd_1_s64_x_untied:
+** movprfx z0, z1
+** sqadd z0\.d, z0\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s64_x_untied, svint64_t,
+ z0 = svuqadd_n_s64_x (p0, z1, 1),
+ z0 = svuqadd_x (p0, z1, 1))
+
+/*
+** uqadd_127_s64_x:
+** sqadd z0\.d, z0\.d, #127
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s64_x, svint64_t,
+ z0 = svuqadd_n_s64_x (p0, z0, 127),
+ z0 = svuqadd_x (p0, z0, 127))
+
+/*
+** uqadd_128_s64_x:
+** sqadd z0\.d, z0\.d, #128
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s64_x, svint64_t,
+ z0 = svuqadd_n_s64_x (p0, z0, 128),
+ z0 = svuqadd_x (p0, z0, 128))
+
+/*
+** uqadd_255_s64_x:
+** sqadd z0\.d, z0\.d, #255
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s64_x, svint64_t,
+ z0 = svuqadd_n_s64_x (p0, z0, 255),
+ z0 = svuqadd_x (p0, z0, 255))
+
+/*
+** uqadd_m1_s64_x:
+** mov (z[0-9]+)\.b, #-1
+** suqadd z0\.d, p0/m, z0\.d, \1\.d
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s64_x, svint64_t,
+ z0 = svuqadd_n_s64_x (p0, z0, -1),
+ z0 = svuqadd_x (p0, z0, -1))
+
+/*
+** uqadd_m127_s64_x:
+** mov (z[0-9]+\.d), #-127
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s64_x, svint64_t,
+ z0 = svuqadd_n_s64_x (p0, z0, -127),
+ z0 = svuqadd_x (p0, z0, -127))
+
+/*
+** uqadd_m128_s64_x:
+** mov (z[0-9]+\.d), #-128
+** suqadd z0\.d, p0/m, z0\.d, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s64_x, svint64_t,
+ z0 = svuqadd_n_s64_x (p0, z0, -128),
+ z0 = svuqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** uqadd_s8_m_tied1:
+** suqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (uqadd_s8_m_tied1, svint8_t, svuint8_t,
+ z0 = svuqadd_s8_m (p0, z0, z4),
+ z0 = svuqadd_m (p0, z0, z4))
+
+/*
+** uqadd_s8_m_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** suqadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s8_m_tied2, svint8_t, svuint8_t,
+ z0_res = svuqadd_s8_m (p0, z4, z0),
+ z0_res = svuqadd_m (p0, z4, z0))
+
+/*
+** uqadd_s8_m_untied:
+** movprfx z0, z1
+** suqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (uqadd_s8_m_untied, svint8_t, svuint8_t,
+ z0 = svuqadd_s8_m (p0, z1, z4),
+ z0 = svuqadd_m (p0, z1, z4))
+
+/*
+** uqadd_w0_s8_m_tied1:
+** mov (z[0-9]+\.b), w0
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s8_m_tied1, svint8_t, uint8_t,
+ z0 = svuqadd_n_s8_m (p0, z0, x0),
+ z0 = svuqadd_m (p0, z0, x0))
+
+/*
+** uqadd_w0_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s8_m_untied, svint8_t, uint8_t,
+ z0 = svuqadd_n_s8_m (p0, z1, x0),
+ z0 = svuqadd_m (p0, z1, x0))
+
+/*
+** uqadd_1_s8_m_tied1:
+** mov (z[0-9]+\.b), #1
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s8_m_tied1, svint8_t,
+ z0 = svuqadd_n_s8_m (p0, z0, 1),
+ z0 = svuqadd_m (p0, z0, 1))
+
+/*
+** uqadd_1_s8_m_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #1
+** movprfx z0, z1
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s8_m_untied, svint8_t,
+ z0 = svuqadd_n_s8_m (p0, z1, 1),
+ z0 = svuqadd_m (p0, z1, 1))
+
+/*
+** uqadd_127_s8_m:
+** mov (z[0-9]+\.b), #127
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s8_m, svint8_t,
+ z0 = svuqadd_n_s8_m (p0, z0, 127),
+ z0 = svuqadd_m (p0, z0, 127))
+
+/*
+** uqadd_128_s8_m:
+** mov (z[0-9]+\.b), #-128
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s8_m, svint8_t,
+ z0 = svuqadd_n_s8_m (p0, z0, 128),
+ z0 = svuqadd_m (p0, z0, 128))
+
+/*
+** uqadd_255_s8_m:
+** mov (z[0-9]+\.b), #-1
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s8_m, svint8_t,
+ z0 = svuqadd_n_s8_m (p0, z0, 255),
+ z0 = svuqadd_m (p0, z0, 255))
+
+/*
+** uqadd_m1_s8_m:
+** mov (z[0-9]+\.b), #-1
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s8_m, svint8_t,
+ z0 = svuqadd_n_s8_m (p0, z0, -1),
+ z0 = svuqadd_m (p0, z0, -1))
+
+/*
+** uqadd_m127_s8_m:
+** mov (z[0-9]+\.b), #-127
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s8_m, svint8_t,
+ z0 = svuqadd_n_s8_m (p0, z0, -127),
+ z0 = svuqadd_m (p0, z0, -127))
+
+/*
+** uqadd_m128_s8_m:
+** mov (z[0-9]+\.b), #-128
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s8_m, svint8_t,
+ z0 = svuqadd_n_s8_m (p0, z0, -128),
+ z0 = svuqadd_m (p0, z0, -128))
+
+/*
+** uqadd_s8_z_tied1:
+** movprfx z0\.b, p0/z, z0\.b
+** suqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (uqadd_s8_z_tied1, svint8_t, svuint8_t,
+ z0 = svuqadd_s8_z (p0, z0, z4),
+ z0 = svuqadd_z (p0, z0, z4))
+
+/*
+** uqadd_s8_z_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0\.b, p0/z, z4\.b
+** suqadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s8_z_tied2, svint8_t, svuint8_t,
+ z0_res = svuqadd_s8_z (p0, z4, z0),
+ z0_res = svuqadd_z (p0, z4, z0))
+
+/*
+** uqadd_s8_z_untied:
+** movprfx z0\.b, p0/z, z1\.b
+** suqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (uqadd_s8_z_untied, svint8_t, svuint8_t,
+ z0 = svuqadd_s8_z (p0, z1, z4),
+ z0 = svuqadd_z (p0, z1, z4))
+
+/*
+** uqadd_w0_s8_z_tied1:
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z0\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s8_z_tied1, svint8_t, uint8_t,
+ z0 = svuqadd_n_s8_z (p0, z0, x0),
+ z0 = svuqadd_z (p0, z0, x0))
+
+/*
+** uqadd_w0_s8_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0\.b, p0/z, z1\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s8_z_untied, svint8_t, uint8_t,
+ z0 = svuqadd_n_s8_z (p0, z1, x0),
+ z0 = svuqadd_z (p0, z1, x0))
+
+/*
+** uqadd_1_s8_z_tied1:
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z0\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s8_z_tied1, svint8_t,
+ z0 = svuqadd_n_s8_z (p0, z0, 1),
+ z0 = svuqadd_z (p0, z0, 1))
+
+/*
+** uqadd_1_s8_z_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), #1
+** movprfx z0\.b, p0/z, z1\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s8_z_untied, svint8_t,
+ z0 = svuqadd_n_s8_z (p0, z1, 1),
+ z0 = svuqadd_z (p0, z1, 1))
+
+/*
+** uqadd_127_s8_z:
+** mov (z[0-9]+\.b), #127
+** movprfx z0\.b, p0/z, z0\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s8_z, svint8_t,
+ z0 = svuqadd_n_s8_z (p0, z0, 127),
+ z0 = svuqadd_z (p0, z0, 127))
+
+/*
+** uqadd_128_s8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s8_z, svint8_t,
+ z0 = svuqadd_n_s8_z (p0, z0, 128),
+ z0 = svuqadd_z (p0, z0, 128))
+
+/*
+** uqadd_255_s8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s8_z, svint8_t,
+ z0 = svuqadd_n_s8_z (p0, z0, 255),
+ z0 = svuqadd_z (p0, z0, 255))
+
+/*
+** uqadd_m1_s8_z:
+** mov (z[0-9]+\.b), #-1
+** movprfx z0\.b, p0/z, z0\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s8_z, svint8_t,
+ z0 = svuqadd_n_s8_z (p0, z0, -1),
+ z0 = svuqadd_z (p0, z0, -1))
+
+/*
+** uqadd_m127_s8_z:
+** mov (z[0-9]+\.b), #-127
+** movprfx z0\.b, p0/z, z0\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s8_z, svint8_t,
+ z0 = svuqadd_n_s8_z (p0, z0, -127),
+ z0 = svuqadd_z (p0, z0, -127))
+
+/*
+** uqadd_m128_s8_z:
+** mov (z[0-9]+\.b), #-128
+** movprfx z0\.b, p0/z, z0\.b
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s8_z, svint8_t,
+ z0 = svuqadd_n_s8_z (p0, z0, -128),
+ z0 = svuqadd_z (p0, z0, -128))
+
+/*
+** uqadd_s8_x_tied1:
+** suqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (uqadd_s8_x_tied1, svint8_t, svuint8_t,
+ z0 = svuqadd_s8_x (p0, z0, z4),
+ z0 = svuqadd_x (p0, z0, z4))
+
+/*
+** uqadd_s8_x_tied2:
+** mov (z[0-9]+)\.d, z0\.d
+** movprfx z0, z4
+** suqadd z0\.b, p0/m, z0\.b, \1\.b
+** ret
+*/
+TEST_DUAL_Z_REV (uqadd_s8_x_tied2, svint8_t, svuint8_t,
+ z0_res = svuqadd_s8_x (p0, z4, z0),
+ z0_res = svuqadd_x (p0, z4, z0))
+
+/*
+** uqadd_s8_x_untied:
+** movprfx z0, z1
+** suqadd z0\.b, p0/m, z0\.b, z4\.b
+** ret
+*/
+TEST_DUAL_Z (uqadd_s8_x_untied, svint8_t, svuint8_t,
+ z0 = svuqadd_s8_x (p0, z1, z4),
+ z0 = svuqadd_x (p0, z1, z4))
+
+/*
+** uqadd_w0_s8_x_tied1:
+** mov (z[0-9]+\.b), w0
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s8_x_tied1, svint8_t, uint8_t,
+ z0 = svuqadd_n_s8_x (p0, z0, x0),
+ z0 = svuqadd_x (p0, z0, x0))
+
+/*
+** uqadd_w0_s8_x_untied:: { xfail *-*-*}
+** mov (z[0-9]+\.b), w0
+** movprfx z0, z1
+** suqadd z0\.b, p0/m, z0\.b, \1
+** ret
+*/
+TEST_UNIFORM_ZX (uqadd_w0_s8_x_untied, svint8_t, uint8_t,
+ z0 = svuqadd_n_s8_x (p0, z1, x0),
+ z0 = svuqadd_x (p0, z1, x0))
+
+/*
+** uqadd_1_s8_x_tied1:
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s8_x_tied1, svint8_t,
+ z0 = svuqadd_n_s8_x (p0, z0, 1),
+ z0 = svuqadd_x (p0, z0, 1))
+
+/*
+** uqadd_1_s8_x_untied:
+** movprfx z0, z1
+** sqadd z0\.b, z0\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_1_s8_x_untied, svint8_t,
+ z0 = svuqadd_n_s8_x (p0, z1, 1),
+ z0 = svuqadd_x (p0, z1, 1))
+
+/*
+** uqadd_127_s8_x:
+** sqadd z0\.b, z0\.b, #127
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_127_s8_x, svint8_t,
+ z0 = svuqadd_n_s8_x (p0, z0, 127),
+ z0 = svuqadd_x (p0, z0, 127))
+
+/*
+** uqadd_128_s8_x:
+** sqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_128_s8_x, svint8_t,
+ z0 = svuqadd_n_s8_x (p0, z0, 128),
+ z0 = svuqadd_x (p0, z0, 128))
+
+/*
+** uqadd_255_s8_x:
+** sqadd z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_255_s8_x, svint8_t,
+ z0 = svuqadd_n_s8_x (p0, z0, 255),
+ z0 = svuqadd_x (p0, z0, 255))
+
+/*
+** uqadd_m1_s8_x:
+** sqadd z0\.b, z0\.b, #255
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m1_s8_x, svint8_t,
+ z0 = svuqadd_n_s8_x (p0, z0, -1),
+ z0 = svuqadd_x (p0, z0, -1))
+
+/*
+** uqadd_m127_s8_x:
+** sqadd z0\.b, z0\.b, #129
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m127_s8_x, svint8_t,
+ z0 = svuqadd_n_s8_x (p0, z0, -127),
+ z0 = svuqadd_x (p0, z0, -127))
+
+/*
+** uqadd_m128_s8_x:
+** sqadd z0\.b, z0\.b, #128
+** ret
+*/
+TEST_UNIFORM_Z (uqadd_m128_s8_x, svint8_t,
+ z0 = svuqadd_n_s8_x (p0, z0, -128),
+ z0 = svuqadd_x (p0, z0, -128))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilege_rr_b16_s32:
+** whilege p0\.h, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b16_s32, int32_t,
+ p0 = svwhilege_b16_s32 (x0, x1),
+ p0 = svwhilege_b16 (x0, x1))
+
+/*
+** whilege_0r_b16_s32:
+** whilege p0\.h, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b16_s32, int32_t,
+ p0 = svwhilege_b16_s32 (0, x1),
+ p0 = svwhilege_b16 (0, x1))
+
+/*
+** whilege_5r_b16_s32:
+** mov (w[0-9]+), #?5
+** whilege p0\.h, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b16_s32, int32_t,
+ p0 = svwhilege_b16_s32 (5, x1),
+ p0 = svwhilege_b16 (5, x1))
+
+/*
+** whilege_r0_b16_s32:
+** whilege p0\.h, w0, wzr
+** ret
+*/
+TEST_COMPARE_S (whilege_r0_b16_s32, int32_t,
+ p0 = svwhilege_b16_s32 (x0, 0),
+ p0 = svwhilege_b16 (x0, 0))
+
+/*
+** whilege_r5_b16_s32:
+** mov (w[0-9]+), #?5
+** whilege p0\.h, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b16_s32, int32_t,
+ p0 = svwhilege_b16_s32 (x0, 5),
+ p0 = svwhilege_b16 (x0, 5))
+
+/*
+** whilege_rr_b16_s64:
+** whilege p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b16_s64, int64_t,
+ p0 = svwhilege_b16_s64 (x0, x1),
+ p0 = svwhilege_b16 (x0, x1))
+
+/*
+** whilege_0r_b16_s64:
+** whilege p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b16_s64, int64_t,
+ p0 = svwhilege_b16_s64 (0, x1),
+ p0 = svwhilege_b16 ((int64_t) 0, x1))
+
+/*
+** whilege_5r_b16_s64:
+** mov (x[0-9]+), #?5
+** whilege p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b16_s64, int64_t,
+ p0 = svwhilege_b16_s64 (5, x1),
+ p0 = svwhilege_b16 ((int64_t) 5, x1))
+
+/*
+** whilege_r0_b16_s64:
+** whilege p0\.h, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilege_r0_b16_s64, int64_t,
+ p0 = svwhilege_b16_s64 (x0, 0),
+ p0 = svwhilege_b16 (x0, (int64_t) 0))
+
+/*
+** whilege_r5_b16_s64:
+** mov (x[0-9]+), #?5
+** whilege p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b16_s64, int64_t,
+ p0 = svwhilege_b16_s64 (x0, 5),
+ p0 = svwhilege_b16 (x0, (int64_t) 5))
+
+/*
+** whilege_rr_b16_u32:
+** whilehs p0\.h, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b16_u32, uint32_t,
+ p0 = svwhilege_b16_u32 (x0, x1),
+ p0 = svwhilege_b16 (x0, x1))
+
+/*
+** whilege_0r_b16_u32:
+** whilehs p0\.h, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b16_u32, uint32_t,
+ p0 = svwhilege_b16_u32 (0, x1),
+ p0 = svwhilege_b16 ((uint32_t) 0, x1))
+
+/*
+** whilege_5r_b16_u32:
+** mov (w[0-9]+), #?5
+** whilehs p0\.h, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b16_u32, uint32_t,
+ p0 = svwhilege_b16_u32 (5, x1),
+ p0 = svwhilege_b16 ((uint32_t) 5, x1))
+
+/*
+** whilege_r5_b16_u32:
+** mov (w[0-9]+), #?5
+** whilehs p0\.h, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b16_u32, uint32_t,
+ p0 = svwhilege_b16_u32 (x0, 5),
+ p0 = svwhilege_b16 (x0, (uint32_t) 5))
+
+/*
+** whilege_rr_b16_u64:
+** whilehs p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b16_u64, uint64_t,
+ p0 = svwhilege_b16_u64 (x0, x1),
+ p0 = svwhilege_b16 (x0, x1))
+
+/*
+** whilege_0r_b16_u64:
+** whilehs p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b16_u64, uint64_t,
+ p0 = svwhilege_b16_u64 (0, x1),
+ p0 = svwhilege_b16 ((uint64_t) 0, x1))
+
+/*
+** whilege_5r_b16_u64:
+** mov (x[0-9]+), #?5
+** whilehs p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b16_u64, uint64_t,
+ p0 = svwhilege_b16_u64 (5, x1),
+ p0 = svwhilege_b16 ((uint64_t) 5, x1))
+
+/*
+** whilege_r5_b16_u64:
+** mov (x[0-9]+), #?5
+** whilehs p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b16_u64, uint64_t,
+ p0 = svwhilege_b16_u64 (x0, 5),
+ p0 = svwhilege_b16 (x0, (uint64_t) 5))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilege_rr_b32_s32:
+** whilege p0\.s, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b32_s32, int32_t,
+ p0 = svwhilege_b32_s32 (x0, x1),
+ p0 = svwhilege_b32 (x0, x1))
+
+/*
+** whilege_0r_b32_s32:
+** whilege p0\.s, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b32_s32, int32_t,
+ p0 = svwhilege_b32_s32 (0, x1),
+ p0 = svwhilege_b32 (0, x1))
+
+/*
+** whilege_5r_b32_s32:
+** mov (w[0-9]+), #?5
+** whilege p0\.s, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b32_s32, int32_t,
+ p0 = svwhilege_b32_s32 (5, x1),
+ p0 = svwhilege_b32 (5, x1))
+
+/*
+** whilege_r0_b32_s32:
+** whilege p0\.s, w0, wzr
+** ret
+*/
+TEST_COMPARE_S (whilege_r0_b32_s32, int32_t,
+ p0 = svwhilege_b32_s32 (x0, 0),
+ p0 = svwhilege_b32 (x0, 0))
+
+/*
+** whilege_r5_b32_s32:
+** mov (w[0-9]+), #?5
+** whilege p0\.s, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b32_s32, int32_t,
+ p0 = svwhilege_b32_s32 (x0, 5),
+ p0 = svwhilege_b32 (x0, 5))
+
+/*
+** whilege_rr_b32_s64:
+** whilege p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b32_s64, int64_t,
+ p0 = svwhilege_b32_s64 (x0, x1),
+ p0 = svwhilege_b32 (x0, x1))
+
+/*
+** whilege_0r_b32_s64:
+** whilege p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b32_s64, int64_t,
+ p0 = svwhilege_b32_s64 (0, x1),
+ p0 = svwhilege_b32 ((int64_t) 0, x1))
+
+/*
+** whilege_5r_b32_s64:
+** mov (x[0-9]+), #?5
+** whilege p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b32_s64, int64_t,
+ p0 = svwhilege_b32_s64 (5, x1),
+ p0 = svwhilege_b32 ((int64_t) 5, x1))
+
+/*
+** whilege_r0_b32_s64:
+** whilege p0\.s, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilege_r0_b32_s64, int64_t,
+ p0 = svwhilege_b32_s64 (x0, 0),
+ p0 = svwhilege_b32 (x0, (int64_t) 0))
+
+/*
+** whilege_r5_b32_s64:
+** mov (x[0-9]+), #?5
+** whilege p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b32_s64, int64_t,
+ p0 = svwhilege_b32_s64 (x0, 5),
+ p0 = svwhilege_b32 (x0, (int64_t) 5))
+
+/*
+** whilege_rr_b32_u32:
+** whilehs p0\.s, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b32_u32, uint32_t,
+ p0 = svwhilege_b32_u32 (x0, x1),
+ p0 = svwhilege_b32 (x0, x1))
+
+/*
+** whilege_0r_b32_u32:
+** whilehs p0\.s, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b32_u32, uint32_t,
+ p0 = svwhilege_b32_u32 (0, x1),
+ p0 = svwhilege_b32 ((uint32_t) 0, x1))
+
+/*
+** whilege_5r_b32_u32:
+** mov (w[0-9]+), #?5
+** whilehs p0\.s, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b32_u32, uint32_t,
+ p0 = svwhilege_b32_u32 (5, x1),
+ p0 = svwhilege_b32 ((uint32_t) 5, x1))
+
+/*
+** whilege_r5_b32_u32:
+** mov (w[0-9]+), #?5
+** whilehs p0\.s, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b32_u32, uint32_t,
+ p0 = svwhilege_b32_u32 (x0, 5),
+ p0 = svwhilege_b32 (x0, (uint32_t) 5))
+
+/*
+** whilege_rr_b32_u64:
+** whilehs p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b32_u64, uint64_t,
+ p0 = svwhilege_b32_u64 (x0, x1),
+ p0 = svwhilege_b32 (x0, x1))
+
+/*
+** whilege_0r_b32_u64:
+** whilehs p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b32_u64, uint64_t,
+ p0 = svwhilege_b32_u64 (0, x1),
+ p0 = svwhilege_b32 ((uint64_t) 0, x1))
+
+/*
+** whilege_5r_b32_u64:
+** mov (x[0-9]+), #?5
+** whilehs p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b32_u64, uint64_t,
+ p0 = svwhilege_b32_u64 (5, x1),
+ p0 = svwhilege_b32 ((uint64_t) 5, x1))
+
+/*
+** whilege_r5_b32_u64:
+** mov (x[0-9]+), #?5
+** whilehs p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b32_u64, uint64_t,
+ p0 = svwhilege_b32_u64 (x0, 5),
+ p0 = svwhilege_b32 (x0, (uint64_t) 5))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilege_rr_b64_s32:
+** whilege p0\.d, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b64_s32, int32_t,
+ p0 = svwhilege_b64_s32 (x0, x1),
+ p0 = svwhilege_b64 (x0, x1))
+
+/*
+** whilege_0r_b64_s32:
+** whilege p0\.d, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b64_s32, int32_t,
+ p0 = svwhilege_b64_s32 (0, x1),
+ p0 = svwhilege_b64 (0, x1))
+
+/*
+** whilege_5r_b64_s32:
+** mov (w[0-9]+), #?5
+** whilege p0\.d, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b64_s32, int32_t,
+ p0 = svwhilege_b64_s32 (5, x1),
+ p0 = svwhilege_b64 (5, x1))
+
+/*
+** whilege_r0_b64_s32:
+** whilege p0\.d, w0, wzr
+** ret
+*/
+TEST_COMPARE_S (whilege_r0_b64_s32, int32_t,
+ p0 = svwhilege_b64_s32 (x0, 0),
+ p0 = svwhilege_b64 (x0, 0))
+
+/*
+** whilege_r5_b64_s32:
+** mov (w[0-9]+), #?5
+** whilege p0\.d, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b64_s32, int32_t,
+ p0 = svwhilege_b64_s32 (x0, 5),
+ p0 = svwhilege_b64 (x0, 5))
+
+/*
+** whilege_rr_b64_s64:
+** whilege p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b64_s64, int64_t,
+ p0 = svwhilege_b64_s64 (x0, x1),
+ p0 = svwhilege_b64 (x0, x1))
+
+/*
+** whilege_0r_b64_s64:
+** whilege p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b64_s64, int64_t,
+ p0 = svwhilege_b64_s64 (0, x1),
+ p0 = svwhilege_b64 ((int64_t) 0, x1))
+
+/*
+** whilege_5r_b64_s64:
+** mov (x[0-9]+), #?5
+** whilege p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b64_s64, int64_t,
+ p0 = svwhilege_b64_s64 (5, x1),
+ p0 = svwhilege_b64 ((int64_t) 5, x1))
+
+/*
+** whilege_r0_b64_s64:
+** whilege p0\.d, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilege_r0_b64_s64, int64_t,
+ p0 = svwhilege_b64_s64 (x0, 0),
+ p0 = svwhilege_b64 (x0, (int64_t) 0))
+
+/*
+** whilege_r5_b64_s64:
+** mov (x[0-9]+), #?5
+** whilege p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b64_s64, int64_t,
+ p0 = svwhilege_b64_s64 (x0, 5),
+ p0 = svwhilege_b64 (x0, (int64_t) 5))
+
+/*
+** whilege_rr_b64_u32:
+** whilehs p0\.d, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b64_u32, uint32_t,
+ p0 = svwhilege_b64_u32 (x0, x1),
+ p0 = svwhilege_b64 (x0, x1))
+
+/*
+** whilege_0r_b64_u32:
+** whilehs p0\.d, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b64_u32, uint32_t,
+ p0 = svwhilege_b64_u32 (0, x1),
+ p0 = svwhilege_b64 ((uint32_t) 0, x1))
+
+/*
+** whilege_5r_b64_u32:
+** mov (w[0-9]+), #?5
+** whilehs p0\.d, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b64_u32, uint32_t,
+ p0 = svwhilege_b64_u32 (5, x1),
+ p0 = svwhilege_b64 ((uint32_t) 5, x1))
+
+/*
+** whilege_r5_b64_u32:
+** mov (w[0-9]+), #?5
+** whilehs p0\.d, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b64_u32, uint32_t,
+ p0 = svwhilege_b64_u32 (x0, 5),
+ p0 = svwhilege_b64 (x0, (uint32_t) 5))
+
+/*
+** whilege_rr_b64_u64:
+** whilehs p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b64_u64, uint64_t,
+ p0 = svwhilege_b64_u64 (x0, x1),
+ p0 = svwhilege_b64 (x0, x1))
+
+/*
+** whilege_0r_b64_u64:
+** whilehs p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b64_u64, uint64_t,
+ p0 = svwhilege_b64_u64 (0, x1),
+ p0 = svwhilege_b64 ((uint64_t) 0, x1))
+
+/*
+** whilege_5r_b64_u64:
+** mov (x[0-9]+), #?5
+** whilehs p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b64_u64, uint64_t,
+ p0 = svwhilege_b64_u64 (5, x1),
+ p0 = svwhilege_b64 ((uint64_t) 5, x1))
+
+/*
+** whilege_r5_b64_u64:
+** mov (x[0-9]+), #?5
+** whilehs p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b64_u64, uint64_t,
+ p0 = svwhilege_b64_u64 (x0, 5),
+ p0 = svwhilege_b64 (x0, (uint64_t) 5))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilege_rr_b8_s32:
+** whilege p0\.b, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b8_s32, int32_t,
+ p0 = svwhilege_b8_s32 (x0, x1),
+ p0 = svwhilege_b8 (x0, x1))
+
+/*
+** whilege_0r_b8_s32:
+** whilege p0\.b, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b8_s32, int32_t,
+ p0 = svwhilege_b8_s32 (0, x1),
+ p0 = svwhilege_b8 (0, x1))
+
+/*
+** whilege_5r_b8_s32:
+** mov (w[0-9]+), #?5
+** whilege p0\.b, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b8_s32, int32_t,
+ p0 = svwhilege_b8_s32 (5, x1),
+ p0 = svwhilege_b8 (5, x1))
+
+/*
+** whilege_r0_b8_s32:
+** whilege p0\.b, w0, wzr
+** ret
+*/
+TEST_COMPARE_S (whilege_r0_b8_s32, int32_t,
+ p0 = svwhilege_b8_s32 (x0, 0),
+ p0 = svwhilege_b8 (x0, 0))
+
+/*
+** whilege_r5_b8_s32:
+** mov (w[0-9]+), #?5
+** whilege p0\.b, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b8_s32, int32_t,
+ p0 = svwhilege_b8_s32 (x0, 5),
+ p0 = svwhilege_b8 (x0, 5))
+
+/*
+** whilege_rr_b8_s64:
+** whilege p0\.b, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b8_s64, int64_t,
+ p0 = svwhilege_b8_s64 (x0, x1),
+ p0 = svwhilege_b8 (x0, x1))
+
+/*
+** whilege_0r_b8_s64:
+** whilege p0\.b, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b8_s64, int64_t,
+ p0 = svwhilege_b8_s64 (0, x1),
+ p0 = svwhilege_b8 ((int64_t) 0, x1))
+
+/*
+** whilege_5r_b8_s64:
+** mov (x[0-9]+), #?5
+** whilege p0\.b, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b8_s64, int64_t,
+ p0 = svwhilege_b8_s64 (5, x1),
+ p0 = svwhilege_b8 ((int64_t) 5, x1))
+
+/*
+** whilege_r0_b8_s64:
+** whilege p0\.b, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilege_r0_b8_s64, int64_t,
+ p0 = svwhilege_b8_s64 (x0, 0),
+ p0 = svwhilege_b8 (x0, (int64_t) 0))
+
+/*
+** whilege_r5_b8_s64:
+** mov (x[0-9]+), #?5
+** whilege p0\.b, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b8_s64, int64_t,
+ p0 = svwhilege_b8_s64 (x0, 5),
+ p0 = svwhilege_b8 (x0, (int64_t) 5))
+
+/*
+** whilege_rr_b8_u32:
+** whilehs p0\.b, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b8_u32, uint32_t,
+ p0 = svwhilege_b8_u32 (x0, x1),
+ p0 = svwhilege_b8 (x0, x1))
+
+/*
+** whilege_0r_b8_u32:
+** whilehs p0\.b, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b8_u32, uint32_t,
+ p0 = svwhilege_b8_u32 (0, x1),
+ p0 = svwhilege_b8 ((uint32_t) 0, x1))
+
+/*
+** whilege_5r_b8_u32:
+** mov (w[0-9]+), #?5
+** whilehs p0\.b, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b8_u32, uint32_t,
+ p0 = svwhilege_b8_u32 (5, x1),
+ p0 = svwhilege_b8 ((uint32_t) 5, x1))
+
+/*
+** whilege_r5_b8_u32:
+** mov (w[0-9]+), #?5
+** whilehs p0\.b, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b8_u32, uint32_t,
+ p0 = svwhilege_b8_u32 (x0, 5),
+ p0 = svwhilege_b8 (x0, (uint32_t) 5))
+
+/*
+** whilege_rr_b8_u64:
+** whilehs p0\.b, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_rr_b8_u64, uint64_t,
+ p0 = svwhilege_b8_u64 (x0, x1),
+ p0 = svwhilege_b8 (x0, x1))
+
+/*
+** whilege_0r_b8_u64:
+** whilehs p0\.b, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_0r_b8_u64, uint64_t,
+ p0 = svwhilege_b8_u64 (0, x1),
+ p0 = svwhilege_b8 ((uint64_t) 0, x1))
+
+/*
+** whilege_5r_b8_u64:
+** mov (x[0-9]+), #?5
+** whilehs p0\.b, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilege_5r_b8_u64, uint64_t,
+ p0 = svwhilege_b8_u64 (5, x1),
+ p0 = svwhilege_b8 ((uint64_t) 5, x1))
+
+/*
+** whilege_r5_b8_u64:
+** mov (x[0-9]+), #?5
+** whilehs p0\.b, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilege_r5_b8_u64, uint64_t,
+ p0 = svwhilege_b8_u64 (x0, 5),
+ p0 = svwhilege_b8 (x0, (uint64_t) 5))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilegt_rr_b16_s32:
+** whilegt p0\.h, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b16_s32, int32_t,
+ p0 = svwhilegt_b16_s32 (x0, x1),
+ p0 = svwhilegt_b16 (x0, x1))
+
+/*
+** whilegt_0r_b16_s32:
+** whilegt p0\.h, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b16_s32, int32_t,
+ p0 = svwhilegt_b16_s32 (0, x1),
+ p0 = svwhilegt_b16 (0, x1))
+
+/*
+** whilegt_5r_b16_s32:
+** mov (w[0-9]+), #?5
+** whilegt p0\.h, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b16_s32, int32_t,
+ p0 = svwhilegt_b16_s32 (5, x1),
+ p0 = svwhilegt_b16 (5, x1))
+
+/*
+** whilegt_r0_b16_s32:
+** whilegt p0\.h, w0, wzr
+** ret
+*/
+TEST_COMPARE_S (whilegt_r0_b16_s32, int32_t,
+ p0 = svwhilegt_b16_s32 (x0, 0),
+ p0 = svwhilegt_b16 (x0, 0))
+
+/*
+** whilegt_r5_b16_s32:
+** mov (w[0-9]+), #?5
+** whilegt p0\.h, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b16_s32, int32_t,
+ p0 = svwhilegt_b16_s32 (x0, 5),
+ p0 = svwhilegt_b16 (x0, 5))
+
+/*
+** whilegt_rr_b16_s64:
+** whilegt p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b16_s64, int64_t,
+ p0 = svwhilegt_b16_s64 (x0, x1),
+ p0 = svwhilegt_b16 (x0, x1))
+
+/*
+** whilegt_0r_b16_s64:
+** whilegt p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b16_s64, int64_t,
+ p0 = svwhilegt_b16_s64 (0, x1),
+ p0 = svwhilegt_b16 ((int64_t) 0, x1))
+
+/*
+** whilegt_5r_b16_s64:
+** mov (x[0-9]+), #?5
+** whilegt p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b16_s64, int64_t,
+ p0 = svwhilegt_b16_s64 (5, x1),
+ p0 = svwhilegt_b16 ((int64_t) 5, x1))
+
+/*
+** whilegt_r0_b16_s64:
+** whilegt p0\.h, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilegt_r0_b16_s64, int64_t,
+ p0 = svwhilegt_b16_s64 (x0, 0),
+ p0 = svwhilegt_b16 (x0, (int64_t) 0))
+
+/*
+** whilegt_r5_b16_s64:
+** mov (x[0-9]+), #?5
+** whilegt p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b16_s64, int64_t,
+ p0 = svwhilegt_b16_s64 (x0, 5),
+ p0 = svwhilegt_b16 (x0, (int64_t) 5))
+
+/*
+** whilegt_rr_b16_u32:
+** whilehi p0\.h, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b16_u32, uint32_t,
+ p0 = svwhilegt_b16_u32 (x0, x1),
+ p0 = svwhilegt_b16 (x0, x1))
+
+/*
+** whilegt_0r_b16_u32:
+** whilehi p0\.h, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b16_u32, uint32_t,
+ p0 = svwhilegt_b16_u32 (0, x1),
+ p0 = svwhilegt_b16 ((uint32_t) 0, x1))
+
+/*
+** whilegt_5r_b16_u32:
+** mov (w[0-9]+), #?5
+** whilehi p0\.h, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b16_u32, uint32_t,
+ p0 = svwhilegt_b16_u32 (5, x1),
+ p0 = svwhilegt_b16 ((uint32_t) 5, x1))
+
+/*
+** whilegt_r5_b16_u32:
+** mov (w[0-9]+), #?5
+** whilehi p0\.h, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b16_u32, uint32_t,
+ p0 = svwhilegt_b16_u32 (x0, 5),
+ p0 = svwhilegt_b16 (x0, (uint32_t) 5))
+
+/*
+** whilegt_rr_b16_u64:
+** whilehi p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b16_u64, uint64_t,
+ p0 = svwhilegt_b16_u64 (x0, x1),
+ p0 = svwhilegt_b16 (x0, x1))
+
+/*
+** whilegt_0r_b16_u64:
+** whilehi p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b16_u64, uint64_t,
+ p0 = svwhilegt_b16_u64 (0, x1),
+ p0 = svwhilegt_b16 ((uint64_t) 0, x1))
+
+/*
+** whilegt_5r_b16_u64:
+** mov (x[0-9]+), #?5
+** whilehi p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b16_u64, uint64_t,
+ p0 = svwhilegt_b16_u64 (5, x1),
+ p0 = svwhilegt_b16 ((uint64_t) 5, x1))
+
+/*
+** whilegt_r5_b16_u64:
+** mov (x[0-9]+), #?5
+** whilehi p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b16_u64, uint64_t,
+ p0 = svwhilegt_b16_u64 (x0, 5),
+ p0 = svwhilegt_b16 (x0, (uint64_t) 5))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilegt_rr_b32_s32:
+** whilegt p0\.s, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b32_s32, int32_t,
+ p0 = svwhilegt_b32_s32 (x0, x1),
+ p0 = svwhilegt_b32 (x0, x1))
+
+/*
+** whilegt_0r_b32_s32:
+** whilegt p0\.s, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b32_s32, int32_t,
+ p0 = svwhilegt_b32_s32 (0, x1),
+ p0 = svwhilegt_b32 (0, x1))
+
+/*
+** whilegt_5r_b32_s32:
+** mov (w[0-9]+), #?5
+** whilegt p0\.s, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b32_s32, int32_t,
+ p0 = svwhilegt_b32_s32 (5, x1),
+ p0 = svwhilegt_b32 (5, x1))
+
+/*
+** whilegt_r0_b32_s32:
+** whilegt p0\.s, w0, wzr
+** ret
+*/
+TEST_COMPARE_S (whilegt_r0_b32_s32, int32_t,
+ p0 = svwhilegt_b32_s32 (x0, 0),
+ p0 = svwhilegt_b32 (x0, 0))
+
+/*
+** whilegt_r5_b32_s32:
+** mov (w[0-9]+), #?5
+** whilegt p0\.s, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b32_s32, int32_t,
+ p0 = svwhilegt_b32_s32 (x0, 5),
+ p0 = svwhilegt_b32 (x0, 5))
+
+/*
+** whilegt_rr_b32_s64:
+** whilegt p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b32_s64, int64_t,
+ p0 = svwhilegt_b32_s64 (x0, x1),
+ p0 = svwhilegt_b32 (x0, x1))
+
+/*
+** whilegt_0r_b32_s64:
+** whilegt p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b32_s64, int64_t,
+ p0 = svwhilegt_b32_s64 (0, x1),
+ p0 = svwhilegt_b32 ((int64_t) 0, x1))
+
+/*
+** whilegt_5r_b32_s64:
+** mov (x[0-9]+), #?5
+** whilegt p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b32_s64, int64_t,
+ p0 = svwhilegt_b32_s64 (5, x1),
+ p0 = svwhilegt_b32 ((int64_t) 5, x1))
+
+/*
+** whilegt_r0_b32_s64:
+** whilegt p0\.s, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilegt_r0_b32_s64, int64_t,
+ p0 = svwhilegt_b32_s64 (x0, 0),
+ p0 = svwhilegt_b32 (x0, (int64_t) 0))
+
+/*
+** whilegt_r5_b32_s64:
+** mov (x[0-9]+), #?5
+** whilegt p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b32_s64, int64_t,
+ p0 = svwhilegt_b32_s64 (x0, 5),
+ p0 = svwhilegt_b32 (x0, (int64_t) 5))
+
+/*
+** whilegt_rr_b32_u32:
+** whilehi p0\.s, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b32_u32, uint32_t,
+ p0 = svwhilegt_b32_u32 (x0, x1),
+ p0 = svwhilegt_b32 (x0, x1))
+
+/*
+** whilegt_0r_b32_u32:
+** whilehi p0\.s, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b32_u32, uint32_t,
+ p0 = svwhilegt_b32_u32 (0, x1),
+ p0 = svwhilegt_b32 ((uint32_t) 0, x1))
+
+/*
+** whilegt_5r_b32_u32:
+** mov (w[0-9]+), #?5
+** whilehi p0\.s, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b32_u32, uint32_t,
+ p0 = svwhilegt_b32_u32 (5, x1),
+ p0 = svwhilegt_b32 ((uint32_t) 5, x1))
+
+/*
+** whilegt_r5_b32_u32:
+** mov (w[0-9]+), #?5
+** whilehi p0\.s, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b32_u32, uint32_t,
+ p0 = svwhilegt_b32_u32 (x0, 5),
+ p0 = svwhilegt_b32 (x0, (uint32_t) 5))
+
+/*
+** whilegt_rr_b32_u64:
+** whilehi p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b32_u64, uint64_t,
+ p0 = svwhilegt_b32_u64 (x0, x1),
+ p0 = svwhilegt_b32 (x0, x1))
+
+/*
+** whilegt_0r_b32_u64:
+** whilehi p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b32_u64, uint64_t,
+ p0 = svwhilegt_b32_u64 (0, x1),
+ p0 = svwhilegt_b32 ((uint64_t) 0, x1))
+
+/*
+** whilegt_5r_b32_u64:
+** mov (x[0-9]+), #?5
+** whilehi p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b32_u64, uint64_t,
+ p0 = svwhilegt_b32_u64 (5, x1),
+ p0 = svwhilegt_b32 ((uint64_t) 5, x1))
+
+/*
+** whilegt_r5_b32_u64:
+** mov (x[0-9]+), #?5
+** whilehi p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b32_u64, uint64_t,
+ p0 = svwhilegt_b32_u64 (x0, 5),
+ p0 = svwhilegt_b32 (x0, (uint64_t) 5))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilegt_rr_b64_s32:
+** whilegt p0\.d, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b64_s32, int32_t,
+ p0 = svwhilegt_b64_s32 (x0, x1),
+ p0 = svwhilegt_b64 (x0, x1))
+
+/*
+** whilegt_0r_b64_s32:
+** whilegt p0\.d, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b64_s32, int32_t,
+ p0 = svwhilegt_b64_s32 (0, x1),
+ p0 = svwhilegt_b64 (0, x1))
+
+/*
+** whilegt_5r_b64_s32:
+** mov (w[0-9]+), #?5
+** whilegt p0\.d, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b64_s32, int32_t,
+ p0 = svwhilegt_b64_s32 (5, x1),
+ p0 = svwhilegt_b64 (5, x1))
+
+/*
+** whilegt_r0_b64_s32:
+** whilegt p0\.d, w0, wzr
+** ret
+*/
+TEST_COMPARE_S (whilegt_r0_b64_s32, int32_t,
+ p0 = svwhilegt_b64_s32 (x0, 0),
+ p0 = svwhilegt_b64 (x0, 0))
+
+/*
+** whilegt_r5_b64_s32:
+** mov (w[0-9]+), #?5
+** whilegt p0\.d, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b64_s32, int32_t,
+ p0 = svwhilegt_b64_s32 (x0, 5),
+ p0 = svwhilegt_b64 (x0, 5))
+
+/*
+** whilegt_rr_b64_s64:
+** whilegt p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b64_s64, int64_t,
+ p0 = svwhilegt_b64_s64 (x0, x1),
+ p0 = svwhilegt_b64 (x0, x1))
+
+/*
+** whilegt_0r_b64_s64:
+** whilegt p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b64_s64, int64_t,
+ p0 = svwhilegt_b64_s64 (0, x1),
+ p0 = svwhilegt_b64 ((int64_t) 0, x1))
+
+/*
+** whilegt_5r_b64_s64:
+** mov (x[0-9]+), #?5
+** whilegt p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b64_s64, int64_t,
+ p0 = svwhilegt_b64_s64 (5, x1),
+ p0 = svwhilegt_b64 ((int64_t) 5, x1))
+
+/*
+** whilegt_r0_b64_s64:
+** whilegt p0\.d, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilegt_r0_b64_s64, int64_t,
+ p0 = svwhilegt_b64_s64 (x0, 0),
+ p0 = svwhilegt_b64 (x0, (int64_t) 0))
+
+/*
+** whilegt_r5_b64_s64:
+** mov (x[0-9]+), #?5
+** whilegt p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b64_s64, int64_t,
+ p0 = svwhilegt_b64_s64 (x0, 5),
+ p0 = svwhilegt_b64 (x0, (int64_t) 5))
+
+/*
+** whilegt_rr_b64_u32:
+** whilehi p0\.d, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b64_u32, uint32_t,
+ p0 = svwhilegt_b64_u32 (x0, x1),
+ p0 = svwhilegt_b64 (x0, x1))
+
+/*
+** whilegt_0r_b64_u32:
+** whilehi p0\.d, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b64_u32, uint32_t,
+ p0 = svwhilegt_b64_u32 (0, x1),
+ p0 = svwhilegt_b64 ((uint32_t) 0, x1))
+
+/*
+** whilegt_5r_b64_u32:
+** mov (w[0-9]+), #?5
+** whilehi p0\.d, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b64_u32, uint32_t,
+ p0 = svwhilegt_b64_u32 (5, x1),
+ p0 = svwhilegt_b64 ((uint32_t) 5, x1))
+
+/*
+** whilegt_r5_b64_u32:
+** mov (w[0-9]+), #?5
+** whilehi p0\.d, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b64_u32, uint32_t,
+ p0 = svwhilegt_b64_u32 (x0, 5),
+ p0 = svwhilegt_b64 (x0, (uint32_t) 5))
+
+/*
+** whilegt_rr_b64_u64:
+** whilehi p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b64_u64, uint64_t,
+ p0 = svwhilegt_b64_u64 (x0, x1),
+ p0 = svwhilegt_b64 (x0, x1))
+
+/*
+** whilegt_0r_b64_u64:
+** whilehi p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b64_u64, uint64_t,
+ p0 = svwhilegt_b64_u64 (0, x1),
+ p0 = svwhilegt_b64 ((uint64_t) 0, x1))
+
+/*
+** whilegt_5r_b64_u64:
+** mov (x[0-9]+), #?5
+** whilehi p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b64_u64, uint64_t,
+ p0 = svwhilegt_b64_u64 (5, x1),
+ p0 = svwhilegt_b64 ((uint64_t) 5, x1))
+
+/*
+** whilegt_r5_b64_u64:
+** mov (x[0-9]+), #?5
+** whilehi p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b64_u64, uint64_t,
+ p0 = svwhilegt_b64_u64 (x0, 5),
+ p0 = svwhilegt_b64 (x0, (uint64_t) 5))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilegt_rr_b8_s32:
+** whilegt p0\.b, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b8_s32, int32_t,
+ p0 = svwhilegt_b8_s32 (x0, x1),
+ p0 = svwhilegt_b8 (x0, x1))
+
+/*
+** whilegt_0r_b8_s32:
+** whilegt p0\.b, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b8_s32, int32_t,
+ p0 = svwhilegt_b8_s32 (0, x1),
+ p0 = svwhilegt_b8 (0, x1))
+
+/*
+** whilegt_5r_b8_s32:
+** mov (w[0-9]+), #?5
+** whilegt p0\.b, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b8_s32, int32_t,
+ p0 = svwhilegt_b8_s32 (5, x1),
+ p0 = svwhilegt_b8 (5, x1))
+
+/*
+** whilegt_r0_b8_s32:
+** whilegt p0\.b, w0, wzr
+** ret
+*/
+TEST_COMPARE_S (whilegt_r0_b8_s32, int32_t,
+ p0 = svwhilegt_b8_s32 (x0, 0),
+ p0 = svwhilegt_b8 (x0, 0))
+
+/*
+** whilegt_r5_b8_s32:
+** mov (w[0-9]+), #?5
+** whilegt p0\.b, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b8_s32, int32_t,
+ p0 = svwhilegt_b8_s32 (x0, 5),
+ p0 = svwhilegt_b8 (x0, 5))
+
+/*
+** whilegt_rr_b8_s64:
+** whilegt p0\.b, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b8_s64, int64_t,
+ p0 = svwhilegt_b8_s64 (x0, x1),
+ p0 = svwhilegt_b8 (x0, x1))
+
+/*
+** whilegt_0r_b8_s64:
+** whilegt p0\.b, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b8_s64, int64_t,
+ p0 = svwhilegt_b8_s64 (0, x1),
+ p0 = svwhilegt_b8 ((int64_t) 0, x1))
+
+/*
+** whilegt_5r_b8_s64:
+** mov (x[0-9]+), #?5
+** whilegt p0\.b, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b8_s64, int64_t,
+ p0 = svwhilegt_b8_s64 (5, x1),
+ p0 = svwhilegt_b8 ((int64_t) 5, x1))
+
+/*
+** whilegt_r0_b8_s64:
+** whilegt p0\.b, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilegt_r0_b8_s64, int64_t,
+ p0 = svwhilegt_b8_s64 (x0, 0),
+ p0 = svwhilegt_b8 (x0, (int64_t) 0))
+
+/*
+** whilegt_r5_b8_s64:
+** mov (x[0-9]+), #?5
+** whilegt p0\.b, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b8_s64, int64_t,
+ p0 = svwhilegt_b8_s64 (x0, 5),
+ p0 = svwhilegt_b8 (x0, (int64_t) 5))
+
+/*
+** whilegt_rr_b8_u32:
+** whilehi p0\.b, w0, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b8_u32, uint32_t,
+ p0 = svwhilegt_b8_u32 (x0, x1),
+ p0 = svwhilegt_b8 (x0, x1))
+
+/*
+** whilegt_0r_b8_u32:
+** whilehi p0\.b, wzr, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b8_u32, uint32_t,
+ p0 = svwhilegt_b8_u32 (0, x1),
+ p0 = svwhilegt_b8 ((uint32_t) 0, x1))
+
+/*
+** whilegt_5r_b8_u32:
+** mov (w[0-9]+), #?5
+** whilehi p0\.b, \1, w1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b8_u32, uint32_t,
+ p0 = svwhilegt_b8_u32 (5, x1),
+ p0 = svwhilegt_b8 ((uint32_t) 5, x1))
+
+/*
+** whilegt_r5_b8_u32:
+** mov (w[0-9]+), #?5
+** whilehi p0\.b, w0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b8_u32, uint32_t,
+ p0 = svwhilegt_b8_u32 (x0, 5),
+ p0 = svwhilegt_b8 (x0, (uint32_t) 5))
+
+/*
+** whilegt_rr_b8_u64:
+** whilehi p0\.b, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_rr_b8_u64, uint64_t,
+ p0 = svwhilegt_b8_u64 (x0, x1),
+ p0 = svwhilegt_b8 (x0, x1))
+
+/*
+** whilegt_0r_b8_u64:
+** whilehi p0\.b, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_0r_b8_u64, uint64_t,
+ p0 = svwhilegt_b8_u64 (0, x1),
+ p0 = svwhilegt_b8 ((uint64_t) 0, x1))
+
+/*
+** whilegt_5r_b8_u64:
+** mov (x[0-9]+), #?5
+** whilehi p0\.b, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilegt_5r_b8_u64, uint64_t,
+ p0 = svwhilegt_b8_u64 (5, x1),
+ p0 = svwhilegt_b8 ((uint64_t) 5, x1))
+
+/*
+** whilegt_r5_b8_u64:
+** mov (x[0-9]+), #?5
+** whilehi p0\.b, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilegt_r5_b8_u64, uint64_t,
+ p0 = svwhilegt_b8_u64 (x0, 5),
+ p0 = svwhilegt_b8 (x0, (uint64_t) 5))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_f16:
+** whilerw p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_f16, const float16_t *,
+ p0 = svwhilerw_f16 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_f16:
+** whilerw p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_f16, const float16_t *,
+ p0 = svwhilerw_f16 ((const float16_t *) 0, x1),
+ p0 = svwhilerw ((const float16_t *) 0, x1))
+
+/*
+** whilerw_cr_f16:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_f16, const float16_t *,
+ p0 = svwhilerw_f16 ((const float16_t *) 1073741824, x1),
+ p0 = svwhilerw ((const float16_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_f16:
+** whilerw p0\.h, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_f16, const float16_t *,
+ p0 = svwhilerw_f16 (x0, (const float16_t *) 0),
+ p0 = svwhilerw (x0, (const float16_t *) 0))
+
+/*
+** whilerw_rc_f16:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_f16, const float16_t *,
+ p0 = svwhilerw_f16 (x0, (const float16_t *) 1073741824),
+ p0 = svwhilerw (x0, (const float16_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_f32:
+** whilerw p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_f32, const float32_t *,
+ p0 = svwhilerw_f32 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_f32:
+** whilerw p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_f32, const float32_t *,
+ p0 = svwhilerw_f32 ((const float32_t *) 0, x1),
+ p0 = svwhilerw ((const float32_t *) 0, x1))
+
+/*
+** whilerw_cr_f32:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_f32, const float32_t *,
+ p0 = svwhilerw_f32 ((const float32_t *) 1073741824, x1),
+ p0 = svwhilerw ((const float32_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_f32:
+** whilerw p0\.s, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_f32, const float32_t *,
+ p0 = svwhilerw_f32 (x0, (const float32_t *) 0),
+ p0 = svwhilerw (x0, (const float32_t *) 0))
+
+/*
+** whilerw_rc_f32:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_f32, const float32_t *,
+ p0 = svwhilerw_f32 (x0, (const float32_t *) 1073741824),
+ p0 = svwhilerw (x0, (const float32_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_f64:
+** whilerw p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_f64, const float64_t *,
+ p0 = svwhilerw_f64 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_f64:
+** whilerw p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_f64, const float64_t *,
+ p0 = svwhilerw_f64 ((const float64_t *) 0, x1),
+ p0 = svwhilerw ((const float64_t *) 0, x1))
+
+/*
+** whilerw_cr_f64:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_f64, const float64_t *,
+ p0 = svwhilerw_f64 ((const float64_t *) 1073741824, x1),
+ p0 = svwhilerw ((const float64_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_f64:
+** whilerw p0\.d, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_f64, const float64_t *,
+ p0 = svwhilerw_f64 (x0, (const float64_t *) 0),
+ p0 = svwhilerw (x0, (const float64_t *) 0))
+
+/*
+** whilerw_rc_f64:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_f64, const float64_t *,
+ p0 = svwhilerw_f64 (x0, (const float64_t *) 1073741824),
+ p0 = svwhilerw (x0, (const float64_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_s16:
+** whilerw p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_s16, const int16_t *,
+ p0 = svwhilerw_s16 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_s16:
+** whilerw p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_s16, const int16_t *,
+ p0 = svwhilerw_s16 ((const int16_t *) 0, x1),
+ p0 = svwhilerw ((const int16_t *) 0, x1))
+
+/*
+** whilerw_cr_s16:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_s16, const int16_t *,
+ p0 = svwhilerw_s16 ((const int16_t *) 1073741824, x1),
+ p0 = svwhilerw ((const int16_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_s16:
+** whilerw p0\.h, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_s16, const int16_t *,
+ p0 = svwhilerw_s16 (x0, (const int16_t *) 0),
+ p0 = svwhilerw (x0, (const int16_t *) 0))
+
+/*
+** whilerw_rc_s16:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_s16, const int16_t *,
+ p0 = svwhilerw_s16 (x0, (const int16_t *) 1073741824),
+ p0 = svwhilerw (x0, (const int16_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_s32:
+** whilerw p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_s32, const int32_t *,
+ p0 = svwhilerw_s32 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_s32:
+** whilerw p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_s32, const int32_t *,
+ p0 = svwhilerw_s32 ((const int32_t *) 0, x1),
+ p0 = svwhilerw ((const int32_t *) 0, x1))
+
+/*
+** whilerw_cr_s32:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_s32, const int32_t *,
+ p0 = svwhilerw_s32 ((const int32_t *) 1073741824, x1),
+ p0 = svwhilerw ((const int32_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_s32:
+** whilerw p0\.s, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_s32, const int32_t *,
+ p0 = svwhilerw_s32 (x0, (const int32_t *) 0),
+ p0 = svwhilerw (x0, (const int32_t *) 0))
+
+/*
+** whilerw_rc_s32:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_s32, const int32_t *,
+ p0 = svwhilerw_s32 (x0, (const int32_t *) 1073741824),
+ p0 = svwhilerw (x0, (const int32_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_s64:
+** whilerw p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_s64, const int64_t *,
+ p0 = svwhilerw_s64 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_s64:
+** whilerw p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_s64, const int64_t *,
+ p0 = svwhilerw_s64 ((const int64_t *) 0, x1),
+ p0 = svwhilerw ((const int64_t *) 0, x1))
+
+/*
+** whilerw_cr_s64:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_s64, const int64_t *,
+ p0 = svwhilerw_s64 ((const int64_t *) 1073741824, x1),
+ p0 = svwhilerw ((const int64_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_s64:
+** whilerw p0\.d, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_s64, const int64_t *,
+ p0 = svwhilerw_s64 (x0, (const int64_t *) 0),
+ p0 = svwhilerw (x0, (const int64_t *) 0))
+
+/*
+** whilerw_rc_s64:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_s64, const int64_t *,
+ p0 = svwhilerw_s64 (x0, (const int64_t *) 1073741824),
+ p0 = svwhilerw (x0, (const int64_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_s8:
+** whilerw p0\.b, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_s8, const int8_t *,
+ p0 = svwhilerw_s8 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_s8:
+** whilerw p0\.b, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_s8, const int8_t *,
+ p0 = svwhilerw_s8 ((const int8_t *) 0, x1),
+ p0 = svwhilerw ((const int8_t *) 0, x1))
+
+/*
+** whilerw_cr_s8:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.b, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_s8, const int8_t *,
+ p0 = svwhilerw_s8 ((const int8_t *) 1073741824, x1),
+ p0 = svwhilerw ((const int8_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_s8:
+** whilerw p0\.b, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_s8, const int8_t *,
+ p0 = svwhilerw_s8 (x0, (const int8_t *) 0),
+ p0 = svwhilerw (x0, (const int8_t *) 0))
+
+/*
+** whilerw_rc_s8:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.b, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_s8, const int8_t *,
+ p0 = svwhilerw_s8 (x0, (const int8_t *) 1073741824),
+ p0 = svwhilerw (x0, (const int8_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_u16:
+** whilerw p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_u16, const uint16_t *,
+ p0 = svwhilerw_u16 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_u16:
+** whilerw p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_u16, const uint16_t *,
+ p0 = svwhilerw_u16 ((const uint16_t *) 0, x1),
+ p0 = svwhilerw ((const uint16_t *) 0, x1))
+
+/*
+** whilerw_cr_u16:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_u16, const uint16_t *,
+ p0 = svwhilerw_u16 ((const uint16_t *) 1073741824, x1),
+ p0 = svwhilerw ((const uint16_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_u16:
+** whilerw p0\.h, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_u16, const uint16_t *,
+ p0 = svwhilerw_u16 (x0, (const uint16_t *) 0),
+ p0 = svwhilerw (x0, (const uint16_t *) 0))
+
+/*
+** whilerw_rc_u16:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_u16, const uint16_t *,
+ p0 = svwhilerw_u16 (x0, (const uint16_t *) 1073741824),
+ p0 = svwhilerw (x0, (const uint16_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_u32:
+** whilerw p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_u32, const uint32_t *,
+ p0 = svwhilerw_u32 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_u32:
+** whilerw p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_u32, const uint32_t *,
+ p0 = svwhilerw_u32 ((const uint32_t *) 0, x1),
+ p0 = svwhilerw ((const uint32_t *) 0, x1))
+
+/*
+** whilerw_cr_u32:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_u32, const uint32_t *,
+ p0 = svwhilerw_u32 ((const uint32_t *) 1073741824, x1),
+ p0 = svwhilerw ((const uint32_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_u32:
+** whilerw p0\.s, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_u32, const uint32_t *,
+ p0 = svwhilerw_u32 (x0, (const uint32_t *) 0),
+ p0 = svwhilerw (x0, (const uint32_t *) 0))
+
+/*
+** whilerw_rc_u32:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_u32, const uint32_t *,
+ p0 = svwhilerw_u32 (x0, (const uint32_t *) 1073741824),
+ p0 = svwhilerw (x0, (const uint32_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_u64:
+** whilerw p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_u64, const uint64_t *,
+ p0 = svwhilerw_u64 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_u64:
+** whilerw p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_u64, const uint64_t *,
+ p0 = svwhilerw_u64 ((const uint64_t *) 0, x1),
+ p0 = svwhilerw ((const uint64_t *) 0, x1))
+
+/*
+** whilerw_cr_u64:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_u64, const uint64_t *,
+ p0 = svwhilerw_u64 ((const uint64_t *) 1073741824, x1),
+ p0 = svwhilerw ((const uint64_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_u64:
+** whilerw p0\.d, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_u64, const uint64_t *,
+ p0 = svwhilerw_u64 (x0, (const uint64_t *) 0),
+ p0 = svwhilerw (x0, (const uint64_t *) 0))
+
+/*
+** whilerw_rc_u64:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_u64, const uint64_t *,
+ p0 = svwhilerw_u64 (x0, (const uint64_t *) 1073741824),
+ p0 = svwhilerw (x0, (const uint64_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilerw_rr_u8:
+** whilerw p0\.b, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rr_u8, const uint8_t *,
+ p0 = svwhilerw_u8 (x0, x1),
+ p0 = svwhilerw (x0, x1))
+
+/*
+** whilerw_0r_u8:
+** whilerw p0\.b, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_0r_u8, const uint8_t *,
+ p0 = svwhilerw_u8 ((const uint8_t *) 0, x1),
+ p0 = svwhilerw ((const uint8_t *) 0, x1))
+
+/*
+** whilerw_cr_u8:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.b, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilerw_cr_u8, const uint8_t *,
+ p0 = svwhilerw_u8 ((const uint8_t *) 1073741824, x1),
+ p0 = svwhilerw ((const uint8_t *) 1073741824, x1))
+
+/*
+** whilerw_r0_u8:
+** whilerw p0\.b, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilerw_r0_u8, const uint8_t *,
+ p0 = svwhilerw_u8 (x0, (const uint8_t *) 0),
+ p0 = svwhilerw (x0, (const uint8_t *) 0))
+
+/*
+** whilerw_rc_u8:
+** mov (x[0-9]+), #?1073741824
+** whilerw p0\.b, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilerw_rc_u8, const uint8_t *,
+ p0 = svwhilerw_u8 (x0, (const uint8_t *) 1073741824),
+ p0 = svwhilerw (x0, (const uint8_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_f16:
+** whilewr p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_f16, const float16_t *,
+ p0 = svwhilewr_f16 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_f16:
+** whilewr p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_f16, const float16_t *,
+ p0 = svwhilewr_f16 ((const float16_t *) 0, x1),
+ p0 = svwhilewr ((const float16_t *) 0, x1))
+
+/*
+** whilewr_cr_f16:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_f16, const float16_t *,
+ p0 = svwhilewr_f16 ((const float16_t *) 1073741824, x1),
+ p0 = svwhilewr ((const float16_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_f16:
+** whilewr p0\.h, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_f16, const float16_t *,
+ p0 = svwhilewr_f16 (x0, (const float16_t *) 0),
+ p0 = svwhilewr (x0, (const float16_t *) 0))
+
+/*
+** whilewr_rc_f16:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_f16, const float16_t *,
+ p0 = svwhilewr_f16 (x0, (const float16_t *) 1073741824),
+ p0 = svwhilewr (x0, (const float16_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_f32:
+** whilewr p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_f32, const float32_t *,
+ p0 = svwhilewr_f32 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_f32:
+** whilewr p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_f32, const float32_t *,
+ p0 = svwhilewr_f32 ((const float32_t *) 0, x1),
+ p0 = svwhilewr ((const float32_t *) 0, x1))
+
+/*
+** whilewr_cr_f32:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_f32, const float32_t *,
+ p0 = svwhilewr_f32 ((const float32_t *) 1073741824, x1),
+ p0 = svwhilewr ((const float32_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_f32:
+** whilewr p0\.s, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_f32, const float32_t *,
+ p0 = svwhilewr_f32 (x0, (const float32_t *) 0),
+ p0 = svwhilewr (x0, (const float32_t *) 0))
+
+/*
+** whilewr_rc_f32:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_f32, const float32_t *,
+ p0 = svwhilewr_f32 (x0, (const float32_t *) 1073741824),
+ p0 = svwhilewr (x0, (const float32_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_f64:
+** whilewr p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_f64, const float64_t *,
+ p0 = svwhilewr_f64 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_f64:
+** whilewr p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_f64, const float64_t *,
+ p0 = svwhilewr_f64 ((const float64_t *) 0, x1),
+ p0 = svwhilewr ((const float64_t *) 0, x1))
+
+/*
+** whilewr_cr_f64:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_f64, const float64_t *,
+ p0 = svwhilewr_f64 ((const float64_t *) 1073741824, x1),
+ p0 = svwhilewr ((const float64_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_f64:
+** whilewr p0\.d, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_f64, const float64_t *,
+ p0 = svwhilewr_f64 (x0, (const float64_t *) 0),
+ p0 = svwhilewr (x0, (const float64_t *) 0))
+
+/*
+** whilewr_rc_f64:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_f64, const float64_t *,
+ p0 = svwhilewr_f64 (x0, (const float64_t *) 1073741824),
+ p0 = svwhilewr (x0, (const float64_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_s16:
+** whilewr p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_s16, const int16_t *,
+ p0 = svwhilewr_s16 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_s16:
+** whilewr p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_s16, const int16_t *,
+ p0 = svwhilewr_s16 ((const int16_t *) 0, x1),
+ p0 = svwhilewr ((const int16_t *) 0, x1))
+
+/*
+** whilewr_cr_s16:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_s16, const int16_t *,
+ p0 = svwhilewr_s16 ((const int16_t *) 1073741824, x1),
+ p0 = svwhilewr ((const int16_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_s16:
+** whilewr p0\.h, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_s16, const int16_t *,
+ p0 = svwhilewr_s16 (x0, (const int16_t *) 0),
+ p0 = svwhilewr (x0, (const int16_t *) 0))
+
+/*
+** whilewr_rc_s16:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_s16, const int16_t *,
+ p0 = svwhilewr_s16 (x0, (const int16_t *) 1073741824),
+ p0 = svwhilewr (x0, (const int16_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_s32:
+** whilewr p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_s32, const int32_t *,
+ p0 = svwhilewr_s32 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_s32:
+** whilewr p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_s32, const int32_t *,
+ p0 = svwhilewr_s32 ((const int32_t *) 0, x1),
+ p0 = svwhilewr ((const int32_t *) 0, x1))
+
+/*
+** whilewr_cr_s32:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_s32, const int32_t *,
+ p0 = svwhilewr_s32 ((const int32_t *) 1073741824, x1),
+ p0 = svwhilewr ((const int32_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_s32:
+** whilewr p0\.s, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_s32, const int32_t *,
+ p0 = svwhilewr_s32 (x0, (const int32_t *) 0),
+ p0 = svwhilewr (x0, (const int32_t *) 0))
+
+/*
+** whilewr_rc_s32:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_s32, const int32_t *,
+ p0 = svwhilewr_s32 (x0, (const int32_t *) 1073741824),
+ p0 = svwhilewr (x0, (const int32_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_s64:
+** whilewr p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_s64, const int64_t *,
+ p0 = svwhilewr_s64 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_s64:
+** whilewr p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_s64, const int64_t *,
+ p0 = svwhilewr_s64 ((const int64_t *) 0, x1),
+ p0 = svwhilewr ((const int64_t *) 0, x1))
+
+/*
+** whilewr_cr_s64:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_s64, const int64_t *,
+ p0 = svwhilewr_s64 ((const int64_t *) 1073741824, x1),
+ p0 = svwhilewr ((const int64_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_s64:
+** whilewr p0\.d, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_s64, const int64_t *,
+ p0 = svwhilewr_s64 (x0, (const int64_t *) 0),
+ p0 = svwhilewr (x0, (const int64_t *) 0))
+
+/*
+** whilewr_rc_s64:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_s64, const int64_t *,
+ p0 = svwhilewr_s64 (x0, (const int64_t *) 1073741824),
+ p0 = svwhilewr (x0, (const int64_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_s8:
+** whilewr p0\.b, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_s8, const int8_t *,
+ p0 = svwhilewr_s8 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_s8:
+** whilewr p0\.b, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_s8, const int8_t *,
+ p0 = svwhilewr_s8 ((const int8_t *) 0, x1),
+ p0 = svwhilewr ((const int8_t *) 0, x1))
+
+/*
+** whilewr_cr_s8:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.b, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_s8, const int8_t *,
+ p0 = svwhilewr_s8 ((const int8_t *) 1073741824, x1),
+ p0 = svwhilewr ((const int8_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_s8:
+** whilewr p0\.b, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_s8, const int8_t *,
+ p0 = svwhilewr_s8 (x0, (const int8_t *) 0),
+ p0 = svwhilewr (x0, (const int8_t *) 0))
+
+/*
+** whilewr_rc_s8:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.b, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_s8, const int8_t *,
+ p0 = svwhilewr_s8 (x0, (const int8_t *) 1073741824),
+ p0 = svwhilewr (x0, (const int8_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_u16:
+** whilewr p0\.h, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_u16, const uint16_t *,
+ p0 = svwhilewr_u16 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_u16:
+** whilewr p0\.h, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_u16, const uint16_t *,
+ p0 = svwhilewr_u16 ((const uint16_t *) 0, x1),
+ p0 = svwhilewr ((const uint16_t *) 0, x1))
+
+/*
+** whilewr_cr_u16:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.h, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_u16, const uint16_t *,
+ p0 = svwhilewr_u16 ((const uint16_t *) 1073741824, x1),
+ p0 = svwhilewr ((const uint16_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_u16:
+** whilewr p0\.h, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_u16, const uint16_t *,
+ p0 = svwhilewr_u16 (x0, (const uint16_t *) 0),
+ p0 = svwhilewr (x0, (const uint16_t *) 0))
+
+/*
+** whilewr_rc_u16:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.h, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_u16, const uint16_t *,
+ p0 = svwhilewr_u16 (x0, (const uint16_t *) 1073741824),
+ p0 = svwhilewr (x0, (const uint16_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_u32:
+** whilewr p0\.s, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_u32, const uint32_t *,
+ p0 = svwhilewr_u32 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_u32:
+** whilewr p0\.s, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_u32, const uint32_t *,
+ p0 = svwhilewr_u32 ((const uint32_t *) 0, x1),
+ p0 = svwhilewr ((const uint32_t *) 0, x1))
+
+/*
+** whilewr_cr_u32:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.s, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_u32, const uint32_t *,
+ p0 = svwhilewr_u32 ((const uint32_t *) 1073741824, x1),
+ p0 = svwhilewr ((const uint32_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_u32:
+** whilewr p0\.s, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_u32, const uint32_t *,
+ p0 = svwhilewr_u32 (x0, (const uint32_t *) 0),
+ p0 = svwhilewr (x0, (const uint32_t *) 0))
+
+/*
+** whilewr_rc_u32:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.s, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_u32, const uint32_t *,
+ p0 = svwhilewr_u32 (x0, (const uint32_t *) 1073741824),
+ p0 = svwhilewr (x0, (const uint32_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_u64:
+** whilewr p0\.d, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_u64, const uint64_t *,
+ p0 = svwhilewr_u64 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_u64:
+** whilewr p0\.d, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_u64, const uint64_t *,
+ p0 = svwhilewr_u64 ((const uint64_t *) 0, x1),
+ p0 = svwhilewr ((const uint64_t *) 0, x1))
+
+/*
+** whilewr_cr_u64:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.d, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_u64, const uint64_t *,
+ p0 = svwhilewr_u64 ((const uint64_t *) 1073741824, x1),
+ p0 = svwhilewr ((const uint64_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_u64:
+** whilewr p0\.d, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_u64, const uint64_t *,
+ p0 = svwhilewr_u64 (x0, (const uint64_t *) 0),
+ p0 = svwhilewr (x0, (const uint64_t *) 0))
+
+/*
+** whilewr_rc_u64:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.d, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_u64, const uint64_t *,
+ p0 = svwhilewr_u64 (x0, (const uint64_t *) 1073741824),
+ p0 = svwhilewr (x0, (const uint64_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** whilewr_rr_u8:
+** whilewr p0\.b, x0, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rr_u8, const uint8_t *,
+ p0 = svwhilewr_u8 (x0, x1),
+ p0 = svwhilewr (x0, x1))
+
+/*
+** whilewr_0r_u8:
+** whilewr p0\.b, xzr, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_0r_u8, const uint8_t *,
+ p0 = svwhilewr_u8 ((const uint8_t *) 0, x1),
+ p0 = svwhilewr ((const uint8_t *) 0, x1))
+
+/*
+** whilewr_cr_u8:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.b, \1, x1
+** ret
+*/
+TEST_COMPARE_S (whilewr_cr_u8, const uint8_t *,
+ p0 = svwhilewr_u8 ((const uint8_t *) 1073741824, x1),
+ p0 = svwhilewr ((const uint8_t *) 1073741824, x1))
+
+/*
+** whilewr_r0_u8:
+** whilewr p0\.b, x0, xzr
+** ret
+*/
+TEST_COMPARE_S (whilewr_r0_u8, const uint8_t *,
+ p0 = svwhilewr_u8 (x0, (const uint8_t *) 0),
+ p0 = svwhilewr (x0, (const uint8_t *) 0))
+
+/*
+** whilewr_rc_u8:
+** mov (x[0-9]+), #?1073741824
+** whilewr p0\.b, x0, \1
+** ret
+*/
+TEST_COMPARE_S (whilewr_rc_u8, const uint8_t *,
+ p0 = svwhilewr_u8 (x0, (const uint8_t *) 1073741824),
+ p0 = svwhilewr (x0, (const uint8_t *) 1073741824))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** xar_1_s16_tied1:
+** xar z0\.h, z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s16_tied1, svint16_t,
+ z0 = svxar_n_s16 (z0, z1, 1),
+ z0 = svxar (z0, z1, 1))
+
+/*
+** xar_1_s16_tied2:
+** xar z0\.h, z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s16_tied2, svint16_t,
+ z0 = svxar_n_s16 (z1, z0, 1),
+ z0 = svxar (z1, z0, 1))
+
+/*
+** xar_1_s16_untied:
+** (
+** movprfx z0, z1
+** xar z0\.h, z0\.h, z2\.h, #1
+** |
+** movprfx z0, z2
+** xar z0\.h, z0\.h, z1\.h, #1
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s16_untied, svint16_t,
+ z0 = svxar_n_s16 (z1, z2, 1),
+ z0 = svxar (z1, z2, 1))
+
+/*
+** xar_2_s16_tied1:
+** xar z0\.h, z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s16_tied1, svint16_t,
+ z0 = svxar_n_s16 (z0, z1, 2),
+ z0 = svxar (z0, z1, 2))
+
+/*
+** xar_2_s16_tied2:
+** xar z0\.h, z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s16_tied2, svint16_t,
+ z0 = svxar_n_s16 (z1, z0, 2),
+ z0 = svxar (z1, z0, 2))
+
+/*
+** xar_2_s16_untied:
+** (
+** movprfx z0, z1
+** xar z0\.h, z0\.h, z2\.h, #2
+** |
+** movprfx z0, z2
+** xar z0\.h, z0\.h, z1\.h, #2
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s16_untied, svint16_t,
+ z0 = svxar_n_s16 (z1, z2, 2),
+ z0 = svxar (z1, z2, 2))
+
+/*
+** xar_16_s16_tied1:
+** xar z0\.h, z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (xar_16_s16_tied1, svint16_t,
+ z0 = svxar_n_s16 (z0, z1, 16),
+ z0 = svxar (z0, z1, 16))
+
+/*
+** xar_16_s16_tied2:
+** xar z0\.h, z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (xar_16_s16_tied2, svint16_t,
+ z0 = svxar_n_s16 (z1, z0, 16),
+ z0 = svxar (z1, z0, 16))
+
+/*
+** xar_16_s16_untied:
+** (
+** movprfx z0, z1
+** xar z0\.h, z0\.h, z2\.h, #16
+** |
+** movprfx z0, z2
+** xar z0\.h, z0\.h, z1\.h, #16
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_16_s16_untied, svint16_t,
+ z0 = svxar_n_s16 (z1, z2, 16),
+ z0 = svxar (z1, z2, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** xar_1_s32_tied1:
+** xar z0\.s, z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s32_tied1, svint32_t,
+ z0 = svxar_n_s32 (z0, z1, 1),
+ z0 = svxar (z0, z1, 1))
+
+/*
+** xar_1_s32_tied2:
+** xar z0\.s, z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s32_tied2, svint32_t,
+ z0 = svxar_n_s32 (z1, z0, 1),
+ z0 = svxar (z1, z0, 1))
+
+/*
+** xar_1_s32_untied:
+** (
+** movprfx z0, z1
+** xar z0\.s, z0\.s, z2\.s, #1
+** |
+** movprfx z0, z2
+** xar z0\.s, z0\.s, z1\.s, #1
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s32_untied, svint32_t,
+ z0 = svxar_n_s32 (z1, z2, 1),
+ z0 = svxar (z1, z2, 1))
+
+/*
+** xar_2_s32_tied1:
+** xar z0\.s, z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s32_tied1, svint32_t,
+ z0 = svxar_n_s32 (z0, z1, 2),
+ z0 = svxar (z0, z1, 2))
+
+/*
+** xar_2_s32_tied2:
+** xar z0\.s, z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s32_tied2, svint32_t,
+ z0 = svxar_n_s32 (z1, z0, 2),
+ z0 = svxar (z1, z0, 2))
+
+/*
+** xar_2_s32_untied:
+** (
+** movprfx z0, z1
+** xar z0\.s, z0\.s, z2\.s, #2
+** |
+** movprfx z0, z2
+** xar z0\.s, z0\.s, z1\.s, #2
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s32_untied, svint32_t,
+ z0 = svxar_n_s32 (z1, z2, 2),
+ z0 = svxar (z1, z2, 2))
+
+/*
+** xar_32_s32_tied1:
+** xar z0\.s, z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (xar_32_s32_tied1, svint32_t,
+ z0 = svxar_n_s32 (z0, z1, 32),
+ z0 = svxar (z0, z1, 32))
+
+/*
+** xar_32_s32_tied2:
+** xar z0\.s, z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (xar_32_s32_tied2, svint32_t,
+ z0 = svxar_n_s32 (z1, z0, 32),
+ z0 = svxar (z1, z0, 32))
+
+/*
+** xar_32_s32_untied:
+** (
+** movprfx z0, z1
+** xar z0\.s, z0\.s, z2\.s, #32
+** |
+** movprfx z0, z2
+** xar z0\.s, z0\.s, z1\.s, #32
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_32_s32_untied, svint32_t,
+ z0 = svxar_n_s32 (z1, z2, 32),
+ z0 = svxar (z1, z2, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** xar_1_s64_tied1:
+** xar z0\.d, z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s64_tied1, svint64_t,
+ z0 = svxar_n_s64 (z0, z1, 1),
+ z0 = svxar (z0, z1, 1))
+
+/*
+** xar_1_s64_tied2:
+** xar z0\.d, z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s64_tied2, svint64_t,
+ z0 = svxar_n_s64 (z1, z0, 1),
+ z0 = svxar (z1, z0, 1))
+
+/*
+** xar_1_s64_untied:
+** (
+** movprfx z0, z1
+** xar z0\.d, z0\.d, z2\.d, #1
+** |
+** movprfx z0, z2
+** xar z0\.d, z0\.d, z1\.d, #1
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s64_untied, svint64_t,
+ z0 = svxar_n_s64 (z1, z2, 1),
+ z0 = svxar (z1, z2, 1))
+
+/*
+** xar_2_s64_tied1:
+** xar z0\.d, z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s64_tied1, svint64_t,
+ z0 = svxar_n_s64 (z0, z1, 2),
+ z0 = svxar (z0, z1, 2))
+
+/*
+** xar_2_s64_tied2:
+** xar z0\.d, z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s64_tied2, svint64_t,
+ z0 = svxar_n_s64 (z1, z0, 2),
+ z0 = svxar (z1, z0, 2))
+
+/*
+** xar_2_s64_untied:
+** (
+** movprfx z0, z1
+** xar z0\.d, z0\.d, z2\.d, #2
+** |
+** movprfx z0, z2
+** xar z0\.d, z0\.d, z1\.d, #2
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s64_untied, svint64_t,
+ z0 = svxar_n_s64 (z1, z2, 2),
+ z0 = svxar (z1, z2, 2))
+
+/*
+** xar_64_s64_tied1:
+** xar z0\.d, z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (xar_64_s64_tied1, svint64_t,
+ z0 = svxar_n_s64 (z0, z1, 64),
+ z0 = svxar (z0, z1, 64))
+
+/*
+** xar_64_s64_tied2:
+** xar z0\.d, z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (xar_64_s64_tied2, svint64_t,
+ z0 = svxar_n_s64 (z1, z0, 64),
+ z0 = svxar (z1, z0, 64))
+
+/*
+** xar_64_s64_untied:
+** (
+** movprfx z0, z1
+** xar z0\.d, z0\.d, z2\.d, #64
+** |
+** movprfx z0, z2
+** xar z0\.d, z0\.d, z1\.d, #64
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_64_s64_untied, svint64_t,
+ z0 = svxar_n_s64 (z1, z2, 64),
+ z0 = svxar (z1, z2, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** xar_1_s8_tied1:
+** xar z0\.b, z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s8_tied1, svint8_t,
+ z0 = svxar_n_s8 (z0, z1, 1),
+ z0 = svxar (z0, z1, 1))
+
+/*
+** xar_1_s8_tied2:
+** xar z0\.b, z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s8_tied2, svint8_t,
+ z0 = svxar_n_s8 (z1, z0, 1),
+ z0 = svxar (z1, z0, 1))
+
+/*
+** xar_1_s8_untied:
+** (
+** movprfx z0, z1
+** xar z0\.b, z0\.b, z2\.b, #1
+** |
+** movprfx z0, z2
+** xar z0\.b, z0\.b, z1\.b, #1
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_s8_untied, svint8_t,
+ z0 = svxar_n_s8 (z1, z2, 1),
+ z0 = svxar (z1, z2, 1))
+
+/*
+** xar_2_s8_tied1:
+** xar z0\.b, z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s8_tied1, svint8_t,
+ z0 = svxar_n_s8 (z0, z1, 2),
+ z0 = svxar (z0, z1, 2))
+
+/*
+** xar_2_s8_tied2:
+** xar z0\.b, z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s8_tied2, svint8_t,
+ z0 = svxar_n_s8 (z1, z0, 2),
+ z0 = svxar (z1, z0, 2))
+
+/*
+** xar_2_s8_untied:
+** (
+** movprfx z0, z1
+** xar z0\.b, z0\.b, z2\.b, #2
+** |
+** movprfx z0, z2
+** xar z0\.b, z0\.b, z1\.b, #2
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_s8_untied, svint8_t,
+ z0 = svxar_n_s8 (z1, z2, 2),
+ z0 = svxar (z1, z2, 2))
+
+/*
+** xar_8_s8_tied1:
+** xar z0\.b, z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (xar_8_s8_tied1, svint8_t,
+ z0 = svxar_n_s8 (z0, z1, 8),
+ z0 = svxar (z0, z1, 8))
+
+/*
+** xar_8_s8_tied2:
+** xar z0\.b, z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (xar_8_s8_tied2, svint8_t,
+ z0 = svxar_n_s8 (z1, z0, 8),
+ z0 = svxar (z1, z0, 8))
+
+/*
+** xar_8_s8_untied:
+** (
+** movprfx z0, z1
+** xar z0\.b, z0\.b, z2\.b, #8
+** |
+** movprfx z0, z2
+** xar z0\.b, z0\.b, z1\.b, #8
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_8_s8_untied, svint8_t,
+ z0 = svxar_n_s8 (z1, z2, 8),
+ z0 = svxar (z1, z2, 8))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** xar_1_u16_tied1:
+** xar z0\.h, z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u16_tied1, svuint16_t,
+ z0 = svxar_n_u16 (z0, z1, 1),
+ z0 = svxar (z0, z1, 1))
+
+/*
+** xar_1_u16_tied2:
+** xar z0\.h, z0\.h, z1\.h, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u16_tied2, svuint16_t,
+ z0 = svxar_n_u16 (z1, z0, 1),
+ z0 = svxar (z1, z0, 1))
+
+/*
+** xar_1_u16_untied:
+** (
+** movprfx z0, z1
+** xar z0\.h, z0\.h, z2\.h, #1
+** |
+** movprfx z0, z2
+** xar z0\.h, z0\.h, z1\.h, #1
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u16_untied, svuint16_t,
+ z0 = svxar_n_u16 (z1, z2, 1),
+ z0 = svxar (z1, z2, 1))
+
+/*
+** xar_2_u16_tied1:
+** xar z0\.h, z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u16_tied1, svuint16_t,
+ z0 = svxar_n_u16 (z0, z1, 2),
+ z0 = svxar (z0, z1, 2))
+
+/*
+** xar_2_u16_tied2:
+** xar z0\.h, z0\.h, z1\.h, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u16_tied2, svuint16_t,
+ z0 = svxar_n_u16 (z1, z0, 2),
+ z0 = svxar (z1, z0, 2))
+
+/*
+** xar_2_u16_untied:
+** (
+** movprfx z0, z1
+** xar z0\.h, z0\.h, z2\.h, #2
+** |
+** movprfx z0, z2
+** xar z0\.h, z0\.h, z1\.h, #2
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u16_untied, svuint16_t,
+ z0 = svxar_n_u16 (z1, z2, 2),
+ z0 = svxar (z1, z2, 2))
+
+/*
+** xar_16_u16_tied1:
+** xar z0\.h, z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (xar_16_u16_tied1, svuint16_t,
+ z0 = svxar_n_u16 (z0, z1, 16),
+ z0 = svxar (z0, z1, 16))
+
+/*
+** xar_16_u16_tied2:
+** xar z0\.h, z0\.h, z1\.h, #16
+** ret
+*/
+TEST_UNIFORM_Z (xar_16_u16_tied2, svuint16_t,
+ z0 = svxar_n_u16 (z1, z0, 16),
+ z0 = svxar (z1, z0, 16))
+
+/*
+** xar_16_u16_untied:
+** (
+** movprfx z0, z1
+** xar z0\.h, z0\.h, z2\.h, #16
+** |
+** movprfx z0, z2
+** xar z0\.h, z0\.h, z1\.h, #16
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_16_u16_untied, svuint16_t,
+ z0 = svxar_n_u16 (z1, z2, 16),
+ z0 = svxar (z1, z2, 16))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** xar_1_u32_tied1:
+** xar z0\.s, z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u32_tied1, svuint32_t,
+ z0 = svxar_n_u32 (z0, z1, 1),
+ z0 = svxar (z0, z1, 1))
+
+/*
+** xar_1_u32_tied2:
+** xar z0\.s, z0\.s, z1\.s, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u32_tied2, svuint32_t,
+ z0 = svxar_n_u32 (z1, z0, 1),
+ z0 = svxar (z1, z0, 1))
+
+/*
+** xar_1_u32_untied:
+** (
+** movprfx z0, z1
+** xar z0\.s, z0\.s, z2\.s, #1
+** |
+** movprfx z0, z2
+** xar z0\.s, z0\.s, z1\.s, #1
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u32_untied, svuint32_t,
+ z0 = svxar_n_u32 (z1, z2, 1),
+ z0 = svxar (z1, z2, 1))
+
+/*
+** xar_2_u32_tied1:
+** xar z0\.s, z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u32_tied1, svuint32_t,
+ z0 = svxar_n_u32 (z0, z1, 2),
+ z0 = svxar (z0, z1, 2))
+
+/*
+** xar_2_u32_tied2:
+** xar z0\.s, z0\.s, z1\.s, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u32_tied2, svuint32_t,
+ z0 = svxar_n_u32 (z1, z0, 2),
+ z0 = svxar (z1, z0, 2))
+
+/*
+** xar_2_u32_untied:
+** (
+** movprfx z0, z1
+** xar z0\.s, z0\.s, z2\.s, #2
+** |
+** movprfx z0, z2
+** xar z0\.s, z0\.s, z1\.s, #2
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u32_untied, svuint32_t,
+ z0 = svxar_n_u32 (z1, z2, 2),
+ z0 = svxar (z1, z2, 2))
+
+/*
+** xar_32_u32_tied1:
+** xar z0\.s, z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (xar_32_u32_tied1, svuint32_t,
+ z0 = svxar_n_u32 (z0, z1, 32),
+ z0 = svxar (z0, z1, 32))
+
+/*
+** xar_32_u32_tied2:
+** xar z0\.s, z0\.s, z1\.s, #32
+** ret
+*/
+TEST_UNIFORM_Z (xar_32_u32_tied2, svuint32_t,
+ z0 = svxar_n_u32 (z1, z0, 32),
+ z0 = svxar (z1, z0, 32))
+
+/*
+** xar_32_u32_untied:
+** (
+** movprfx z0, z1
+** xar z0\.s, z0\.s, z2\.s, #32
+** |
+** movprfx z0, z2
+** xar z0\.s, z0\.s, z1\.s, #32
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_32_u32_untied, svuint32_t,
+ z0 = svxar_n_u32 (z1, z2, 32),
+ z0 = svxar (z1, z2, 32))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** xar_1_u64_tied1:
+** xar z0\.d, z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u64_tied1, svuint64_t,
+ z0 = svxar_n_u64 (z0, z1, 1),
+ z0 = svxar (z0, z1, 1))
+
+/*
+** xar_1_u64_tied2:
+** xar z0\.d, z0\.d, z1\.d, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u64_tied2, svuint64_t,
+ z0 = svxar_n_u64 (z1, z0, 1),
+ z0 = svxar (z1, z0, 1))
+
+/*
+** xar_1_u64_untied:
+** (
+** movprfx z0, z1
+** xar z0\.d, z0\.d, z2\.d, #1
+** |
+** movprfx z0, z2
+** xar z0\.d, z0\.d, z1\.d, #1
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u64_untied, svuint64_t,
+ z0 = svxar_n_u64 (z1, z2, 1),
+ z0 = svxar (z1, z2, 1))
+
+/*
+** xar_2_u64_tied1:
+** xar z0\.d, z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u64_tied1, svuint64_t,
+ z0 = svxar_n_u64 (z0, z1, 2),
+ z0 = svxar (z0, z1, 2))
+
+/*
+** xar_2_u64_tied2:
+** xar z0\.d, z0\.d, z1\.d, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u64_tied2, svuint64_t,
+ z0 = svxar_n_u64 (z1, z0, 2),
+ z0 = svxar (z1, z0, 2))
+
+/*
+** xar_2_u64_untied:
+** (
+** movprfx z0, z1
+** xar z0\.d, z0\.d, z2\.d, #2
+** |
+** movprfx z0, z2
+** xar z0\.d, z0\.d, z1\.d, #2
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u64_untied, svuint64_t,
+ z0 = svxar_n_u64 (z1, z2, 2),
+ z0 = svxar (z1, z2, 2))
+
+/*
+** xar_64_u64_tied1:
+** xar z0\.d, z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (xar_64_u64_tied1, svuint64_t,
+ z0 = svxar_n_u64 (z0, z1, 64),
+ z0 = svxar (z0, z1, 64))
+
+/*
+** xar_64_u64_tied2:
+** xar z0\.d, z0\.d, z1\.d, #64
+** ret
+*/
+TEST_UNIFORM_Z (xar_64_u64_tied2, svuint64_t,
+ z0 = svxar_n_u64 (z1, z0, 64),
+ z0 = svxar (z1, z0, 64))
+
+/*
+** xar_64_u64_untied:
+** (
+** movprfx z0, z1
+** xar z0\.d, z0\.d, z2\.d, #64
+** |
+** movprfx z0, z2
+** xar z0\.d, z0\.d, z1\.d, #64
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_64_u64_untied, svuint64_t,
+ z0 = svxar_n_u64 (z1, z2, 64),
+ z0 = svxar (z1, z2, 64))
--- /dev/null
+/* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */
+
+#include "test_sve_acle.h"
+
+/*
+** xar_1_u8_tied1:
+** xar z0\.b, z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u8_tied1, svuint8_t,
+ z0 = svxar_n_u8 (z0, z1, 1),
+ z0 = svxar (z0, z1, 1))
+
+/*
+** xar_1_u8_tied2:
+** xar z0\.b, z0\.b, z1\.b, #1
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u8_tied2, svuint8_t,
+ z0 = svxar_n_u8 (z1, z0, 1),
+ z0 = svxar (z1, z0, 1))
+
+/*
+** xar_1_u8_untied:
+** (
+** movprfx z0, z1
+** xar z0\.b, z0\.b, z2\.b, #1
+** |
+** movprfx z0, z2
+** xar z0\.b, z0\.b, z1\.b, #1
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_1_u8_untied, svuint8_t,
+ z0 = svxar_n_u8 (z1, z2, 1),
+ z0 = svxar (z1, z2, 1))
+
+/*
+** xar_2_u8_tied1:
+** xar z0\.b, z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u8_tied1, svuint8_t,
+ z0 = svxar_n_u8 (z0, z1, 2),
+ z0 = svxar (z0, z1, 2))
+
+/*
+** xar_2_u8_tied2:
+** xar z0\.b, z0\.b, z1\.b, #2
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u8_tied2, svuint8_t,
+ z0 = svxar_n_u8 (z1, z0, 2),
+ z0 = svxar (z1, z0, 2))
+
+/*
+** xar_2_u8_untied:
+** (
+** movprfx z0, z1
+** xar z0\.b, z0\.b, z2\.b, #2
+** |
+** movprfx z0, z2
+** xar z0\.b, z0\.b, z1\.b, #2
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_2_u8_untied, svuint8_t,
+ z0 = svxar_n_u8 (z1, z2, 2),
+ z0 = svxar (z1, z2, 2))
+
+/*
+** xar_8_u8_tied1:
+** xar z0\.b, z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (xar_8_u8_tied1, svuint8_t,
+ z0 = svxar_n_u8 (z0, z1, 8),
+ z0 = svxar (z0, z1, 8))
+
+/*
+** xar_8_u8_tied2:
+** xar z0\.b, z0\.b, z1\.b, #8
+** ret
+*/
+TEST_UNIFORM_Z (xar_8_u8_tied2, svuint8_t,
+ z0 = svxar_n_u8 (z1, z0, 8),
+ z0 = svxar (z1, z0, 8))
+
+/*
+** xar_8_u8_untied:
+** (
+** movprfx z0, z1
+** xar z0\.b, z0\.b, z2\.b, #8
+** |
+** movprfx z0, z2
+** xar z0\.b, z0\.b, z1\.b, #8
+** )
+** ret
+*/
+TEST_UNIFORM_Z (xar_8_u8_untied, svuint8_t,
+ z0 = svxar_n_u8 (z1, z2, 8),
+ z0 = svxar (z1, z2, 8))
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (svbool_t pg, svint8_t x, svint8_t y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svmatch (pg, x, y);
+ *any = svptest_any (pg, res);
+ *ptr = res;
+}
+
+int
+test2 (svbool_t pg, svint8_t x, svint8_t y, int *any)
+{
+ svbool_t res = svmatch (pg, x, y);
+ return svptest_any (pg, res);
+}
+
+/* { dg-final { scan-assembler-times {\tmatch\t} 2 } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (svint16_t x, svint16_t y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svmatch (svptrue_b8 (), x, y);
+ *any = svptest_any (svptrue_b16 (), res);
+ *ptr = res;
+}
+
+int
+test2 (svint16_t x, svint16_t y, int *any)
+{
+ svbool_t res = svmatch (svptrue_b8 (), x, y);
+ return svptest_any (svptrue_b16 (), res);
+}
+
+void
+test3 (svint16_t x, svint16_t y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svmatch (svptrue_b16 (), x, y);
+ *any = svptest_any (svptrue_b16 (), res);
+ *ptr = res;
+}
+
+int
+test4 (svint16_t x, svint16_t y, int *any)
+{
+ svbool_t res = svmatch (svptrue_b16 (), x, y);
+ return svptest_any (svptrue_b16 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\tmatch\t} 4 } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (svbool_t pg, svint16_t x, svint16_t y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svmatch (pg, x, y);
+ *any = svptest_any (pg, res);
+ *ptr = res;
+}
+
+int
+test2 (svbool_t pg, svint16_t x, svint16_t y, int *any)
+{
+ svbool_t res = svmatch (pg, x, y);
+ return svptest_any (pg, res);
+}
+
+/* These four are always false, but we don't realize that yet. */
+
+void
+test3 (svbool_t pg, svint16_t x, svint16_t y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svmatch (svptrue_b8 (), x, y);
+ *any = svptest_last (svptrue_b8 (), res);
+ *ptr = res;
+}
+
+int
+test4 (svbool_t pg, svint16_t x, svint16_t y, int *any)
+{
+ svbool_t res = svmatch (svptrue_b8 (), x, y);
+ return svptest_last (svptrue_b8 (), res);
+}
+
+void
+test5 (svbool_t pg, svint16_t x, svint16_t y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svmatch (svptrue_b16 (), x, y);
+ *any = svptest_last (svptrue_b8 (), res);
+ *ptr = res;
+}
+
+int
+test6 (svbool_t pg, svint16_t x, svint16_t y, int *any)
+{
+ svbool_t res = svmatch (svptrue_b16 (), x, y);
+ return svptest_last (svptrue_b8 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\tmatch\t} 6 } } */
+/* { dg-final { scan-assembler-times {\tptest\t} 6 } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (int8_t *x, int8_t *y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svwhilerw (x, y);
+ *any = svptest_last (svptrue_b8 (), res);
+ *ptr = res;
+}
+
+int
+test2 (int8_t *x, int8_t *y)
+{
+ svbool_t res = svwhilerw (x, y);
+ return svptest_last (svptrue_b8 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\twhilerw\t} 2 } } */
+/* { dg-final { scan-assembler-not {\tptrue\t} } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (int16_t *x, int16_t *y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svwhilerw (x, y);
+ *any = svptest_last (svptrue_b16 (), res);
+ *ptr = res;
+}
+
+int
+test2 (int16_t *x, int16_t *y)
+{
+ svbool_t res = svwhilerw (x, y);
+ return svptest_last (svptrue_b16 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\twhilerw\t} 2 } } */
+/* { dg-final { scan-assembler-not {\tptrue\t} } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (int32_t *x, int32_t *y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svwhilerw (x, y);
+ *any = svptest_last (svptrue_b32 (), res);
+ *ptr = res;
+}
+
+int
+test2 (int32_t *x, int32_t *y)
+{
+ svbool_t res = svwhilerw (x, y);
+ return svptest_last (svptrue_b32 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\twhilerw\t} 2 } } */
+/* { dg-final { scan-assembler-not {\tptrue\t} } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (int64_t *x, int64_t *y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svwhilerw (x, y);
+ *any = svptest_last (svptrue_b64 (), res);
+ *ptr = res;
+}
+
+int
+test2 (int64_t *x, int64_t *y)
+{
+ svbool_t res = svwhilerw (x, y);
+ return svptest_last (svptrue_b64 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\twhilerw\t} 2 } } */
+/* { dg-final { scan-assembler-not {\tptrue\t} } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (int8_t *x, int8_t *y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svwhilewr (x, y);
+ *any = svptest_last (svptrue_b8 (), res);
+ *ptr = res;
+}
+
+int
+test2 (int8_t *x, int8_t *y)
+{
+ svbool_t res = svwhilewr (x, y);
+ return svptest_last (svptrue_b8 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\twhilewr\t} 2 } } */
+/* { dg-final { scan-assembler-not {\tptrue\t} } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (int16_t *x, int16_t *y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svwhilewr (x, y);
+ *any = svptest_last (svptrue_b16 (), res);
+ *ptr = res;
+}
+
+int
+test2 (int16_t *x, int16_t *y)
+{
+ svbool_t res = svwhilewr (x, y);
+ return svptest_last (svptrue_b16 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\twhilewr\t} 2 } } */
+/* { dg-final { scan-assembler-not {\tptrue\t} } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (int32_t *x, int32_t *y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svwhilewr (x, y);
+ *any = svptest_last (svptrue_b32 (), res);
+ *ptr = res;
+}
+
+int
+test2 (int32_t *x, int32_t *y)
+{
+ svbool_t res = svwhilewr (x, y);
+ return svptest_last (svptrue_b32 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\twhilewr\t} 2 } } */
+/* { dg-final { scan-assembler-not {\tptrue\t} } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+#include <arm_sve.h>
+
+void
+test1 (int64_t *x, int64_t *y, int *any, svbool_t *ptr)
+{
+ svbool_t res = svwhilewr (x, y);
+ *any = svptest_last (svptrue_b64 (), res);
+ *ptr = res;
+}
+
+int
+test2 (int64_t *x, int64_t *y)
+{
+ svbool_t res = svwhilewr (x, y);
+ return svptest_last (svptrue_b64 (), res);
+}
+
+/* { dg-final { scan-assembler-times {\twhilewr\t} 2 } } */
+/* { dg-final { scan-assembler-not {\tptrue\t} } } */
+/* { dg-final { scan-assembler-not {\tptest\t} } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details --save-temps" } */
+
+#define OP(x,y,z) ((x) ^ ((y) & (z)))
+
+#include "bitsel_1.c"
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 4 "vect" } } */
+
+/* { dg-final { scan-assembler-not {\teor\tz[0-9]+\.[bhsd]} } } */
+
+/* { dg-final { scan-assembler-times {\tbcax\tz[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */