diff options
author | Claudio Bantaloukas <claudio.bantaloukas@arm.com> | 2024-11-29 12:52:43 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2024-11-29 12:52:43 +0000 |
commit | dfa78681851bab3db88a7010b9def8449845fcfb (patch) | |
tree | bfee3d645837e78e55ab5f258b86d379587182da /libgcc | |
parent | a54aa75ab30eb1a176ceaded507113252df24878 (diff) | |
download | gcc-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