]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
aarch64: Remove disassembly restriction on OP_MOV_Z_Zi
authorAlice Carlotti <alice.carlotti@arm.com>
Fri, 15 May 2026 02:52:30 +0000 (03:52 +0100)
committerAlice Carlotti <alice.carlotti@arm.com>
Fri, 10 Jul 2026 15:09:06 +0000 (16:09 +0100)
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.

include/opcode/aarch64.h
opcodes/aarch64-asm-2.c
opcodes/aarch64-asm.c
opcodes/aarch64-dis-2.c
opcodes/aarch64-dis.c
opcodes/aarch64-opc-2.c
opcodes/aarch64-tbl.h

index 9851f4ad248dc6e1b4af80a29b899d3dd7213cc4..81bdf3377866c39a60c47afd9bd6ff27b914f40f 100644 (file)
@@ -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,
index eed062eebe0570b0b1526bb96f852d2416ac1501..351fbdece4ff26d4ce77585c404b8a3c5bcede1d 100644 (file)
@@ -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;
index 305ac2981ce421f703d46aabc5852622017ab5d9..ef1e093ed94ef3923399e00fbd4495047b5e4969 100644 (file)
@@ -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);
index 33cb384b4a565c51f924982ca859bfa1b138b799..7c1bf81802e55cf776e93a837d652c56587c3945 100644 (file)
@@ -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:
index d73975fe7830c77d99c0b24475e5bc15edf87594..5c27e74871e04de875cc18e78d46f33fc14a508b 100644 (file)
@@ -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));
index d2da039c6e5ab255dfbf162ac535ad84016d93d9..7e48d7114b03ef244206762d219db32d2946c67c 100644 (file)
@@ -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,
index 54734292b18ac2c51d270a2aa4bda8edb37e2243..026432a5e25d01aad09d395fa22706185230a5c4 100644 (file)
@@ -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),