Hi Alex,
Ah yeah that is a really nice way to explain the split. Seems that Richard S
knew what he was talking about :)
Comments addressed.
KR,
Alfie
gcc/ChangeLog:
* config/aarch64/aarch64.md: Update comment.
* config/aarch64/aarch64-simd.md: Change comment to refer to
aarch64.md.
* config/aarch64/aarch64-sme.md: Likewise.
* config/aarch64/aarch64-sve.md: Likewise.
* config/aarch64/aarch64-sve2.md: Likewise.
* config/aarch64/aarch64-sve-builtins.def: Update comment.
* config/aarch64/aarch64-sve-builtins-base.def: Update to refer
to aarch64-sve-builtins.def.
* config/aarch64/aarch64-sve-builtins-sme.def: Likewise.
* config/aarch64/aarch64-sve-builtins-sve2.def: Likewise.
---
gcc/config/aarch64/aarch64-simd.md | 18 +---------
gcc/config/aarch64/aarch64-sme.md | 18 +---------
.../aarch64/aarch64-sve-builtins-base.def | 18 ++--------
.../aarch64/aarch64-sve-builtins-sme.def | 18 ++--------
.../aarch64/aarch64-sve-builtins-sve2.def | 18 ++--------
gcc/config/aarch64/aarch64-sve-builtins.def | 34 ++++++++++---------
gcc/config/aarch64/aarch64-sve.md | 18 +---------
gcc/config/aarch64/aarch64-sve2.md | 20 ++---------
gcc/config/aarch64/aarch64.md | 29 +++++++++-------
9 files changed, 45 insertions(+), 146 deletions(-)
diff --git a/gcc/config/aarch64/aarch64-simd.md
b/gcc/config/aarch64/aarch64-simd.md
index 7a38310efce..4c059269383 100644
--- a/gcc/config/aarch64/aarch64-simd.md
+++ b/gcc/config/aarch64/aarch64-simd.md
@@ -18,23 +18,7 @@
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
-;; Code organisation:
-;
-;; The lines of is an instruction is aarch64, simd, sve, sve2, or sme are
-;; a little blurry.
-;;
-;; Therefore code is organised by the following rough principles:
-;;
-;; - aarch64.md: For shared parts of the architecture (such as defining
-;; registers and constants) and for instructions that operate on non-SIMD
-;; registers.
-;; - aarch64-simd.md: For instructions that operate on non-scaling SIMD
-;; registers.
-;; - aarch64-sve.md for SVE instructions that are pre SVE2.
-;; - aarch64-sme.md for any scalable SIMD instruction that is incompatible with
-;; non-streaming mode. This usually means it uses the ZA or ZT register.
-;; - aarch64-sve2.md for any scalable SIMD instruction that either is
-;; streaming compatible, or theoretically could be later.
+;; Code organization: See block comment at the top of aarch64.md.
;; The following define_subst rules are used to produce patterns representing
;; the implicit zeroing effect of 64-bit Advanced SIMD operations, in effect
diff --git a/gcc/config/aarch64/aarch64-sme.md
b/gcc/config/aarch64/aarch64-sme.md
index a2faa4b2bb7..72823e528de 100644
--- a/gcc/config/aarch64/aarch64-sme.md
+++ b/gcc/config/aarch64/aarch64-sme.md
@@ -17,23 +17,7 @@
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
-;; Code organisation:
-;
-;; The lines of is an instruction is aarch64, simd, sve, sve2, or sme are
-;; a little blurry.
-;;
-;; Therefore code is organised by the following rough principles:
-;;
-;; - aarch64.md: For shared parts of the architecture (such as defining
-;; registers and constants) and for instructions that operate on non-SIMD
-;; registers.
-;; - aarch64-simd.md: For instructions that operate on non-scaling SIMD
-;; registers.
-;; - aarch64-sve.md for SVE instructions that are pre SVE2.
-;; - aarch64-sme.md for any scalable SIMD instruction that is incompatible with
-;; non-streaming mode. This usually means it uses the ZA or ZT register.
-;; - aarch64-sve2.md for any scalable SIMD instruction that either is
-;; streaming compatible, or theoretically could be later.
+;; Code organization: See block comment at the top of aarch64.md.
;; The file is organised into the following sections (search for the full
;; line):
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.def
b/gcc/config/aarch64/aarch64-sve-builtins-base.def
index 0a3a7a0e144..9914e060f4d 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-base.def
+++ b/gcc/config/aarch64/aarch64-sve-builtins-base.def
@@ -17,22 +17,8 @@
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
-/* Code organisation:
-
- The lines defining if an intrinsic is for sve, sve2, sme, and sme2 can get
- a little blurry.
-
- Therefore code is organised by the following rough principles:
-
- - aarch64-sve-builtins-sme.def for any intrinsic that is fundamentally
- incompatible with non-streaming mode. This usually means it uses the ZA
- or ZT register.
- - aarch64-sve-builtins-sve2.def for any intrinsic that that is a streaming
mode
- intrinsic, but either is non-streaming compatible, or theoretically could
- be later.
- - aarch64-sve-builtins-base.def for SVE intrinsics that are pre SVE2.
- - aarch64-sve-builtins.def for common data types and group definitions used
- across all files. */
+/* Code organization: See block comment at the top of
+ aarch64-sve-builtins.def. */
#define REQUIRED_EXTENSIONS ssve (0)
DEF_SVE_FUNCTION (svabd, binary_opt_n, all_arith, mxz)
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sme.def
b/gcc/config/aarch64/aarch64-sve-builtins-sme.def
index 9f126e8647a..4feb4795287 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-sme.def
+++ b/gcc/config/aarch64/aarch64-sve-builtins-sme.def
@@ -17,22 +17,8 @@
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
-/* Code organisation:
-
- The lines defining if an intrinsic is for sve, sve2, sme, and sme2 can get
- a little blurry.
-
- Therefore code is organised by the following rough principles:
-
- - aarch64-sve-builtins-sme.def for any intrinsic that is fundamentally
- incompatible with non-streaming mode. This usually means it uses the ZA
- or ZT register.
- - aarch64-sve-builtins-sve2.def for any intrinsic that that is a streaming
mode
- intrinsic, but either is non-streaming compatible, or theoretically could
- be later.
- - aarch64-sve-builtins-base.def for SVE intrinsics that are pre SVE2.
- - aarch64-sve-builtins.def for common data types and group definitions used
- across all files. */
+/* Code organization: See block comment at the top of
+ aarch64-sve-builtins.def. */
#ifndef DEF_SME_FUNCTION_GS
#define DEF_SME_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS) \
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sve2.def
b/gcc/config/aarch64/aarch64-sve-builtins-sve2.def
index 8765021d951..19249a58875 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-sve2.def
+++ b/gcc/config/aarch64/aarch64-sve-builtins-sve2.def
@@ -17,22 +17,8 @@
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
-/* Code organisation:
-
- The lines defining if an intrinsic is for sve, sve2, sme, and sme2 can get
- a little blurry.
-
- Therefore code is organised by the following rough principles:
-
- - aarch64-sve-builtins-sme.def for any intrinsic that is fundamentally
- incompatible with non-streaming mode. This usually means it uses the ZA
- or ZT register.
- - aarch64-sve-builtins-sve2.def for any intrinsic that that is a streaming
mode
- intrinsic, but either is non-streaming compatible, or theoretically could
- be later.
- - aarch64-sve-builtins-base.def for SVE intrinsics that are pre SVE2.
- - aarch64-sve-builtins.def for common data types and group definitions used
- across all files. */
+/* Code organization: See block comment at the top of
+ aarch64-sve-builtins.def. */
#define REQUIRED_EXTENSIONS sve_and_sme (AARCH64_FL_SVE2, 0)
DEF_SVE_FUNCTION (svaba, ternary_opt_n, all_integer, none)
diff --git a/gcc/config/aarch64/aarch64-sve-builtins.def
b/gcc/config/aarch64/aarch64-sve-builtins.def
index ecd434bda35..6ad257643b6 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins.def
+++ b/gcc/config/aarch64/aarch64-sve-builtins.def
@@ -17,22 +17,24 @@
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
-/* Code organisation:
-
- The lines defining if an intrinsic is for sve, sve2, sme, and sme2 can get
- a little blurry.
-
- Therefore code is organised by the following rough principles:
-
- - aarch64-sve-builtins-sme.def for any intrinsic that is fundamentally
- incompatible with non-streaming mode. This usually means it uses the ZA
- or ZT register.
- - aarch64-sve-builtins-sve2.def for any intrinsic that that is a streaming
mode
- intrinsic, but either is non-streaming compatible, or theoretically could
- be later.
- - aarch64-sve-builtins-base.def for SVE intrinsics that are pre SVE2.
- - aarch64-sve-builtins.def for common data types and group definitions used
- across all files. */
+/* Code organization:
+
+ The taxonomic lines dividing intrinsics into sve, sve2, and sme are perhaps
+ a little non-obvious.
+
+ The code is organized by the following rough principles:
+
+ - aarch64-sve-builtins.def for common data types, groups, and other
+ supporting definitions used across all files.
+ - aarch64-sve-builtins-base.def for the baseline SVE intrinsics which
predate
+ SVE2 and SME.
+ - aarch64-sve-builtins-sve2.def for any scalable SIMD intrinsic that is
+ enabled by an SVE2+ or SME+ extension and doesn't directly touch SME
+ state (such as ZA or ZT0) and only involves regular SVE vectors and
+ predicates.
+ - aarch64-sve-builtins-sme.def for any SME+ instinsic that is clearly
+ streaming mode only. This usually means it uses the ZA or ZT0
registers,
+ or other SME state. */
#ifndef DEF_SVE_MODE
#define DEF_SVE_MODE(A, B, C, D)
diff --git a/gcc/config/aarch64/aarch64-sve.md
b/gcc/config/aarch64/aarch64-sve.md
index b77a04cd2d2..846ed5c65d2 100644
--- a/gcc/config/aarch64/aarch64-sve.md
+++ b/gcc/config/aarch64/aarch64-sve.md
@@ -18,23 +18,7 @@
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
-;; Code organisation:
-;
-;; The lines of is an instruction is aarch64, simd, sve, sve2, or sme are
-;; a little blurry.
-;;
-;; Therefore code is organised by the following rough principles:
-;;
-;; - aarch64.md: For shared parts of the architecture (such as defining
-;; registers and constants) and for instructions that operate on non-SIMD
-;; registers.
-;; - aarch64-simd.md: For instructions that operate on non-scaling SIMD
-;; registers.
-;; - aarch64-sve.md for SVE instructions that are pre SVE2.
-;; - aarch64-sme.md for any scalable SIMD instruction that is incompatible with
-;; non-streaming mode. This usually means it uses the ZA or ZT register.
-;; - aarch64-sve2.md for any scalable SIMD instruction that either is
-;; streaming compatible, or theoretically could be later.
+;; Code organization: See block comment at the top of aarch64.md.
;; The file is organised into the following sections (search for the full
;; line):
diff --git a/gcc/config/aarch64/aarch64-sve2.md
b/gcc/config/aarch64/aarch64-sve2.md
index f959837eca0..1278b9081cd 100644
--- a/gcc/config/aarch64/aarch64-sve2.md
+++ b/gcc/config/aarch64/aarch64-sve2.md
@@ -17,24 +17,8 @@
;; You should have received a copy of the GNU General Public License
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
-;
-;; Code organisation:
-;
-;; The lines of is an instruction is aarch64, simd, sve, sve2, or sme are
-;; a little blurry.
-;;
-;; Therefore code is organised by the following rough principles:
-;;
-;; - aarch64.md: For shared parts of the architecture (such as defining
-;; registers and constants) and for instructions that operate on non-SIMD
-;; registers.
-;; - aarch64-simd.md: For instructions that operate on non-scaling SIMD
-;; registers.
-;; - aarch64-sve.md for SVE instructions that are pre SVE2.
-;; - aarch64-sme.md for any scalable SIMD instruction that is incompatible with
-;; non-streaming mode. This usually means it uses the ZA or ZT register.
-;; - aarch64-sve2.md for any scalable SIMD instruction that either is
-;; streaming compatible, or theoretically could be later.
+
+;; Code organization: See block comment at the top of aarch64.md.
;; The file is organised into the following sections (search for the full
;; line):
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 58e57fd65a7..568e5814afc 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -18,23 +18,26 @@
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
-;; Code organisation:
+;; Code organization:
;
-;; The lines of is an instruction is aarch64, simd, sve, sve2, or sme are
-;; a little blurry.
+;; The taxonomic lines dividing instructions into aarch64, simd, sve, sve2,
+;; and sme are perhaps a little non-obvious.
;;
-;; Therefore code is organised by the following rough principles:
+;; The code is organized by the following rough principles:
;;
-;; - aarch64.md: For shared parts of the architecture (such as defining
-;; registers and constants) and for instructions that operate on non-SIMD
+;; - aarch64.md for shared parts of the architecture (such as defining
+;; registers and constants) and for instructions that operate on
+;; general-purpose registers.
+;; - aarch64-simd.md for instructions that operate on Advanced SIMD
;; registers.
-;; - aarch64-simd.md: For instructions that operate on non-scaling SIMD
-;; registers.
-;; - aarch64-sve.md for SVE instructions that are pre SVE2.
-;; - aarch64-sme.md for any scalable SIMD instruction that is incompatible with
-;; non-streaming mode. This usually means it uses the ZA or ZT register.
-;; - aarch64-sve2.md for any scalable SIMD instruction that either is
-;; streaming compatible, or theoretically could be later.
+;; - aarch64-sve.md for the baseline SVE instructions which predate SVE2 and
+;; SME.
+;; - aarch64-sve2.md for any scalable SIMD instruction that is enabled by an
+;; SVE2+ or SME+ extension and doesn't directly touch SME state (such as
ZA,
+;; or ZT0) and only involves regular SVE vectors and predicates.
+;; - aarch64-sme.md for any scalable SIMD instruction that is clearly
+;; streaming mode only. This usually means it uses the ZA or ZT0 register
+;; or other SME state.
;; Register numbers
(define_constants
--
2.34.1