aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorClaudio Bantaloukas <claudio.bantaloukas@arm.com>2024-11-29 12:52:43 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2024-11-29 12:52:43 +0000
commitdfa78681851bab3db88a7010b9def8449845fcfb (patch)
treebfee3d645837e78e55ab5f258b86d379587182da /libgcc
parenta54aa75ab30eb1a176ceaded507113252df24878 (diff)
downloadgcc-dfa78681851bab3db88a7010b9def8449845fcfb.zip
gcc-dfa78681851bab3db88a7010b9def8449845fcfb.tar.gz
gcc-dfa78681851bab3db88a7010b9def8449845fcfb.tar.bz2
aarch64: Add basic svmfloat8_t support to arm_sve.h
This patch adds support for the fp8 related vectors to arm_sve.h. It also adds support for functions that just treat mfloat8_t as a bag of 8 bits (reinterpret casts, vector manipulation, loads, stores, element selection, vector tuples, table lookups, sve<->simd bridge); these functions are available for fp8 whenever they're available for other 8-bit types. Arithmetic operations, bit manipulation, conversions are notably absent. The generated asm is mostly consistent with the _u8 equivalents and this can be used to validate tests, except where immediates are used. These cannot be expressed for mf8 and thus we resort to the use of function arguments found in registers w(0-9). gcc/ * config/aarch64/aarch64-sve-builtins.cc (TYPES_b_data): Add mf8. (TYPES_reinterpret1, TYPES_reinterpret): Likewise. * config/aarch64/aarch64-sve-builtins.def (svmfloat8_t): New type. (mf8): New type suffix. * config/aarch64/aarch64-sve-builtins.h (TYPE_mfloat): New type_class_index. gcc/testsuite/ * g++.target/aarch64/sve/acle/general-c++/mangle_1.C: Test mangling of svmfloat8_t. * g++.target/aarch64/sve/acle/general-c++/mangle_2.C: Likewise for __SVMfloat8_t. * gcc.target/aarch64/sve/acle/asm/clasta_mf8.c: New test. * gcc.target/aarch64/sve/acle/asm/clastb_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/create2_1.c (create2_mf8): Likewise. * gcc.target/aarch64/sve/acle/asm/create3_1.c (create_mf8): Likewise. * gcc.target/aarch64/sve/acle/asm/create4_1.c (create_mf8): Likewise. * gcc.target/aarch64/sve/acle/asm/dup_lane_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/dup_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/dup_neonq_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/dupq_lane_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ext_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/get_neonq_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/get2_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/get3_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/get4_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/insr_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/lasta_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/lastb_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ld1_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ld1ro_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ld1rq_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ld2_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ld3_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ld4_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ldff1_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ldnf1_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/ldnt1_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/len_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_bf16.c (reinterpret_bf16_mf8_tied1, reinterpret_bf16_mf8_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_f16.c (reinterpret_f16_mf8_tied1, reinterpret_f16_mf8_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_f32.c (reinterpret_f32_mf8_tied1, reinterpret_f32_mf8_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_f64.c (reinterpret_f64_mf8_tied1, reinterpret_f64_mf8_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_s16.c (reinterpret_s16_mf8_tied1, reinterpret_s16_mf8_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_s32.c (reinterpret_s32_mf8_tied1, reinterpret_s32_mf8_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_s64.c (reinterpret_s64_mf8_tied1, reinterpret_s64_mf8_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_s8.c (reinterpret_s8_mf8_tied1, reinterpret_s8_mf8_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_u16.c (reinterpret_u16_mf8_tied1, reinterpret_u16_mf8_untied) (reinterpret_u16_mf8_x3_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_u32.c (reinterpret_u32_mf8_tied1, reinterpret_u32_mf8_untied) (reinterpret_u32_mf8_x3_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_u64.c (reinterpret_u64_mf8_tied1, reinterpret_u64_mf8_untied) (reinterpret_u64_mf8_x3_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/reinterpret_u8.c (reinterpret_u8_mf8_tied1, reinterpret_u8_mf8_untied) (reinterpret_u8_mf8_x3_untied): Likewise. * gcc.target/aarch64/sve/acle/asm/rev_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/sel_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/set_neonq_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/set2_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/set3_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/set4_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/splice_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/st1_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/st2_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/st3_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/st4_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/stnt1_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/tbl_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/trn1_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/trn1q_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/trn2_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/trn2q_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/undef2_1.c (mfloat8_t): Likewise. * gcc.target/aarch64/sve/acle/asm/undef3_1.c (mfloat8_t): Likewise. * gcc.target/aarch64/sve/acle/asm/undef4_1.c (mfloat8_t): Likewise. * gcc.target/aarch64/sve/acle/asm/undef_1.c (mfloat8_t): Likewise. * gcc.target/aarch64/sve/acle/asm/uzp1_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/uzp1q_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/uzp2_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/uzp2q_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/zip1_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/zip1q_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/zip2_mf8.c: Likewise. * gcc.target/aarch64/sve/acle/asm/zip2q_mf8.c: Likewise. * gcc.target/aarch64/sve/pcs/annotate_1.c (ret_mf8, ret_mf8x2) (ret_mf8x3, ret_mf8x4): Likewise. * gcc.target/aarch64/sve/pcs/annotate_2.c (fn_mf8, fn_mf8x2) (fn_mf8x3, fn_mf8x4): Likewise. * gcc.target/aarch64/sve/pcs/annotate_3.c (fn_mf8, fn_mf8x2) (fn_mf8x3, fn_mf8x4): Likewise. * gcc.target/aarch64/sve/pcs/annotate_4.c (fn_mf8, fn_mf8x2) (fn_mf8x3, fn_mf8x4): Likewise. * gcc.target/aarch64/sve/pcs/annotate_5.c (fn_mf8, fn_mf8x2) (fn_mf8x3, fn_mf8x4): Likewise. * gcc.target/aarch64/sve/pcs/annotate_6.c (fn_mf8, fn_mf8x2) (fn_mf8x3, fn_mf8x4): Likewise. * gcc.target/aarch64/sve/pcs/annotate_7.c (fn_mf8, fn_mf8x2) (fn_mf8x3, fn_mf8x4): Likewise. * gcc.target/aarch64/sve/pcs/args_5_be_mf8.c: Likewise. * gcc.target/aarch64/sve/pcs/args_5_le_mf8.c: Likewise. * gcc.target/aarch64/sve/pcs/args_6_be_mf8.c: Likewise. * gcc.target/aarch64/sve/pcs/args_6_le_mf8.c: Likewise. * gcc.target/aarch64/sve/pcs/gnu_vectors_1.c (mfloat8x32_t): New typedef. (mfloat8_callee, mfloat8_caller): New tests. * gcc.target/aarch64/sve/pcs/gnu_vectors_2.c (mfloat8x32_t): New typedef. (mfloat8_callee, mfloat8_caller): New tests. * gcc.target/aarch64/sve/pcs/return_4_128.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_4_256.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_4_512.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_4_1024.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_4_2048.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_4.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_5_128.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_5_256.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_5_512.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_5_1024.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_5_2048.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_5.c (CALLER_NON_NUMERIC): Renamed CALLER_BF16 macro. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_6.c (mfloat8_t): New typedef. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_6_128.c (mfloat8_t): New typedef. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_6_256.c (mfloat8_t): New typedef. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_6_512.c (mfloat8_t): New typedef. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_6_1024.c (mfloat8_t): New typedef. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_6_2048.c (mfloat8_t): New typedef. (callee_mf8, caller_mf8): New tests. * gcc.target/aarch64/sve/pcs/return_7.c (callee_mf8): New tests. (caller_mf8): Likewise. * gcc.target/aarch64/sve/pcs/return_8.c (callee_mf8): Likewise (caller_mf8): Likewise. * gcc.target/aarch64/sve/pcs/return_9.c (callee_mf8): Likewise (caller_mf8): Likewise. * gcc.target/aarch64/sve/pcs/varargs_2_mf8.c: New tests * gcc.target/aarch64/sve2/acle/asm/tbl2_mf8.c: Likewise. * gcc.target/aarch64/sve2/acle/asm/tbx_mf8.c: Likewise. * gcc.target/aarch64/sve2/acle/asm/whilerw_mf8.c: Likewise. * gcc.target/aarch64/sve2/acle/asm/whilewr_mf8.c: Likewise.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions