aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorClaudio Bantaloukas <claudio.bantaloukas@arm.com>2024-11-29 12:52:44 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2024-11-29 12:52:44 +0000
commit75c3a5c8e6ceb9716ad0b2aae6259d094f98c63e (patch)
tree70a95fae2ec4941ee5f489029b0fe6eb43ae39a2 /libgcc
parent49365994da6c46829ce85839042ae8e409343188 (diff)
downloadgcc-75c3a5c8e6ceb9716ad0b2aae6259d094f98c63e.zip
gcc-75c3a5c8e6ceb9716ad0b2aae6259d094f98c63e.tar.gz
gcc-75c3a5c8e6ceb9716ad0b2aae6259d094f98c63e.tar.bz2
aarch64: add svcvt* FP8 intrinsics
This patch adds the following intrinsics: - svcvt1_bf16[_mf8]_fpm - svcvt1_f16[_mf8]_fpm - svcvt2_bf16[_mf8]_fpm - svcvt2_f16[_mf8]_fpm - svcvtlt1_bf16[_mf8]_fpm - svcvtlt1_f16[_mf8]_fpm - svcvtlt2_bf16[_mf8]_fpm - svcvtlt2_f16[_mf8]_fpm - svcvtn_mf8[_f16_x2]_fpm (unpredicated) - svcvtnb_mf8[_f32_x2]_fpm - svcvtnt_mf8[_f32_x2]_fpm The underlying instructions are only available when SVE2 is enabled and the PE is not in streaming SVE mode. They are also available when SME2 is enabled and the PE is in streaming SVE mode. gcc/ * config/aarch64/aarch64-sve-builtins-shapes.cc (parse_signature): Add an fpm_t (uint64_t) argument to functions that set the fpm register. (unary_convertxn_narrowt_def): New class. (unary_convertxn_narrowt): New shape. (unary_convertxn_narrow_def): New class. (unary_convertxn_narrow): New shape. * config/aarch64/aarch64-sve-builtins-shapes.h (unary_convertxn_narrowt): Declare. (unary_convertxn_narrow): Likewise. * config/aarch64/aarch64-sve-builtins-sve2.cc (svcvt_fp8_impl): New class. (svcvtn_impl): Handle fp8 cases. (svcvt1, svcvt2, svcvtlt1, svcvtlt2): Add new FUNCTION. (svcvtnb): Likewise. * config/aarch64/aarch64-sve-builtins-sve2.def (svcvt1, svcvt2, svcvtlt1, svcvtlt2): Add new DEF_SVE_FUNCTION_GS_FPM. (svcvtn): Likewise. (svcvtnb, svcvtnt): Likewise. * config/aarch64/aarch64-sve-builtins-sve2.h (svcvt1, svcvt2, svcvtlt1, svcvtlt2, svcvtnb, svcvtnt): Declare. * config/aarch64/aarch64-sve-builtins.cc (TYPES_cvt_mf8, TYPES_cvtn_mf8, TYPES_cvtnx_mf8): Add new types arrays. (function_builder::get_name): Append _fpm to functions that set fpmr. (function_resolver::check_gp_argument): Deal with the fpm_t argument. (function_expander::expand): Set the fpm register before calling the insn if the function warrants it. * config/aarch64/aarch64-sve2.md (@aarch64_sve2_fp8_cvt): Add new. (@aarch64_sve2_fp8_cvtn): Likewise. (@aarch64_sve2_fp8_cvtnb): Likewise. (@aarch64_sve_cvtnt): Likewise. * config/aarch64/aarch64.h (TARGET_SSVE_FP8): Add new. * config/aarch64/iterators.md (VNx8SF_ONLY, SVE_FULL_HFx2): New mode iterators. (UNSPEC_F1CVT, UNSPEC_F1CVTLT, UNSPEC_F2CVT, UNSPEC_F2CVTLT): Add new. (UNSPEC_FCVTNB, UNSPEC_FCVTNT): Likewise. (UNSPEC_FP8FCVTN): Likewise. (FP8CVT_UNS, fp8_cvt_uns_op): Likewise. gcc/testsuite/ * gcc.target/aarch64/sve/acle/asm/test_sve_acle.h (TEST_DUAL_Z): Add fpm0 argument * gcc.target/aarch64/sve/acle/general-c/unary_convertxn_narrow_1.c: Add new tests. * gcc.target/aarch64/sve/acle/general-c/unary_convertxn_narrowt_1.c: Likewise. * gcc.target/aarch64/sve2/acle/asm/cvt_mf8.c: Likewise. * gcc.target/aarch64/sve2/acle/asm/cvtlt_mf8.c: Likewise. * gcc.target/aarch64/sve2/acle/asm/cvtn_mf8.c: Likewise. * gcc.target/aarch64/sve2/acle/asm/cvtnb_mf8.c: Likewise. * gcc.target/aarch64/sve2/acle/asm/cvtnt_mf8.c: Likewise. * lib/target-supports.exp: Add aarch64_asm_fp8_ok check.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions