]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
aarch64: Treat operand "SME list of ZA tiles" as immediate (PR 31561)
authorJens Remus <jremus@linux.ibm.com>
Tue, 9 Apr 2024 15:21:53 +0000 (17:21 +0200)
committerJens Remus <jremus@linux.ibm.com>
Tue, 9 Apr 2024 15:21:53 +0000 (17:21 +0200)
The AArch64 instruction table (aarch64-tbl.h) defines the operand
"SME list of ZA tiles" (SME_list_of_64bit_tiles) as immediate. During
assembly it is correctly encoded as immediate value (imm.value) in
parse_operands. During disassembly it is first correctly decoded as
immediate value (imm.value) in aarch64_ext_imm called by
aarch64_extract_operand, but then erroneously treated as register
number (reg.regno) in aarch64_print_operand.

This resolves the assembler test case "SME extension (ZERO)" to
erroneously fail on s390. On AArch64 - being little-endian - the struct
aarch64_opnd_info union fields reg.regno and imm.value share their
least-significant bits. On s390 - being big-endian - they do not.

opcodes/
PR binutils/31561
* aarch64-opc.c: Treat operand "SME list of ZA tiles" as
immediate.

Bug: https://sourceware.org/PR31561
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
Acked-by: Nick Clifton <nickc@redhat.com>
opcodes/aarch64-opc.c

index e88c616f4a9f3657756b919dc1196c08831c3cc5..4a7a6ae784b415967a31870bcce8bf07c65f90ee 100644 (file)
@@ -4236,7 +4236,7 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc,
       break;
 
     case AARCH64_OPND_SME_list_of_64bit_tiles:
-      print_sme_za_list (buf, size, opnd->reg.regno, styler);
+      print_sme_za_list (buf, size, opnd->imm.value, styler);
       break;
 
     case AARCH64_OPND_SME_ZA_array_off1x4: