aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2024-12-30 12:50:55 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2024-12-30 12:50:55 +0000
commit5f5b1a3625b14b8ee3d4967726242e10c4ab8fbb (patch)
tree9478e60cede9d2f3526562bf4e9101f8dbc7898a /gcc
parenta7d974136239adf62010f56fc0ad26a88928af46 (diff)
downloadgcc-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.cc65
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
}
}