public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension
@ 2023-11-06 13:12 Victor Do Nascimento
  2023-11-06 13:12 ` [PATCH 1/3] aarch64: Add LSE128 instruction operand support Victor Do Nascimento
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Victor Do Nascimento @ 2023-11-06 13:12 UTC (permalink / raw)
  To: binutils; +Cc: richard.earnshaw, nickc, Victor Do Nascimento

Add support for the 128-bit Atomic Instructions extension, also known
and referred to as LSE128 and which is made optional from Armv9.4-a
onward.

The feature is enabled by passing the +lse128 option to -march
(eg: -march=armv9.4-a+lse128) or using the ".arch_extension lse128"
directive in the assembly file.  Given that the implementation of the
LSE128 feature requires that the LSE feature is also present, the
+lse128 option also implicitly enables the +lse feature.

LSE128 adds support for the following new 128-bit atomic instructions:

  * Atomic bit clear on quadword in memory (ldclrp{a|l|al});
  * Atomic bit set on quadword in memory (ldsetp{a|l|al});
  * Swap quadword in memory (swpp{a|l|al});

Regression testing for aarch64-none-linux-gnu target with no regressions.

Victor Do Nascimento (3):
  aarch64: Add LSE128 instruction operand support
  aarch64: Add arch support for LSE128 extension
  aarch64: Add LSE128 instructions

 gas/config/tc-aarch64.c                   |  6 +++++
 gas/doc/c-aarch64.texi                    |  2 ++
 gas/testsuite/gas/aarch64/lse128-atomic.d | 32 ++++++++++++++++++++++
 gas/testsuite/gas/aarch64/lse128-atomic.s | 33 +++++++++++++++++++++++
 include/opcode/aarch64.h                  |  5 ++++
 opcodes/aarch64-opc.c                     |  4 +++
 opcodes/aarch64-opc.h                     |  2 ++
 opcodes/aarch64-tbl.h                     | 20 ++++++++++++++
 8 files changed, 104 insertions(+)
 create mode 100644 gas/testsuite/gas/aarch64/lse128-atomic.d
 create mode 100644 gas/testsuite/gas/aarch64/lse128-atomic.s

-- 
2.41.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] aarch64: Add LSE128 instruction operand support
  2023-11-06 13:12 [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension Victor Do Nascimento
@ 2023-11-06 13:12 ` Victor Do Nascimento
  2023-11-06 13:12 ` [PATCH 2/3] aarch64: Add arch support for LSE128 extension Victor Do Nascimento
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Victor Do Nascimento @ 2023-11-06 13:12 UTC (permalink / raw)
  To: binutils; +Cc: richard.earnshaw, nickc, Victor Do Nascimento

Given the particular encoding of the LSE128 instructions, create the
necessary shared input+output operand register description and
handling in the code to allow for the encoding of the LSE128 128-bit
atomic operations.

gas/ChangeLog:

	* config/tc-aarch64.c (parse_operands):

include/ChangeLog:

	* opcode/aarch64.h (enum aarch64_opnd):

opcodes/ChangeLog:

	* aarch64-opc.c (fields):
	(aarch64_print_operand):
	* aarch64-opc.h (enum aarch64_field_kind):
	* aarch64-tbl.h (AARCH64_OPERANDS):
---
 gas/config/tc-aarch64.c  | 5 +++++
 include/opcode/aarch64.h | 2 ++
 opcodes/aarch64-opc.c    | 4 ++++
 opcodes/aarch64-opc.h    | 2 ++
 opcodes/aarch64-tbl.h    | 2 ++
 5 files changed, 15 insertions(+)

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 1f687fe1ca0..7e76c1b0733 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -7863,6 +7863,11 @@ parse_operands (char *str, const aarch64_opcode *opcode)
 	  po_char_or_fail ('!');
 	  break;
 
+	case AARCH64_OPND_LSE128_Rt:
+	case AARCH64_OPND_LSE128_Rt2:
+	  po_int_fp_reg_or_fail (REG_TYPE_R_64);
+	  break;
+
 	default:
 	  as_fatal (_("unhandled operand code %d"), operands[i]);
 	}
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index 72d8ec2ce27..2b7e633fae2 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -519,6 +519,8 @@ enum aarch64_opnd
   AARCH64_OPND_BARRIER_PSB,	/* Barrier operand for PSB.  */
   AARCH64_OPND_BARRIER_GCSB,	/* Barrier operand for GCSB.  */
   AARCH64_OPND_BTI_TARGET,	/* BTI {<target>}.  */
+  AARCH64_OPND_LSE128_Rt,	/* LSE128 <Xt1>.  */
+  AARCH64_OPND_LSE128_Rt2,	/* LSE128 <Xt2>.  */
   AARCH64_OPND_SVE_ADDR_RI_S4x16,   /* SVE [<Xn|SP>, #<simm4>*16].  */
   AARCH64_OPND_SVE_ADDR_RI_S4x32,   /* SVE [<Xn|SP>, #<simm4>*32].  */
   AARCH64_OPND_SVE_ADDR_RI_S4xVL,   /* SVE [<Xn|SP>, #<simm4>, MUL VL].  */
diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
index 6d9f3a06def..70e29579e66 100644
--- a/opcodes/aarch64-opc.c
+++ b/opcodes/aarch64-opc.c
@@ -226,6 +226,8 @@ const aarch64_field fields[] =
     { 10,  8 }, /* CSSC_imm8.  */
     { 11,  1 },	/* H: in advsimd scalar x indexed element instructions.  */
     { 21,  1 },	/* L: in advsimd scalar x indexed element instructions.  */
+    {  0,  5 },	/* LSE128_Rt: Shared input+output operand register.  */
+    { 16,  5 },	/* LSE128_Rt2: Shared input+output operand register 2.  */
     { 20,  1 },	/* M: in advsimd scalar x indexed element instructions.  */
     { 22,  1 },	/* N: in logical (immediate) instructions.  */
     { 30,  1 },	/* Q: in most AdvSIMD instructions.  */
@@ -3770,6 +3772,8 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc,
     case AARCH64_OPND_Rt_SYS:
     case AARCH64_OPND_PAIRREG:
     case AARCH64_OPND_SVE_Rm:
+    case AARCH64_OPND_LSE128_Rt:
+    case AARCH64_OPND_LSE128_Rt2:
       /* The optional-ness of <Xt> in e.g. IC <ic_op>{, <Xt>} is determined by
 	 the <ic_op>, therefore we use opnd->present to override the
 	 generic optional-ness information.  */
diff --git a/opcodes/aarch64-opc.h b/opcodes/aarch64-opc.h
index fe1f882c20e..f07ab2c56f1 100644
--- a/opcodes/aarch64-opc.h
+++ b/opcodes/aarch64-opc.h
@@ -36,6 +36,8 @@ enum aarch64_field_kind
   FLD_CSSC_imm8,
   FLD_H,
   FLD_L,
+  FLD_LSE128_Rt,
+  FLD_LSE128_Rt2,
   FLD_M,
   FLD_N,
   FLD_Q,
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 463939d24ca..150b042d7ee 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -6305,6 +6305,8 @@ const struct aarch64_opcode aarch64_opcode_table[] =
       "the GCSB option name DSYNC")					\
     Y(SYSTEM, hint, "BTI_TARGET", 0, F (),				\
       "BTI targets j/c/jc")						\
+    Y(INT_REG, regno, "LSE128_Rt", 0, F(FLD_LSE128_Rt), "an integer register") \
+    Y(INT_REG, regno, "LSE128_Rt2", 0, F(FLD_LSE128_Rt2), "an integer register") \
     Y(ADDRESS, sve_addr_ri_s4, "SVE_ADDR_RI_S4x16",			\
       4 << OPD_F_OD_LSB, F(FLD_Rn),					\
       "an address with a 4-bit signed offset, multiplied by 16")	\
-- 
2.41.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 2/3] aarch64: Add arch support for LSE128 extension
  2023-11-06 13:12 [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension Victor Do Nascimento
  2023-11-06 13:12 ` [PATCH 1/3] aarch64: Add LSE128 instruction operand support Victor Do Nascimento
