diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2020-01-09 16:36:42 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2020-01-09 16:36:42 +0000 |
commit | 0a09a9483825233f16e5b26bb0ffee76752339fc (patch) | |
tree | fe83aaee3f4299895706f7e0e40af7ebc6ab3d6d /gcc | |
parent | f3582fda783496cc268467973c2c9860cd159b3d (diff) | |
download | gcc-0a09a9483825233f16e5b26bb0ffee76752339fc.zip gcc-0a09a9483825233f16e5b26bb0ffee76752339fc.tar.gz gcc-0a09a9483825233f16e5b26bb0ffee76752339fc.tar.bz2 |
[AArch64] Add support for the SVE2 ACLE
This patch adds support for the SVE2 ACLE, The implementation
and tests follow the same pattern as the exiting SVE ACLE support.
2020-01-09 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* 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.
gcc/testsuite/
* 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.
From-SVN: r280060
Diffstat (limited to 'gcc')
919 files changed, 104124 insertions, 312 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index de59d4c..706bb93 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,361 @@ 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) diff --git a/gcc/config.gcc b/gcc/config.gcc index 6c957c4..2c57c24 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -319,7 +319,7 @@ aarch64*-*-*) 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 ;; diff --git a/gcc/config/aarch64/aarch64-c.c b/gcc/config/aarch64/aarch64-c.c index 9ccca42..b422530 100644 --- a/gcc/config/aarch64/aarch64-c.c +++ b/gcc/config/aarch64/aarch64-c.c @@ -150,6 +150,11 @@ aarch64_update_cpp_builtins (cpp_reader *pfile) 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); diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index e6145b4..16a7898 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc @@ -49,6 +49,48 @@ using namespace aarch64_sve; 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 @@ -69,6 +111,19 @@ expand_mad (function_expander &e, 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 @@ -172,16 +227,6 @@ public: 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: @@ -248,12 +293,14 @@ 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 (); } }; @@ -288,18 +335,19 @@ public: 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); + } } }; @@ -310,19 +358,21 @@ public: 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); + } } }; @@ -1376,26 +1426,19 @@ public: } }; -/* 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 @@ -1433,6 +1476,21 @@ public: } }; +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: @@ -2275,12 +2333,11 @@ 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. */ @@ -2342,24 +2399,6 @@ public: 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; }; @@ -2428,7 +2467,7 @@ FUNCTION (svand, rtx_code_function, (AND, AND)) 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)) @@ -2554,9 +2593,9 @@ FUNCTION (svminnm, unspec_based_function, (-1, -1, UNSPEC_COND_FMINNM)) 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)) @@ -2613,7 +2652,7 @@ FUNCTION (svqincw_pat, svqinc_bhwd_impl, (SImode)) 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,) @@ -2628,7 +2667,7 @@ FUNCTION (svrintn, unspec_based_function, (-1, -1, UNSPEC_COND_FRINTN)) 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,) @@ -2666,8 +2705,8 @@ FUNCTION (svunpkhi, svunpk_impl, (true)) 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)) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-functions.h b/gcc/config/aarch64/aarch64-sve-builtins-functions.h index 9782176..71a3943 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-functions.h +++ b/gcc/config/aarch64/aarch64-sve-builtins-functions.h @@ -173,23 +173,18 @@ public: 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; @@ -200,18 +195,34 @@ public: 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 @@ -223,27 +234,48 @@ public: 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 @@ -252,27 +284,20 @@ public: 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 @@ -285,13 +310,138 @@ public: 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 @@ -311,11 +461,31 @@ public: 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> { @@ -456,6 +626,34 @@ public: 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 diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc index 69a0621..b047abf 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc @@ -63,8 +63,11 @@ apply_predication (const function_instance &instance, tree return_type, { 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); } } @@ -286,13 +289,17 @@ build_one (function_builder &b, const char *signature, 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 @@ -303,6 +310,7 @@ build_32_64 (function_builder &b, const char *signature, 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, @@ -314,8 +322,9 @@ build_32_64 (function_builder &b, const char *signature, 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); } } @@ -332,6 +341,15 @@ build_sv_index (function_builder &b, const char *signature, 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 @@ -342,6 +360,16 @@ build_sv_offset (function_builder &b, const char *signature, 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. @@ -397,6 +425,21 @@ build_all (function_builder &b, const char *signature, 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) \ @@ -449,6 +492,94 @@ struct adr_base : public overloaded_base<0> }; }; +/* 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> { @@ -518,6 +649,26 @@ struct load_contiguous_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> @@ -578,6 +729,19 @@ struct prefetch_gather_base : public overloaded_base<0> } }; +/* 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> @@ -607,6 +771,128 @@ 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 @@ -719,6 +1005,73 @@ struct binary_lane_def : public overloaded_base<0> }; 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 @@ -747,6 +1100,59 @@ struct binary_n_def : public overloaded_base<0> }; SHAPE (binary_n) +/* 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. 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, "vh0,v0,v0", group, MODE_none); + build_all (b, "vh0,v0,s0", group, MODE_n); + } + + tree + resolve (function_resolver &r) const OVERRIDE + { + return r.resolve_uniform_opt_n (2); + } +}; +SHAPE (binary_narrowb_opt_n) + +/* 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) + + 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, "vh0,vh0,v0,v0", group, MODE_none); + build_all (b, "vh0,vh0,v0,s0", 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, 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) @@ -827,6 +1233,26 @@ struct binary_scalar_def : public nonoverloaded_base }; 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 @@ -969,6 +1395,59 @@ struct binary_uint64_opt_n_def : public overloaded_base<0> }; 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> @@ -1009,6 +1488,24 @@ 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) @@ -1031,6 +1528,31 @@ struct compare_opt_n_def : public overloaded_base<0> }; 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. @@ -1456,6 +1978,26 @@ struct load_ext_gather_index_def : public load_ext_gather_base }; 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) @@ -1481,6 +2023,31 @@ struct load_ext_gather_offset_def : public load_ext_gather_base }; 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) @@ -1490,7 +2057,7 @@ SHAPE (load_ext_gather_offset) 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 @@ -1500,23 +2067,30 @@ struct load_gather_sv_def : public overloaded_base<0> 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) @@ -1748,6 +2322,64 @@ SHAPE (setffr) /* 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> { @@ -1773,6 +2405,42 @@ 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) @@ -1830,6 +2498,26 @@ struct store_scatter_index_def : public store_scatter_base }; 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) @@ -1857,6 +2545,57 @@ struct store_scatter_offset_def : public store_scatter_base }; 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 @@ -1913,6 +2652,47 @@ struct ternary_lane_rotate_def : public overloaded_base<0> }; 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) @@ -1940,7 +2720,8 @@ SHAPE (ternary_opt_n) 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 @@ -1949,18 +2730,41 @@ struct ternary_qq_lane_def : public overloaded_base<0> 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); @@ -1969,10 +2773,11 @@ struct ternary_qq_lane_def : public overloaded_base<0> 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) @@ -1980,7 +2785,8 @@ SHAPE (ternary_qq_lane) 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 @@ -1989,23 +2795,47 @@ struct ternary_qq_opt_n_def : public overloaded_base<0> 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) @@ -2034,6 +2864,62 @@ struct ternary_rotate_def : public overloaded_base<0> }; 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 @@ -2082,7 +2968,7 @@ struct unary_def : public overloaded_base<0> }; 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. */ @@ -2104,6 +2990,57 @@ struct unary_convert_def : public overloaded_base<1> }; 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> { @@ -2124,6 +3061,22 @@ 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 { @@ -2135,6 +3088,27 @@ 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 diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.h b/gcc/config/aarch64/aarch64-sve-builtins-shapes.h index 15137128..2a75a82 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-shapes.h +++ b/gcc/config/aarch64/aarch64-sve-builtins-shapes.h @@ -76,18 +76,27 @@ namespace aarch64_sve 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; @@ -108,8 +117,11 @@ namespace aarch64_sve 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; @@ -122,21 +134,44 @@ namespace aarch64_sve 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; diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc b/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc new file mode 100644 index 0000000..fa3b506 --- /dev/null +++ b/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc @@ -0,0 +1,654 @@ +/* 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 */ diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sve2.def b/gcc/config/aarch64/aarch64-sve-builtins-sve2.def new file mode 100644 index 0000000..5ab41c3 --- /dev/null +++ b/gcc/config/aarch64/aarch64-sve-builtins-sve2.def @@ -0,0 +1,214 @@ +/* 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 diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sve2.h b/gcc/config/aarch64/aarch64-sve-builtins-sve2.h new file mode 100644 index 0000000..90e29fc --- /dev/null +++ b/gcc/config/aarch64/aarch64-sve-builtins-sve2.h @@ -0,0 +1,191 @@ +/* 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 diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index b09067c..7aab5bd 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -50,6 +50,7 @@ #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 { @@ -190,6 +191,24 @@ CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = { #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) @@ -208,23 +227,64 @@ CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = { #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 @@ -238,10 +298,20 @@ CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = { #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) \ @@ -265,6 +335,20 @@ CONSTEXPR const type_suffix_info type_suffixes[NUM_TYPE_SUFFIXES + 1] = { 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) \ @@ -334,18 +418,36 @@ DEF_SVE_TYPES_ARRAY (all_unsigned); 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); @@ -357,6 +459,12 @@ static const predication_index preds_none[] = { PRED_none, NUM_PREDS }; 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[] = { @@ -854,8 +962,11 @@ function_builder::add_unique_function (const function_instance &instance, 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) @@ -863,7 +974,8 @@ function_builder::add_overloaded_function (const function_instance &instance, 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 @@ -1079,7 +1191,7 @@ function_resolver::infer_pointer_type (unsigned int argno, { 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; @@ -1447,6 +1559,28 @@ require_derived_vector_type (unsigned int argno, 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. */ @@ -1641,6 +1775,31 @@ function_resolver::resolve_sv_displacement (unsigned int argno, 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); @@ -1650,7 +1809,6 @@ function_resolver::resolve_sv_displacement (unsigned int 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 @@ -1659,7 +1817,21 @@ function_resolver::resolve_sv_displacement (unsigned int argno, 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) @@ -1873,11 +2045,12 @@ function_resolver::check_gp_argument (unsigned int nops, 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. */ @@ -1885,9 +2058,12 @@ tree function_resolver:: 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)) @@ -1897,7 +2073,7 @@ finish_opt_n_resolution (unsigned int argno, unsigned int first_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", @@ -1917,13 +2093,14 @@ finish_opt_n_resolution (unsigned int argno, unsigned int first_argno, 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. @@ -1935,10 +2112,11 @@ finish_opt_n_resolution (unsigned int argno, unsigned int first_argno, 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; @@ -2302,6 +2480,19 @@ gimple_folder::load_store_cookie (tree type) 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 () @@ -2584,14 +2775,22 @@ function_expander::generate_insn (insn_code icode) - 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 @@ -2605,31 +2804,45 @@ function_expander::prepare_gather_address_operands (unsigned int argno) 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 @@ -2969,7 +3182,11 @@ function_expander::map_to_unspecs (int unspec_for_sint, int unspec_for_uint, } 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); diff --git a/gcc/config/aarch64/aarch64-sve-builtins.def b/gcc/config/aarch64/aarch64-sve-builtins.def index 9731a22..040f1d8 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.def +++ b/gcc/config/aarch64/aarch64-sve-builtins.def @@ -91,6 +91,7 @@ DEF_SVE_TYPE_SUFFIX (u32, svuint32_t, unsigned, 32, VNx4SImode) 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 diff --git a/gcc/config/aarch64/aarch64-sve-builtins.h b/gcc/config/aarch64/aarch64-sve-builtins.h index 7d07c10..f307233 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.h +++ b/gcc/config/aarch64/aarch64-sve-builtins.h @@ -416,6 +416,8 @@ public: 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); @@ -430,12 +432,13 @@ public: 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 (); @@ -493,6 +496,7 @@ public: 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); @@ -536,7 +540,7 @@ public: 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); diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index fcb674f..22eda93 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -3381,9 +3381,13 @@ ;; - 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. @@ -4445,9 +4449,12 @@ ;; ------------------------------------------------------------------------- ;; 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 @@ -4464,50 +4471,50 @@ } ) -;; 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")]) ;; ------------------------------------------------------------------------- @@ -6835,6 +6842,10 @@ ;; ---- [INT] While tests ;; ------------------------------------------------------------------------- ;; Includes: +;; - WHILEGE (SVE2) +;; - WHILEGT (SVE2) +;; - WHILEHI (SVE2) +;; - WHILEHS (SVE2) ;; - WHILELE ;; - WHILELO ;; - WHILELS diff --git a/gcc/config/aarch64/aarch64-sve2.md b/gcc/config/aarch64/aarch64-sve2.md index 1b2b6b2..eaded5d 100644 --- a/gcc/config/aarch64/aarch64-sve2.md +++ b/gcc/config/aarch64/aarch64-sve2.md @@ -21,28 +21,191 @@ ;; 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. @@ -64,12 +227,15 @@ 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; } @@ -81,10 +247,22 @@ ;; Includes: ;; - SHADD ;; - SHSUB +;; - SHSUBR +;; - SQRSHL +;; - SQRSHLR ;; - SRHADD +;; - SRSHL +;; - SRSHLR +;; - SUQADD ;; - UHADD ;; - UHSUB +;; - UHSUBR +;; - UQRSHL +;; - UQRSHLR ;; - URHADD +;; - URSHL +;; - URSHLR +;; - USQADD ;; ------------------------------------------------------------------------- ;; Integer average (floor). @@ -119,31 +297,485 @@ } ) -;; 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 @@ -151,8 +783,23 @@ ;; - 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 @@ -214,6 +861,18 @@ ;; 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 @@ -232,6 +891,25 @@ ;; 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 @@ -258,6 +936,25 @@ ;; 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 @@ -284,6 +981,26 @@ ;; Unpredicated bitwise select with inverted second operand. ;; (bsl_dup ? bsl_mov : ~op3) == ((bsl_dup & bsl_mov) | (~op3 & ~bsl_dup)) +(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") + (match_operand:SVE_FULL_I 3 "register_operand")) + (unspec:SVE_FULL_I + [(match_dup 4) + (and:SVE_FULL_I + (not:SVE_FULL_I + (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 @@ -340,27 +1057,144 @@ ;; ---- [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")] ) ;; ========================================================================= @@ -368,24 +1202,302 @@ ;; ========================================================================= ;; ------------------------------------------------------------------------- +;; ---- [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 +;; ------------------------------------------------------------------------- + +(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" + "@ + <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")] +) -;; 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_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" - "<su>mull<bt>\t%0.<Vewtype>, %1.<Vetype>, %2.<Vetype>" + "@ + <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")] ) ;; ========================================================================= @@ -393,6 +1505,74 @@ ;; ========================================================================= ;; ------------------------------------------------------------------------- +;; ---- [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: @@ -400,29 +1580,653 @@ ;; - 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" + "@ + 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" - "<r>shrnt\t%0.<Vetype>, %2.<Vewtype>, #%3" + "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>" ) ;; ========================================================================= @@ -469,3 +2273,242 @@ 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")] +) diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 04dabd4..af5b00c 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -248,6 +248,10 @@ extern unsigned aarch64_architecture_version; #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) @@ -302,6 +306,18 @@ extern unsigned aarch64_architecture_version; /* 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) diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 509b9e5..a144e24 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -231,7 +231,9 @@ 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 @@ -241,6 +243,10 @@ UNSPEC_UNPACKSLO UNSPEC_UNPACKULO UNSPEC_PACK + UNSPEC_WHILEGE + UNSPEC_WHILEGT + UNSPEC_WHILEHI + UNSPEC_WHILEHS UNSPEC_WHILELE UNSPEC_WHILELO UNSPEC_WHILELS diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index c6b71a6..058c6bc 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -285,8 +285,10 @@ (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]) @@ -298,6 +300,10 @@ 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]) @@ -308,6 +314,9 @@ ;; 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]) @@ -319,10 +328,17 @@ ;; 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]) @@ -386,6 +402,10 @@ ;; 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]) @@ -446,10 +466,6 @@ 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. @@ -472,10 +488,6 @@ 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. @@ -643,11 +655,129 @@ 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. ]) ;; ------------------------------------------------------------------ @@ -1011,6 +1141,11 @@ (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")]) @@ -1049,10 +1184,16 @@ (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") @@ -1401,6 +1542,11 @@ (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. @@ -1427,7 +1573,7 @@ (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. @@ -1529,12 +1675,18 @@ (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]) @@ -1752,7 +1904,13 @@ (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") @@ -1768,7 +1926,11 @@ (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") @@ -1814,7 +1976,11 @@ (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")]) @@ -1850,13 +2016,6 @@ (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]) @@ -1971,6 +2130,11 @@ (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]) @@ -2084,6 +2248,10 @@ (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")]) @@ -2095,6 +2263,232 @@ (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]) @@ -2153,6 +2547,16 @@ (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") @@ -2169,6 +2573,16 @@ (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") @@ -2269,8 +2683,6 @@ (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")]) @@ -2309,14 +2721,17 @@ (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") @@ -2325,9 +2740,6 @@ (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") @@ -2488,6 +2900,10 @@ (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") @@ -2495,7 +2911,11 @@ (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") @@ -2511,40 +2931,213 @@ (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") @@ -2574,12 +3167,28 @@ (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") diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64 index 2bdb4a9..11d20b7 100644 --- a/gcc/config/aarch64/t-aarch64 +++ b/gcc/config/aarch64/t-aarch64 @@ -46,6 +46,8 @@ aarch64-builtins.o: $(srcdir)/config/aarch64/aarch64-builtins.c $(CONFIG_H) \ 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) \ @@ -54,7 +56,8 @@ aarch64-sve-builtins.o: $(srcdir)/config/aarch64/aarch64-sve-builtins.cc \ 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 @@ -81,6 +84,20 @@ aarch64-sve-builtins-base.o: \ $(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 \ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 943b632..0cf4394 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,61 @@ 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... diff --git a/gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/mul_lane_1.c b/gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/mul_lane_1.c new file mode 100644 index 0000000..ea4d01e --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/mul_lane_1.c @@ -0,0 +1,32 @@ +#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'} } */ +} diff --git a/gcc/testsuite/g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp b/gcc/testsuite/g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp new file mode 100644 index 0000000..304cdad --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp @@ -0,0 +1,85 @@ +# 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 diff --git a/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_3.c b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_3.c new file mode 100644 index 0000000..34aa6e1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_3.c @@ -0,0 +1,221 @@ +/* { 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; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h index 8cc7291..f088455 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/test_sve_acle.h @@ -79,6 +79,15 @@ __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)) \ @@ -103,6 +112,16 @@ 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, \ @@ -113,6 +132,16 @@ 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)) \ @@ -327,4 +356,20 @@ __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 diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_lane_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_lane_1.c index f1879ca..3913ff6 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_lane_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_lane_1.c @@ -9,7 +9,7 @@ f1 (svbool_t pg, svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, 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'} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_long_lane_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_long_lane_1.c new file mode 100644 index 0000000..bfe7808 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_long_lane_1.c @@ -0,0 +1,47 @@ +/* { 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\]} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_long_opt_n_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_long_opt_n_1.c new file mode 100644 index 0000000..27893c6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_long_opt_n_1.c @@ -0,0 +1,36 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_narrowb_opt_n_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_narrowb_opt_n_1.c new file mode 100644 index 0000000..920cbd1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_narrowb_opt_n_1.c @@ -0,0 +1,36 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_narrowt_opt_n_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_narrowt_opt_n_1.c new file mode 100644 index 0000000..eb70d05 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_narrowt_opt_n_1.c @@ -0,0 +1,43 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_to_uint_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_to_uint_1.c new file mode 100644 index 0000000..213defc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_to_uint_1.c @@ -0,0 +1,19 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_1.c new file mode 100644 index 0000000..f58ab75 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_1.c @@ -0,0 +1,37 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_opt_n_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_opt_n_1.c new file mode 100644 index 0000000..5a58211 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/binary_wide_opt_n_1.c @@ -0,0 +1,38 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/compare_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/compare_1.c new file mode 100644 index 0000000..12511a8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/compare_1.c @@ -0,0 +1,27 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/compare_ptr_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/compare_ptr_1.c new file mode 100644 index 0000000..d184e34 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/compare_ptr_1.c @@ -0,0 +1,27 @@ +/* { 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 \*'} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_index_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_index_restricted_1.c new file mode 100644 index 0000000..c47e541 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_index_restricted_1.c @@ -0,0 +1,43 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_1.c new file mode 100644 index 0000000..353fec2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_1.c @@ -0,0 +1,37 @@ +/* { 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'} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_2.c new file mode 100644 index 0000000..e22b3dd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_2.c @@ -0,0 +1,37 @@ +/* { 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'} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_3.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_3.c new file mode 100644 index 0000000..73b5715 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_3.c @@ -0,0 +1,37 @@ +/* { 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); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_4.c new file mode 100644 index 0000000..e2ceb18 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_4.c @@ -0,0 +1,37 @@ +/* { 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); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_gather_sv_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_gather_sv_restricted_1.c new file mode 100644 index 0000000..b12faad --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_gather_sv_restricted_1.c @@ -0,0 +1,82 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_gather_sv_restricted_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_gather_sv_restricted_2.c new file mode 100644 index 0000000..6bb9b7f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_gather_sv_restricted_2.c @@ -0,0 +1,75 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mul_lane_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mul_lane_1.c new file mode 100644 index 0000000..ac57546 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mul_lane_1.c @@ -0,0 +1,32 @@ +#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'} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_left_imm_long_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_left_imm_long_1.c new file mode 100644 index 0000000..9b92d75 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_left_imm_long_1.c @@ -0,0 +1,57 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_left_imm_to_uint_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_left_imm_to_uint_1.c new file mode 100644 index 0000000..e5ca2e8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_left_imm_to_uint_1.c @@ -0,0 +1,44 @@ +/* { 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\]} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_left_imm_to_uint_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_left_imm_to_uint_2.c new file mode 100644 index 0000000..765380b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_left_imm_to_uint_2.c @@ -0,0 +1,44 @@ +/* { 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\]} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowb_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowb_1.c new file mode 100644 index 0000000..6536679 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowb_1.c @@ -0,0 +1,70 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowb_to_uint_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowb_to_uint_1.c new file mode 100644 index 0000000..51f9388 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowb_to_uint_1.c @@ -0,0 +1,58 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowt_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowt_1.c new file mode 100644 index 0000000..6c31cf8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowt_1.c @@ -0,0 +1,81 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowt_to_uint_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowt_to_uint_1.c new file mode 100644 index 0000000..2e35ad3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/shift_right_imm_narrowt_to_uint_1.c @@ -0,0 +1,64 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c new file mode 100644 index 0000000..5e31362 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c @@ -0,0 +1,94 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c new file mode 100644 index 0000000..aef152a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c @@ -0,0 +1,103 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/tbl_tuple_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/tbl_tuple_1.c new file mode 100644 index 0000000..9c22af4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/tbl_tuple_1.c @@ -0,0 +1,31 @@ +/* { 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; +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_lane_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_lane_1.c index bbd1f91..d59ffab 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_lane_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_lane_1.c @@ -9,7 +9,7 @@ f1 (svbool_t pg, svfloat16_t f16, svfloat32_t f32, svfloat64_t 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} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_lane_rotate_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_lane_rotate_1.c index bccc6c7..68e5172 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_lane_rotate_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_lane_rotate_1.c @@ -9,7 +9,7 @@ f1 (svbool_t pg, svfloat16_t f16, svfloat32_t f32, svfloat64_t f64, 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} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_long_lane_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_long_lane_1.c new file mode 100644 index 0000000..e20e1a1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_long_lane_1.c @@ -0,0 +1,50 @@ +/* { 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\]} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_long_opt_n_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_long_opt_n_1.c new file mode 100644 index 0000000..c6718cf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_long_opt_n_1.c @@ -0,0 +1,26 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_qq_lane_rotate_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_qq_lane_rotate_1.c new file mode 100644 index 0000000..a748a86 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_qq_lane_rotate_1.c @@ -0,0 +1,57 @@ +/* { 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); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_qq_rotate_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_qq_rotate_1.c new file mode 100644 index 0000000..65e749b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_qq_rotate_1.c @@ -0,0 +1,45 @@ +/* { 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); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_shift_right_imm_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_shift_right_imm_1.c new file mode 100644 index 0000000..2811137 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_shift_right_imm_1.c @@ -0,0 +1,41 @@ +/* { 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\]} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_uint_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_uint_1.c new file mode 100644 index 0000000..711b6a1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_uint_1.c @@ -0,0 +1,51 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_convert_narrowt_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_convert_narrowt_1.c new file mode 100644 index 0000000..92c07b8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_convert_narrowt_1.c @@ -0,0 +1,30 @@ +#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); +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowb_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowb_1.c new file mode 100644 index 0000000..c03d644 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowb_1.c @@ -0,0 +1,27 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowb_to_uint_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowb_to_uint_1.c new file mode 100644 index 0000000..c3e2103 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowb_to_uint_1.c @@ -0,0 +1,27 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowt_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowt_1.c new file mode 100644 index 0000000..4ed179c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowt_1.c @@ -0,0 +1,31 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowt_to_uint_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowt_to_uint_1.c new file mode 100644 index 0000000..acaa546 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_narrowt_to_uint_1.c @@ -0,0 +1,31 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_to_int_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_to_int_1.c new file mode 100644 index 0000000..517d11f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/unary_to_int_1.c @@ -0,0 +1,27 @@ +/* { 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} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp b/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp new file mode 100644 index 0000000..b3189fe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle-asm.exp @@ -0,0 +1,81 @@ +# 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 diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle.exp b/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle.exp new file mode 100644 index 0000000..0fbaae5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/aarch64-sve2-acle.exp @@ -0,0 +1,52 @@ +# 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 diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s16.c new file mode 100644 index 0000000..ee18ec8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s32.c new file mode 100644 index 0000000..73c0028 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s64.c new file mode 100644 index 0000000..0c169db --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s8.c new file mode 100644 index 0000000..8e442d7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u16.c new file mode 100644 index 0000000..7198001 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u32.c new file mode 100644 index 0000000..2ba8f41 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u64.c new file mode 100644 index 0000000..8c6bef02 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u8.c new file mode 100644 index 0000000..2c3e879 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aba_u8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_s16.c new file mode 100644 index 0000000..39668e6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_s32.c new file mode 100644 index 0000000..2068bf7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_s64.c new file mode 100644 index 0000000..5c2ea4d1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_u16.c new file mode 100644 index 0000000..6cb3d89 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_u16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_u32.c new file mode 100644 index 0000000..5d378da --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_u32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_u64.c new file mode 100644 index 0000000..950938c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalb_u64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_s16.c new file mode 100644 index 0000000..7e7fbec --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_s32.c new file mode 100644 index 0000000..4173c49 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_s64.c new file mode 100644 index 0000000..39964de --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_u16.c new file mode 100644 index 0000000..d0f956f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_u16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_u32.c new file mode 100644 index 0000000..efa5760 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_u32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_u64.c new file mode 100644 index 0000000..8f1460f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abalt_u64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_s16.c new file mode 100644 index 0000000..f5f4323 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_s32.c new file mode 100644 index 0000000..0555a3e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_s64.c new file mode 100644 index 0000000..9cbbb8f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_u16.c new file mode 100644 index 0000000..64ac063 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_u32.c new file mode 100644 index 0000000..8cf896e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_u64.c new file mode 100644 index 0000000..6ed67fe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_s16.c new file mode 100644 index 0000000..482d5ed --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_s32.c new file mode 100644 index 0000000..bee805c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_s64.c new file mode 100644 index 0000000..ccc9b2a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_u16.c new file mode 100644 index 0000000..fb90dd8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_u32.c new file mode 100644 index 0000000..161e8f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_u64.c new file mode 100644 index 0000000..e21cd16 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/abdlt_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_s16.c new file mode 100644 index 0000000..9372acc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_s16.c @@ -0,0 +1,94 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_s32.c new file mode 100644 index 0000000..b0404e0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_s32.c @@ -0,0 +1,94 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_s64.c new file mode 100644 index 0000000..f17b2c5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_s64.c @@ -0,0 +1,94 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_u16.c new file mode 100644 index 0000000..bc4a4ac --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_u16.c @@ -0,0 +1,94 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_u32.c new file mode 100644 index 0000000..c21c505 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_u32.c @@ -0,0 +1,94 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_u64.c new file mode 100644 index 0000000..761feeb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adalp_u64.c @@ -0,0 +1,94 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclb_u32.c new file mode 100644 index 0000000..64d5c08 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclb_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclb_u64.c new file mode 100644 index 0000000..77b2bd2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclb_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclt_u32.c new file mode 100644 index 0000000..d755227 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclt_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclt_u64.c new file mode 100644 index 0000000..b872c35 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/adclt_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_s16.c new file mode 100644 index 0000000..1dfbd2d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_s32.c new file mode 100644 index 0000000..44b961c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_s64.c new file mode 100644 index 0000000..97115c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_u16.c new file mode 100644 index 0000000..dc2d12b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_u32.c new file mode 100644 index 0000000..ba6d3b1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_u64.c new file mode 100644 index 0000000..7baa314 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_s16.c new file mode 100644 index 0000000..79909ad --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_s16.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_s32.c new file mode 100644 index 0000000..07e75a1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_s32.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_s64.c new file mode 100644 index 0000000..84984a9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_s64.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_u16.c new file mode 100644 index 0000000..a05d79f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_u16.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_u32.c new file mode 100644 index 0000000..b2249a7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_u32.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_u64.c new file mode 100644 index 0000000..c1c01b5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addhnt_u64.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_s16.c new file mode 100644 index 0000000..1288dc7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_s32.c new file mode 100644 index 0000000..feb7aa7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_s64.c new file mode 100644 index 0000000..a37c340 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_u16.c new file mode 100644 index 0000000..92cb58e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_u32.c new file mode 100644 index 0000000..0bd2eac --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_u64.c new file mode 100644 index 0000000..758d3e0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlbt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlbt_s16.c new file mode 100644 index 0000000..c6bc5ea --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlbt_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlbt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlbt_s32.c new file mode 100644 index 0000000..c37271a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlbt_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlbt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlbt_s64.c new file mode 100644 index 0000000..4db9c9f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlbt_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_s16.c new file mode 100644 index 0000000..f585c86 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_s32.c new file mode 100644 index 0000000..1669933 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_s64.c new file mode 100644 index 0000000..3f0c78a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_u16.c new file mode 100644 index 0000000..250c9b0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_u32.c new file mode 100644 index 0000000..c264da6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_u64.c new file mode 100644 index 0000000..5a4f3d6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addlt_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_f16.c new file mode 100644 index 0000000..98bc3d9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_f16.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_f32.c new file mode 100644 index 0000000..71dfd6a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_f32.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_f64.c new file mode 100644 index 0000000..ff9a95a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_f64.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s16.c new file mode 100644 index 0000000..504330a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s16.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s32.c new file mode 100644 index 0000000..3e04a0b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s32.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s64.c new file mode 100644 index 0000000..9cb56dc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s64.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s8.c new file mode 100644 index 0000000..f9fdede --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_s8.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u16.c new file mode 100644 index 0000000..ed897c4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u16.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u32.c new file mode 100644 index 0000000..3f735d8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u32.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u64.c new file mode 100644 index 0000000..a739272 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u64.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u8.c new file mode 100644 index 0000000..6417304 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addp_u8.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_s16.c new file mode 100644 index 0000000..c0f7ef3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_s32.c new file mode 100644 index 0000000..263b9d9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_s64.c new file mode 100644 index 0000000..0b5740f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_u16.c new file mode 100644 index 0000000..acf21ea --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_u32.c new file mode 100644 index 0000000..4cecac9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_u64.c new file mode 100644 index 0000000..2de559d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_s16.c new file mode 100644 index 0000000..ae831e4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_s32.c new file mode 100644 index 0000000..d4ac108 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_s64.c new file mode 100644 index 0000000..88370f7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u16.c new file mode 100644 index 0000000..76312cd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u32.c new file mode 100644 index 0000000..808645f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u64.c new file mode 100644 index 0000000..f72dde7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/addwt_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesd_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesd_u8.c new file mode 100644 index 0000000..622f5cf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesd_u8.c @@ -0,0 +1,44 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aese_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aese_u8.c new file mode 100644 index 0000000..6555bbb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aese_u8.c @@ -0,0 +1,44 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c new file mode 100644 index 0000000..4630595 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesimc_u8.c @@ -0,0 +1,29 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c new file mode 100644 index 0000000..6e8acf4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/aesmc_u8.c @@ -0,0 +1,29 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s16.c new file mode 100644 index 0000000..acad87d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s32.c new file mode 100644 index 0000000..aeb4357 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s64.c new file mode 100644 index 0000000..2087e58 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s8.c new file mode 100644 index 0000000..548aafa --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u16.c new file mode 100644 index 0000000..b63a477 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u32.c new file mode 100644 index 0000000..d03c938 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u64.c new file mode 100644 index 0000000..e039062 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u8.c new file mode 100644 index 0000000..0957d58 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bcax_u8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u16.c new file mode 100644 index 0000000..1423085 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u16.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u32.c new file mode 100644 index 0000000..7f08df4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u32.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u64.c new file mode 100644 index 0000000..7f7cbbe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u64.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u8.c new file mode 100644 index 0000000..b420323 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bdep_u8.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u16.c new file mode 100644 index 0000000..50a6479 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u16.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u32.c new file mode 100644 index 0000000..9f98b84 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u32.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u64.c new file mode 100644 index 0000000..9dbaec1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u64.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u8.c new file mode 100644 index 0000000..81ed5a4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bext_u8.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u16.c new file mode 100644 index 0000000..70aeae3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u16.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u32.c new file mode 100644 index 0000000..6e19e38 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u32.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u64.c new file mode 100644 index 0000000..27fa40f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u64.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u8.c new file mode 100644 index 0000000..b667e03 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bgrp_u8.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s16.c new file mode 100644 index 0000000..efe4f03 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s32.c new file mode 100644 index 0000000..84a5d01 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s64.c new file mode 100644 index 0000000..aed7b05 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s8.c new file mode 100644 index 0000000..998186c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u16.c new file mode 100644 index 0000000..2e66c59 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u32.c new file mode 100644 index 0000000..ef214bc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u64.c new file mode 100644 index 0000000..7cf271d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u8.c new file mode 100644 index 0000000..74a79cb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl1n_u8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s16.c new file mode 100644 index 0000000..01fd135 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s32.c new file mode 100644 index 0000000..f90d142 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s64.c new file mode 100644 index 0000000..ca971ed --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s8.c new file mode 100644 index 0000000..0f10131 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u16.c new file mode 100644 index 0000000..9e827ae --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u32.c new file mode 100644 index 0000000..7863250 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u64.c new file mode 100644 index 0000000..31cbec9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u8.c new file mode 100644 index 0000000..ee745cd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl2n_u8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s16.c new file mode 100644 index 0000000..5754616 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s32.c new file mode 100644 index 0000000..7847778 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s64.c new file mode 100644 index 0000000..6bd4b17 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s8.c new file mode 100644 index 0000000..49a30ef --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u16.c new file mode 100644 index 0000000..f73e31f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u32.c new file mode 100644 index 0000000..0d70529 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u64.c new file mode 100644 index 0000000..41882ab --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u8.c new file mode 100644 index 0000000..db36282 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/bsl_u8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s16.c new file mode 100644 index 0000000..7632cee --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s16.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s32.c new file mode 100644 index 0000000..0288680 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s32.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s64.c new file mode 100644 index 0000000..5bea27f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s64.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s8.c new file mode 100644 index 0000000..cf42766 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_s8.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u16.c new file mode 100644 index 0000000..882b88f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u16.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u32.c new file mode 100644 index 0000000..4c460ff --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u32.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u64.c new file mode 100644 index 0000000..0ca98c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u64.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u8.c new file mode 100644 index 0000000..59908d4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cadd_u8.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_lane_s32.c new file mode 100644 index 0000000..ebd114c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_lane_s32.c @@ -0,0 +1,198 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_lane_s64.c new file mode 100644 index 0000000..12a9f58 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_lane_s64.c @@ -0,0 +1,188 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_s32.c new file mode 100644 index 0000000..c8c0c7a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_s32.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_s64.c new file mode 100644 index 0000000..cf1ddcd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cdot_s64.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_s16.c new file mode 100644 index 0000000..429f916 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_s16.c @@ -0,0 +1,216 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_s32.c new file mode 100644 index 0000000..ed58940 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_s32.c @@ -0,0 +1,198 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_u16.c new file mode 100644 index 0000000..43c405b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_u16.c @@ -0,0 +1,216 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_u32.c new file mode 100644 index 0000000..d5d52eb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_lane_u32.c @@ -0,0 +1,198 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s16.c new file mode 100644 index 0000000..dc2aed9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s16.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s32.c new file mode 100644 index 0000000..1389727 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s32.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s64.c new file mode 100644 index 0000000..2e28fc3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s64.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s8.c new file mode 100644 index 0000000..3150632 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_s8.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u16.c new file mode 100644 index 0000000..9a3b1d2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u16.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u32.c new file mode 100644 index 0000000..eadcd3b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u32.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u64.c new file mode 100644 index 0000000..ccf0591 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u64.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u8.c new file mode 100644 index 0000000..be92311 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cmla_u8.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtlt_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtlt_f32.c new file mode 100644 index 0000000..911defa --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtlt_f32.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtlt_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtlt_f64.c new file mode 100644 index 0000000..c34947b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtlt_f64.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtnt_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtnt_f16.c new file mode 100644 index 0000000..a7960e3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtnt_f16.c @@ -0,0 +1,88 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtnt_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtnt_f32.c new file mode 100644 index 0000000..44fb30f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtnt_f32.c @@ -0,0 +1,88 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtx_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtx_f32.c new file mode 100644 index 0000000..21724c8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtx_f32.c @@ -0,0 +1,94 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtxnt_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtxnt_f32.c new file mode 100644 index 0000000..38aa38e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/cvtxnt_f32.c @@ -0,0 +1,88 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s16.c new file mode 100644 index 0000000..48e99a8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s16.c @@ -0,0 +1,108 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s32.c new file mode 100644 index 0000000..1a62f9d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s32.c @@ -0,0 +1,108 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s64.c new file mode 100644 index 0000000..36b57bf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s64.c @@ -0,0 +1,108 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s8.c new file mode 100644 index 0000000..e9dc149 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_s8.c @@ -0,0 +1,108 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u16.c new file mode 100644 index 0000000..95b4097 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u16.c @@ -0,0 +1,108 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u32.c new file mode 100644 index 0000000..e9665bc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u32.c @@ -0,0 +1,108 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u64.c new file mode 100644 index 0000000..6de1ee06e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u64.c @@ -0,0 +1,108 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u8.c new file mode 100644 index 0000000..ac55a27 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eor3_u8.c @@ -0,0 +1,108 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s16.c new file mode 100644 index 0000000..24dbab3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s32.c new file mode 100644 index 0000000..872f402 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s64.c new file mode 100644 index 0000000..6620852 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s8.c new file mode 100644 index 0000000..361c327 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u16.c new file mode 100644 index 0000000..26e806e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u32.c new file mode 100644 index 0000000..edf7a00 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u64.c new file mode 100644 index 0000000..6112e91 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u8.c new file mode 100644 index 0000000..9040424 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eorbt_u8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s16.c new file mode 100644 index 0000000..c85c1a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s32.c new file mode 100644 index 0000000..8afb0bf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s64.c new file mode 100644 index 0000000..da58d70 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s8.c new file mode 100644 index 0000000..3764603 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u16.c new file mode 100644 index 0000000..89eb171 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u32.c new file mode 100644 index 0000000..39c7df6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u64.c new file mode 100644 index 0000000..33a0649 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u8.c new file mode 100644 index 0000000..952d202 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/eortb_u8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s16.c new file mode 100644 index 0000000..dbc239d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s16.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s32.c new file mode 100644 index 0000000..97ac80d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s32.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s64.c new file mode 100644 index 0000000..b911491 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s64.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s8.c new file mode 100644 index 0000000..6d12a3c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_s8.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u16.c new file mode 100644 index 0000000..ff8bb9d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u16.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u32.c new file mode 100644 index 0000000..ddc5477 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u32.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u64.c new file mode 100644 index 0000000..6b07ae3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u64.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u8.c new file mode 100644 index 0000000..eb61335 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hadd_u8.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_s32.c new file mode 100644 index 0000000..7bf783a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_s32.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_s64.c new file mode 100644 index 0000000..001f5f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_s64.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_u32.c new file mode 100644 index 0000000..d93091a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_u32.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_u64.c new file mode 100644 index 0000000..3b88980 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histcnt_u64.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histseg_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histseg_s8.c new file mode 100644 index 0000000..380ccdf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histseg_s8.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histseg_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histseg_u8.c new file mode 100644 index 0000000..f43292f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/histseg_u8.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s16.c new file mode 100644 index 0000000..2cc9afd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s16.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s32.c new file mode 100644 index 0000000..9d807a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s32.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s64.c new file mode 100644 index 0000000..5c6577b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s64.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s8.c new file mode 100644 index 0000000..cdd37a2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_s8.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u16.c new file mode 100644 index 0000000..f80666c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u16.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u32.c new file mode 100644 index 0000000..b67c4e0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u32.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u64.c new file mode 100644 index 0000000..c79c46e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u64.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u8.c new file mode 100644 index 0000000..a801132 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsub_u8.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s16.c new file mode 100644 index 0000000..af1bfdd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s16.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s32.c new file mode 100644 index 0000000..029a0c1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s32.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s64.c new file mode 100644 index 0000000..7bddc71 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s64.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s8.c new file mode 100644 index 0000000..9e3de23 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_s8.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u16.c new file mode 100644 index 0000000..d1095de --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u16.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u32.c new file mode 100644 index 0000000..dab1ce8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u32.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u64.c new file mode 100644 index 0000000..b9243b5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u64.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u8.c new file mode 100644 index 0000000..8c4f0a7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/hsubr_u8.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f32.c new file mode 100644 index 0000000..c6acdbf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f32.c @@ -0,0 +1,195 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f64.c new file mode 100644 index 0000000..ff93c44 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_f64.c @@ -0,0 +1,322 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s32.c new file mode 100644 index 0000000..153f5c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s32.c @@ -0,0 +1,195 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s64.c new file mode 100644 index 0000000..778cdbf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_s64.c @@ -0,0 +1,322 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u32.c new file mode 100644 index 0000000..48bc9b9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u32.c @@ -0,0 +1,195 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u64.c new file mode 100644 index 0000000..52e944b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1_gather_u64.c @@ -0,0 +1,322 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s32.c new file mode 100644 index 0000000..0d77cb9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s32.c @@ -0,0 +1,106 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s64.c new file mode 100644 index 0000000..2f86ebd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_s64.c @@ -0,0 +1,133 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u32.c new file mode 100644 index 0000000..2d144db --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u32.c @@ -0,0 +1,106 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u64.c new file mode 100644 index 0000000..e647e68 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sb_gather_u64.c @@ -0,0 +1,133 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s32.c new file mode 100644 index 0000000..f7adbae --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s32.c @@ -0,0 +1,175 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s64.c new file mode 100644 index 0000000..9f3e084 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_s64.c @@ -0,0 +1,262 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u32.c new file mode 100644 index 0000000..12a17d3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u32.c @@ -0,0 +1,175 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u64.c new file mode 100644 index 0000000..619482f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sh_gather_u64.c @@ -0,0 +1,262 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_s64.c new file mode 100644 index 0000000..c150a62 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_s64.c @@ -0,0 +1,282 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_u64.c new file mode 100644 index 0000000..cdcce1a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1sw_gather_u64.c @@ -0,0 +1,282 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s32.c new file mode 100644 index 0000000..fa7487c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s32.c @@ -0,0 +1,106 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s64.c new file mode 100644 index 0000000..2669a0c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_s64.c @@ -0,0 +1,133 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u32.c new file mode 100644 index 0000000..db281d2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u32.c @@ -0,0 +1,106 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u64.c new file mode 100644 index 0000000..c96e9f1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1ub_gather_u64.c @@ -0,0 +1,133 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s32.c new file mode 100644 index 0000000..dbc8e6e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s32.c @@ -0,0 +1,175 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s64.c new file mode 100644 index 0000000..4d0a5fe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_s64.c @@ -0,0 +1,262 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u32.c new file mode 100644 index 0000000..a5b70db --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u32.c @@ -0,0 +1,175 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u64.c new file mode 100644 index 0000000..8ab0ca2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uh_gather_u64.c @@ -0,0 +1,262 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_s64.c new file mode 100644 index 0000000..236e7ab --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_s64.c @@ -0,0 +1,282 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_u64.c new file mode 100644 index 0000000..cd9a0f6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/ldnt1uw_gather_u64.c @@ -0,0 +1,282 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/logb_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/logb_f16.c new file mode 100644 index 0000000..bc68156 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/logb_f16.c @@ -0,0 +1,52 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/logb_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/logb_f32.c new file mode 100644 index 0000000..35bdcd1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/logb_f32.c @@ -0,0 +1,52 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/logb_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/logb_f64.c new file mode 100644 index 0000000..c7c2cb2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/logb_f64.c @@ -0,0 +1,52 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_s16.c new file mode 100644 index 0000000..baebc76 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_s16.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_s8.c new file mode 100644 index 0000000..f35a753 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_s8.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_u16.c new file mode 100644 index 0000000..0bdf446 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_u16.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_u8.c new file mode 100644 index 0000000..6d78692 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/match_u8.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxnmp_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxnmp_f16.c new file mode 100644 index 0000000..02865ea --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxnmp_f16.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxnmp_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxnmp_f32.c new file mode 100644 index 0000000..ac13df5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxnmp_f32.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxnmp_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxnmp_f64.c new file mode 100644 index 0000000..a7547b6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxnmp_f64.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_f16.c new file mode 100644 index 0000000..8be5c40 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_f16.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_f32.c new file mode 100644 index 0000000..5cab4dc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_f32.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_f64.c new file mode 100644 index 0000000..cbb7e65 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_f64.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s16.c new file mode 100644 index 0000000..b8fd094 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s16.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s32.c new file mode 100644 index 0000000..778aab6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s32.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s64.c new file mode 100644 index 0000000..5cb85e7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s64.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s8.c new file mode 100644 index 0000000..fbe8c40 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_s8.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u16.c new file mode 100644 index 0000000..9936c70 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u16.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u32.c new file mode 100644 index 0000000..b1b241f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u32.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u64.c new file mode 100644 index 0000000..19d7202 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u64.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u8.c new file mode 100644 index 0000000..0d2ff00 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/maxp_u8.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minnmp_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minnmp_f16.c new file mode 100644 index 0000000..29e9fe2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minnmp_f16.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minnmp_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minnmp_f32.c new file mode 100644 index 0000000..c63cc72 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minnmp_f32.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minnmp_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minnmp_f64.c new file mode 100644 index 0000000..f9be2b2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minnmp_f64.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_f16.c new file mode 100644 index 0000000..50191c4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_f16.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_f32.c new file mode 100644 index 0000000..df35e61 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_f32.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_f64.c new file mode 100644 index 0000000..a9af1b9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_f64.c @@ -0,0 +1,96 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s16.c new file mode 100644 index 0000000..1ae2197 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s16.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s32.c new file mode 100644 index 0000000..01ba579 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s32.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s64.c new file mode 100644 index 0000000..dbea82d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s64.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s8.c new file mode 100644 index 0000000..f0beb34 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_s8.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u16.c new file mode 100644 index 0000000..f51f23d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u16.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u32.c new file mode 100644 index 0000000..bfdbe28 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u32.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u64.c new file mode 100644 index 0000000..1c8688c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u64.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u8.c new file mode 100644 index 0000000..8fa3e28 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/minp_u8.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_s16.c new file mode 100644 index 0000000..087466a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_s16.c @@ -0,0 +1,129 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_s32.c new file mode 100644 index 0000000..7da8183 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_s32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_s64.c new file mode 100644 index 0000000..c8fe3fd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_s64.c @@ -0,0 +1,74 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_u16.c new file mode 100644 index 0000000..43a4c6e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_u16.c @@ -0,0 +1,129 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_u32.c new file mode 100644 index 0000000..46d47d0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_u32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_u64.c new file mode 100644 index 0000000..cfe82af --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mla_lane_u64.c @@ -0,0 +1,74 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_f32.c new file mode 100644 index 0000000..63cb9dd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_f32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_f32.c new file mode 100644 index 0000000..f38cdac --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_f32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_s32.c new file mode 100644 index 0000000..2de2b11 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_s64.c new file mode 100644 index 0000000..835c9d0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_s64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_u32.c new file mode 100644 index 0000000..5eb9a38 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_u32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_u64.c new file mode 100644 index 0000000..fa0e568 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_lane_u64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_s16.c new file mode 100644 index 0000000..4092a9c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_s32.c new file mode 100644 index 0000000..8f72b26 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_s64.c new file mode 100644 index 0000000..8982255 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_u16.c new file mode 100644 index 0000000..2a1ea26 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_u16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_u32.c new file mode 100644 index 0000000..f27cd47 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_u32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_u64.c new file mode 100644 index 0000000..982e4a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalb_u64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_f32.c new file mode 100644 index 0000000..ef33193 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_f32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_f32.c new file mode 100644 index 0000000..05105df --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_f32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_s32.c new file mode 100644 index 0000000..1d2397e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_s64.c new file mode 100644 index 0000000..4f4ef3d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_s64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_u32.c new file mode 100644 index 0000000..6542106 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_u32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_u64.c new file mode 100644 index 0000000..9464312 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_lane_u64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_s16.c new file mode 100644 index 0000000..7078c38 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_s32.c new file mode 100644 index 0000000..982a5a9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_s64.c new file mode 100644 index 0000000..2cc2670 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_u16.c new file mode 100644 index 0000000..ac6142b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_u16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_u32.c new file mode 100644 index 0000000..c41cf01 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_u32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_u64.c new file mode 100644 index 0000000..9971602 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlalt_u64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_s16.c new file mode 100644 index 0000000..3e996a8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_s16.c @@ -0,0 +1,129 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_s32.c new file mode 100644 index 0000000..e6b9439 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_s32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_s64.c new file mode 100644 index 0000000..de859dd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_s64.c @@ -0,0 +1,74 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_u16.c new file mode 100644 index 0000000..e88c3da --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_u16.c @@ -0,0 +1,129 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_u32.c new file mode 100644 index 0000000..88c586d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_u32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_u64.c new file mode 100644 index 0000000..1bc5a34 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mls_lane_u64.c @@ -0,0 +1,74 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_f32.c new file mode 100644 index 0000000..3ee5074 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_f32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_f32.c new file mode 100644 index 0000000..1fe0fac --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_f32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_s32.c new file mode 100644 index 0000000..48af223 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_s64.c new file mode 100644 index 0000000..afed994 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_s64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_u32.c new file mode 100644 index 0000000..66236fd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_u32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_u64.c new file mode 100644 index 0000000..6a33b73 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_lane_u64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_s16.c new file mode 100644 index 0000000..7bb4031 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_s32.c new file mode 100644 index 0000000..eabe869 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_s64.c new file mode 100644 index 0000000..ac768ed --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_u16.c new file mode 100644 index 0000000..ff50ef7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_u16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_u32.c new file mode 100644 index 0000000..cd94368 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_u32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_u64.c new file mode 100644 index 0000000..a895e7e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslb_u64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_f32.c new file mode 100644 index 0000000..d07f0c9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_f32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_f32.c new file mode 100644 index 0000000..83111f4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_f32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_s32.c new file mode 100644 index 0000000..9475df4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_s64.c new file mode 100644 index 0000000..5cac418 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_s64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_u32.c new file mode 100644 index 0000000..e7d96f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_u32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_u64.c new file mode 100644 index 0000000..b28c5ec --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_lane_u64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_s16.c new file mode 100644 index 0000000..3ac402c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_s32.c new file mode 100644 index 0000000..cd4062a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_s64.c new file mode 100644 index 0000000..5de31b2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_u16.c new file mode 100644 index 0000000..12711f1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_u16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_u32.c new file mode 100644 index 0000000..1e71b93 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_u32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_u64.c new file mode 100644 index 0000000..62b4071 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mlslt_u64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_s16.c new file mode 100644 index 0000000..4be4aff --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_s16.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_s32.c new file mode 100644 index 0000000..e03ebc3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_s32.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_s64.c new file mode 100644 index 0000000..a31dd6e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_s64.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_u16.c new file mode 100644 index 0000000..1fb8570 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_u16.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_u32.c new file mode 100644 index 0000000..099c343 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_u32.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_u64.c new file mode 100644 index 0000000..0f00184 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlb_u64.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_s16.c new file mode 100644 index 0000000..6d48c86 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_s16.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_s32.c new file mode 100644 index 0000000..e9c09f1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_s32.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_s64.c new file mode 100644 index 0000000..0a41a3b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_s64.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_u16.c new file mode 100644 index 0000000..2415bac --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_u16.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_u32.c new file mode 100644 index 0000000..6b5cddb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_u32.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_u64.c new file mode 100644 index 0000000..8cc62f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/movlt_u64.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_s16.c new file mode 100644 index 0000000..255bc52 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_s16.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_s32.c new file mode 100644 index 0000000..3f81f22 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_s32.c @@ -0,0 +1,79 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_s64.c new file mode 100644 index 0000000..4d19cfa --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_s64.c @@ -0,0 +1,60 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u16.c new file mode 100644 index 0000000..86b0bf8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u16.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u32.c new file mode 100644 index 0000000..60d6b30 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u32.c @@ -0,0 +1,79 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u64.c new file mode 100644 index 0000000..c315974 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mul_lane_u64.c @@ -0,0 +1,60 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_s32.c new file mode 100644 index 0000000..075216b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_s32.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_s64.c new file mode 100644 index 0000000..0ec4906 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_s64.c @@ -0,0 +1,78 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_u32.c new file mode 100644 index 0000000..d528736 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_u32.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_u64.c new file mode 100644 index 0000000..a4fdddb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_lane_u64.c @@ -0,0 +1,78 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_s16.c new file mode 100644 index 0000000..9d6eb85 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_s32.c new file mode 100644 index 0000000..0f315c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_s64.c new file mode 100644 index 0000000..1f48cb8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_u16.c new file mode 100644 index 0000000..2f03aff --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_u32.c new file mode 100644 index 0000000..f61ad54 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_u64.c new file mode 100644 index 0000000..726a0f1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_s32.c new file mode 100644 index 0000000..6213d88 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_s32.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_s64.c new file mode 100644 index 0000000..ad4aa39 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_s64.c @@ -0,0 +1,78 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_u32.c new file mode 100644 index 0000000..c0a8a33 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_u32.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_u64.c new file mode 100644 index 0000000..48e5aad --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_lane_u64.c @@ -0,0 +1,78 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_s16.c new file mode 100644 index 0000000..c1ff07f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_s32.c new file mode 100644 index 0000000..d557cc5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_s64.c new file mode 100644 index 0000000..fb13d4f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_u16.c new file mode 100644 index 0000000..39e3cdc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_u32.c new file mode 100644 index 0000000..a16bc48 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_u64.c new file mode 100644 index 0000000..e1b3c89 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/mullt_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s16.c new file mode 100644 index 0000000..4b1255c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s32.c new file mode 100644 index 0000000..2bc94be --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s64.c new file mode 100644 index 0000000..afb2e7d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s8.c new file mode 100644 index 0000000..237ee7d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u16.c new file mode 100644 index 0000000..cba3938 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u32.c new file mode 100644 index 0000000..3db7dda --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u64.c new file mode 100644 index 0000000..0efe618 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u8.c new file mode 100644 index 0000000..e2370f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nbsl_u8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_s16.c new file mode 100644 index 0000000..935b19a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_s16.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_s8.c new file mode 100644 index 0000000..8a00b30 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_s8.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_u16.c new file mode 100644 index 0000000..868c20a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_u16.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_u8.c new file mode 100644 index 0000000..af6b581 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/nmatch_u8.c @@ -0,0 +1,21 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmul_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmul_u8.c new file mode 100644 index 0000000..001b683 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmul_u8.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u32.c new file mode 100644 index 0000000..f627fca --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u64.c new file mode 100644 index 0000000..9446092 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u64.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u8.c new file mode 100644 index 0000000..f41ae80 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_pair_u8.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_u16.c new file mode 100644 index 0000000..f960fca --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_u64.c new file mode 100644 index 0000000..3e6698a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u32.c new file mode 100644 index 0000000..ed0a547 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u64.c new file mode 100644 index 0000000..90e2e99 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u64.c @@ -0,0 +1,72 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u8.c new file mode 100644 index 0000000..580f34a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_pair_u8.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_u16.c new file mode 100644 index 0000000..52ddb40 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_u64.c new file mode 100644 index 0000000..0821e97 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/pmullt_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s16.c new file mode 100644 index 0000000..0756488 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s16.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s32.c new file mode 100644 index 0000000..5341f78 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s32.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s64.c new file mode 100644 index 0000000..3679e65 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s64.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s8.c new file mode 100644 index 0000000..dca25f9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qabs_s8.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s16.c new file mode 100644 index 0000000..6330c42 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s16.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s32.c new file mode 100644 index 0000000..bab4874 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s32.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s64.c new file mode 100644 index 0000000..c2ad921 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s64.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s8.c new file mode 100644 index 0000000..61343be --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_s8.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u16.c new file mode 100644 index 0000000..f6c7ca9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u16.c @@ -0,0 +1,536 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u32.c new file mode 100644 index 0000000..7701d13 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u32.c @@ -0,0 +1,536 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u64.c new file mode 100644 index 0000000..df8c3f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u64.c @@ -0,0 +1,536 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u8.c new file mode 100644 index 0000000..6c856e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qadd_u8.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s16.c new file mode 100644 index 0000000..c7f312c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s16.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s32.c new file mode 100644 index 0000000..b3c951d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s32.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s64.c new file mode 100644 index 0000000..6156a4c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s64.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s8.c new file mode 100644 index 0000000..e4486c0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qcadd_s8.c @@ -0,0 +1,63 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_lane_s32.c new file mode 100644 index 0000000..d37a483 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_lane_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_lane_s64.c new file mode 100644 index 0000000..ea84f20 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_lane_s64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_s16.c new file mode 100644 index 0000000..4d1e903 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_s32.c new file mode 100644 index 0000000..9437377 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_s64.c new file mode 100644 index 0000000..8ac848b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalb_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalbt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalbt_s16.c new file mode 100644 index 0000000..d591db3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalbt_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalbt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalbt_s32.c new file mode 100644 index 0000000..e8326fe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalbt_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalbt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalbt_s64.c new file mode 100644 index 0000000..f29e4de --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalbt_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_lane_s32.c new file mode 100644 index 0000000..3eee233 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_lane_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_lane_s64.c new file mode 100644 index 0000000..ae48c41 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_lane_s64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_s16.c new file mode 100644 index 0000000..2ce6638 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_s32.c new file mode 100644 index 0000000..ec0909d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_s64.c new file mode 100644 index 0000000..4919dc2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlalt_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_lane_s32.c new file mode 100644 index 0000000..918b151 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_lane_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_lane_s64.c new file mode 100644 index 0000000..dd56eff --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_lane_s64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_s16.c new file mode 100644 index 0000000..146d4a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_s32.c new file mode 100644 index 0000000..af0ffb1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_s64.c new file mode 100644 index 0000000..124e537 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslb_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslbt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslbt_s16.c new file mode 100644 index 0000000..d3dda45 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslbt_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslbt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslbt_s32.c new file mode 100644 index 0000000..6785ece --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslbt_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslbt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslbt_s64.c new file mode 100644 index 0000000..6f605e7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslbt_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_lane_s32.c new file mode 100644 index 0000000..261f006 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_lane_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_lane_s64.c new file mode 100644 index 0000000..8ba52ea --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_lane_s64.c @@ -0,0 +1,65 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_s16.c new file mode 100644 index 0000000..99c0b2b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_s16.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_s32.c new file mode 100644 index 0000000..c7cbbfe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_s32.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_s64.c new file mode 100644 index 0000000..37fc3c7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmlslt_s64.c @@ -0,0 +1,86 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_lane_s16.c new file mode 100644 index 0000000..27978f7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_lane_s16.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_lane_s32.c new file mode 100644 index 0000000..706e9d6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_lane_s32.c @@ -0,0 +1,79 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_lane_s64.c new file mode 100644 index 0000000..4a992fe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_lane_s64.c @@ -0,0 +1,60 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s16.c new file mode 100644 index 0000000..aaf056d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s32.c new file mode 100644 index 0000000..6862721 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s64.c new file mode 100644 index 0000000..dd47c09 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s8.c new file mode 100644 index 0000000..31d9e52 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmulh_s8.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_lane_s32.c new file mode 100644 index 0000000..c65f372 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_lane_s32.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_lane_s64.c new file mode 100644 index 0000000..d2f6847 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_lane_s64.c @@ -0,0 +1,78 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_s16.c new file mode 100644 index 0000000..966a1a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_s32.c new file mode 100644 index 0000000..dd79b3b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_s64.c new file mode 100644 index 0000000..b657870 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_lane_s32.c new file mode 100644 index 0000000..8c7e1ce --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_lane_s32.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_lane_s64.c new file mode 100644 index 0000000..b1399ee --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_lane_s64.c @@ -0,0 +1,78 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_s16.c new file mode 100644 index 0000000..1792707 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_s32.c new file mode 100644 index 0000000..c5020cf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_s64.c new file mode 100644 index 0000000..e77fe1c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qdmullt_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s16.c new file mode 100644 index 0000000..ca78f9d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s16.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s32.c new file mode 100644 index 0000000..3d2ed87 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s32.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s64.c new file mode 100644 index 0000000..e137986 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s64.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s8.c new file mode 100644 index 0000000..13c60ef --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qneg_s8.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_lane_s16.c new file mode 100644 index 0000000..0efe60c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_lane_s16.c @@ -0,0 +1,216 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_lane_s32.c new file mode 100644 index 0000000..41525ea --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_lane_s32.c @@ -0,0 +1,198 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s16.c new file mode 100644 index 0000000..9ce1650 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s16.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s32.c new file mode 100644 index 0000000..4179610 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s32.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s64.c new file mode 100644 index 0000000..518d8a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s64.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s8.c new file mode 100644 index 0000000..04b8d79 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdcmlah_s8.c @@ -0,0 +1,167 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_lane_s16.c new file mode 100644 index 0000000..dbe9d06 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_lane_s16.c @@ -0,0 +1,129 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_lane_s32.c new file mode 100644 index 0000000..e4adbb4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_lane_s32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_lane_s64.c new file mode 100644 index 0000000..fe0180c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_lane_s64.c @@ -0,0 +1,74 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s16.c new file mode 100644 index 0000000..559acab --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s32.c new file mode 100644 index 0000000..4ca61f3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s64.c new file mode 100644 index 0000000..48468e3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s8.c new file mode 100644 index 0000000..b50f6a0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlah_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_lane_s16.c new file mode 100644 index 0000000..52b3c14 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_lane_s16.c @@ -0,0 +1,129 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_lane_s32.c new file mode 100644 index 0000000..527988b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_lane_s32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_lane_s64.c new file mode 100644 index 0000000..abebec1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_lane_s64.c @@ -0,0 +1,74 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s16.c new file mode 100644 index 0000000..eb4e810 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s16.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s32.c new file mode 100644 index 0000000..25ba965 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s64.c new file mode 100644 index 0000000..71ca2c2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s8.c new file mode 100644 index 0000000..ecb4d85 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmlsh_s8.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_lane_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_lane_s16.c new file mode 100644 index 0000000..0ae55a8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_lane_s16.c @@ -0,0 +1,115 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_lane_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_lane_s32.c new file mode 100644 index 0000000..38eb7cf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_lane_s32.c @@ -0,0 +1,79 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_lane_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_lane_s64.c new file mode 100644 index 0000000..45416f2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_lane_s64.c @@ -0,0 +1,60 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s16.c new file mode 100644 index 0000000..86c49fa --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s32.c new file mode 100644 index 0000000..7aba428 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s64.c new file mode 100644 index 0000000..f5920a4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s8.c new file mode 100644 index 0000000..37cafcf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrdmulh_s8.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s16.c new file mode 100644 index 0000000..f3b8f54 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s16.c @@ -0,0 +1,397 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s32.c new file mode 100644 index 0000000..4d44765 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s32.c @@ -0,0 +1,397 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s64.c new file mode 100644 index 0000000..7a9cf5f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s64.c @@ -0,0 +1,397 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s8.c new file mode 100644 index 0000000..8d1e3a7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_s8.c @@ -0,0 +1,397 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u16.c new file mode 100644 index 0000000..205f49f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u16.c @@ -0,0 +1,397 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u32.c new file mode 100644 index 0000000..aecc18b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u32.c @@ -0,0 +1,397 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u64.c new file mode 100644 index 0000000..8ffba92 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u64.c @@ -0,0 +1,397 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u8.c new file mode 100644 index 0000000..4ed0237 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshl_u8.c @@ -0,0 +1,397 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_s16.c new file mode 100644 index 0000000..6f244ce --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_s16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_s32.c new file mode 100644 index 0000000..cd222f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_s32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_s64.c new file mode 100644 index 0000000..d4e208a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_s64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_u16.c new file mode 100644 index 0000000..ee7d35d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_u16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_u32.c new file mode 100644 index 0000000..6f180c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_u32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_u64.c new file mode 100644 index 0000000..8d17c10 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnb_u64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_s16.c new file mode 100644 index 0000000..b5a72e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_s16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_s32.c new file mode 100644 index 0000000..bebdbc5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_s32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_s64.c new file mode 100644 index 0000000..b177b72 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_s64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_u16.c new file mode 100644 index 0000000..2b616be --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_u16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_u32.c new file mode 100644 index 0000000..59c5ed3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_u32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_u64.c new file mode 100644 index 0000000..148f3bb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrnt_u64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunb_s16.c new file mode 100644 index 0000000..f19f319 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunb_s16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunb_s32.c new file mode 100644 index 0000000..904af7a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunb_s32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunb_s64.c new file mode 100644 index 0000000..7aa31b3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunb_s64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunt_s16.c new file mode 100644 index 0000000..6cd2a1a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunt_s16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunt_s32.c new file mode 100644 index 0000000..62c4f78 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunt_s32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunt_s64.c new file mode 100644 index 0000000..92021bd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qrshrunt_s64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s16.c new file mode 100644 index 0000000..ca1d762 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s16.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s32.c new file mode 100644 index 0000000..09255ec --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s32.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s64.c new file mode 100644 index 0000000..b2e0dcf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s64.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s8.c new file mode 100644 index 0000000..28979d8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_s8.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u16.c new file mode 100644 index 0000000..93049e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u16.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u32.c new file mode 100644 index 0000000..497a335 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u32.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u64.c new file mode 100644 index 0000000..5cc5052 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u64.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u8.c new file mode 100644 index 0000000..b561122 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshl_u8.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s16.c new file mode 100644 index 0000000..4b5e87b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s16.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s32.c new file mode 100644 index 0000000..03128ee --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s32.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s64.c new file mode 100644 index 0000000..a4e0077 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s64.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s8.c new file mode 100644 index 0000000..45b9f4f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshlu_s8.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_s16.c new file mode 100644 index 0000000..db87571 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_s16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_s32.c new file mode 100644 index 0000000..6d8c5b2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_s32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_s64.c new file mode 100644 index 0000000..3302614 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_s64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_u16.c new file mode 100644 index 0000000..5060188 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_u16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_u32.c new file mode 100644 index 0000000..b5b3416 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_u32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_u64.c new file mode 100644 index 0000000..c412d0c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnb_u64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_s16.c new file mode 100644 index 0000000..224bc03 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_s16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_s32.c new file mode 100644 index 0000000..eaac8e4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_s32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_s64.c new file mode 100644 index 0000000..7d4e199c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_s64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_u16.c new file mode 100644 index 0000000..f95d44a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_u16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_u32.c new file mode 100644 index 0000000..a28a028 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_u32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_u64.c new file mode 100644 index 0000000..c1a45cb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrnt_u64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunb_s16.c new file mode 100644 index 0000000..e23c61e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunb_s16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunb_s32.c new file mode 100644 index 0000000..9652b4a4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunb_s32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunb_s64.c new file mode 100644 index 0000000..fcf4691 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunb_s64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunt_s16.c new file mode 100644 index 0000000..ed4b8a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunt_s16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunt_s32.c new file mode 100644 index 0000000..67d3f99 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunt_s32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunt_s64.c new file mode 100644 index 0000000..cdae11e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qshrunt_s64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s16.c new file mode 100644 index 0000000..c102e58 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s16.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s32.c new file mode 100644 index 0000000..e703ce9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s32.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s64.c new file mode 100644 index 0000000..e901013 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s64.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s8.c new file mode 100644 index 0000000..067ee6e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_s8.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u16.c new file mode 100644 index 0000000..61be746 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u16.c @@ -0,0 +1,536 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u32.c new file mode 100644 index 0000000..d90dcadb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u32.c @@ -0,0 +1,536 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u64.c new file mode 100644 index 0000000..b25c6a5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u64.c @@ -0,0 +1,536 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u8.c new file mode 100644 index 0000000..686b2b4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsub_u8.c @@ -0,0 +1,530 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s16.c new file mode 100644 index 0000000..577310d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s16.c @@ -0,0 +1,331 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s32.c new file mode 100644 index 0000000..f6a06c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s32.c @@ -0,0 +1,351 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s64.c new file mode 100644 index 0000000..12b0635 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s64.c @@ -0,0 +1,351 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s8.c new file mode 100644 index 0000000..ce814a8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_s8.c @@ -0,0 +1,301 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u16.c new file mode 100644 index 0000000..f406bf2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u16.c @@ -0,0 +1,331 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u32.c new file mode 100644 index 0000000..5c4bc9e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u32.c @@ -0,0 +1,351 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u64.c new file mode 100644 index 0000000..d0d146e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u64.c @@ -0,0 +1,351 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u8.c new file mode 100644 index 0000000..7b487fd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qsubr_u8.c @@ -0,0 +1,301 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_s16.c new file mode 100644 index 0000000..269c3c1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_s16.c @@ -0,0 +1,12 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_s32.c new file mode 100644 index 0000000..d698893 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_s32.c @@ -0,0 +1,12 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_s64.c new file mode 100644 index 0000000..5eed221 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_s64.c @@ -0,0 +1,12 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_u16.c new file mode 100644 index 0000000..dd3792a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_u16.c @@ -0,0 +1,12 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_u32.c new file mode 100644 index 0000000..7f19ead --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_u32.c @@ -0,0 +1,12 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_u64.c new file mode 100644 index 0000000..d21a985 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnb_u64.c @@ -0,0 +1,12 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_s16.c new file mode 100644 index 0000000..323c37e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_s16.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_s32.c new file mode 100644 index 0000000..62169b6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_s32.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_s64.c new file mode 100644 index 0000000..4a3faeb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_s64.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_u16.c new file mode 100644 index 0000000..b5a3047 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_u16.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_u32.c new file mode 100644 index 0000000..691b254 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_u32.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_u64.c new file mode 100644 index 0000000..9b8ce1a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtnt_u64.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunb_s16.c new file mode 100644 index 0000000..405facc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunb_s16.c @@ -0,0 +1,12 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunb_s32.c new file mode 100644 index 0000000..874d183 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunb_s32.c @@ -0,0 +1,12 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunb_s64.c new file mode 100644 index 0000000..0dd77f2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunb_s64.c @@ -0,0 +1,12 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunt_s16.c new file mode 100644 index 0000000..2476435 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunt_s16.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunt_s32.c new file mode 100644 index 0000000..65c3af3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunt_s32.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunt_s64.c new file mode 100644 index 0000000..77fc3a0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/qxtunt_s64.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_s16.c new file mode 100644 index 0000000..e7e9219 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_s32.c new file mode 100644 index 0000000..d31284f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_s64.c new file mode 100644 index 0000000..47edc8c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_u16.c new file mode 100644 index 0000000..c468598 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_u32.c new file mode 100644 index 0000000..968e886 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_u64.c new file mode 100644 index 0000000..5bf6d22 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_s16.c new file mode 100644 index 0000000..1516154 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_s16.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_s32.c new file mode 100644 index 0000000..cdd87cb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_s32.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_s64.c new file mode 100644 index 0000000..e465ed0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_s64.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_u16.c new file mode 100644 index 0000000..d7572fd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_u16.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_u32.c new file mode 100644 index 0000000..ef0dc61 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_u32.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_u64.c new file mode 100644 index 0000000..e576f0d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/raddhnt_u64.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rax1_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rax1_s64.c new file mode 100644 index 0000000..ea80d40 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rax1_s64.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rax1_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rax1_u64.c new file mode 100644 index 0000000..b237c7e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rax1_u64.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/recpe_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/recpe_u32.c new file mode 100644 index 0000000..17c6a72 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/recpe_u32.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s16.c new file mode 100644 index 0000000..6f16f41 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s16.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s32.c new file mode 100644 index 0000000..c278b3d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s32.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s64.c new file mode 100644 index 0000000..759502c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s64.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s8.c new file mode 100644 index 0000000..58a7bd8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_s8.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u16.c new file mode 100644 index 0000000..ba5a429 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u16.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u32.c new file mode 100644 index 0000000..0cf6dc5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u32.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u64.c new file mode 100644 index 0000000..d38f36a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u64.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u8.c new file mode 100644 index 0000000..72efdc3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rhadd_u8.c @@ -0,0 +1,237 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s16.c new file mode 100644 index 0000000..103af35 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s16.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s32.c new file mode 100644 index 0000000..542c857 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s32.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s64.c new file mode 100644 index 0000000..b85fbb5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s64.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s8.c new file mode 100644 index 0000000..f33102c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_s8.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u16.c new file mode 100644 index 0000000..3b7abfe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u16.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u32.c new file mode 100644 index 0000000..ed86ae0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u32.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u64.c new file mode 100644 index 0000000..cd92206 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u64.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u8.c new file mode 100644 index 0000000..4cc0036 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshl_u8.c @@ -0,0 +1,396 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s16.c new file mode 100644 index 0000000..72f201f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s16.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s32.c new file mode 100644 index 0000000..9655901 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s32.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s64.c new file mode 100644 index 0000000..4e91720 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s64.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s8.c new file mode 100644 index 0000000..7dbc444 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_s8.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u16.c new file mode 100644 index 0000000..7b253a8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u16.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u32.c new file mode 100644 index 0000000..29ce3bb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u32.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u64.c new file mode 100644 index 0000000..84b942b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u64.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u8.c new file mode 100644 index 0000000..7a563ec --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshr_u8.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_s16.c new file mode 100644 index 0000000..7b4d984 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_s16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_s32.c new file mode 100644 index 0000000..cd15203 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_s32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_s64.c new file mode 100644 index 0000000..4fdefd9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_s64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_u16.c new file mode 100644 index 0000000..64f2881 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_u16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_u32.c new file mode 100644 index 0000000..4388e56 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_u32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_u64.c new file mode 100644 index 0000000..652a03f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnb_u64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_s16.c new file mode 100644 index 0000000..2c40a7e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_s16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_s32.c new file mode 100644 index 0000000..e5c0595 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_s32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_s64.c new file mode 100644 index 0000000..63c0ea4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_s64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_u16.c new file mode 100644 index 0000000..9e5d6f9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_u16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_u32.c new file mode 100644 index 0000000..b14383b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_u32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_u64.c new file mode 100644 index 0000000..e6b008f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rshrnt_u64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsqrte_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsqrte_u32.c new file mode 100644 index 0000000..e9e4fb7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsqrte_u32.c @@ -0,0 +1,81 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s16.c new file mode 100644 index 0000000..be815ff --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s16.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s32.c new file mode 100644 index 0000000..241f210 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s64.c new file mode 100644 index 0000000..0a076ea --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s64.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s8.c new file mode 100644 index 0000000..5e197b4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_s8.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u16.c new file mode 100644 index 0000000..f0f40dc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u16.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u32.c new file mode 100644 index 0000000..ac37a40 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u64.c new file mode 100644 index 0000000..b0fbb6a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u64.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u8.c new file mode 100644 index 0000000..a9641a2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsra_u8.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_s16.c new file mode 100644 index 0000000..f0ab471 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_s32.c new file mode 100644 index 0000000..fb64cdd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_s64.c new file mode 100644 index 0000000..f2dc4aa --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_u16.c new file mode 100644 index 0000000..9396b72 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_u32.c new file mode 100644 index 0000000..4e6c74f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_u64.c new file mode 100644 index 0000000..e58c1db --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_s16.c new file mode 100644 index 0000000..a836ab8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_s16.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_s32.c new file mode 100644 index 0000000..7032402 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_s32.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_s64.c new file mode 100644 index 0000000..aaa2fad --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_s64.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_u16.c new file mode 100644 index 0000000..9e36ff0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_u16.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_u32.c new file mode 100644 index 0000000..c9ddfee --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_u32.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_u64.c new file mode 100644 index 0000000..e75334b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/rsubhnt_u64.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclb_u32.c new file mode 100644 index 0000000..639e181 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclb_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclb_u64.c new file mode 100644 index 0000000..ee0441c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclb_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclt_u32.c new file mode 100644 index 0000000..65ac15e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclt_u32.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclt_u64.c new file mode 100644 index 0000000..1bfb542 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sbclt_u64.c @@ -0,0 +1,110 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_s16.c new file mode 100644 index 0000000..430e392 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_s16.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_s32.c new file mode 100644 index 0000000..56e6494 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_s32.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_s64.c new file mode 100644 index 0000000..f6da9de --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_s64.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_u16.c new file mode 100644 index 0000000..5384d94 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_u16.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_u32.c new file mode 100644 index 0000000..2becd80 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_u32.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_u64.c new file mode 100644 index 0000000..37d5b9d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllb_u64.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_s16.c new file mode 100644 index 0000000..ad2ca1b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_s16.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_s32.c new file mode 100644 index 0000000..3f2ab5f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_s32.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_s64.c new file mode 100644 index 0000000..f53b29b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_s64.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_u16.c new file mode 100644 index 0000000..4fa6180 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_u16.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_u32.c new file mode 100644 index 0000000..a0911f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_u32.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_u64.c new file mode 100644 index 0000000..f4cca08 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shllt_u64.c @@ -0,0 +1,57 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_s16.c new file mode 100644 index 0000000..b0c8c20 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_s16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_s32.c new file mode 100644 index 0000000..8fff1d2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_s32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_s64.c new file mode 100644 index 0000000..6e50a36 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_s64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_u16.c new file mode 100644 index 0000000..3f791ef --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_u16.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_u32.c new file mode 100644 index 0000000..de395d6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_u32.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_u64.c new file mode 100644 index 0000000..020579d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnb_u64.c @@ -0,0 +1,39 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_s16.c new file mode 100644 index 0000000..bcbe12e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_s16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_s32.c new file mode 100644 index 0000000..a45f71c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_s32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_s64.c new file mode 100644 index 0000000..752497e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_s64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_u16.c new file mode 100644 index 0000000..695fcbc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_u16.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_u32.c new file mode 100644 index 0000000..13e61f7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_u32.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_u64.c new file mode 100644 index 0000000..c9ee20c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/shrnt_u64.c @@ -0,0 +1,45 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s16.c new file mode 100644 index 0000000..6772a56 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s16.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s32.c new file mode 100644 index 0000000..023e7c4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s64.c new file mode 100644 index 0000000..c37db1b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s64.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s8.c new file mode 100644 index 0000000..ea0dcdc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_s8.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u16.c new file mode 100644 index 0000000..475c00e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u16.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u32.c new file mode 100644 index 0000000..52bd837 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u64.c new file mode 100644 index 0000000..ab75ba2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u64.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u8.c new file mode 100644 index 0000000..e2207c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sli_u8.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sm4e_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sm4e_u32.c new file mode 100644 index 0000000..0ff5746 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sm4e_u32.c @@ -0,0 +1,34 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sm4ekey_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sm4ekey_u32.c new file mode 100644 index 0000000..58ad33c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sm4ekey_u32.c @@ -0,0 +1,32 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u16.c new file mode 100644 index 0000000..d689811 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u16.c @@ -0,0 +1,403 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u32.c new file mode 100644 index 0000000..0f65f5a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u32.c @@ -0,0 +1,403 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u64.c new file mode 100644 index 0000000..1f91b2e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u64.c @@ -0,0 +1,403 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u8.c new file mode 100644 index 0000000..5ba0164 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sqadd_u8.c @@ -0,0 +1,405 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s16.c new file mode 100644 index 0000000..3f1f407 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s16.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s32.c new file mode 100644 index 0000000..ac992dc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s64.c new file mode 100644 index 0000000..9ea5657 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s64.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s8.c new file mode 100644 index 0000000..3dc8642 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_s8.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u16.c new file mode 100644 index 0000000..6a43cb2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u16.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u32.c new file mode 100644 index 0000000..0902451 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u32.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u64.c new file mode 100644 index 0000000..ff21c36 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u64.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u8.c new file mode 100644 index 0000000..d2ae12a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sra_u8.c @@ -0,0 +1,93 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s16.c new file mode 100644 index 0000000..177fbb2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s16.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s32.c new file mode 100644 index 0000000..27d6c99 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s64.c new file mode 100644 index 0000000..021613d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s64.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s8.c new file mode 100644 index 0000000..0bfa267 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_s8.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u16.c new file mode 100644 index 0000000..2f12dc9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u16.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u32.c new file mode 100644 index 0000000..d4d107f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u32.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u64.c new file mode 100644 index 0000000..41d6734 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u64.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u8.c new file mode 100644 index 0000000..0aa6a54 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sri_u8.c @@ -0,0 +1,75 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f32.c new file mode 100644 index 0000000..ba9b5af --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f32.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f64.c new file mode 100644 index 0000000..55c2346 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_f64.c @@ -0,0 +1,275 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s32.c new file mode 100644 index 0000000..8bc40f1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s32.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s64.c new file mode 100644 index 0000000..5f23b82 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_s64.c @@ -0,0 +1,275 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u32.c new file mode 100644 index 0000000..cae2a25 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u32.c @@ -0,0 +1,177 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u64.c new file mode 100644 index 0000000..855f1c5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1_scatter_u64.c @@ -0,0 +1,275 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s32.c new file mode 100644 index 0000000..d481459 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s32.c @@ -0,0 +1,88 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s64.c new file mode 100644 index 0000000..b655a9f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_s64.c @@ -0,0 +1,106 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u32.c new file mode 100644 index 0000000..ff65f28 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u32.c @@ -0,0 +1,88 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u64.c new file mode 100644 index 0000000..aba416e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1b_scatter_u64.c @@ -0,0 +1,106 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s32.c new file mode 100644 index 0000000..b9c3d83 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s32.c @@ -0,0 +1,157 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s64.c new file mode 100644 index 0000000..3033566 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_s64.c @@ -0,0 +1,215 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u32.c new file mode 100644 index 0000000..31da9f4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u32.c @@ -0,0 +1,157 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u64.c new file mode 100644 index 0000000..f6fca9d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1h_scatter_u64.c @@ -0,0 +1,215 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_s64.c new file mode 100644 index 0000000..e86ea31 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_s64.c @@ -0,0 +1,235 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_u64.c new file mode 100644 index 0000000..be8c5d6b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/stnt1w_scatter_u64.c @@ -0,0 +1,235 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_s16.c new file mode 100644 index 0000000..46bd714 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_s32.c new file mode 100644 index 0000000..1ac62f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_s64.c new file mode 100644 index 0000000..d746c57 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_u16.c new file mode 100644 index 0000000..29b25c3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_u32.c new file mode 100644 index 0000000..a798ee5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_u64.c new file mode 100644 index 0000000..5c426b8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_s16.c new file mode 100644 index 0000000..2481beb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_s16.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_s32.c new file mode 100644 index 0000000..3ccb84c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_s32.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_s64.c new file mode 100644 index 0000000..8daab64 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_s64.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_u16.c new file mode 100644 index 0000000..7c972b1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_u16.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_u32.c new file mode 100644 index 0000000..a395654 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_u32.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_u64.c new file mode 100644 index 0000000..e0206d0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subhnt_u64.c @@ -0,0 +1,89 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_s16.c new file mode 100644 index 0000000..a3558020 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_s32.c new file mode 100644 index 0000000..302d489 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_s64.c new file mode 100644 index 0000000..939de73 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_u16.c new file mode 100644 index 0000000..c96bd5e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_u32.c new file mode 100644 index 0000000..101c293 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_u64.c new file mode 100644 index 0000000..98371e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublbt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublbt_s16.c new file mode 100644 index 0000000..95215bd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublbt_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublbt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublbt_s32.c new file mode 100644 index 0000000..289e748 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublbt_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublbt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublbt_s64.c new file mode 100644 index 0000000..18ede1f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublbt_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_s16.c new file mode 100644 index 0000000..f79e32f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_s32.c new file mode 100644 index 0000000..707cb57 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_s64.c new file mode 100644 index 0000000..b21b784 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_u16.c new file mode 100644 index 0000000..429ff73 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_u32.c new file mode 100644 index 0000000..c899e1f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_u64.c new file mode 100644 index 0000000..f3cf8fa --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/sublt_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subltb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subltb_s16.c new file mode 100644 index 0000000..f7704dd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subltb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subltb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subltb_s32.c new file mode 100644 index 0000000..394b1e7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subltb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subltb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subltb_s64.c new file mode 100644 index 0000000..d258f82 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subltb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_s16.c new file mode 100644 index 0000000..d2829e3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_s32.c new file mode 100644 index 0000000..d6851cc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_s64.c new file mode 100644 index 0000000..2b767fa --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_u16.c new file mode 100644 index 0000000..e7f2c5d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_u32.c new file mode 100644 index 0000000..833f262 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_u64.c new file mode 100644 index 0000000..3702e41 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwb_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_s16.c new file mode 100644 index 0000000..55547cd --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_s16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_s32.c new file mode 100644 index 0000000..ef93306 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_s32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_s64.c new file mode 100644 index 0000000..f0076cf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_s64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_u16.c new file mode 100644 index 0000000..c2958fb --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_u16.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_u32.c new file mode 100644 index 0000000..906b240 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_u32.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_u64.c new file mode 100644 index 0000000..ac06b5c --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/subwt_u64.c @@ -0,0 +1,70 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_f16.c new file mode 100644 index 0000000..d3f0ea5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_f16.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_f32.c new file mode 100644 index 0000000..3b8054b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_f32.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_f64.c new file mode 100644 index 0000000..6455edc --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_f64.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s16.c new file mode 100644 index 0000000..cc70ea8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s16.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s32.c new file mode 100644 index 0000000..4838f54 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s32.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s64.c new file mode 100644 index 0000000..85c83e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s64.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s8.c new file mode 100644 index 0000000..d62d93d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_s8.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u16.c new file mode 100644 index 0000000..5eb0006 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u16.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u32.c new file mode 100644 index 0000000..b240088 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u32.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u64.c new file mode 100644 index 0000000..d0ea068 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u64.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u8.c new file mode 100644 index 0000000..d66ba71 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbl2_u8.c @@ -0,0 +1,30 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_f16.c new file mode 100644 index 0000000..65ff83a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_f16.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_f32.c new file mode 100644 index 0000000..fb31707 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_f32.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_f64.c new file mode 100644 index 0000000..fbc0006 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_f64.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s16.c new file mode 100644 index 0000000..0de1b38 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s16.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s32.c new file mode 100644 index 0000000..7d1b492 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s32.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s64.c new file mode 100644 index 0000000..4f8f659 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s64.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s8.c new file mode 100644 index 0000000..4e63dee --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_s8.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u16.c new file mode 100644 index 0000000..e99a591 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u16.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u32.c new file mode 100644 index 0000000..98c875e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u32.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u64.c new file mode 100644 index 0000000..d03eedf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u64.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u8.c new file mode 100644 index 0000000..750b9db --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/tbx_u8.c @@ -0,0 +1,37 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/test_sve_acle.h b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/test_sve_acle.h new file mode 100644 index 0000000..77590e1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/test_sve_acle.h @@ -0,0 +1 @@ +#include "../../../sve/acle/asm/test_sve_acle.h" diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s16.c new file mode 100644 index 0000000..756d394 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s16.c @@ -0,0 +1,403 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s32.c new file mode 100644 index 0000000..22ed583 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s32.c @@ -0,0 +1,403 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s64.c new file mode 100644 index 0000000..1128341 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s64.c @@ -0,0 +1,403 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s8.c new file mode 100644 index 0000000..25cbe8b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/uqadd_s8.c @@ -0,0 +1,400 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b16.c new file mode 100644 index 0000000..f03012d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b16.c @@ -0,0 +1,173 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b32.c new file mode 100644 index 0000000..02e5e79 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b32.c @@ -0,0 +1,173 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b64.c new file mode 100644 index 0000000..e838149 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b64.c @@ -0,0 +1,173 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b8.c new file mode 100644 index 0000000..3c5a8ed --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilege_b8.c @@ -0,0 +1,173 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b16.c new file mode 100644 index 0000000..2297c5d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b16.c @@ -0,0 +1,173 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b32.c new file mode 100644 index 0000000..8ba0c85 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b32.c @@ -0,0 +1,173 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b64.c new file mode 100644 index 0000000..b124724 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b64.c @@ -0,0 +1,173 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b8.c new file mode 100644 index 0000000..e5362ca --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilegt_b8.c @@ -0,0 +1,173 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_f16.c new file mode 100644 index 0000000..423b706 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_f16.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_f32.c new file mode 100644 index 0000000..fc7c95b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_f32.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_f64.c new file mode 100644 index 0000000..fb23d9b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_f64.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s16.c new file mode 100644 index 0000000..d49c0a1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s16.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s32.c new file mode 100644 index 0000000..d0a47f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s32.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s64.c new file mode 100644 index 0000000..980de5f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s64.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s8.c new file mode 100644 index 0000000..4fccf9f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_s8.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u16.c new file mode 100644 index 0000000..26c54ba --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u16.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u32.c new file mode 100644 index 0000000..25f0c55 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u32.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u64.c new file mode 100644 index 0000000..864b373 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u64.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u8.c new file mode 100644 index 0000000..bd008db --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilerw_u8.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_f16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_f16.c new file mode 100644 index 0000000..4823c5b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_f16.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_f32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_f32.c new file mode 100644 index 0000000..63a4f4f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_f32.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_f64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_f64.c new file mode 100644 index 0000000..1be1770 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_f64.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s16.c new file mode 100644 index 0000000..a6bf594 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s16.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s32.c new file mode 100644 index 0000000..3b5b097 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s32.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s64.c new file mode 100644 index 0000000..5e72829 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s64.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s8.c new file mode 100644 index 0000000..170905d --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_s8.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u16.c new file mode 100644 index 0000000..86153ea4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u16.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u32.c new file mode 100644 index 0000000..d9a5f52 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u32.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u64.c new file mode 100644 index 0000000..309ce33 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u64.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u8.c new file mode 100644 index 0000000..8ec0bd8 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/whilewr_u8.c @@ -0,0 +1,50 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s16.c new file mode 100644 index 0000000..34351d5 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s16.c @@ -0,0 +1,102 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s32.c new file mode 100644 index 0000000..366a617 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s32.c @@ -0,0 +1,102 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s64.c new file mode 100644 index 0000000..dedda2e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s64.c @@ -0,0 +1,102 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s8.c new file mode 100644 index 0000000..904352b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_s8.c @@ -0,0 +1,102 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u16.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u16.c new file mode 100644 index 0000000..c7b9665 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u16.c @@ -0,0 +1,102 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u32.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u32.c new file mode 100644 index 0000000..115ead7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u32.c @@ -0,0 +1,102 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u64.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u64.c new file mode 100644 index 0000000..1d0d90e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u64.c @@ -0,0 +1,102 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u8.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u8.c new file mode 100644 index 0000000..3b61617 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/asm/xar_u8.c @@ -0,0 +1,102 @@ +/* { 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)) diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_1.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_1.c new file mode 100644 index 0000000..0276b06 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_1.c @@ -0,0 +1,22 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_2.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_2.c new file mode 100644 index 0000000..4b9b519 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_2.c @@ -0,0 +1,37 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_3.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_3.c new file mode 100644 index 0000000..a608708 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/match_3.c @@ -0,0 +1,54 @@ +/* { 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 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_1.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_1.c new file mode 100644 index 0000000..956b064 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_1.c @@ -0,0 +1,23 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_2.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_2.c new file mode 100644 index 0000000..be9c484 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_2.c @@ -0,0 +1,23 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_3.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_3.c new file mode 100644 index 0000000..677bed1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_3.c @@ -0,0 +1,23 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_4.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_4.c new file mode 100644 index 0000000..5143438 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilerw_4.c @@ -0,0 +1,23 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_1.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_1.c new file mode 100644 index 0000000..cfe3710 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_1.c @@ -0,0 +1,23 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_2.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_2.c new file mode 100644 index 0000000..52e64cf --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_2.c @@ -0,0 +1,23 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_3.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_3.c new file mode 100644 index 0000000..b4456fe --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_3.c @@ -0,0 +1,23 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_4.c b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_4.c new file mode 100644 index 0000000..77ca53a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/acle/general/whilewr_4.c @@ -0,0 +1,23 @@ +/* { 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} } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/bcax_1.c b/gcc/testsuite/gcc.target/aarch64/sve2/bcax_1.c new file mode 100644 index 0000000..4b0d5a9 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve2/bcax_1.c @@ -0,0 +1,12 @@ +/* { 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 } } */ |