From: Christophe Lyon <[email protected]>

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 03f70f8ba16..41e656e0861 100644
--- a/gcc/config/arm/arm-mve-builtins-shapes.cc
+++ b/gcc/config/arm/arm-mve-builtins-shapes.cc
@@ -1723,6 +1723,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)
+
 /* <T0>_t vfoo[_t0](<S0>_t, <T0>_t, const_int)
 
    Check that 'idx' is in the [0..#num_lanes - 1] range.
diff --git a/gcc/config/arm/arm-mve-builtins-shapes.h b/gcc/config/arm/arm-mve-builtins-shapes.h
index 4763eeeda32..1841a8f7b22 100644
--- a/gcc/config/arm/arm-mve-builtins-shapes.h
+++ b/gcc/config/arm/arm-mve-builtins-shapes.h
@@ -67,6 +67,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 setq_lane;
     extern const function_shape *const store;
     extern const function_shape *const store_scatter_base;

Reply via email to