@ 2023-11-06 13:12 ` Victor Do Nascimento
  2023-11-06 13:12 ` [PATCH 3/3] aarch64: Add LSE128 instructions Victor Do Nascimento
  2023-11-07 11:08 ` [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension Nick Clifton
  3 siblings, 0 replies; 5+ messages in thread
From: Victor Do Nascimento @ 2023-11-06 13:12 UTC (permalink / raw)
  To: binutils; +Cc: richard.earnshaw, nickc, Victor Do Nascimento

Enable the `+lse128' feature modifier which, together with new
internal feature flags, enables LSE128 instructions, which are
represented via the new `_LSE128_INSN' macro.

gas/ChangeLog:

	* config/tc-aarch64.c (aarch64_features): Add new "lse128"
	entry.

include/ChangeLog:

	* include/opcode/aarch64.h (enum aarch64_feature_bit): New
	AARCH64_FEATURE_LSE128 feature bit.
	(enum aarch64_insn_class): New lse128_atomic instruction class.

opcodes/ChangeLog:

	* opcodes/aarch64-tbl.h (aarch64_feature_lse128): New.
	(LSE128): Likewise.
	(_LSE128_INSN): Likewise.
---
 gas/config/tc-aarch64.c  | 1 +
 gas/doc/c-aarch64.texi   | 2 ++
 include/opcode/aarch64.h | 3 +++
 opcodes/aarch64-tbl.h    | 5 +++++
 4 files changed, 11 insertions(+)

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 7e76c1b0733..325ea2f99d8 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -10239,6 +10239,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
 			AARCH64_FEATURE (SIMD)},
   {"fp",		AARCH64_FEATURE (FP), AARCH64_NO_FEATURES},
   {"lse",		AARCH64_FEATURE (LSE), AARCH64_NO_FEATURES},
+  {"lse128",		AARCH64_FEATURES (2, LSE, LSE128), AARCH64_NO_FEATURES},
   {"simd",		AARCH64_FEATURE (SIMD), AARCH64_FEATURE (FP)},
   {"pan",		AARCH64_FEATURE (PAN), AARCH64_NO_FEATURES},
   {"lor",		AARCH64_FEATURE (LOR), AARCH64_NO_FEATURES},
diff --git a/gas/doc/c-aarch64.texi b/gas/doc/c-aarch64.texi
index a3ca714c299..b9fddd6a7f9 100644
--- a/gas/doc/c-aarch64.texi
+++ b/gas/doc/c-aarch64.texi
@@ -263,6 +263,8 @@ automatically cause those extensions to be disabled.
  @tab Enable Check Feature Status Extension.
 @item @code{gcs} @tab N/A @tab No
  @tab Enable Guarded Control Stack Extension.
+@item @code{lse128} @Armv9.4-A @tab No
+ @tab Enable the 128-bit Atomic Instructions extension.  This implies @code{lse}.
 @end multitable
 
 @node AArch64 Syntax
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index 2b7e633fae2..3dd55f1438e 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -165,6 +165,8 @@ enum aarch64_feature_bit {
   AARCH64_FEATURE_GCS,
   /* SME2.  */
   AARCH64_FEATURE_SME2,
+  /* LSE128.  */
+  AARCH64_FEATURE_LSE128,
   AARCH64_NUM_FEATURES
 };
 
@@ -855,6 +857,7 @@ enum aarch64_insn_class
   log_imm,
   log_shift,
   lse_atomic,
+  lse128_atomic,
   movewide,
   pcreladdr,
   ic_system,
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 150b042d7ee..58787fbc4a9 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -2470,6 +2470,8 @@ static const aarch64_feature_set aarch64_feature_crc =
   AARCH64_FEATURE (CRC);
 static const aarch64_feature_set aarch64_feature_lse =
   AARCH64_FEATURE (LSE);
+static const aarch64_feature_set aarch64_feature_lse128 =
+  AARCH64_FEATURES (2, LSE, LSE128);
 static const aarch64_feature_set aarch64_feature_lor =
   AARCH64_FEATURE (LOR);
 static const aarch64_feature_set aarch64_feature_rdma =
@@ -2582,6 +2584,7 @@ static const aarch64_feature_set aarch64_feature_gcs =
 #define SIMD		&aarch64_feature_simd
 #define CRC		&aarch64_feature_crc
 #define LSE		&aarch64_feature_lse
+#define LSE128		&aarch64_feature_lse128
 #define LOR		&aarch64_feature_lor
 #define RDMA		&aarch64_feature_rdma
 #define FP_F16		&aarch64_feature_fp_f16
@@ -2649,6 +2652,8 @@ static const aarch64_feature_set aarch64_feature_gcs =
   { NAME, OPCODE, MASK, CLASS, 0, CRC, OPS, QUALS, FLAGS, 0, 0, NULL }
 #define _LSE_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
   { NAME, OPCODE, MASK, CLASS, 0, LSE, OPS, QUALS, FLAGS, 0, 0, NULL }
+#define _LSE128_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
+  { NAME, OPCODE, MASK, CLASS, 0, LSE128, OPS, QUALS, FLAGS, 0, 0, NULL }
 #define _LOR_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
   { NAME, OPCODE, MASK, CLASS, 0, LOR, OPS, QUALS, FLAGS, 0, 0, NULL }
 #define RDMA_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
-- 
2.41.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 3/3] aarch64: Add LSE128 instructions
  2023-11-06 13:12 [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension Victor Do Nascimento
  2023-11-06 13:12 ` [PATCH 1/3] aarch64: Add LSE128 instruction operand support Victor Do Nascimento
  2023-11-06 13:12 ` [PATCH 2/3] aarch64: Add arch support for LSE128 extension Victor Do Nascimento
@ 2023-11-06 13:12 ` Victor Do Nascimento
  2023-11-07 11:08 ` [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension Nick Clifton
  3 siblings, 0 replies; 5+ messages in thread
From: Victor Do Nascimento @ 2023-11-06 13:12 UTC (permalink / raw)
  To: binutils; +Cc: richard.earnshaw, nickc, Victor Do Nascimento

Implement, together with the necessary tests, the following new LSE128
atomic instructions:

  * Atomic bit clear on quadword in memory (ldclrp{a|l|al});
  * Atomic bit set on quadword in memory (ldsetp{a|l|al});
  * Swap quadword in memory (swpp{a|l|al});

gas/ChangeLog:

	* testsuite/gas/aarch64/lse128-atomic.d: New.
	* testsuite/gas/aarch64/lse128-atomic.s: Likewise.

opcodes/ChangeLog:

	* aarch64-tbl.h (ldclrp): new _LSE128_INSN entry.
	(ldclrpa):  Likewise.
	(ldclrpal): Likewise.
	(ldclrpl): Likewise.
	(ldsetp): Likewise.
	(ldsetpa): Likewise.
	(ldsetpal): Likewise.
	(ldsetpl): Likewise.
	(swpp): Likewise.
	(swppa): Likewise.
	(swppal): Likewise.
	(swppl): Likewise.
---
 gas/testsuite/gas/aarch64/lse128-atomic.d | 32 ++++++++++++++++++++++
 gas/testsuite/gas/aarch64/lse128-atomic.s | 33 +++++++++++++++++++++++
 opcodes/aarch64-tbl.h                     | 13 +++++++++
 3 files changed, 78 insertions(+)
 create mode 100644 gas/testsuite/gas/aarch64/lse128-atomic.d
 create mode 100644 gas/testsuite/gas/aarch64/lse128-atomic.s

diff --git a/gas/testsuite/gas/aarch64/lse128-atomic.d b/gas/testsuite/gas/aarch64/lse128-atomic.d
new file mode 100644
index 00000000000..bea83fe3642
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/lse128-atomic.d
@@ -0,0 +1,32 @@
+#objdump: -dr
+#as:-march=armv9-a+lse128
+
+.*:     file format .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+   0:	19211040 	ldclrp	x0, x1, \[x2\]
+   4:	192313e2 	ldclrp	x2, x3, \[sp\]
+   8:	19a11040 	ldclrpa	x0, x1, \[x2\]
+   c:	19a313e2 	ldclrpa	x2, x3, \[sp\]
+  10:	19e11040 	ldclrpal	x0, x1, \[x2\]
+  14:	19e313e2 	ldclrpal	x2, x3, \[sp\]
+  18:	19611040 	ldclrpl	x0, x1, \[x2\]
+  1c:	196313e2 	ldclrpl	x2, x3, \[sp\]
+  20:	19213040 	ldsetp	x0, x1, \[x2\]
+  24:	192333e2 	ldsetp	x2, x3, \[sp\]
+  28:	19a13040 	ldsetpa	x0, x1, \[x2\]
+  2c:	19a333e2 	ldsetpa	x2, x3, \[sp\]
+  30:	19e13040 	ldsetpal	x0, x1, \[x2\]
+  34:	19e333e2 	ldsetpal	x2, x3, \[sp\]
+  38:	19613040 	ldsetpl	x0, x1, \[x2\]
+  3c:	196333e2 	ldsetpl	x2, x3, \[sp\]
+  40:	19218040 	swpp	x0, x1, \[x2\]
+  44:	192383e2 	swpp	x2, x3, \[sp\]
+  48:	19a18040 	swppa	x0, x1, \[x2\]
+  4c:	19a383e2 	swppa	x2, x3, \[sp\]
+  50:	19e18040 	swppal	x0, x1, \[x2\]
+  54:	19e383e2 	swppal	x2, x3, \[sp\]
+  58:	19618040 	swppl	x0, x1, \[x2\]
+  5c:	196383e2 	swppl	x2, x3, \[sp\]
\ No newline at end of file
diff --git a/gas/testsuite/gas/aarch64/lse128-atomic.s b/gas/testsuite/gas/aarch64/lse128-atomic.s
new file mode 100644
index 00000000000..802f1b76fc7
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/lse128-atomic.s
@@ -0,0 +1,33 @@
+/* lse128-atomic.s Test file For AArch64 LSE128 atomic instructions
+   encoding.
+
+   Copyright (C) 2014-2023 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GAS.
+
+   GAS is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the license, or
+   (at your option) any later version.
+
+   GAS is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3. If not,
+   see <http://www.gnu.org/licenses/>.  */
+
+	.macro format_0 op
+	.irp suffix, , a, al, l
+		\op\suffix x0, x1, [x2]
+		\op\suffix x2, x3, [sp]
+	.endr
+	.endm
+
+func:
+	format_0 ldclrp
+	format_0 ldsetp
+	format_0 swpp
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 58787fbc4a9..74fd6695d81 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -4101,6 +4101,19 @@ const struct aarch64_opcode aarch64_opcode_table[] =
   _LSE_INSN ("stuminlb", 0x3860701f, 0xffe0fc1f, lse_atomic, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS),
   _LSE_INSN ("stuminlh", 0x7860701f, 0xffe0fc1f, lse_atomic, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS),
   _LSE_INSN ("stuminl", 0xb860701f, 0xbfe0fc1f, lse_atomic, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS),
+  /* LSE128 extension (atomic).  */
+  _LSE128_INSN ("ldclrp", 0x19201000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("ldclrpa", 0x19a01000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("ldclrpal", 0x19e01000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("ldclrpl", 0x19601000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("ldsetp", 0x19203000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("ldsetpa", 0x19a03000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("ldsetpal", 0x19e03000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("ldsetpl", 0x19603000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("swpp", 0x19208000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("swppa", 0x19a08000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("swppal", 0x19e08000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSE128_INSN ("swppl", 0x19608000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
   /* Move wide (immediate).  */
   CORE_INSN ("movn", 0x12800000, 0x7f800000, movewide, OP_MOVN, OP2 (Rd, HALF), QL_DST_R, F_SF | F_HAS_ALIAS),
   CORE_INSN ("mov",  0x12800000, 0x7f800000, movewide, OP_MOV_IMM_WIDEN, OP2 (Rd, IMM_MOV), QL_DST_R, F_SF | F_ALIAS | F_CONV),
-- 
2.41.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension
  2023-11-06 13:12 [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension Victor Do Nascimento
                   ` (2 preceding siblings ...)
  2023-11-06 13:12 ` [PATCH 3/3] aarch64: Add LSE128 instructions Victor Do Nascimento
@ 2023-11-07 11:08 ` Nick Clifton
  3 siblings, 0 replies; 5+ messages in thread
