mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-17 13:10:12 +08:00
aarch64: Treat operand Rt_IN_SYS_ALIASES as register number (PR 31919)
The AArch64 instruction table (aarch64-tbl.h) defines the operand
Rt_IN_SYS_ALIASES as register number. During assembly it is correctly
encoded as register number (reg.regno) in parse_operands. During
disassembly it is first correctly decoded as register number (reg.regno)
in aarch64_ext_regno called by aarch64_extract_operand, but then
erroneously treated as immediate value (imm.value) in
aarch64_print_operand.
This resolves the assembler test case "gas/aarch64/brbe-brb-inst" 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/31919
* aarch64-opc.c: Treat operand Rt_IN_SYS_ALIASES as register
number.
Bug: https://sourceware.org/PR31919
Fixes: 72476aca8f
("aarch64: add Branch Record Buffer extension instructions")
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
This commit is contained in:
parent
98dd5ba2af
commit
64daf9abd9
@ -4029,7 +4029,7 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc,
|
||||
{
|
||||
/* Avoid printing an invalid additional value for Rt in SYS aliases such as
|
||||
BRB, provide a helpful comment instead */
|
||||
snprintf (comment, comment_size, "unpredictable encoding (Rt!=31): #%" PRIi64, opnd->imm.value);
|
||||
snprintf (comment, comment_size, "unpredictable encoding (Rt!=31): #%u", opnd->reg.regno);
|
||||
break;
|
||||
}
|
||||
/* Omit the operand, e.g. RET. */
|
||||
|
Loading…
Reference in New Issue
Block a user