[binutils-gdb] aarch64: Remove disassembly restriction on OP_MOV_Z_Zi
Alice Carlotti via Binutils-cvs <[email protected]> Fri, 10 Jul 2026 15:17:49 +0000 (GMT)
| Newsgroups | gmane.comp.gnu.binutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=49ff47a01981a832284a59ba5e51612a32839bbb commit 49ff47a01981a832284a59ba5e51612a32839bbb Author: Alice Carlotti <[email protected]> Date: Fri May 15 03:52:30 2026 +0100 aarch64: Remove disassembly restriction on OP_MOV_Z_Zi Disassembly for the OP_MOV_Z_Zi opcode artificially rejected a zero index value, to indicate that the preferred disassembly uses a different alias. This is more naturally indicated by specifying the other alias as a higher priority. Update the alias priority, and remove the zero check and the now-unused OP_MOV_Z_Zi enum value. Diff: --- include/opcode/aarch64.h | 1 - opcodes/aarch64-asm-2.c | 2 +- opcodes/aarch64-asm.c | 2 -- opcodes/aarch64-dis-2.c | 8 ++++---- opcodes/aarch64-dis.c | 5 ----- opcodes/aarch64-opc-2.c | 1 - opcodes/aarch64-tbl.h | 4 ++-- 7 files changed, 7 insertions(+), 16 deletions(-) diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h index 9851f4ad248..81bdf337786 100644 --- a/include/opcode/aarch64.h +++ b/include/opcode/aarch64.h @@ -1323,7 +1323,6 @@ enum aarch64_op OP_MOV_Z_P_Z, OP_MOV_Z_V, OP_MOV_Z_Z, - OP_MOV_Z_Zi, OP_MOVM_P_P_P, OP_MOVS_P_P, OP_MOVZS_P_P_P, diff --git a/opcodes/aarch64-asm-2.c b/opcodes/aarch64-asm-2.c index eed062eebe0..351fbdece4f 100644 --- a/opcodes/aarch64-asm-2.c +++ b/opcodes/aarch64-asm-2.c @@ -630,8 +630,8 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode) case A64_OPID_05203800_dup_SVE_Zd_Rn_SP: value = A64_OPID_05203800_dup_SVE_Zd_Rn_SP; break; - case A64_OPID_05202000_mov_SVE_Zd_SVE_Zn_INDEX: case A64_OPID_05202000_mov_SVE_Zd_SVE_VZn: + case A64_OPID_05202000_mov_SVE_Zd_SVE_Zn_INDEX: case A64_OPID_05202000_dup_SVE_Zd_SVE_Zn_INDEX: value = A64_OPID_05202000_dup_SVE_Zd_SVE_Zn_INDEX; break; diff --git a/opcodes/aarch64-asm.c b/opcodes/aarch64-asm.c index 305ac2981ce..ef1e093ed94 100644 --- a/opcodes/aarch64-asm.c +++ b/opcodes/aarch64-asm.c @@ -1968,8 +1968,6 @@ do_misc_encoding (aarch64_inst *inst) value = extract_field (FLD_SVE_Zn, inst->value, 0); insert_field (FLD_SVE_Zm_16, &inst->value, value, 0); break; - case OP_MOV_Z_Zi: - break; case OP_MOVM_P_P_P: /* Copy Pd to Pm. */ value = extract_field (FLD_SVE_Pd, inst->value, 0); diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c index 33cb384b4a5..7c1bf81802e 100644 --- a/opcodes/aarch64-dis-2.c +++ b/opcodes/aarch64-dis-2.c @@ -36944,7 +36944,7 @@ aarch64_find_alias_opcode (const aarch64_opcode *opcode) value = A64_OPID_05203800_mov_SVE_Zd_Rn_SP; break; case A64_OPID_05202000_dup_SVE_Zd_SVE_Zn_INDEX: - value = A64_OPID_05202000_mov_SVE_Zd_SVE_Zn_INDEX; + value = A64_OPID_05202000_mov_SVE_Zd_SVE_VZn; break; case A64_OPID_2538c000_dup_SVE_Zd_SVE_ASIMM: value = A64_OPID_2538c000_fmov_SVE_Zd_FPIMM0; @@ -37635,10 +37635,10 @@ aarch64_find_next_alias_opcode (const aarch64_opcode *opcode) case A64_OPID_05203800_mov_SVE_Zd_Rn_SP: value = A64_OPID_05203800_dup_SVE_Zd_Rn_SP; break; - case A64_OPID_05202000_mov_SVE_Zd_SVE_Zn_INDEX: - value = A64_OPID_05202000_mov_SVE_Zd_SVE_VZn; - break; case A64_OPID_05202000_mov_SVE_Zd_SVE_VZn: + value = A64_OPID_05202000_mov_SVE_Zd_SVE_Zn_INDEX; + break; + case A64_OPID_05202000_mov_SVE_Zd_SVE_Zn_INDEX: value = A64_OPID_05202000_dup_SVE_Zd_SVE_Zn_INDEX; break; case A64_OPID_2538c000_fmov_SVE_Zd_FPIMM0: diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c index d73975fe783..5c27e74871e 100644 --- a/opcodes/aarch64-dis.c +++ b/opcodes/aarch64-dis.c @@ -2728,11 +2728,6 @@ do_misc_decoding (aarch64_inst *inst) return (extract_field (FLD_SVE_Zn, inst->value, 0) == extract_field (FLD_SVE_Zm_16, inst->value, 0)); - case OP_MOV_Z_Zi: - /* Index must be nonzero. */ - value = extract_fields (inst->value, 0, 2, FLD_SVE_tszh, FLD_imm5); - return value > 0 && value != (value & -value); - case OP_MOVM_P_P_P: return (extract_field (FLD_SVE_Pd, inst->value, 0) == extract_field (FLD_SVE_Pm, inst->value, 0)); diff --git a/opcodes/aarch64-opc-2.c b/opcodes/aarch64-opc-2.c index d2da039c6e5..7e48d7114b0 100644 --- a/opcodes/aarch64-opc-2.c +++ b/opcodes/aarch64-opc-2.c @@ -460,7 +460,6 @@ static const enum aarch64_opcode_idx op_enum_table [] = A64_OPID_0520c000_mov_SVE_Zd_SVE_Pg4_10_SVE_Zn, A64_OPID_05202000_mov_SVE_Zd_SVE_VZn, A64_OPID_04603000_mov_SVE_Zd_SVE_Zn, - A64_OPID_05202000_mov_SVE_Zd_SVE_Zn_INDEX, A64_OPID_25004210_mov_SVE_Pd_SVE_Pg4_10_SVE_Pn, A64_OPID_25c04000_movs_SVE_Pd_SVE_Pn, A64_OPID_25404000_movs_SVE_Pd_SVE_Pg4_10_SVE_Pn, diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h index 54734292b18..026432a5e25 100644 --- a/opcodes/aarch64-tbl.h +++ b/opcodes/aarch64-tbl.h @@ -5262,11 +5262,11 @@ const struct aarch64_opcode aarch64_opcode_table[] = _SVE_INSN ("fmov", 0x2539c000, 0xff3fe000, sve_size_hsd, 0, OP2 (SVE_Zd, SVE_FPIMM8), OP_SVE_VU_HSD, F_ALIAS, 0), _SVE_INSNC ("fmov", 0x0510c000, 0xff30e000, sve_size_hsd, 0, OP3 (SVE_Zd, SVE_Pg4_16, SVE_FPIMM8), OP_SVE_VMU_HSD, F_ALIAS, C_SCAN_MOVPRFX, 0), _SVE_INSN ("mov", 0x04603000, 0xffe0fc00, sve_misc, OP_MOV_Z_Z, OP2 (SVE_Zd, SVE_Zn), OP_SVE_DD, F_ALIAS | F_MISC, 0), - _SVE_INSN ("mov", 0x05202000, 0xff20fc00, sve_index, OP_MOV_Z_V, OP2 (SVE_Zd, SVE_VZn), OP_SVE_VV_BHSDQ, F_ALIAS | F_MISC, 0), + _SVE_INSN ("mov", 0x05202000, 0xff20fc00, sve_index, OP_MOV_Z_V, OP2 (SVE_Zd, SVE_VZn), OP_SVE_VV_BHSDQ, F_ALIAS | F_P1 | F_MISC, 0), _SVE_INSN ("mov", 0x05203800, 0xff3ffc00, sve_size_bhsd, 0, OP2 (SVE_Zd, Rn_SP), OP_SVE_VR_BHSD, F_ALIAS, 0), _SVE_INSN ("mov", 0x25804000, 0xfff0c210, sve_misc, OP_MOV_P_P, OP2 (SVE_Pd, SVE_Pn), OP_SVE_BB, F_ALIAS | F_MISC, 0), _SVE_INSN ("mov", 0x25804000, 0xfff0c210, sve_misc, OP_MOV_PN_PN, OP2 (SVE_PNd, SVE_PNn), OP_SVE_BB, F_ALIAS | F_PSEUDO | F_MISC, 0), - _SVE_INSN ("mov", 0x05202000, 0xff20fc00, sve_index, OP_MOV_Z_Zi, OP2 (SVE_Zd, SVE_Zn_INDEX), OP_SVE_VV_BHSDQ, F_ALIAS | F_MISC, 0), + _SVE_INSN ("mov", 0x05202000, 0xff20fc00, sve_index, 0, OP2 (SVE_Zd, SVE_Zn_INDEX), OP_SVE_VV_BHSDQ, F_ALIAS, 0), _SVE_INSN ("mov", 0x05c00000, 0xfffc0000, sve_limm, 0, OP2 (SVE_Zd, SVE_LIMM_MOV), OP_SVE_VU_BHSD, F_ALIAS, 0), _SVE_INSN ("mov", 0x2538c000, 0xff3fc000, sve_size_bhsd, 0, OP2 (SVE_Zd, SVE_ASIMM), OP_SVE_VU_BHSD, F_ALIAS, 0), _SVE_INSNC ("mov", 0x05208000, 0xff3fe000, sve_size_bhsd, 0, OP3 (SVE_Zd, SVE_Pg3, SVE_Vn), OP_SVE_VMV_BHSD, F_ALIAS, C_SCAN_MOVPRFX, 0),