[binutils][aarch64] New SVE_SHRIMM_UNPRED_22 operand.
[external/binutils.git] / opcodes / aarch64-opc.c
index 1f85294..84e30f5 100644 (file)
@@ -2540,13 +2540,18 @@ operand_general_constraint_met_p (const aarch64_opnd_info *opnds, int idx,
 
        case AARCH64_OPND_SVE_SHRIMM_PRED:
        case AARCH64_OPND_SVE_SHRIMM_UNPRED:
-         size = aarch64_get_qualifier_esize (opnds[idx - 1].qualifier);
-         if (!value_in_range_p (opnd->imm.value, 1, 8 * size))
+       case AARCH64_OPND_SVE_SHRIMM_UNPRED_22:
            {
-             set_imm_out_of_range_error (mismatch_detail, idx, 1, 8 * size);
-             return 0;
-           }
-         break;
+             unsigned int index =
+               (type == AARCH64_OPND_SVE_SHRIMM_UNPRED_22) ? 2 : 1;
+             size = aarch64_get_qualifier_esize (opnds[idx - index].qualifier);
+             if (!value_in_range_p (opnd->imm.value, 1, 8 * size))
+               {
+                 set_imm_out_of_range_error (mismatch_detail, idx, 1, 8*size);
+                 return 0;
+               }
+             break;
+          }
 
        default:
          break;
@@ -3352,6 +3357,7 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc,
     case AARCH64_OPND_SVE_SHLIMM_UNPRED:
     case AARCH64_OPND_SVE_SHRIMM_PRED:
     case AARCH64_OPND_SVE_SHRIMM_UNPRED:
+    case AARCH64_OPND_SVE_SHRIMM_UNPRED_22:
     case AARCH64_OPND_SVE_SIMM5:
     case AARCH64_OPND_SVE_SIMM5B:
     case AARCH64_OPND_SVE_SIMM6: