This patch series adds support for the `FEAT_MOP4` extension (see
https://arm-software.github.io/acle/main/acle.html#sme2-mop4-intrinsics).
As part of this series, I also added support for `FEAT_SME_F8F16` and
`FEAT_SME_F8F32`.

This patch series depends on
https://inbox.sourceware.org/gcc-patches/[email protected]/
for the ability to have intrinsics with three type suffixes.

* Changelog
  * V1: Initial revision
  * V2: Rebase on master. Merge commits 4,5,6. Address review comments.

Claudio Bantaloukas (1):
  aarch64: Add SME2.1 structured sparsity outer product intrinsics

Karl Meakin (3):
  aarch64: Fix comments for register constraints
  aarch64: Add `SME_MOP4` extensions
  aarch64: Add `SME_MOP4` instrinsics and corresponding insns

 gcc/config/aarch64/aarch64-c.cc               |   4 +
 gcc/config/aarch64/aarch64-sme.md             | 208 ++++++++++++++++++
 .../aarch64/aarch64-sve-builtins-functions.h  |  52 +++++
 .../aarch64/aarch64-sve-builtins-shapes.cc    |  84 +++++++
 .../aarch64/aarch64-sve-builtins-shapes.h     |   3 +
 .../aarch64/aarch64-sve-builtins-sme.cc       |  40 ++++
 .../aarch64/aarch64-sve-builtins-sme.def      |  91 ++++++++
 gcc/config/aarch64/aarch64-sve-builtins-sme.h |   3 +
 gcc/config/aarch64/aarch64-sve-builtins.cc    |  93 +++++++-
 gcc/config/aarch64/aarch64-sve-builtins.def   |   4 +
 gcc/config/aarch64/aarch64.cc                 |   2 +
 gcc/config/aarch64/aarch64.h                  |   7 +
 gcc/config/aarch64/constraints.md             |  25 ++-
 gcc/config/aarch64/iterators.md               | 118 ++++++++++
 gcc/doc/invoke.texi                           |   3 +
 .../gcc.target/aarch64/pragma_cpp_predefs_4.c |  22 ++
 .../aarch64/sme/acle-asm/test_sme_acle.h      |   2 +-
 .../sme2/acle-asm/mop4a_za16_bf16_bf16.c      |  87 ++++++++
 .../sme2/acle-asm/mop4a_za16_f16_f16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4a_za16_mf8_mf8.c        |  87 ++++++++
 .../sme2/acle-asm/mop4a_za32_bf16_bf16.c      |  87 ++++++++
 .../sme2/acle-asm/mop4a_za32_f16_f16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4a_za32_f32_f32.c        |  87 ++++++++
 .../sme2/acle-asm/mop4a_za32_mf8_mf8.c        |  87 ++++++++
 .../sme2/acle-asm/mop4a_za32_s16_s16.c        |  87 ++++++++
 .../aarch64/sme2/acle-asm/mop4a_za32_s8_s8.c  |  87 ++++++++
 .../aarch64/sme2/acle-asm/mop4a_za32_s8_u8.c  |  87 ++++++++
 .../sme2/acle-asm/mop4a_za32_u16_u16.c        |  87 ++++++++
 .../aarch64/sme2/acle-asm/mop4a_za32_u8_s8.c  |  87 ++++++++
 .../aarch64/sme2/acle-asm/mop4a_za32_u8_u8.c  |  87 ++++++++
 .../sme2/acle-asm/mop4a_za64_f64_f64.c        |  87 ++++++++
 .../sme2/acle-asm/mop4a_za64_s16_s16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4a_za64_s16_u16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4a_za64_u16_s16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4a_za64_u16_u16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4s_za16_bf16_bf16.c      |  87 ++++++++
 .../sme2/acle-asm/mop4s_za16_f16_f16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4s_za32_bf16_bf16.c      |  87 ++++++++
 .../sme2/acle-asm/mop4s_za32_f16_f16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4s_za32_s16_s16.c        |  87 ++++++++
 .../aarch64/sme2/acle-asm/mop4s_za32_s8_s8.c  |  87 ++++++++
 .../aarch64/sme2/acle-asm/mop4s_za32_s8_u8.c  |  87 ++++++++
 .../sme2/acle-asm/mop4s_za32_u16_u16.c        |  87 ++++++++
 .../aarch64/sme2/acle-asm/mop4s_za32_u8_s8.c  |  87 ++++++++
 .../aarch64/sme2/acle-asm/mop4s_za32_u8_u8.c  |  87 ++++++++
 .../sme2/acle-asm/mop4s_za64_f64_f64.c        |  87 ++++++++
 .../sme2/acle-asm/mop4s_za64_s16_s16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4s_za64_s16_u16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4s_za64_u16_s16.c        |  87 ++++++++
 .../sme2/acle-asm/mop4s_za64_u16_u16.c        |  87 ++++++++
 .../aarch64/sme2/acle-asm/test_sme2_acle.h    |  22 ++
 .../sme2/acle-asm/tmopa_lane_za16_bf16_bf16.c |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za16_f16_f16.c   |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za16_mf8_mf8.c   |  83 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_bf16_bf16.c |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_f16_f16.c   |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_f32_f32.c   |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_mf8_mf8.c   |  83 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_s16_s16.c   |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_s8_s8.c     |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_s8_u8.c     |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_u16_u16.c   |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_u8_s8.c     |  76 +++++++
 .../sme2/acle-asm/tmopa_lane_za32_u8_u8.c     |  76 +++++++
 .../aarch64/sve/acle/general-c/mop4_b16b16.c  |  79 +++++++
 .../aarch64/sve/acle/general-c/mop4_base.c    | 106 +++++++++
 .../aarch64/sve/acle/general-c/mop4_f16f16.c  |  79 +++++++
 .../aarch64/sve/acle/general-c/mop4_f64f64.c  |  79 +++++++
 .../aarch64/sve/acle/general-c/mop4_f8f16.c   |  84 +++++++
 .../aarch64/sve/acle/general-c/mop4_f8f32.c   |  84 +++++++
 .../aarch64/sve/acle/general-c/mop4_i16i64.c  |  88 ++++++++
 .../general-c/ternary_za_uint_dual_single_1.c |  87 ++++++++
 gcc/testsuite/lib/target-supports.exp         |   2 +-
 73 files changed, 5331 insertions(+), 13 deletions(-)
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za16_bf16_bf16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za16_f16_f16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za16_mf8_mf8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_bf16_bf16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_f16_f16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_f32_f32.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_mf8_mf8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_s16_s16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_s8_s8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_s8_u8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_u16_u16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_u8_s8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za32_u8_u8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_f64_f64.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_s16_s16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_s16_u16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_u16_s16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4a_za64_u16_u16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za16_bf16_bf16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za16_f16_f16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_bf16_bf16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_f16_f16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_s16_s16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_s8_s8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_s8_u8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_u16_u16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_u8_s8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za32_u8_u8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_f64_f64.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_s16_s16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_s16_u16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_u16_s16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/mop4s_za64_u16_u16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za16_bf16_bf16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za16_f16_f16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za16_mf8_mf8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_bf16_bf16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_f16_f16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_f32_f32.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_mf8_mf8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_s16_s16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_s8_s8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_s8_u8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_u16_u16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_u8_s8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sme2/acle-asm/tmopa_lane_za32_u8_u8.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_b16b16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_base.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_f16f16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_f64f64.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_f8f16.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_f8f32.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/mop4_i16i64.c
 create mode 100644 
gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/ternary_za_uint_dual_single_1.c

--
2.51.0

Reply via email to