[PATCH v1 3/4] aarch64: TLBI Domains changes for PLBI instruction

Alice Carlotti alice.carlotti@arm.com
Fri Jan 23 16:47:44 GMT 2026


On Thu, Jan 22, 2026 at 02:41:08PM +0000, Srinath Parvathaneni wrote:
> For the PLBI instruction with optional register argument
> <Rt> == 0b1111, with FEAT_TLBID enabled they are permitted to
> have an Rt value which is not 0b11111 and this is allowed for
> all the TLBI instructions with a <type> of ALLE1*, ALLE2* and
> VMALL* and a <shareability> of IS or OS.
> ---
>  gas/config/tc-aarch64.c                     |   3 +-
>  gas/testsuite/gas/aarch64/plbi-invalid-1.l  |  48 ++++-----
>  gas/testsuite/gas/aarch64/plbi-invalid-2.l  | 108 ++++++++++----------
>  gas/testsuite/gas/aarch64/plbi-invalid-3.l  |  54 +++++-----
>  gas/testsuite/gas/aarch64/tlbid-3.d         |  20 ++++
>  gas/testsuite/gas/aarch64/tlbid-3.s         |  12 +++
>  gas/testsuite/gas/aarch64/tlbid-invalid-4.d |   4 +
>  gas/testsuite/gas/aarch64/tlbid-invalid-4.l |  13 +++
>  opcodes/aarch64-opc.c                       |  65 +++++++-----
>  9 files changed, 193 insertions(+), 134 deletions(-)
>  create mode 100644 gas/testsuite/gas/aarch64/tlbid-3.d
>  create mode 100644 gas/testsuite/gas/aarch64/tlbid-3.s
>  create mode 100644 gas/testsuite/gas/aarch64/tlbid-invalid-4.d
>  create mode 100644 gas/testsuite/gas/aarch64/tlbid-invalid-4.l
> 
> diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
> index b71a45e232f..ffd9e9baf72 100644
> --- a/gas/config/tc-aarch64.c
> +++ b/gas/config/tc-aarch64.c
> @@ -5107,7 +5107,8 @@ parse_sys_ins_reg (char **str, htab_t sys_ins_regs, bool sysreg128_p)
>  
>    if (!aarch64_sys_ins_reg_supported_p (cpu_variant, o->name, &set))
>      {
> -      if (sys_ins_regs == aarch64_sys_regs_tlbi_hsh)
> +      if ((sys_ins_regs == aarch64_sys_regs_tlbi_hsh)
> +	  || (sys_ins_regs == aarch64_sys_regs_plbi_hsh))
>  	as_bad (_("selected processor does not support TLBI/PLBI operation "
>  		  "'%s'"), *str);

The use "TLBI/PLBI" in the error message feels a little awkward, but as said
before, I think we can just retain the existing inaccurate error message for
now and then fix it for all system instructions in a future refactor.

>        else
> diff --git a/gas/testsuite/gas/aarch64/plbi-invalid-1.l b/gas/testsuite/gas/aarch64/plbi-invalid-1.l
> index 3cd50dd9bbf..2a2663ffe1c 100644
> --- a/gas/testsuite/gas/aarch64/plbi-invalid-1.l
> +++ b/gas/testsuite/gas/aarch64/plbi-invalid-1.l
> @@ -29,34 +29,34 @@
>  .*: Error: missing register at operand 2 -- `plbi perme3isnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme3'
>  .*: Error: missing register at operand 2 -- `plbi perme3nxs'
> -.*: Error: extraneous register at operand 2 -- `plbi vmalle1os,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi vmalle1osnxs,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi vmalle1os,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi vmalle1osnxs,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi vmalle1is,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi vmalle1isnxs,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi vmalle1is,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi vmalle1isnxs,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1os,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1osnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1os,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1osnxs,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1is,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1isnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1is,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1isnxs,xzr'
>  .*: Error: extraneous register at operand 2 -- `plbi vmalle1,x0'
>  .*: Error: extraneous register at operand 2 -- `plbi vmalle1nxs,x0'
>  .*: Error: extraneous register at operand 2 -- `plbi vmalle1,xzr'
>  .*: Error: extraneous register at operand 2 -- `plbi vmalle1nxs,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi alle2os,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi alle2osnxs,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi alle2os,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi alle2osnxs,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi alle1os,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi alle1osnxs,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi alle1os,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi alle1osnxs,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi alle2is,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi alle2isnxs,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi alle2is,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi alle2isnxs,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi alle1is,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi alle1isnxs,x0'
> -.*: Error: extraneous register at operand 2 -- `plbi alle1is,xzr'
> -.*: Error: extraneous register at operand 2 -- `plbi alle1isnxs,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2os,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2osnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2os,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2osnxs,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1os,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1osnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1os,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1osnxs,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2is,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2isnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2is,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2isnxs,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1is,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1isnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1is,xzr'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1isnxs,xzr'
>  .*: Error: extraneous register at operand 2 -- `plbi alle2,x0'
>  .*: Error: extraneous register at operand 2 -- `plbi alle2nxs,x0'
>  .*: Error: extraneous register at operand 2 -- `plbi alle2,xzr'
> diff --git a/gas/testsuite/gas/aarch64/plbi-invalid-2.l b/gas/testsuite/gas/aarch64/plbi-invalid-2.l
> index 21379095c11..0a575489275 100644
> --- a/gas/testsuite/gas/aarch64/plbi-invalid-2.l
> +++ b/gas/testsuite/gas/aarch64/plbi-invalid-2.l
> @@ -1,109 +1,109 @@
>  .*: Assembler messages:
> -.*: Error: selected processor does not support system register name 'alle1'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1'
>  .*: Error: selected processor does not support `plbi alle1'
> -.*: Error: selected processor does not support system register name 'alle1is'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1is'
>  .*: Error: selected processor does not support `plbi alle1is'
> -.*: Error: selected processor does not support system register name 'alle1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1isnxs'
>  .*: Error: selected processor does not support `plbi alle1isnxs'
> -.*: Error: selected processor does not support system register name 'alle1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1nxs'
>  .*: Error: selected processor does not support `plbi alle1nxs'
> -.*: Error: selected processor does not support system register name 'alle1os'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1os'
>  .*: Error: selected processor does not support `plbi alle1os'
> -.*: Error: selected processor does not support system register name 'alle1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1osnxs'
>  .*: Error: selected processor does not support `plbi alle1osnxs'
> -.*: Error: selected processor does not support system register name 'alle2'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2'
>  .*: Error: selected processor does not support `plbi alle2'
> -.*: Error: selected processor does not support system register name 'alle2is'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2is'
>  .*: Error: selected processor does not support `plbi alle2is'
> -.*: Error: selected processor does not support system register name 'alle2isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2isnxs'
>  .*: Error: selected processor does not support `plbi alle2isnxs'
> -.*: Error: selected processor does not support system register name 'alle2nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2nxs'
>  .*: Error: selected processor does not support `plbi alle2nxs'
> -.*: Error: selected processor does not support system register name 'alle2os'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2os'
>  .*: Error: selected processor does not support `plbi alle2os'
> -.*: Error: selected processor does not support system register name 'alle2osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2osnxs'
>  .*: Error: selected processor does not support `plbi alle2osnxs'
> -.*: Error: selected processor does not support system register name 'alle3'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle3'
>  .*: Error: selected processor does not support `plbi alle3'
> -.*: Error: selected processor does not support system register name 'alle3is'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle3is'
>  .*: Error: selected processor does not support `plbi alle3is'
> -.*: Error: selected processor does not support system register name 'alle3isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle3isnxs'
>  .*: Error: selected processor does not support `plbi alle3isnxs'
> -.*: Error: selected processor does not support system register name 'alle3nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle3nxs'
>  .*: Error: selected processor does not support `plbi alle3nxs'
> -.*: Error: selected processor does not support system register name 'alle3os'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle3os'
>  .*: Error: selected processor does not support `plbi alle3os'
> -.*: Error: selected processor does not support system register name 'alle3osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle3osnxs'
>  .*: Error: selected processor does not support `plbi alle3osnxs'
> -.*: Error: selected processor does not support system register name 'aside1'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'aside1'
>  .*: Error: missing register at operand 2 -- `plbi aside1'
> -.*: Error: selected processor does not support system register name 'aside1is'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'aside1is'
>  .*: Error: missing register at operand 2 -- `plbi aside1is'
> -.*: Error: selected processor does not support system register name 'aside1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'aside1isnxs'
>  .*: Error: missing register at operand 2 -- `plbi aside1isnxs'
> -.*: Error: selected processor does not support system register name 'aside1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'aside1nxs'
>  .*: Error: missing register at operand 2 -- `plbi aside1nxs'
> -.*: Error: selected processor does not support system register name 'aside1os'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'aside1os'
>  .*: Error: missing register at operand 2 -- `plbi aside1os'
> -.*: Error: selected processor does not support system register name 'aside1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'aside1osnxs'
>  .*: Error: missing register at operand 2 -- `plbi aside1osnxs'
> -.*: Error: selected processor does not support system register name 'permae1'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'permae1'
>  .*: Error: missing register at operand 2 -- `plbi permae1'
> -.*: Error: selected processor does not support system register name 'permae1is'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'permae1is'
>  .*: Error: missing register at operand 2 -- `plbi permae1is'
> -.*: Error: selected processor does not support system register name 'permae1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'permae1isnxs'
>  .*: Error: missing register at operand 2 -- `plbi permae1isnxs'
> -.*: Error: selected processor does not support system register name 'permae1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'permae1nxs'
>  .*: Error: missing register at operand 2 -- `plbi permae1nxs'
> -.*: Error: selected processor does not support system register name 'permae1os'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'permae1os'
>  .*: Error: missing register at operand 2 -- `plbi permae1os'
> -.*: Error: selected processor does not support system register name 'permae1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'permae1osnxs'
>  .*: Error: missing register at operand 2 -- `plbi permae1osnxs'
> -.*: Error: selected processor does not support system register name 'perme1'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme1'
>  .*: Error: missing register at operand 2 -- `plbi perme1'
> -.*: Error: selected processor does not support system register name 'perme1is'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme1is'
>  .*: Error: missing register at operand 2 -- `plbi perme1is'
> -.*: Error: selected processor does not support system register name 'perme1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme1isnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme1isnxs'
> -.*: Error: selected processor does not support system register name 'perme1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme1nxs'
>  .*: Error: missing register at operand 2 -- `plbi perme1nxs'
> -.*: Error: selected processor does not support system register name 'perme1os'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme1os'
>  .*: Error: missing register at operand 2 -- `plbi perme1os'
> -.*: Error: selected processor does not support system register name 'perme1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme1osnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme1osnxs'
> -.*: Error: selected processor does not support system register name 'perme2'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme2'
>  .*: Error: missing register at operand 2 -- `plbi perme2'
> -.*: Error: selected processor does not support system register name 'perme2is'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme2is'
>  .*: Error: missing register at operand 2 -- `plbi perme2is'
> -.*: Error: selected processor does not support system register name 'perme2isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme2isnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme2isnxs'
> -.*: Error: selected processor does not support system register name 'perme2nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme2nxs'
>  .*: Error: missing register at operand 2 -- `plbi perme2nxs'
> -.*: Error: selected processor does not support system register name 'perme2os'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme2os'
>  .*: Error: missing register at operand 2 -- `plbi perme2os'
> -.*: Error: selected processor does not support system register name 'perme2osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme2osnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme2osnxs'
> -.*: Error: selected processor does not support system register name 'perme3'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme3'
>  .*: Error: missing register at operand 2 -- `plbi perme3'
> -.*: Error: selected processor does not support system register name 'perme3is'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme3is'
>  .*: Error: missing register at operand 2 -- `plbi perme3is'
> -.*: Error: selected processor does not support system register name 'perme3isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme3isnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme3isnxs'
> -.*: Error: selected processor does not support system register name 'perme3nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme3nxs'
>  .*: Error: missing register at operand 2 -- `plbi perme3nxs'
> -.*: Error: selected processor does not support system register name 'perme3os'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme3os'
>  .*: Error: missing register at operand 2 -- `plbi perme3os'
> -.*: Error: selected processor does not support system register name 'perme3osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme3osnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme3osnxs'
> -.*: Error: selected processor does not support system register name 'vmalle1'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1'
>  .*: Error: selected processor does not support `plbi vmalle1'
> -.*: Error: selected processor does not support system register name 'vmalle1is'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1is'
>  .*: Error: selected processor does not support `plbi vmalle1is'
> -.*: Error: selected processor does not support system register name 'vmalle1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1isnxs'
>  .*: Error: selected processor does not support `plbi vmalle1isnxs'
> -.*: Error: selected processor does not support system register name 'vmalle1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1nxs'
>  .*: Error: selected processor does not support `plbi vmalle1nxs'
> -.*: Error: selected processor does not support system register name 'vmalle1os'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1os'
>  .*: Error: selected processor does not support `plbi vmalle1os'
> -.*: Error: selected processor does not support system register name 'vmalle1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1osnxs'
>  .*: Error: selected processor does not support `plbi vmalle1osnxs'
> diff --git a/gas/testsuite/gas/aarch64/plbi-invalid-3.l b/gas/testsuite/gas/aarch64/plbi-invalid-3.l
> index e98b63c8d74..bc122a60306 100644
> --- a/gas/testsuite/gas/aarch64/plbi-invalid-3.l
> +++ b/gas/testsuite/gas/aarch64/plbi-invalid-3.l
> @@ -1,43 +1,43 @@
>  .*: Assembler messages:
> -.*: Error: selected processor does not support system register name 'alle1isnxs'
> -.*: Error: selected processor does not support system register name 'alle1nxs'
> -.*: Error: selected processor does not support system register name 'alle1osnxs'
> -.*: Error: selected processor does not support system register name 'alle2isnxs'
> -.*: Error: selected processor does not support system register name 'alle2nxs'
> -.*: Error: selected processor does not support system register name 'alle2osnxs'
> -.*: Error: selected processor does not support system register name 'alle3isnxs'
> -.*: Error: selected processor does not support system register name 'alle3nxs'
> -.*: Error: selected processor does not support system register name 'alle3osnxs'
> -.*: Error: selected processor does not support system register name 'aside1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle3isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle3nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle3osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'aside1isnxs'
>  .*: Error: missing register at operand 2 -- `plbi aside1isnxs'
> -.*: Error: selected processor does not support system register name 'aside1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'aside1nxs'
>  .*: Error: missing register at operand 2 -- `plbi aside1nxs'
> -.*: Error: selected processor does not support system register name 'aside1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'aside1osnxs'
>  .*: Error: missing register at operand 2 -- `plbi aside1osnxs'
> -.*: Error: selected processor does not support system register name 'permae1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'permae1isnxs'
>  .*: Error: missing register at operand 2 -- `plbi permae1isnxs'
> -.*: Error: selected processor does not support system register name 'permae1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'permae1nxs'
>  .*: Error: missing register at operand 2 -- `plbi permae1nxs'
> -.*: Error: selected processor does not support system register name 'permae1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'permae1osnxs'
>  .*: Error: missing register at operand 2 -- `plbi permae1osnxs'
> -.*: Error: selected processor does not support system register name 'perme1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme1isnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme1isnxs'
> -.*: Error: selected processor does not support system register name 'perme1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme1nxs'
>  .*: Error: missing register at operand 2 -- `plbi perme1nxs'
> -.*: Error: selected processor does not support system register name 'perme1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme1osnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme1osnxs'
> -.*: Error: selected processor does not support system register name 'perme2isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme2isnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme2isnxs'
> -.*: Error: selected processor does not support system register name 'perme2nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme2nxs'
>  .*: Error: missing register at operand 2 -- `plbi perme2nxs'
> -.*: Error: selected processor does not support system register name 'perme2osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme2osnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme2osnxs'
> -.*: Error: selected processor does not support system register name 'perme3isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme3isnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme3isnxs'
> -.*: Error: selected processor does not support system register name 'perme3nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme3nxs'
>  .*: Error: missing register at operand 2 -- `plbi perme3nxs'
> -.*: Error: selected processor does not support system register name 'perme3osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'perme3osnxs'
>  .*: Error: missing register at operand 2 -- `plbi perme3osnxs'
> -.*: Error: selected processor does not support system register name 'vmalle1isnxs'
> -.*: Error: selected processor does not support system register name 'vmalle1nxs'
> -.*: Error: selected processor does not support system register name 'vmalle1osnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1isnxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1nxs'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1osnxs'
> diff --git a/gas/testsuite/gas/aarch64/tlbid-3.d b/gas/testsuite/gas/aarch64/tlbid-3.d
> new file mode 100644
> index 00000000000..559cbb2d2e8
> --- /dev/null
> +++ b/gas/testsuite/gas/aarch64/tlbid-3.d
> @@ -0,0 +1,20 @@
> +#as: -march=armv9.4-a+poe2+tlbid
> +#objdump: -dr
> +[^:]+:     file format .*
> +
> +
> +[^:]+:
> +
> +[^:]+:
> +.*:	d508a100 	plbi	vmalle1os, x0
> +.*:	d508a900 	plbi	vmalle1osnxs, x0
> +.*:	d508a300 	plbi	vmalle1is, x0
> +.*:	d508ab00 	plbi	vmalle1isnxs, x0
> +.*:	d50ca100 	plbi	alle2os, x0
> +.*:	d50ca900 	plbi	alle2osnxs, x0
> +.*:	d50ca180 	plbi	alle1os, x0
> +.*:	d50ca980 	plbi	alle1osnxs, x0
> +.*:	d50ca300 	plbi	alle2is, x0
> +.*:	d50cab00 	plbi	alle2isnxs, x0
> +.*:	d50ca380 	plbi	alle1is, x0
> +.*:	d50cab80 	plbi	alle1isnxs, x0
> diff --git a/gas/testsuite/gas/aarch64/tlbid-3.s b/gas/testsuite/gas/aarch64/tlbid-3.s
> new file mode 100644
> index 00000000000..ee69ba52690
> --- /dev/null
> +++ b/gas/testsuite/gas/aarch64/tlbid-3.s
> @@ -0,0 +1,12 @@
> +plbi	vmalle1os, x0
> +plbi	vmalle1osnxs, x0
> +plbi	vmalle1is, x0
> +plbi	vmalle1isnxs, x0
> +plbi	alle2os, x0
> +plbi	alle2osnxs, x0
> +plbi	alle1os, x0
> +plbi	alle1osnxs, x0
> +plbi	alle2is, x0
> +plbi	alle2isnxs, x0
> +plbi	alle1is, x0
> +plbi	alle1isnxs, x0
> diff --git a/gas/testsuite/gas/aarch64/tlbid-invalid-4.d b/gas/testsuite/gas/aarch64/tlbid-invalid-4.d
> new file mode 100644
> index 00000000000..f7b0e358517
> --- /dev/null
> +++ b/gas/testsuite/gas/aarch64/tlbid-invalid-4.d
> @@ -0,0 +1,4 @@
> +#name: Test plbi instruction without +tlbid
> +#source: tlbid-3.s
> +#as: -march=armv9.4-a+poe2
> +#error_output: tlbid-invalid-4.l
> diff --git a/gas/testsuite/gas/aarch64/tlbid-invalid-4.l b/gas/testsuite/gas/aarch64/tlbid-invalid-4.l
> new file mode 100644
> index 00000000000..2d1a1775bba
> --- /dev/null
> +++ b/gas/testsuite/gas/aarch64/tlbid-invalid-4.l
> @@ -0,0 +1,13 @@
> +.*: Assembler messages:
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1os,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1osnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1is,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'vmalle1isnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2os,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2osnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1os,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1osnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2is,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle2isnxs,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1is,x0'
> +.*: Error: selected processor does not support TLBI/PLBI operation 'alle1isnxs,x0'
> diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
> index 067fdfa98d9..e65982187fa 100644
> --- a/opcodes/aarch64-opc.c
> +++ b/opcodes/aarch64-opc.c
> @@ -5496,37 +5496,46 @@ const aarch64_sys_ins_reg aarch64_sys_regs_tlbi[] =
>  
>  const aarch64_sys_ins_reg aarch64_sys_regs_plbi[] =
>  {
> -    #define PLBI_XS_OP(OP, CODE, FLAGS) \
> +#define PLBI_XS_OP(OP, CODE, FLAGS, FEAT) \
> +    { OP, CODE, FLAGS, AARCH64_FEATURES (2, TLBID, FEAT) }, \
> +    { OP "nxs", CODE | CPENS (0, 0, C8, 0), FLAGS, AARCH64_FEATURES (3, TLBID, XS, FEAT) },

As in the other patch, I think it would be better to just specify POE2 as part
of the macro definition (and remove the 'FEAT' parameter from the macro).

> +
> +    PLBI_XS_OP ( "alle1is",	CPENS (4, C10, C3, 4),	F_TLBID_XT, POE2)
> +    PLBI_XS_OP ( "alle1os",	CPENS (4, C10, C1, 4),	F_TLBID_XT, POE2)
> +    PLBI_XS_OP ( "alle2is",	CPENS (4, C10, C3, 0),	F_TLBID_XT, POE2)
> +    PLBI_XS_OP ( "alle2os",	CPENS (4, C10, C1, 0),	F_TLBID_XT, POE2)
> +    PLBI_XS_OP ( "vmalle1is",	CPENS (0, C10, C3, 0),	F_TLBID_XT, POE2)
> +    PLBI_XS_OP ( "vmalle1os",	CPENS (0, C10, C1, 0),	F_TLBID_XT, POE2)
> +
> +#undef PLBI_XS_OP
> +
> +#define PLBI_XS_OP(OP, CODE, FLAGS) \
>      { OP, CODE, FLAGS, AARCH64_FEATURE (POE2) }, \
>      { OP "nxs", CODE | CPENS (0, 0, C8, 0), FLAGS, AARCH64_FEATURES (2, POE2, XS) },
>  
> -    PLBI_XS_OP ( "alle1",	CPENS (4, C10, C7, 4), 	0 )
> -    PLBI_XS_OP ( "alle1is",	CPENS (4, C10, C3, 4), 	0 )
> -    PLBI_XS_OP ( "alle1os",	CPENS (4, C10, C1, 4), 	0 )
> -    PLBI_XS_OP ( "alle2",	CPENS (4, C10, C7, 0), 	0 )
> -    PLBI_XS_OP ( "alle2is",	CPENS (4, C10, C3, 0), 	0 )
> -    PLBI_XS_OP ( "alle2os",	CPENS (4, C10, C1, 0), 	0 )
> -    PLBI_XS_OP ( "alle3",	CPENS (6, C10, C7, 0), 	0 )
> -    PLBI_XS_OP ( "alle3is",	CPENS (6, C10, C3, 0), 	0 )
> -    PLBI_XS_OP ( "alle3os",	CPENS (6, C10, C1, 0), 	0 )
> -    PLBI_XS_OP ( "aside1",	CPENS (0, C10, C7, 2), 	F_HASXT )
> -    PLBI_XS_OP ( "aside1is",	CPENS (0, C10, C3, 2), 	F_HASXT )
> -    PLBI_XS_OP ( "aside1os",	CPENS (0, C10, C1, 2), 	F_HASXT )
> -    PLBI_XS_OP ( "permae1",	CPENS (0, C10, C7, 3), 	F_HASXT )
> -    PLBI_XS_OP ( "permae1is",	CPENS (0, C10, C3, 3), 	F_HASXT )
> -    PLBI_XS_OP ( "permae1os",	CPENS (0, C10, C1, 3), 	F_HASXT )
> -    PLBI_XS_OP ( "perme1",	CPENS (0, C10, C7, 1), 	F_HASXT )
> -    PLBI_XS_OP ( "perme1is",	CPENS (0, C10, C3, 1), 	F_HASXT )
> -    PLBI_XS_OP ( "perme1os",	CPENS (0, C10, C1, 1), 	F_HASXT )
> -    PLBI_XS_OP ( "perme2",	CPENS (4, C10, C7, 1), 	F_HASXT )
> -    PLBI_XS_OP ( "perme2is",	CPENS (4, C10, C3, 1), 	F_HASXT )
> -    PLBI_XS_OP ( "perme2os",	CPENS (4, C10, C1, 1), 	F_HASXT )
> -    PLBI_XS_OP ( "perme3",	CPENS (6, C10, C7, 1), 	F_HASXT )
> -    PLBI_XS_OP ( "perme3is",	CPENS (6, C10, C3, 1), 	F_HASXT )
> -    PLBI_XS_OP ( "perme3os",	CPENS (6, C10, C1, 1), 	F_HASXT )
> -    PLBI_XS_OP ( "vmalle1",	CPENS (0, C10, C7, 0), 	0 )
> -    PLBI_XS_OP ( "vmalle1is",	CPENS (0, C10, C3, 0), 	0 )
> -    PLBI_XS_OP ( "vmalle1os",	CPENS (0, C10, C1, 0), 	0 )
> +    PLBI_XS_OP ( "alle1",	CPENS (4, C10, C7, 4),	0 )
> +    PLBI_XS_OP ( "alle2",	CPENS (4, C10, C7, 0),	0 )
> +    PLBI_XS_OP ( "alle3",	CPENS (6, C10, C7, 0),	0 )
> +    PLBI_XS_OP ( "alle3is",	CPENS (6, C10, C3, 0),	0 )
> +    PLBI_XS_OP ( "alle3os",	CPENS (6, C10, C1, 0),	0 )
> +    PLBI_XS_OP ( "aside1",	CPENS (0, C10, C7, 2),	F_HASXT )
> +    PLBI_XS_OP ( "aside1is",	CPENS (0, C10, C3, 2),	F_HASXT )
> +    PLBI_XS_OP ( "aside1os",	CPENS (0, C10, C1, 2),	F_HASXT )
> +    PLBI_XS_OP ( "permae1",	CPENS (0, C10, C7, 3),	F_HASXT )
> +    PLBI_XS_OP ( "permae1is",	CPENS (0, C10, C3, 3),	F_HASXT )
> +    PLBI_XS_OP ( "permae1os",	CPENS (0, C10, C1, 3),	F_HASXT )
> +    PLBI_XS_OP ( "perme1",	CPENS (0, C10, C7, 1),	F_HASXT )
> +    PLBI_XS_OP ( "perme1is",	CPENS (0, C10, C3, 1),	F_HASXT )
> +    PLBI_XS_OP ( "perme1os",	CPENS (0, C10, C1, 1),	F_HASXT )
> +    PLBI_XS_OP ( "perme2",	CPENS (4, C10, C7, 1),	F_HASXT )
> +    PLBI_XS_OP ( "perme2is",	CPENS (4, C10, C3, 1),	F_HASXT )
> +    PLBI_XS_OP ( "perme2os",	CPENS (4, C10, C1, 1),	F_HASXT )
> +    PLBI_XS_OP ( "perme3",	CPENS (6, C10, C7, 1),	F_HASXT )
> +    PLBI_XS_OP ( "perme3is",	CPENS (6, C10, C3, 1),	F_HASXT )
> +    PLBI_XS_OP ( "perme3os",	CPENS (6, C10, C1, 1),	F_HASXT )
> +    PLBI_XS_OP ( "vmalle1",	CPENS (0, C10, C7, 0),	0 )
> +
> +#undef PLBI_XS_OP
>  
>      { 0,	CPENS (0,0,0,0), 0, AARCH64_NO_FEATURES }
>  };
> -- 
> 2.25.1
> 


More information about the Binutils mailing list