From 6f3cf71845e68409724aef1cfef3b5a44beecf53 Mon Sep 17 00:00:00 2001 From: Jens Remus Date: Tue, 9 Apr 2024 17:21:53 +0200 Subject: aarch64: Treat operand "SME list of ZA tiles" as immediate (PR 31561) 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 Acked-by: Nick Clifton --- opcodes/aarch64-opc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'opcodes') diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c index e88c616..4a7a6ae 100644 --- a/opcodes/aarch64-opc.c +++ b/opcodes/aarch64-opc.c @@ -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: -- cgit v1.1