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

Reply via email to