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. --- gcc/config/aarch64/aarch64-builtins.cc | 65 +++++++++++++------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc index ca1dc5a3e6a..bad97181cf6 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 } } -- 2.25.1