This patch adds the scalar_s64_shift and scalar_u64_shift shape
descriptions.

gcc/ChangeLog:

        PR target/122216
        * config/arm/arm-mve-builtins-shapes.cc (scalar_s64_shift): New.
        (scalar_u64_shift): New.
        * config/arm/arm-mve-builtins-shapes.h: Likewise.
---
 gcc/config/arm/arm-mve-builtins-shapes.cc | 30 +++++++++++++++++++++++
 gcc/config/arm/arm-mve-builtins-shapes.h  |  2 ++
 2 files changed, 32 insertions(+)

diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc 
b/gcc/config/arm/arm-mve-builtins-shapes.cc
index aeb14530a08..f85b82af358 100644
--- a/gcc/config/arm/arm-mve-builtins-shapes.cc
+++ b/gcc/config/arm/arm-mve-builtins-shapes.cc
@@ -1682,6 +1682,36 @@ struct mvn_def : public overloaded_base<0>
 };
 SHAPE (mvn)
 
+/* int64_t foo(int64_t, int32_t)
+
+   Example: asrl
+   int64_t [__arm_]arsl(int64_t value, int32_t shift)  */
+struct scalar_s64_shift_def : public nonoverloaded_base
+{
+  void
+  build (function_builder &b, const function_group_info &group,
+        bool preserve_user_namespace) const override
+  {
+    build_all (b, "ss64,ss64,ss32", group, MODE_none, preserve_user_namespace);
+  }
+};
+SHAPE (scalar_s64_shift)
+
+/* uint64_t foo(uint64_t, int32_t)
+
+   Example: lsll.
+   uint64_t [__arm_]lsll(uint64_t value, int32_t shift)  */
+struct scalar_u64_shift_def : public nonoverloaded_base
+{
+  void
+  build (function_builder &b, const function_group_info &group,
+        bool preserve_user_namespace) const override
+  {
+    build_all (b, "su64,su64,ss32", group, MODE_none, preserve_user_namespace);
+  }
+};
+SHAPE (scalar_u64_shift)
+
 /* void vfoo[_t0](<X>_t *, <T0>[xN]_t)
 
    where <X> might be tied to <t0> (for non-truncating stores) or might
diff --git a/gcc/config/arm/arm-mve-builtins-shapes.h 
b/gcc/config/arm/arm-mve-builtins-shapes.h
index 6b839c577c6..f1838e6da42 100644
--- a/gcc/config/arm/arm-mve-builtins-shapes.h
+++ b/gcc/config/arm/arm-mve-builtins-shapes.h
@@ -66,6 +66,8 @@ namespace arm_mve
     extern const function_shape *const load_ext_gather_offset;
     extern const function_shape *const load_gather_base;
     extern const function_shape *const mvn;
+    extern const function_shape *const scalar_s64_shift;
+    extern const function_shape *const scalar_u64_shift;
     extern const function_shape *const store;
     extern const function_shape *const store_scatter_base;
     extern const function_shape *const store_scatter_offset;
-- 
2.34.1

Reply via email to