diff mbox series

[1/4] aarch64: Macroise simd_type definitions

Message ID 20241219112815.3536281-2-richard.sandiford@arm.com
State New
Headers show
Series aarch64: Add mf8 data movement intrinsics | expand

Commit Message

Richard Sandiford Dec. 19, 2024, 11:28 a.m. UTC
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 mbox series

Patch

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
 }
 
 }