From: Nick Clifton @ 2023-11-07 11:08 UTC (permalink / raw)
  To: Victor Do Nascimento, binutils; +Cc: richard.earnshaw

Hi Victor,

> Add support for the 128-bit Atomic Instructions extension, also known
> and referred to as LSE128 and which is made optional from Armv9.4-a
> onward.
> 
> The feature is enabled by passing the +lse128 option to -march
> (eg: -march=armv9.4-a+lse128) or using the ".arch_extension lse128"
> directive in the assembly file.  Given that the implementation of the
> LSE128 feature requires that the LSE feature is also present, the
> +lse128 option also implicitly enables the +lse feature.
> 
> LSE128 adds support for the following new 128-bit atomic instructions:
> 
>    * Atomic bit clear on quadword in memory (ldclrp{a|l|al});
>    * Atomic bit set on quadword in memory (ldsetp{a|l|al});
>    * Swap quadword in memory (swpp{a|l|al});
> 
> Regression testing for aarch64-none-linux-gnu target with no regressions.
> 
> Victor Do Nascimento (3):
>    aarch64: Add LSE128 instruction operand support
>    aarch64: Add arch support for LSE128 extension
>    aarch64: Add LSE128 instructions
> 
>   gas/config/tc-aarch64.c                   |  6 +++++
>   gas/doc/c-aarch64.texi                    |  2 ++
>   gas/testsuite/gas/aarch64/lse128-atomic.d | 32 ++++++++++++++++++++++
>   gas/testsuite/gas/aarch64/lse128-atomic.s | 33 +++++++++++++++++++++++
>   include/opcode/aarch64.h                  |  5 ++++
>   opcodes/aarch64-opc.c                     |  4 +++
>   opcodes/aarch64-opc.h                     |  2 ++
>   opcodes/aarch64-tbl.h                     | 20 ++++++++++++++

Patch series approved - please apply - but please could also add an
entry to the gas/NEWS file mentioning the support of this new feature.

Cheers
   Nick



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-11-07 11:08 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-06 13:12 [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension Victor Do Nascimento
2023-11-06 13:12 ` [PATCH 1/3] aarch64: Add LSE128 instruction operand support Victor Do Nascimento
2023-11-06 13:12 ` [PATCH 2/3] aarch64: Add arch support for LSE128 extension Victor Do Nascimento
2023-11-06 13:12 ` [PATCH 3/3] aarch64: Add LSE128 instructions Victor Do Nascimento
2023-11-07 11:08 ` [PATCH 0/3] aarch64: Add support for the Armv9.4-a LSE128 extension Nick Clifton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).