diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2024-12-30 12:50:55 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2024-12-30 12:50:55 +0000 |
commit | 5f5b1a3625b14b8ee3d4967726242e10c4ab8fbb (patch) | |
tree | 9478e60cede9d2f3526562bf4e9101f8dbc7898a /gcc | |
parent | a7d974136239adf62010f56fc0ad26a88928af46 (diff) | |
download | gcc-5f5b1a3625b14b8ee3d4967726242e10c4ab8fbb.zip gcc-5f5b1a3625b14b8ee3d4967726242e10c4ab8fbb.tar.gz gcc-5f5b1a3625b14b8ee3d4967726242e10c4ab8fbb.tar.bz2 |
aarch64: Macroise simd_type definitions
This patch tries to regularise the definitions of the new pragma
simd types. Not all of the new types are currently used, but they
will be by later patches.
gcc/
* config/aarch64/aarch64-builtins.cc (simd_types): Use one macro
invocation for each element type.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/aarch64/aarch64-builtins.cc | 65 |
1 files changed, 32 insertions, 33 deletions
diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc index ca1dc5a..bad9718 100644 --- a/gcc/config/aarch64/aarch64-builtins.cc +++ b/gcc/config/aarch64/aarch64-builtins.cc @@ -1637,41 +1637,40 @@ struct simd_type { }; namespace simd_types { - constexpr simd_type f8 { V8QImode, qualifier_modal_float }; - constexpr simd_type f8q { V16QImode, qualifier_modal_float }; - constexpr simd_type p8 { V8QImode, qualifier_poly }; - constexpr simd_type p8q { V16QImode, qualifier_poly }; - constexpr simd_type s8 { V8QImode, qualifier_none }; - constexpr simd_type s8q { V16QImode, qualifier_none }; - constexpr simd_type u8 { V8QImode, qualifier_unsigned }; - constexpr simd_type u8q { V16QImode, qualifier_unsigned }; - - constexpr simd_type f16 { V4HFmode, qualifier_none }; - constexpr simd_type f16q { V8HFmode, qualifier_none }; - constexpr simd_type f16qx2 { V2x8HFmode, qualifier_none }; - constexpr simd_type p16 { V4HImode, qualifier_poly }; - constexpr simd_type p16q { V8HImode, qualifier_poly }; - constexpr simd_type p16qx2 { V2x8HImode, qualifier_poly }; - constexpr simd_type s16 { V4HImode, qualifier_none }; - constexpr simd_type s16q { V8HImode, qualifier_none }; - constexpr simd_type s16qx2 { V2x8HImode, qualifier_none }; - constexpr simd_type u16 { V4HImode, qualifier_unsigned }; - constexpr simd_type u16q { V8HImode, qualifier_unsigned }; - constexpr simd_type u16qx2 { V2x8HImode, qualifier_unsigned }; - - constexpr simd_type bf16 { V4BFmode, qualifier_none }; - constexpr simd_type bf16q { V8BFmode, qualifier_none }; - constexpr simd_type bf16qx2 { V2x8BFmode, qualifier_none }; - - constexpr simd_type f32 { V2SFmode, qualifier_none }; - constexpr simd_type f32q { V4SFmode, qualifier_none }; - constexpr simd_type s32 { V2SImode, qualifier_none }; - constexpr simd_type s32q { V4SImode, qualifier_none }; - - constexpr simd_type f64q { V2DFmode, qualifier_none }; - constexpr simd_type s64q { V2DImode, qualifier_none }; +#define VARIANTS(BASE, D, Q, MODE, QUALIFIERS) \ + constexpr simd_type BASE { V##D##MODE, QUALIFIERS }; \ + constexpr simd_type BASE##x2 { V2x##D##MODE, QUALIFIERS }; \ + constexpr simd_type BASE##x3 { V3x##D##MODE, QUALIFIERS }; \ + constexpr simd_type BASE##x4 { V4x##D##MODE, QUALIFIERS }; \ + constexpr simd_type BASE##q { V##Q##MODE, QUALIFIERS }; \ + constexpr simd_type BASE##qx2 { V2x##Q##MODE, QUALIFIERS }; \ + constexpr simd_type BASE##qx3 { V3x##Q##MODE, QUALIFIERS }; \ + constexpr simd_type BASE##qx4 { V4x##Q##MODE, QUALIFIERS }; \ + constexpr simd_type BASE##_scalar { MODE, QUALIFIERS }; + + VARIANTS (f8, 8, 16, QImode, qualifier_modal_float) + VARIANTS (p8, 8, 16, QImode, qualifier_poly) + VARIANTS (s8, 8, 16, QImode, qualifier_none) + VARIANTS (u8, 8, 16, QImode, qualifier_unsigned) + + VARIANTS (bf16, 4, 8, BFmode, qualifier_none) + VARIANTS (f16, 4, 8, HFmode, qualifier_none) + VARIANTS (p16, 4, 8, HImode, qualifier_poly) + VARIANTS (s16, 4, 8, HImode, qualifier_none) + VARIANTS (u16, 4, 8, HImode, qualifier_unsigned) + + VARIANTS (f32, 2, 4, SFmode, qualifier_none) + VARIANTS (p32, 2, 4, SImode, qualifier_poly) + VARIANTS (s32, 2, 4, SImode, qualifier_none) + VARIANTS (u32, 2, 4, SImode, qualifier_unsigned) + + VARIANTS (f64, 1, 2, DFmode, qualifier_none) + VARIANTS (p64, 1, 2, DImode, qualifier_poly) + VARIANTS (s64, 1, 2, DImode, qualifier_none) + VARIANTS (u64, 1, 2, DImode, qualifier_unsigned) constexpr simd_type none { VOIDmode, qualifier_none }; +#undef VARIANTS } } |