Home | History | Annotate | Line # | Download | only in opcodes
arm-dis.c revision 1.1.1.9
      1 /* Instruction printing code for the ARM
      2    Copyright (C) 1994-2020 Free Software Foundation, Inc.
      3    Contributed by Richard Earnshaw (rwe (at) pegasus.esprit.ec.org)
      4    Modification by James G. Smith (jsmith (at) cygnus.co.uk)
      5 
      6    This file is part of libopcodes.
      7 
      8    This library is free software; you can redistribute it and/or modify
      9    it under the terms of the GNU General Public License as published by
     10    the Free Software Foundation; either version 3 of the License, or
     11    (at your option) any later version.
     12 
     13    It is distributed in the hope that it will be useful, but WITHOUT
     14    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     15    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     16    License for more details.
     17 
     18    You should have received a copy of the GNU General Public License
     19    along with this program; if not, write to the Free Software
     20    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     21    MA 02110-1301, USA.  */
     22 
     23 #include "sysdep.h"
     24 #include <assert.h>
     25 
     26 #include "disassemble.h"
     27 #include "opcode/arm.h"
     28 #include "opintl.h"
     29 #include "safe-ctype.h"
     30 #include "libiberty.h"
     31 #include "floatformat.h"
     32 
     33 /* FIXME: This shouldn't be done here.  */
     34 #include "coff/internal.h"
     35 #include "libcoff.h"
     36 #include "bfd.h"
     37 #include "elf-bfd.h"
     38 #include "elf/internal.h"
     39 #include "elf/arm.h"
     40 #include "mach-o.h"
     41 
     42 /* FIXME: Belongs in global header.  */
     43 #ifndef strneq
     44 #define strneq(a,b,n)	(strncmp ((a), (b), (n)) == 0)
     45 #endif
     46 
     47 /* Cached mapping symbol state.  */
     48 enum map_type
     49 {
     50   MAP_ARM,
     51   MAP_THUMB,
     52   MAP_DATA
     53 };
     54 
     55 struct arm_private_data
     56 {
     57   /* The features to use when disassembling optional instructions.  */
     58   arm_feature_set features;
     59 
     60   /* Track the last type (although this doesn't seem to be useful) */
     61   enum map_type last_type;
     62 
     63   /* Tracking symbol table information */
     64   int last_mapping_sym;
     65 
     66   /* The end range of the current range being disassembled.  */
     67   bfd_vma last_stop_offset;
     68   bfd_vma last_mapping_addr;
     69 };
     70 
     71 enum mve_instructions
     72 {
     73   MVE_VPST,
     74   MVE_VPT_FP_T1,
     75   MVE_VPT_FP_T2,
     76   MVE_VPT_VEC_T1,
     77   MVE_VPT_VEC_T2,
     78   MVE_VPT_VEC_T3,
     79   MVE_VPT_VEC_T4,
     80   MVE_VPT_VEC_T5,
     81   MVE_VPT_VEC_T6,
     82   MVE_VCMP_FP_T1,
     83   MVE_VCMP_FP_T2,
     84   MVE_VCMP_VEC_T1,
     85   MVE_VCMP_VEC_T2,
     86   MVE_VCMP_VEC_T3,
     87   MVE_VCMP_VEC_T4,
     88   MVE_VCMP_VEC_T5,
     89   MVE_VCMP_VEC_T6,
     90   MVE_VDUP,
     91   MVE_VEOR,
     92   MVE_VFMAS_FP_SCALAR,
     93   MVE_VFMA_FP_SCALAR,
     94   MVE_VFMA_FP,
     95   MVE_VFMS_FP,
     96   MVE_VHADD_T1,
     97   MVE_VHADD_T2,
     98   MVE_VHSUB_T1,
     99   MVE_VHSUB_T2,
    100   MVE_VRHADD,
    101   MVE_VLD2,
    102   MVE_VLD4,
    103   MVE_VST2,
    104   MVE_VST4,
    105   MVE_VLDRB_T1,
    106   MVE_VLDRH_T2,
    107   MVE_VLDRB_T5,
    108   MVE_VLDRH_T6,
    109   MVE_VLDRW_T7,
    110   MVE_VSTRB_T1,
    111   MVE_VSTRH_T2,
    112   MVE_VSTRB_T5,
    113   MVE_VSTRH_T6,
    114   MVE_VSTRW_T7,
    115   MVE_VLDRB_GATHER_T1,
    116   MVE_VLDRH_GATHER_T2,
    117   MVE_VLDRW_GATHER_T3,
    118   MVE_VLDRD_GATHER_T4,
    119   MVE_VLDRW_GATHER_T5,
    120   MVE_VLDRD_GATHER_T6,
    121   MVE_VSTRB_SCATTER_T1,
    122   MVE_VSTRH_SCATTER_T2,
    123   MVE_VSTRW_SCATTER_T3,
    124   MVE_VSTRD_SCATTER_T4,
    125   MVE_VSTRW_SCATTER_T5,
    126   MVE_VSTRD_SCATTER_T6,
    127   MVE_VCVT_FP_FIX_VEC,
    128   MVE_VCVT_BETWEEN_FP_INT,
    129   MVE_VCVT_FP_HALF_FP,
    130   MVE_VCVT_FROM_FP_TO_INT,
    131   MVE_VRINT_FP,
    132   MVE_VMOV_HFP_TO_GP,
    133   MVE_VMOV_GP_TO_VEC_LANE,
    134   MVE_VMOV_IMM_TO_VEC,
    135   MVE_VMOV_VEC_TO_VEC,
    136   MVE_VMOV2_VEC_LANE_TO_GP,
    137   MVE_VMOV2_GP_TO_VEC_LANE,
    138   MVE_VMOV_VEC_LANE_TO_GP,
    139   MVE_VMVN_IMM,
    140   MVE_VMVN_REG,
    141   MVE_VORR_IMM,
    142   MVE_VORR_REG,
    143   MVE_VORN,
    144   MVE_VBIC_IMM,
    145   MVE_VBIC_REG,
    146   MVE_VMOVX,
    147   MVE_VMOVL,
    148   MVE_VMOVN,
    149   MVE_VMULL_INT,
    150   MVE_VMULL_POLY,
    151   MVE_VQDMULL_T1,
    152   MVE_VQDMULL_T2,
    153   MVE_VQMOVN,
    154   MVE_VQMOVUN,
    155   MVE_VADDV,
    156   MVE_VMLADAV_T1,
    157   MVE_VMLADAV_T2,
    158   MVE_VMLALDAV,
    159   MVE_VMLAS,
    160   MVE_VADDLV,
    161   MVE_VMLSDAV_T1,
    162   MVE_VMLSDAV_T2,
    163   MVE_VMLSLDAV,
    164   MVE_VRMLALDAVH,
    165   MVE_VRMLSLDAVH,
    166   MVE_VQDMLADH,
    167   MVE_VQRDMLADH,
    168   MVE_VQDMLAH,
    169   MVE_VQRDMLAH,
    170   MVE_VQDMLASH,
    171   MVE_VQRDMLASH,
    172   MVE_VQDMLSDH,
    173   MVE_VQRDMLSDH,
    174   MVE_VQDMULH_T1,
    175   MVE_VQRDMULH_T2,
    176   MVE_VQDMULH_T3,
    177   MVE_VQRDMULH_T4,
    178   MVE_VDDUP,
    179   MVE_VDWDUP,
    180   MVE_VIWDUP,
    181   MVE_VIDUP,
    182   MVE_VCADD_FP,
    183   MVE_VCADD_VEC,
    184   MVE_VHCADD,
    185   MVE_VCMLA_FP,
    186   MVE_VCMUL_FP,
    187   MVE_VQRSHL_T1,
    188   MVE_VQRSHL_T2,
    189   MVE_VQRSHRN,
    190   MVE_VQRSHRUN,
    191   MVE_VQSHL_T1,
    192   MVE_VQSHL_T2,
    193   MVE_VQSHLU_T3,
    194   MVE_VQSHL_T4,
    195   MVE_VQSHRN,
    196   MVE_VQSHRUN,
    197   MVE_VRSHL_T1,
    198   MVE_VRSHL_T2,
    199   MVE_VRSHR,
    200   MVE_VRSHRN,
    201   MVE_VSHL_T1,
    202   MVE_VSHL_T2,
    203   MVE_VSHL_T3,
    204   MVE_VSHLC,
    205   MVE_VSHLL_T1,
    206   MVE_VSHLL_T2,
    207   MVE_VSHR,
    208   MVE_VSHRN,
    209   MVE_VSLI,
    210   MVE_VSRI,
    211   MVE_VADC,
    212   MVE_VABAV,
    213   MVE_VABD_FP,
    214   MVE_VABD_VEC,
    215   MVE_VABS_FP,
    216   MVE_VABS_VEC,
    217   MVE_VADD_FP_T1,
    218   MVE_VADD_FP_T2,
    219   MVE_VADD_VEC_T1,
    220   MVE_VADD_VEC_T2,
    221   MVE_VSBC,
    222   MVE_VSUB_FP_T1,
    223   MVE_VSUB_FP_T2,
    224   MVE_VSUB_VEC_T1,
    225   MVE_VSUB_VEC_T2,
    226   MVE_VAND,
    227   MVE_VBRSR,
    228   MVE_VCLS,
    229   MVE_VCLZ,
    230   MVE_VCTP,
    231   MVE_VMAX,
    232   MVE_VMAXA,
    233   MVE_VMAXNM_FP,
    234   MVE_VMAXNMA_FP,
    235   MVE_VMAXNMV_FP,
    236   MVE_VMAXNMAV_FP,
    237   MVE_VMAXV,
    238   MVE_VMAXAV,
    239   MVE_VMIN,
    240   MVE_VMINA,
    241   MVE_VMINNM_FP,
    242   MVE_VMINNMA_FP,
    243   MVE_VMINNMV_FP,
    244   MVE_VMINNMAV_FP,
    245   MVE_VMINV,
    246   MVE_VMINAV,
    247   MVE_VMLA,
    248   MVE_VMUL_FP_T1,
    249   MVE_VMUL_FP_T2,
    250   MVE_VMUL_VEC_T1,
    251   MVE_VMUL_VEC_T2,
    252   MVE_VMULH,
    253   MVE_VRMULH,
    254   MVE_VNEG_FP,
    255   MVE_VNEG_VEC,
    256   MVE_VPNOT,
    257   MVE_VPSEL,
    258   MVE_VQABS,
    259   MVE_VQADD_T1,
    260   MVE_VQADD_T2,
    261   MVE_VQSUB_T1,
    262   MVE_VQSUB_T2,
    263   MVE_VQNEG,
    264   MVE_VREV16,
    265   MVE_VREV32,
    266   MVE_VREV64,
    267   MVE_LSLL,
    268   MVE_LSLLI,
    269   MVE_LSRL,
    270   MVE_ASRL,
    271   MVE_ASRLI,
    272   MVE_SQRSHRL,
    273   MVE_SQRSHR,
    274   MVE_UQRSHL,
    275   MVE_UQRSHLL,
    276   MVE_UQSHL,
    277   MVE_UQSHLL,
    278   MVE_URSHRL,
    279   MVE_URSHR,
    280   MVE_SRSHRL,
    281   MVE_SRSHR,
    282   MVE_SQSHLL,
    283   MVE_SQSHL,
    284   MVE_CINC,
    285   MVE_CINV,
    286   MVE_CNEG,
    287   MVE_CSINC,
    288   MVE_CSINV,
    289   MVE_CSET,
    290   MVE_CSETM,
    291   MVE_CSNEG,
    292   MVE_CSEL,
    293   MVE_NONE
    294 };
    295 
    296 enum mve_unpredictable
    297 {
    298   UNPRED_IT_BLOCK,		/* Unpredictable because mve insn in it block.
    299 				 */
    300   UNPRED_FCA_0_FCB_1,		/* Unpredictable because fcA = 0 and
    301 				   fcB = 1 (vpt).  */
    302   UNPRED_R13,			/* Unpredictable because r13 (sp) or
    303 				   r15 (sp) used.  */
    304   UNPRED_R15,			/* Unpredictable because r15 (pc) is used.  */
    305   UNPRED_Q_GT_4,		/* Unpredictable because
    306 				   vec reg start > 4 (vld4/st4).  */
    307   UNPRED_Q_GT_6,		/* Unpredictable because
    308 				   vec reg start > 6 (vld2/st2).  */
    309   UNPRED_R13_AND_WB,		/* Unpredictable becase gp reg = r13
    310 				   and WB bit = 1.  */
    311   UNPRED_Q_REGS_EQUAL,		/* Unpredictable because vector registers are
    312 				   equal.  */
    313   UNPRED_OS,			/* Unpredictable because offset scaled == 1.  */
    314   UNPRED_GP_REGS_EQUAL,		/* Unpredictable because gp registers are the
    315 				   same.  */
    316   UNPRED_Q_REGS_EQ_AND_SIZE_1,	/* Unpredictable because q regs equal and
    317 				   size = 1.  */
    318   UNPRED_Q_REGS_EQ_AND_SIZE_2,	/* Unpredictable because q regs equal and
    319 				   size = 2.  */
    320   UNPRED_NONE			/* No unpredictable behavior.  */
    321 };
    322 
    323 enum mve_undefined
    324 {
    325   UNDEF_SIZE,			/* undefined size.  */
    326   UNDEF_SIZE_0,			/* undefined because size == 0.  */
    327   UNDEF_SIZE_2,			/* undefined because size == 2.  */
    328   UNDEF_SIZE_3,			/* undefined because size == 3.  */
    329   UNDEF_SIZE_LE_1,		/* undefined because size <= 1.  */
    330   UNDEF_SIZE_NOT_0,		/* undefined because size != 0.  */
    331   UNDEF_SIZE_NOT_2,		/* undefined because size != 2.  */
    332   UNDEF_SIZE_NOT_3,		/* undefined because size != 3.  */
    333   UNDEF_NOT_UNS_SIZE_0,		/* undefined because U == 0 and
    334 				   size == 0.  */
    335   UNDEF_NOT_UNS_SIZE_1,		/* undefined because U == 0 and
    336 				   size == 1.  */
    337   UNDEF_NOT_UNSIGNED,		/* undefined because U == 0.  */
    338   UNDEF_VCVT_IMM6,		/* imm6 < 32.  */
    339   UNDEF_VCVT_FSI_IMM6,		/* fsi = 0 and 32 >= imm6 <= 47.  */
    340   UNDEF_BAD_OP1_OP2,		/* undefined with op2 = 2 and
    341 				   op1 == (0 or 1).  */
    342   UNDEF_BAD_U_OP1_OP2,		/* undefined with U = 1 and
    343 				   op2 == 0 and op1 == (0 or 1).  */
    344   UNDEF_OP_0_BAD_CMODE,		/* undefined because op == 0 and cmode
    345 				   in {0xx1, x0x1}.  */
    346   UNDEF_XCHG_UNS,		/* undefined because X == 1 and U == 1.  */
    347   UNDEF_NONE			/* no undefined behavior.  */
    348 };
    349 
    350 struct opcode32
    351 {
    352   arm_feature_set arch;		/* Architecture defining this insn.  */
    353   unsigned long value;		/* If arch is 0 then value is a sentinel.  */
    354   unsigned long mask;		/* Recognise insn if (op & mask) == value.  */
    355   const char *  assembler;	/* How to disassemble this insn.  */
    356 };
    357 
    358 struct cdeopcode32
    359 {
    360   arm_feature_set arch;		/* Architecture defining this insn.  */
    361   uint8_t coproc_shift;		/* coproc is this far into op.  */
    362   uint16_t coproc_mask;		/* Length of coproc field in op.  */
    363   unsigned long value;		/* If arch is 0 then value is a sentinel.  */
    364   unsigned long mask;		/* Recognise insn if (op & mask) == value.  */
    365   const char *  assembler;	/* How to disassemble this insn.  */
    366 };
    367 
    368 /* MVE opcodes.  */
    369 
    370 struct mopcode32
    371 {
    372   arm_feature_set arch;		/* Architecture defining this insn.  */
    373   enum mve_instructions mve_op;  /* Specific mve instruction for faster
    374 				    decoding.  */
    375   unsigned long value;		/* If arch is 0 then value is a sentinel.  */
    376   unsigned long mask;		/* Recognise insn if (op & mask) == value.  */
    377   const char *  assembler;	/* How to disassemble this insn.  */
    378 };
    379 
    380 enum isa {
    381   ANY,
    382   T32,
    383   ARM
    384 };
    385 
    386 
    387 /* Shared (between Arm and Thumb mode) opcode.  */
    388 struct sopcode32
    389 {
    390   enum isa isa;			/* Execution mode instruction availability.  */
    391   arm_feature_set arch;		/* Architecture defining this insn.  */
    392   unsigned long value;		/* If arch is 0 then value is a sentinel.  */
    393   unsigned long mask;		/* Recognise insn if (op & mask) == value.  */
    394   const char *  assembler;	/* How to disassemble this insn.  */
    395 };
    396 
    397 struct opcode16
    398 {
    399   arm_feature_set arch;		/* Architecture defining this insn.  */
    400   unsigned short value, mask;	/* Recognise insn if (op & mask) == value.  */
    401   const char *assembler;	/* How to disassemble this insn.  */
    402 };
    403 
    404 /* print_insn_coprocessor recognizes the following format control codes:
    405 
    406    %%			%
    407 
    408    %c			print condition code (always bits 28-31 in ARM mode)
    409    %b			print condition code allowing cp_num == 9
    410    %q			print shifter argument
    411    %u			print condition code (unconditional in ARM mode,
    412                           UNPREDICTABLE if not AL in Thumb)
    413    %A			print address for ldc/stc/ldf/stf instruction
    414    %B			print vstm/vldm register list
    415    %C			print vscclrm register list
    416    %I                   print cirrus signed shift immediate: bits 0..3|4..6
    417    %J			print register for VLDR instruction
    418    %K			print address for VLDR instruction
    419    %F			print the COUNT field of a LFM/SFM instruction.
    420    %P			print floating point precision in arithmetic insn
    421    %Q			print floating point precision in ldf/stf insn
    422    %R			print floating point rounding mode
    423 
    424    %<bitfield>c		print as a condition code (for vsel)
    425    %<bitfield>r		print as an ARM register
    426    %<bitfield>R		as %<>r but r15 is UNPREDICTABLE
    427    %<bitfield>ru        as %<>r but each u register must be unique.
    428    %<bitfield>d		print the bitfield in decimal
    429    %<bitfield>k		print immediate for VFPv3 conversion instruction
    430    %<bitfield>x		print the bitfield in hex
    431    %<bitfield>X		print the bitfield as 1 hex digit without leading "0x"
    432    %<bitfield>f		print a floating point constant if >7 else a
    433 			floating point register
    434    %<bitfield>w         print as an iWMMXt width field - [bhwd]ss/us
    435    %<bitfield>g         print as an iWMMXt 64-bit register
    436    %<bitfield>G         print as an iWMMXt general purpose or control register
    437    %<bitfield>D		print as a NEON D register
    438    %<bitfield>Q		print as a NEON Q register
    439    %<bitfield>V		print as a NEON D or Q register
    440    %<bitfield>E		print a quarter-float immediate value
    441 
    442    %y<code>		print a single precision VFP reg.
    443 			  Codes: 0=>Sm, 1=>Sd, 2=>Sn, 3=>multi-list, 4=>Sm pair
    444    %z<code>		print a double precision VFP reg
    445 			  Codes: 0=>Dm, 1=>Dd, 2=>Dn, 3=>multi-list
    446 
    447    %<bitfield>'c	print specified char iff bitfield is all ones
    448    %<bitfield>`c	print specified char iff bitfield is all zeroes
    449    %<bitfield>?ab...    select from array of values in big endian order
    450 
    451    %L			print as an iWMMXt N/M width field.
    452    %Z			print the Immediate of a WSHUFH instruction.
    453    %l			like 'A' except use byte offsets for 'B' & 'H'
    454 			versions.
    455    %i			print 5-bit immediate in bits 8,3..0
    456 			(print "32" when 0)
    457    %r			print register offset address for wldt/wstr instruction.  */
    458 
    459 enum opcode_sentinel_enum
    460 {
    461   SENTINEL_IWMMXT_START = 1,
    462   SENTINEL_IWMMXT_END,
    463   SENTINEL_GENERIC_START
    464 } opcode_sentinels;
    465 
    466 #define UNDEFINED_INSTRUCTION      "\t\t; <UNDEFINED> instruction: %0-31x"
    467 #define UNKNOWN_INSTRUCTION_32BIT  "\t\t; <UNDEFINED> instruction: %08x"
    468 #define UNKNOWN_INSTRUCTION_16BIT  "\t\t; <UNDEFINED> instruction: %04x"
    469 #define UNPREDICTABLE_INSTRUCTION  "\t; <UNPREDICTABLE>"
    470 
    471 /* Common coprocessor opcodes shared between Arm and Thumb-2.  */
    472 
    473 /* print_insn_cde recognizes the following format control codes:
    474 
    475    %%			%
    476 
    477    %a			print 'a' iff bit 28 is 1
    478    %p			print bits 8-10 as coprocessor
    479    %<bitfield>d		print as decimal
    480    %<bitfield>r		print as an ARM register
    481    %<bitfield>n		print as an ARM register but r15 is APSR_nzcv
    482    %<bitfield>T		print as an ARM register + 1
    483    %<bitfield>R		as %r but r13 is UNPREDICTABLE
    484    %<bitfield>S		as %r but rX where X > 10 is UNPREDICTABLE
    485    %j			print immediate taken from bits (16..21,7,0..5)
    486    %k			print immediate taken from bits (20..21,7,0..5).
    487    %l			print immediate taken from bits (20..22,7,4..5).  */
    488 
    489 /* At the moment there is only one valid position for the coprocessor number,
    490    and hence that's encoded in the macro below.  */
    491 #define CDE_OPCODE(ARCH, VALUE, MASK, ASM) \
    492   { ARCH, 8, 7, VALUE, MASK, ASM }
    493 static const struct cdeopcode32 cde_opcodes[] =
    494 {
    495   /* Custom Datapath Extension instructions.  */
    496   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    497 	      0xee000000, 0xefc00840,
    498 	      "cx1%a\t%p, %12-15n, #%0-5,7,16-21d"),
    499   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    500 	      0xee000040, 0xefc00840,
    501 	      "cx1d%a\t%p, %12-15S, %12-15T, #%0-5,7,16-21d"),
    502 
    503   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    504 	      0xee400000, 0xefc00840,
    505 	      "cx2%a\t%p, %12-15n, %16-19n, #%0-5,7,20-21d"),
    506   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    507 	      0xee400040, 0xefc00840,
    508 	      "cx2d%a\t%p, %12-15S, %12-15T, %16-19n, #%0-5,7,20-21d"),
    509 
    510   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    511 	      0xee800000, 0xef800840,
    512 	      "cx3%a\t%p, %0-3n, %16-19n, %12-15n, #%4-5,7,20-22d"),
    513   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    514 	      0xee800040, 0xef800840,
    515 	     "cx3d%a\t%p, %0-3S, %0-3T, %16-19n, %12-15n, #%4-5,7,20-22d"),
    516 
    517   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    518 	      0xec200000, 0xeeb00840,
    519 	      "vcx1%a\t%p, %12-15,22V, #%0-5,7,16-19d"),
    520   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    521 	      0xec200040, 0xeeb00840,
    522 	      "vcx1%a\t%p, %12-15,22V, #%0-5,7,16-19,24d"),
    523 
    524   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    525 	      0xec300000, 0xeeb00840,
    526 	      "vcx2%a\t%p, %12-15,22V, %0-3,5V, #%4,7,16-19d"),
    527   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    528 	      0xec300040, 0xeeb00840,
    529 	      "vcx2%a\t%p, %12-15,22V, %0-3,5V, #%4,7,16-19,24d"),
    530 
    531   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    532 	      0xec800000, 0xee800840,
    533 	      "vcx3%a\t%p, %12-15,22V, %16-19,7V, %0-3,5V, #%4,20-21d"),
    534   CDE_OPCODE (ARM_FEATURE_CORE_HIGH (ARM_EXT2_CDE),
    535 	      0xec800040, 0xee800840,
    536 	      "vcx3%a\t%p, %12-15,22V, %16-19,7V, %0-3,5V, #%4,20-21,24d"),
    537 
    538   CDE_OPCODE (ARM_FEATURE_CORE_LOW (0), 0, 0, 0)
    539 
    540 };
    541 
    542 static const struct sopcode32 coprocessor_opcodes[] =
    543 {
    544   /* XScale instructions.  */
    545   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    546     0x0e200010, 0x0fff0ff0,
    547     "mia%c\tacc0, %0-3r, %12-15r"},
    548   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    549     0x0e280010, 0x0fff0ff0,
    550     "miaph%c\tacc0, %0-3r, %12-15r"},
    551   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    552     0x0e2c0010, 0x0ffc0ff0, "mia%17'T%17`B%16'T%16`B%c\tacc0, %0-3r, %12-15r"},
    553   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    554     0x0c400000, 0x0ff00fff, "mar%c\tacc0, %12-15r, %16-19r"},
    555   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    556     0x0c500000, 0x0ff00fff, "mra%c\t%12-15r, %16-19r, acc0"},
    557 
    558   /* Intel Wireless MMX technology instructions.  */
    559   {ANY, ARM_FEATURE_CORE_LOW (0), SENTINEL_IWMMXT_START, 0, "" },
    560   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_IWMMXT),
    561     0x0e130130, 0x0f3f0fff, "tandc%22-23w%c\t%12-15r"},
    562   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    563     0x0e400010, 0x0ff00f3f, "tbcst%6-7w%c\t%16-19g, %12-15r"},
    564   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    565     0x0e130170, 0x0f3f0ff8, "textrc%22-23w%c\t%12-15r, #%0-2d"},
    566   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    567     0x0e100070, 0x0f300ff0, "textrm%3?su%22-23w%c\t%12-15r, %16-19g, #%0-2d"},
    568   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    569     0x0e600010, 0x0ff00f38, "tinsr%6-7w%c\t%16-19g, %12-15r, #%0-2d"},
    570   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    571     0x0e000110, 0x0ff00fff, "tmcr%c\t%16-19G, %12-15r"},
    572   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    573     0x0c400000, 0x0ff00ff0, "tmcrr%c\t%0-3g, %12-15r, %16-19r"},
    574   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    575     0x0e2c0010, 0x0ffc0e10, "tmia%17?tb%16?tb%c\t%5-8g, %0-3r, %12-15r"},
    576   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    577     0x0e200010, 0x0fff0e10, "tmia%c\t%5-8g, %0-3r, %12-15r"},
    578   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    579     0x0e280010, 0x0fff0e10, "tmiaph%c\t%5-8g, %0-3r, %12-15r"},
    580   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    581     0x0e100030, 0x0f300fff, "tmovmsk%22-23w%c\t%12-15r, %16-19g"},
    582   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    583     0x0e100110, 0x0ff00ff0, "tmrc%c\t%12-15r, %16-19G"},
    584   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    585     0x0c500000, 0x0ff00ff0, "tmrrc%c\t%12-15r, %16-19r, %0-3g"},
    586   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    587     0x0e130150, 0x0f3f0fff, "torc%22-23w%c\t%12-15r"},
    588   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    589     0x0e120190, 0x0f3f0fff, "torvsc%22-23w%c\t%12-15r"},
    590   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    591     0x0e2001c0, 0x0f300fff, "wabs%22-23w%c\t%12-15g, %16-19g"},
    592   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    593     0x0e0001c0, 0x0f300fff, "wacc%22-23w%c\t%12-15g, %16-19g"},
    594   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    595     0x0e000180, 0x0f000ff0, "wadd%20-23w%c\t%12-15g, %16-19g, %0-3g"},
    596   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    597     0x0e2001a0, 0x0fb00ff0, "waddbhus%22?ml%c\t%12-15g, %16-19g, %0-3g"},
    598   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    599     0x0ea001a0, 0x0ff00ff0, "waddsubhx%c\t%12-15g, %16-19g, %0-3g"},
    600   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    601     0x0e000020, 0x0f800ff0, "waligni%c\t%12-15g, %16-19g, %0-3g, #%20-22d"},
    602   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    603     0x0e800020, 0x0fc00ff0, "walignr%20-21d%c\t%12-15g, %16-19g, %0-3g"},
    604   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    605     0x0e200000, 0x0fe00ff0, "wand%20'n%c\t%12-15g, %16-19g, %0-3g"},
    606   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    607     0x0e800000, 0x0fa00ff0, "wavg2%22?hb%20'r%c\t%12-15g, %16-19g, %0-3g"},
    608   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    609     0x0e400000, 0x0fe00ff0, "wavg4%20'r%c\t%12-15g, %16-19g, %0-3g"},
    610   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    611     0x0e000060, 0x0f300ff0, "wcmpeq%22-23w%c\t%12-15g, %16-19g, %0-3g"},
    612   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    613     0x0e100060, 0x0f100ff0, "wcmpgt%21?su%22-23w%c\t%12-15g, %16-19g, %0-3g"},
    614   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    615     0xfc500100, 0xfe500f00, "wldrd\t%12-15g, %r"},
    616   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    617     0xfc100100, 0xfe500f00, "wldrw\t%12-15G, %A"},
    618   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    619     0x0c100000, 0x0e100e00, "wldr%L%c\t%12-15g, %l"},
    620   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    621     0x0e400100, 0x0fc00ff0, "wmac%21?su%20'z%c\t%12-15g, %16-19g, %0-3g"},
    622   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    623     0x0e800100, 0x0fc00ff0, "wmadd%21?su%20'x%c\t%12-15g, %16-19g, %0-3g"},
    624   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    625     0x0ec00100, 0x0fd00ff0, "wmadd%21?sun%c\t%12-15g, %16-19g, %0-3g"},
    626   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    627     0x0e000160, 0x0f100ff0, "wmax%21?su%22-23w%c\t%12-15g, %16-19g, %0-3g"},
    628   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    629     0x0e000080, 0x0f100fe0, "wmerge%c\t%12-15g, %16-19g, %0-3g, #%21-23d"},
    630   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    631     0x0e0000a0, 0x0f800ff0, "wmia%21?tb%20?tb%22'n%c\t%12-15g, %16-19g, %0-3g"},
    632   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    633     0x0e800120, 0x0f800ff0,
    634     "wmiaw%21?tb%20?tb%22'n%c\t%12-15g, %16-19g, %0-3g"},
    635   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    636     0x0e100160, 0x0f100ff0, "wmin%21?su%22-23w%c\t%12-15g, %16-19g, %0-3g"},
    637   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    638     0x0e000100, 0x0fc00ff0, "wmul%21?su%20?ml%23'r%c\t%12-15g, %16-19g, %0-3g"},
    639   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    640     0x0ed00100, 0x0fd00ff0, "wmul%21?sumr%c\t%12-15g, %16-19g, %0-3g"},
    641   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    642     0x0ee000c0, 0x0fe00ff0, "wmulwsm%20`r%c\t%12-15g, %16-19g, %0-3g"},
    643   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    644     0x0ec000c0, 0x0fe00ff0, "wmulwum%20`r%c\t%12-15g, %16-19g, %0-3g"},
    645   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    646     0x0eb000c0, 0x0ff00ff0, "wmulwl%c\t%12-15g, %16-19g, %0-3g"},
    647   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    648     0x0e8000a0, 0x0f800ff0,
    649     "wqmia%21?tb%20?tb%22'n%c\t%12-15g, %16-19g, %0-3g"},
    650   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    651     0x0e100080, 0x0fd00ff0, "wqmulm%21'r%c\t%12-15g, %16-19g, %0-3g"},
    652   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    653     0x0ec000e0, 0x0fd00ff0, "wqmulwm%21'r%c\t%12-15g, %16-19g, %0-3g"},
    654   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    655     0x0e000000, 0x0ff00ff0, "wor%c\t%12-15g, %16-19g, %0-3g"},
    656   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    657     0x0e000080, 0x0f000ff0, "wpack%20-23w%c\t%12-15g, %16-19g, %0-3g"},
    658   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    659     0xfe300040, 0xff300ef0, "wror%22-23w\t%12-15g, %16-19g, #%i"},
    660   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    661     0x0e300040, 0x0f300ff0, "wror%22-23w%c\t%12-15g, %16-19g, %0-3g"},
    662   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    663     0x0e300140, 0x0f300ff0, "wror%22-23wg%c\t%12-15g, %16-19g, %0-3G"},
    664   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    665     0x0e000120, 0x0fa00ff0, "wsad%22?hb%20'z%c\t%12-15g, %16-19g, %0-3g"},
    666   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    667     0x0e0001e0, 0x0f000ff0, "wshufh%c\t%12-15g, %16-19g, #%Z"},
    668   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    669     0xfe100040, 0xff300ef0, "wsll%22-23w\t%12-15g, %16-19g, #%i"},
    670   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    671     0x0e100040, 0x0f300ff0, "wsll%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
    672   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    673     0x0e100148, 0x0f300ffc, "wsll%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
    674   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    675     0xfe000040, 0xff300ef0, "wsra%22-23w\t%12-15g, %16-19g, #%i"},
    676   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    677     0x0e000040, 0x0f300ff0, "wsra%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
    678   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    679     0x0e000148, 0x0f300ffc, "wsra%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
    680   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    681     0xfe200040, 0xff300ef0, "wsrl%22-23w\t%12-15g, %16-19g, #%i"},
    682   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    683     0x0e200040, 0x0f300ff0, "wsrl%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
    684   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    685     0x0e200148, 0x0f300ffc, "wsrl%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
    686   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    687     0xfc400100, 0xfe500f00, "wstrd\t%12-15g, %r"},
    688   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    689     0xfc000100, 0xfe500f00, "wstrw\t%12-15G, %A"},
    690   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    691     0x0c000000, 0x0e100e00, "wstr%L%c\t%12-15g, %l"},
    692   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    693     0x0e0001a0, 0x0f000ff0, "wsub%20-23w%c\t%12-15g, %16-19g, %0-3g"},
    694   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    695     0x0ed001c0, 0x0ff00ff0, "wsubaddhx%c\t%12-15g, %16-19g, %0-3g"},
    696   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    697     0x0e1001c0, 0x0f300ff0, "wabsdiff%22-23w%c\t%12-15g, %16-19g, %0-3g"},
    698   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    699     0x0e0000c0, 0x0fd00fff, "wunpckeh%21?sub%c\t%12-15g, %16-19g"},
    700   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    701     0x0e4000c0, 0x0fd00fff, "wunpckeh%21?suh%c\t%12-15g, %16-19g"},
    702   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    703     0x0e8000c0, 0x0fd00fff, "wunpckeh%21?suw%c\t%12-15g, %16-19g"},
    704   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    705     0x0e0000e0, 0x0f100fff, "wunpckel%21?su%22-23w%c\t%12-15g, %16-19g"},
    706   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    707     0x0e1000c0, 0x0f300ff0, "wunpckih%22-23w%c\t%12-15g, %16-19g, %0-3g"},
    708   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    709     0x0e1000e0, 0x0f300ff0, "wunpckil%22-23w%c\t%12-15g, %16-19g, %0-3g"},
    710   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_XSCALE),
    711     0x0e100000, 0x0ff00ff0, "wxor%c\t%12-15g, %16-19g, %0-3g"},
    712   {ANY, ARM_FEATURE_CORE_LOW (0),
    713     SENTINEL_IWMMXT_END, 0, "" },
    714 
    715   /* Floating point coprocessor (FPA) instructions.  */
    716   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    717     0x0e000100, 0x0ff08f10, "adf%c%P%R\t%12-14f, %16-18f, %0-3f"},
    718   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    719     0x0e100100, 0x0ff08f10, "muf%c%P%R\t%12-14f, %16-18f, %0-3f"},
    720   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    721     0x0e200100, 0x0ff08f10, "suf%c%P%R\t%12-14f, %16-18f, %0-3f"},
    722   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    723     0x0e300100, 0x0ff08f10, "rsf%c%P%R\t%12-14f, %16-18f, %0-3f"},
    724   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    725     0x0e400100, 0x0ff08f10, "dvf%c%P%R\t%12-14f, %16-18f, %0-3f"},
    726   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    727     0x0e500100, 0x0ff08f10, "rdf%c%P%R\t%12-14f, %16-18f, %0-3f"},
    728   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    729     0x0e600100, 0x0ff08f10, "pow%c%P%R\t%12-14f, %16-18f, %0-3f"},
    730   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    731     0x0e700100, 0x0ff08f10, "rpw%c%P%R\t%12-14f, %16-18f, %0-3f"},
    732   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    733     0x0e800100, 0x0ff08f10, "rmf%c%P%R\t%12-14f, %16-18f, %0-3f"},
    734   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    735     0x0e900100, 0x0ff08f10, "fml%c%P%R\t%12-14f, %16-18f, %0-3f"},
    736   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    737     0x0ea00100, 0x0ff08f10, "fdv%c%P%R\t%12-14f, %16-18f, %0-3f"},
    738   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    739     0x0eb00100, 0x0ff08f10, "frd%c%P%R\t%12-14f, %16-18f, %0-3f"},
    740   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    741     0x0ec00100, 0x0ff08f10, "pol%c%P%R\t%12-14f, %16-18f, %0-3f"},
    742   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    743     0x0e008100, 0x0ff08f10, "mvf%c%P%R\t%12-14f, %0-3f"},
    744   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    745     0x0e108100, 0x0ff08f10, "mnf%c%P%R\t%12-14f, %0-3f"},
    746   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    747     0x0e208100, 0x0ff08f10, "abs%c%P%R\t%12-14f, %0-3f"},
    748   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    749     0x0e308100, 0x0ff08f10, "rnd%c%P%R\t%12-14f, %0-3f"},
    750   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    751     0x0e408100, 0x0ff08f10, "sqt%c%P%R\t%12-14f, %0-3f"},
    752   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    753     0x0e508100, 0x0ff08f10, "log%c%P%R\t%12-14f, %0-3f"},
    754   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    755     0x0e608100, 0x0ff08f10, "lgn%c%P%R\t%12-14f, %0-3f"},
    756   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    757     0x0e708100, 0x0ff08f10, "exp%c%P%R\t%12-14f, %0-3f"},
    758   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    759     0x0e808100, 0x0ff08f10, "sin%c%P%R\t%12-14f, %0-3f"},
    760   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    761     0x0e908100, 0x0ff08f10, "cos%c%P%R\t%12-14f, %0-3f"},
    762   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    763     0x0ea08100, 0x0ff08f10, "tan%c%P%R\t%12-14f, %0-3f"},
    764   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    765     0x0eb08100, 0x0ff08f10, "asn%c%P%R\t%12-14f, %0-3f"},
    766   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    767     0x0ec08100, 0x0ff08f10, "acs%c%P%R\t%12-14f, %0-3f"},
    768   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    769     0x0ed08100, 0x0ff08f10, "atn%c%P%R\t%12-14f, %0-3f"},
    770   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    771     0x0ee08100, 0x0ff08f10, "urd%c%P%R\t%12-14f, %0-3f"},
    772   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    773     0x0ef08100, 0x0ff08f10, "nrm%c%P%R\t%12-14f, %0-3f"},
    774   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    775     0x0e000110, 0x0ff00f1f, "flt%c%P%R\t%16-18f, %12-15r"},
    776   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    777     0x0e100110, 0x0fff0f98, "fix%c%R\t%12-15r, %0-2f"},
    778   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    779     0x0e200110, 0x0fff0fff, "wfs%c\t%12-15r"},
    780   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    781     0x0e300110, 0x0fff0fff, "rfs%c\t%12-15r"},
    782   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    783     0x0e400110, 0x0fff0fff, "wfc%c\t%12-15r"},
    784   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    785     0x0e500110, 0x0fff0fff, "rfc%c\t%12-15r"},
    786   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    787     0x0e90f110, 0x0ff8fff0, "cmf%c\t%16-18f, %0-3f"},
    788   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    789     0x0eb0f110, 0x0ff8fff0, "cnf%c\t%16-18f, %0-3f"},
    790   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    791     0x0ed0f110, 0x0ff8fff0, "cmfe%c\t%16-18f, %0-3f"},
    792   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    793     0x0ef0f110, 0x0ff8fff0, "cnfe%c\t%16-18f, %0-3f"},
    794   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    795     0x0c000100, 0x0e100f00, "stf%c%Q\t%12-14f, %A"},
    796   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V1),
    797     0x0c100100, 0x0e100f00, "ldf%c%Q\t%12-14f, %A"},
    798   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V2),
    799     0x0c000200, 0x0e100f00, "sfm%c\t%12-14f, %F, %A"},
    800   {ANY, ARM_FEATURE_COPROC (FPU_FPA_EXT_V2),
    801     0x0c100200, 0x0e100f00, "lfm%c\t%12-14f, %F, %A"},
    802 
    803   /* Armv8.1-M Mainline instructions.  */
    804   {T32, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    805     0xec9f0b00, 0xffbf0f01, "vscclrm%c\t%C"},
    806   {T32, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    807     0xec9f0a00, 0xffbf0f00, "vscclrm%c\t%C"},
    808 
    809   /* ARMv8-M Mainline Security Extensions instructions.  */
    810   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8M_MAIN),
    811     0xec300a00, 0xfff0ffff, "vlldm\t%16-19r"},
    812   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8M_MAIN),
    813     0xec200a00, 0xfff0ffff, "vlstm\t%16-19r"},
    814 
    815   /* Register load/store.  */
    816   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_NEON_EXT_V1),
    817     0x0d2d0b00, 0x0fbf0f01, "vpush%c\t%B"},
    818   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_NEON_EXT_V1),
    819     0x0d200b00, 0x0fb00f01, "vstmdb%c\t%16-19r!, %B"},
    820   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_NEON_EXT_V1),
    821     0x0d300b00, 0x0fb00f01, "vldmdb%c\t%16-19r!, %B"},
    822   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_NEON_EXT_V1),
    823     0x0c800b00, 0x0f900f01, "vstmia%c\t%16-19r%21'!, %B"},
    824   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_NEON_EXT_V1),
    825     0x0cbd0b00, 0x0fbf0f01, "vpop%c\t%B"},
    826   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_NEON_EXT_V1),
    827     0x0c900b00, 0x0f900f01, "vldmia%c\t%16-19r%21'!, %B"},
    828   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_NEON_EXT_V1),
    829     0x0d000b00, 0x0f300f00, "vstr%c\t%12-15,22D, %A"},
    830   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD | FPU_NEON_EXT_V1),
    831     0x0d100b00, 0x0f300f00, "vldr%c\t%12-15,22D, %A"},
    832   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    833     0x0d2d0a00, 0x0fbf0f00, "vpush%c\t%y3"},
    834   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    835     0x0d200a00, 0x0fb00f00, "vstmdb%c\t%16-19r!, %y3"},
    836   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    837     0x0d300a00, 0x0fb00f00, "vldmdb%c\t%16-19r!, %y3"},
    838   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    839     0x0c800a00, 0x0f900f00, "vstmia%c\t%16-19r%21'!, %y3"},
    840   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    841     0x0cbd0a00, 0x0fbf0f00, "vpop%c\t%y3"},
    842   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    843     0x0c900a00, 0x0f900f00, "vldmia%c\t%16-19r%21'!, %y3"},
    844   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    845     0x0d000a00, 0x0f300f00, "vstr%c\t%y1, %A"},
    846   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    847     0x0d100a00, 0x0f300f00, "vldr%c\t%y1, %A"},
    848   {ANY, ARM_FEATURE_COPROC (ARM_EXT2_V8_1M_MAIN),
    849     0xec100f80, 0xfe101f80, "vldr%c\t%J, %K"},
    850   {ANY, ARM_FEATURE_COPROC (ARM_EXT2_V8_1M_MAIN),
    851     0xec000f80, 0xfe101f80, "vstr%c\t%J, %K"},
    852 
    853   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    854     0x0d200b01, 0x0fb00f01, "fstmdbx%c\t%16-19r!, %z3\t;@ Deprecated"},
    855   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    856     0x0d300b01, 0x0fb00f01, "fldmdbx%c\t%16-19r!, %z3\t;@ Deprecated"},
    857   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    858     0x0c800b01, 0x0f900f01, "fstmiax%c\t%16-19r%21'!, %z3\t;@ Deprecated"},
    859   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    860     0x0c900b01, 0x0f900f01, "fldmiax%c\t%16-19r%21'!, %z3\t;@ Deprecated"},
    861 
    862   /* Data transfer between ARM and NEON registers.  */
    863   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
    864     0x0c400b10, 0x0ff00fd0, "vmov%c\t%0-3,5D, %12-15r, %16-19r"},
    865   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
    866     0x0c500b10, 0x0ff00fd0, "vmov%c\t%12-15r, %16-19r, %0-3,5D"},
    867   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
    868     0x0e000b10, 0x0fd00f70, "vmov%c.32\t%16-19,7D[%21d], %12-15r"},
    869   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
    870     0x0e100b10, 0x0f500f70, "vmov%c.32\t%12-15r, %16-19,7D[%21d]"},
    871   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
    872     0x0e000b30, 0x0fd00f30, "vmov%c.16\t%16-19,7D[%6,21d], %12-15r"},
    873   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
    874     0x0e100b30, 0x0f500f30, "vmov%c.%23?us16\t%12-15r, %16-19,7D[%6,21d]"},
    875   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
    876     0x0e400b10, 0x0fd00f10, "vmov%c.8\t%16-19,7D[%5,6,21d], %12-15r"},
    877   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
    878     0x0e500b10, 0x0f500f10, "vmov%c.%23?us8\t%12-15r, %16-19,7D[%5,6,21d]"},
    879   /* Half-precision conversion instructions.  */
    880   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
    881     0x0eb20b40, 0x0fbf0f50, "vcvt%7?tb%c.f64.f16\t%z1, %y0"},
    882   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
    883     0x0eb30b40, 0x0fbf0f50, "vcvt%7?tb%c.f16.f64\t%y1, %z0"},
    884   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FP16),
    885     0x0eb20a40, 0x0fbf0f50, "vcvt%7?tb%c.f32.f16\t%y1, %y0"},
    886   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FP16),
    887     0x0eb30a40, 0x0fbf0f50, "vcvt%7?tb%c.f16.f32\t%y1, %y0"},
    888 
    889   /* Floating point coprocessor (VFP) instructions.  */
    890   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    891     0x0ee00a10, 0x0fff0fff, "vmsr%c\tfpsid, %12-15r"},
    892   {ANY, ARM_FEATURE (0, ARM_EXT2_V8_1M_MAIN, FPU_VFP_EXT_V1xD),
    893     0x0ee10a10, 0x0fff0fff, "vmsr%c\tfpscr, %12-15r"},
    894   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    895     0x0ee20a10, 0x0fff0fff, "vmsr%c\tfpscr_nzcvqc, %12-15r"},
    896   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    897     0x0ee60a10, 0x0fff0fff, "vmsr%c\tmvfr1, %12-15r"},
    898   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    899     0x0ee70a10, 0x0fff0fff, "vmsr%c\tmvfr0, %12-15r"},
    900   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
    901     0x0ee50a10, 0x0fff0fff, "vmsr%c\tmvfr2, %12-15r"},
    902   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    903     0x0ee80a10, 0x0fff0fff, "vmsr%c\tfpexc, %12-15r"},
    904   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    905     0x0ee90a10, 0x0fff0fff, "vmsr%c\tfpinst, %12-15r\t@ Impl def"},
    906   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    907     0x0eea0a10, 0x0fff0fff, "vmsr%c\tfpinst2, %12-15r\t@ Impl def"},
    908   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
    909     0x0eec0a10, 0x0fff0fff, "vmsr%c\tvpr, %12-15r"},
    910   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
    911     0x0eed0a10, 0x0fff0fff, "vmsr%c\tp0, %12-15r"},
    912   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    913     0x0eee0a10, 0x0fff0fff, "vmsr%c\tfpcxt_ns, %12-15r"},
    914   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    915     0x0eef0a10, 0x0fff0fff, "vmsr%c\tfpcxt_s, %12-15r"},
    916   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    917     0x0ef00a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpsid"},
    918   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    919     0x0ef1fa10, 0x0fffffff, "vmrs%c\tAPSR_nzcv, fpscr"},
    920   {ANY, ARM_FEATURE (0, ARM_EXT2_V8_1M_MAIN, FPU_VFP_EXT_V1xD),
    921     0x0ef10a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpscr"},
    922   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    923     0x0ef20a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpscr_nzcvqc"},
    924   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
    925     0x0ef50a10, 0x0fff0fff, "vmrs%c\t%12-15r, mvfr2"},
    926   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    927     0x0ef60a10, 0x0fff0fff, "vmrs%c\t%12-15r, mvfr1"},
    928   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    929     0x0ef70a10, 0x0fff0fff, "vmrs%c\t%12-15r, mvfr0"},
    930   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    931     0x0ef80a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpexc"},
    932   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    933     0x0ef90a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpinst\t@ Impl def"},
    934   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    935     0x0efa0a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpinst2\t@ Impl def"},
    936   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
    937     0x0efc0a10, 0x0fff0fff, "vmrs%c\t%12-15r, vpr"},
    938   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
    939     0x0efd0a10, 0x0fff0fff, "vmrs%c\t%12-15r, p0"},
    940   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    941     0x0efe0a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpcxt_ns"},
    942   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
    943     0x0eff0a10, 0x0fff0fff, "vmrs%c\t%12-15r, fpcxt_s"},
    944   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    945     0x0e000b10, 0x0fd00fff, "vmov%c.32\t%z2[%21d], %12-15r"},
    946   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    947     0x0e100b10, 0x0fd00fff, "vmov%c.32\t%12-15r, %z2[%21d]"},
    948   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    949     0x0ee00a10, 0x0ff00fff, "vmsr%c\t<impl def %16-19x>, %12-15r"},
    950   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    951     0x0ef00a10, 0x0ff00fff, "vmrs%c\t%12-15r, <impl def %16-19x>"},
    952   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    953     0x0e000a10, 0x0ff00f7f, "vmov%c\t%y2, %12-15r"},
    954   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    955     0x0e100a10, 0x0ff00f7f, "vmov%c\t%12-15r, %y2"},
    956   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    957     0x0eb50a40, 0x0fbf0f70, "vcmp%7'e%c.f32\t%y1, #0.0"},
    958   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    959     0x0eb50b40, 0x0fbf0f70, "vcmp%7'e%c.f64\t%z1, #0.0"},
    960   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    961     0x0eb00a40, 0x0fbf0fd0, "vmov%c.f32\t%y1, %y0"},
    962   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    963     0x0eb00ac0, 0x0fbf0fd0, "vabs%c.f32\t%y1, %y0"},
    964   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    965     0x0eb00b40, 0x0fbf0fd0, "vmov%c.f64\t%z1, %z0"},
    966   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    967     0x0eb00bc0, 0x0fbf0fd0, "vabs%c.f64\t%z1, %z0"},
    968   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    969     0x0eb10a40, 0x0fbf0fd0, "vneg%c.f32\t%y1, %y0"},
    970   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    971     0x0eb10ac0, 0x0fbf0fd0, "vsqrt%c.f32\t%y1, %y0"},
    972   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    973     0x0eb10b40, 0x0fbf0fd0, "vneg%c.f64\t%z1, %z0"},
    974   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    975     0x0eb10bc0, 0x0fbf0fd0, "vsqrt%c.f64\t%z1, %z0"},
    976   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    977     0x0eb70ac0, 0x0fbf0fd0, "vcvt%c.f64.f32\t%z1, %y0"},
    978   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    979     0x0eb70bc0, 0x0fbf0fd0, "vcvt%c.f32.f64\t%y1, %z0"},
    980   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    981     0x0eb80a40, 0x0fbf0f50, "vcvt%c.f32.%7?su32\t%y1, %y0"},
    982   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    983     0x0eb80b40, 0x0fbf0f50, "vcvt%c.f64.%7?su32\t%z1, %y0"},
    984   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    985     0x0eb40a40, 0x0fbf0f50, "vcmp%7'e%c.f32\t%y1, %y0"},
    986   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    987     0x0eb40b40, 0x0fbf0f50, "vcmp%7'e%c.f64\t%z1, %z0"},
    988   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3xD),
    989     0x0eba0a40, 0x0fbe0f50, "vcvt%c.f32.%16?us%7?31%7?26\t%y1, %y1, #%5,0-3k"},
    990   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3),
    991     0x0eba0b40, 0x0fbe0f50, "vcvt%c.f64.%16?us%7?31%7?26\t%z1, %z1, #%5,0-3k"},
    992   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
    993     0x0ebc0a40, 0x0fbe0f50, "vcvt%7`r%c.%16?su32.f32\t%y1, %y0"},
    994   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
    995     0x0ebc0b40, 0x0fbe0f50, "vcvt%7`r%c.%16?su32.f64\t%y1, %z0"},
    996   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3xD),
    997     0x0ebe0a40, 0x0fbe0f50, "vcvt%c.%16?us%7?31%7?26.f32\t%y1, %y1, #%5,0-3k"},
    998   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3),
    999     0x0ebe0b40, 0x0fbe0f50, "vcvt%c.%16?us%7?31%7?26.f64\t%z1, %z1, #%5,0-3k"},
   1000   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1001     0x0c500b10, 0x0fb00ff0, "vmov%c\t%12-15r, %16-19r, %z0"},
   1002   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3xD),
   1003     0x0eb00a00, 0x0fb00ff0, "vmov%c.f32\t%y1, #%0-3,16-19E"},
   1004   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3),
   1005     0x0eb00b00, 0x0fb00ff0, "vmov%c.f64\t%z1, #%0-3,16-19E"},
   1006   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V2),
   1007     0x0c400a10, 0x0ff00fd0, "vmov%c\t%y4, %12-15r, %16-19r"},
   1008   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V2),
   1009     0x0c400b10, 0x0ff00fd0, "vmov%c\t%z0, %12-15r, %16-19r"},
   1010   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V2),
   1011     0x0c500a10, 0x0ff00fd0, "vmov%c\t%12-15r, %16-19r, %y4"},
   1012   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
   1013     0x0e000a00, 0x0fb00f50, "vmla%c.f32\t%y1, %y2, %y0"},
   1014   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
   1015     0x0e000a40, 0x0fb00f50, "vmls%c.f32\t%y1, %y2, %y0"},
   1016   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1017     0x0e000b00, 0x0fb00f50, "vmla%c.f64\t%z1, %z2, %z0"},
   1018   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1019     0x0e000b40, 0x0fb00f50, "vmls%c.f64\t%z1, %z2, %z0"},
   1020   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
   1021     0x0e100a00, 0x0fb00f50, "vnmls%c.f32\t%y1, %y2, %y0"},
   1022   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
   1023     0x0e100a40, 0x0fb00f50, "vnmla%c.f32\t%y1, %y2, %y0"},
   1024   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1025     0x0e100b00, 0x0fb00f50, "vnmls%c.f64\t%z1, %z2, %z0"},
   1026   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1027     0x0e100b40, 0x0fb00f50, "vnmla%c.f64\t%z1, %z2, %z0"},
   1028   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
   1029     0x0e200a00, 0x0fb00f50, "vmul%c.f32\t%y1, %y2, %y0"},
   1030   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
   1031     0x0e200a40, 0x0fb00f50, "vnmul%c.f32\t%y1, %y2, %y0"},
   1032   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1033     0x0e200b00, 0x0fb00f50, "vmul%c.f64\t%z1, %z2, %z0"},
   1034   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1035     0x0e200b40, 0x0fb00f50, "vnmul%c.f64\t%z1, %z2, %z0"},
   1036   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
   1037     0x0e300a00, 0x0fb00f50, "vadd%c.f32\t%y1, %y2, %y0"},
   1038   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
   1039     0x0e300a40, 0x0fb00f50, "vsub%c.f32\t%y1, %y2, %y0"},
   1040   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1041     0x0e300b00, 0x0fb00f50, "vadd%c.f64\t%z1, %z2, %z0"},
   1042   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1043     0x0e300b40, 0x0fb00f50, "vsub%c.f64\t%z1, %z2, %z0"},
   1044   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1xD),
   1045     0x0e800a00, 0x0fb00f50, "vdiv%c.f32\t%y1, %y2, %y0"},
   1046   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
   1047     0x0e800b00, 0x0fb00f50, "vdiv%c.f64\t%z1, %z2, %z0"},
   1048 
   1049   /* Cirrus coprocessor instructions.  */
   1050   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1051     0x0d100400, 0x0f500f00, "cfldrs%c\tmvf%12-15d, %A"},
   1052   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1053     0x0c100400, 0x0f500f00, "cfldrs%c\tmvf%12-15d, %A"},
   1054   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1055     0x0d500400, 0x0f500f00, "cfldrd%c\tmvd%12-15d, %A"},
   1056   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1057     0x0c500400, 0x0f500f00, "cfldrd%c\tmvd%12-15d, %A"},
   1058   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1059     0x0d100500, 0x0f500f00, "cfldr32%c\tmvfx%12-15d, %A"},
   1060   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1061     0x0c100500, 0x0f500f00, "cfldr32%c\tmvfx%12-15d, %A"},
   1062   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1063     0x0d500500, 0x0f500f00, "cfldr64%c\tmvdx%12-15d, %A"},
   1064   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1065     0x0c500500, 0x0f500f00, "cfldr64%c\tmvdx%12-15d, %A"},
   1066   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1067     0x0d000400, 0x0f500f00, "cfstrs%c\tmvf%12-15d, %A"},
   1068   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1069     0x0c000400, 0x0f500f00, "cfstrs%c\tmvf%12-15d, %A"},
   1070   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1071     0x0d400400, 0x0f500f00, "cfstrd%c\tmvd%12-15d, %A"},
   1072   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1073     0x0c400400, 0x0f500f00, "cfstrd%c\tmvd%12-15d, %A"},
   1074   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1075     0x0d000500, 0x0f500f00, "cfstr32%c\tmvfx%12-15d, %A"},
   1076   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1077     0x0c000500, 0x0f500f00, "cfstr32%c\tmvfx%12-15d, %A"},
   1078   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1079     0x0d400500, 0x0f500f00, "cfstr64%c\tmvdx%12-15d, %A"},
   1080   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1081     0x0c400500, 0x0f500f00, "cfstr64%c\tmvdx%12-15d, %A"},
   1082   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1083     0x0e000450, 0x0ff00ff0, "cfmvsr%c\tmvf%16-19d, %12-15r"},
   1084   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1085     0x0e100450, 0x0ff00ff0, "cfmvrs%c\t%12-15r, mvf%16-19d"},
   1086   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1087     0x0e000410, 0x0ff00ff0, "cfmvdlr%c\tmvd%16-19d, %12-15r"},
   1088   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1089     0x0e100410, 0x0ff00ff0, "cfmvrdl%c\t%12-15r, mvd%16-19d"},
   1090   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1091     0x0e000430, 0x0ff00ff0, "cfmvdhr%c\tmvd%16-19d, %12-15r"},
   1092   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1093     0x0e100430, 0x0ff00fff, "cfmvrdh%c\t%12-15r, mvd%16-19d"},
   1094   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1095     0x0e000510, 0x0ff00fff, "cfmv64lr%c\tmvdx%16-19d, %12-15r"},
   1096   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1097     0x0e100510, 0x0ff00fff, "cfmvr64l%c\t%12-15r, mvdx%16-19d"},
   1098   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1099     0x0e000530, 0x0ff00fff, "cfmv64hr%c\tmvdx%16-19d, %12-15r"},
   1100   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1101     0x0e100530, 0x0ff00fff, "cfmvr64h%c\t%12-15r, mvdx%16-19d"},
   1102   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1103     0x0e200440, 0x0ff00fff, "cfmval32%c\tmvax%12-15d, mvfx%16-19d"},
   1104   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1105     0x0e100440, 0x0ff00fff, "cfmv32al%c\tmvfx%12-15d, mvax%16-19d"},
   1106   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1107     0x0e200460, 0x0ff00fff, "cfmvam32%c\tmvax%12-15d, mvfx%16-19d"},
   1108   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1109     0x0e100460, 0x0ff00fff, "cfmv32am%c\tmvfx%12-15d, mvax%16-19d"},
   1110   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1111     0x0e200480, 0x0ff00fff, "cfmvah32%c\tmvax%12-15d, mvfx%16-19d"},
   1112   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1113     0x0e100480, 0x0ff00fff, "cfmv32ah%c\tmvfx%12-15d, mvax%16-19d"},
   1114   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1115     0x0e2004a0, 0x0ff00fff, "cfmva32%c\tmvax%12-15d, mvfx%16-19d"},
   1116   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1117     0x0e1004a0, 0x0ff00fff, "cfmv32a%c\tmvfx%12-15d, mvax%16-19d"},
   1118   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1119     0x0e2004c0, 0x0ff00fff, "cfmva64%c\tmvax%12-15d, mvdx%16-19d"},
   1120   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1121     0x0e1004c0, 0x0ff00fff, "cfmv64a%c\tmvdx%12-15d, mvax%16-19d"},
   1122   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1123     0x0e2004e0, 0x0fff0fff, "cfmvsc32%c\tdspsc, mvdx%12-15d"},
   1124   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1125     0x0e1004e0, 0x0fff0fff, "cfmv32sc%c\tmvdx%12-15d, dspsc"},
   1126   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1127     0x0e000400, 0x0ff00fff, "cfcpys%c\tmvf%12-15d, mvf%16-19d"},
   1128   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1129     0x0e000420, 0x0ff00fff, "cfcpyd%c\tmvd%12-15d, mvd%16-19d"},
   1130   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1131     0x0e000460, 0x0ff00fff, "cfcvtsd%c\tmvd%12-15d, mvf%16-19d"},
   1132   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1133     0x0e000440, 0x0ff00fff, "cfcvtds%c\tmvf%12-15d, mvd%16-19d"},
   1134   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1135     0x0e000480, 0x0ff00fff, "cfcvt32s%c\tmvf%12-15d, mvfx%16-19d"},
   1136   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1137     0x0e0004a0, 0x0ff00fff, "cfcvt32d%c\tmvd%12-15d, mvfx%16-19d"},
   1138   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1139     0x0e0004c0, 0x0ff00fff, "cfcvt64s%c\tmvf%12-15d, mvdx%16-19d"},
   1140   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1141     0x0e0004e0, 0x0ff00fff, "cfcvt64d%c\tmvd%12-15d, mvdx%16-19d"},
   1142   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1143     0x0e100580, 0x0ff00fff, "cfcvts32%c\tmvfx%12-15d, mvf%16-19d"},
   1144   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1145     0x0e1005a0, 0x0ff00fff, "cfcvtd32%c\tmvfx%12-15d, mvd%16-19d"},
   1146   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1147     0x0e1005c0, 0x0ff00fff, "cftruncs32%c\tmvfx%12-15d, mvf%16-19d"},
   1148   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1149     0x0e1005e0, 0x0ff00fff, "cftruncd32%c\tmvfx%12-15d, mvd%16-19d"},
   1150   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1151     0x0e000550, 0x0ff00ff0, "cfrshl32%c\tmvfx%16-19d, mvfx%0-3d, %12-15r"},
   1152   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1153     0x0e000570, 0x0ff00ff0, "cfrshl64%c\tmvdx%16-19d, mvdx%0-3d, %12-15r"},
   1154   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1155     0x0e000500, 0x0ff00f10, "cfsh32%c\tmvfx%12-15d, mvfx%16-19d, #%I"},
   1156   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1157     0x0e200500, 0x0ff00f10, "cfsh64%c\tmvdx%12-15d, mvdx%16-19d, #%I"},
   1158   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1159     0x0e100490, 0x0ff00ff0, "cfcmps%c\t%12-15r, mvf%16-19d, mvf%0-3d"},
   1160   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1161     0x0e1004b0, 0x0ff00ff0, "cfcmpd%c\t%12-15r, mvd%16-19d, mvd%0-3d"},
   1162   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1163     0x0e100590, 0x0ff00ff0, "cfcmp32%c\t%12-15r, mvfx%16-19d, mvfx%0-3d"},
   1164   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1165     0x0e1005b0, 0x0ff00ff0, "cfcmp64%c\t%12-15r, mvdx%16-19d, mvdx%0-3d"},
   1166   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1167     0x0e300400, 0x0ff00fff, "cfabss%c\tmvf%12-15d, mvf%16-19d"},
   1168   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1169     0x0e300420, 0x0ff00fff, "cfabsd%c\tmvd%12-15d, mvd%16-19d"},
   1170   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1171     0x0e300440, 0x0ff00fff, "cfnegs%c\tmvf%12-15d, mvf%16-19d"},
   1172   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1173     0x0e300460, 0x0ff00fff, "cfnegd%c\tmvd%12-15d, mvd%16-19d"},
   1174   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1175     0x0e300480, 0x0ff00ff0, "cfadds%c\tmvf%12-15d, mvf%16-19d, mvf%0-3d"},
   1176   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1177     0x0e3004a0, 0x0ff00ff0, "cfaddd%c\tmvd%12-15d, mvd%16-19d, mvd%0-3d"},
   1178   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1179     0x0e3004c0, 0x0ff00ff0, "cfsubs%c\tmvf%12-15d, mvf%16-19d, mvf%0-3d"},
   1180   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1181     0x0e3004e0, 0x0ff00ff0, "cfsubd%c\tmvd%12-15d, mvd%16-19d, mvd%0-3d"},
   1182   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1183     0x0e100400, 0x0ff00ff0, "cfmuls%c\tmvf%12-15d, mvf%16-19d, mvf%0-3d"},
   1184   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1185     0x0e100420, 0x0ff00ff0, "cfmuld%c\tmvd%12-15d, mvd%16-19d, mvd%0-3d"},
   1186   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1187     0x0e300500, 0x0ff00fff, "cfabs32%c\tmvfx%12-15d, mvfx%16-19d"},
   1188   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1189     0x0e300520, 0x0ff00fff, "cfabs64%c\tmvdx%12-15d, mvdx%16-19d"},
   1190   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1191     0x0e300540, 0x0ff00fff, "cfneg32%c\tmvfx%12-15d, mvfx%16-19d"},
   1192   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1193     0x0e300560, 0x0ff00fff, "cfneg64%c\tmvdx%12-15d, mvdx%16-19d"},
   1194   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1195     0x0e300580, 0x0ff00ff0, "cfadd32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
   1196   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1197     0x0e3005a0, 0x0ff00ff0, "cfadd64%c\tmvdx%12-15d, mvdx%16-19d, mvdx%0-3d"},
   1198   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1199     0x0e3005c0, 0x0ff00ff0, "cfsub32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
   1200   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1201     0x0e3005e0, 0x0ff00ff0, "cfsub64%c\tmvdx%12-15d, mvdx%16-19d, mvdx%0-3d"},
   1202   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1203     0x0e100500, 0x0ff00ff0, "cfmul32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
   1204   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1205     0x0e100520, 0x0ff00ff0, "cfmul64%c\tmvdx%12-15d, mvdx%16-19d, mvdx%0-3d"},
   1206   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1207     0x0e100540, 0x0ff00ff0, "cfmac32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
   1208   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1209     0x0e100560, 0x0ff00ff0, "cfmsc32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
   1210   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1211     0x0e000600, 0x0ff00f10,
   1212     "cfmadd32%c\tmvax%5-7d, mvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
   1213   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1214     0x0e100600, 0x0ff00f10,
   1215     "cfmsub32%c\tmvax%5-7d, mvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
   1216   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1217     0x0e200600, 0x0ff00f10,
   1218     "cfmadda32%c\tmvax%5-7d, mvax%12-15d, mvfx%16-19d, mvfx%0-3d"},
   1219   {ANY, ARM_FEATURE_COPROC (ARM_CEXT_MAVERICK),
   1220     0x0e300600, 0x0ff00f10,
   1221     "cfmsuba32%c\tmvax%5-7d, mvax%12-15d, mvfx%16-19d, mvfx%0-3d"},
   1222 
   1223   /* VFP Fused multiply add instructions.  */
   1224   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FMA),
   1225     0x0ea00a00, 0x0fb00f50, "vfma%c.f32\t%y1, %y2, %y0"},
   1226   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FMA),
   1227     0x0ea00b00, 0x0fb00f50, "vfma%c.f64\t%z1, %z2, %z0"},
   1228   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FMA),
   1229     0x0ea00a40, 0x0fb00f50, "vfms%c.f32\t%y1, %y2, %y0"},
   1230   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FMA),
   1231     0x0ea00b40, 0x0fb00f50, "vfms%c.f64\t%z1, %z2, %z0"},
   1232   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FMA),
   1233     0x0e900a40, 0x0fb00f50, "vfnma%c.f32\t%y1, %y2, %y0"},
   1234   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FMA),
   1235     0x0e900b40, 0x0fb00f50, "vfnma%c.f64\t%z1, %z2, %z0"},
   1236   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FMA),
   1237     0x0e900a00, 0x0fb00f50, "vfnms%c.f32\t%y1, %y2, %y0"},
   1238   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_FMA),
   1239     0x0e900b00, 0x0fb00f50, "vfnms%c.f64\t%z1, %z2, %z0"},
   1240 
   1241   /* FP v5.  */
   1242   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1243     0xfe000a00, 0xff800f50, "vsel%20-21c%u.f32\t%y1, %y2, %y0"},
   1244   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1245     0xfe000b00, 0xff800f50, "vsel%20-21c%u.f64\t%z1, %z2, %z0"},
   1246   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1247     0xfe800a00, 0xffb00f50, "vmaxnm%u.f32\t%y1, %y2, %y0"},
   1248   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1249     0xfe800b00, 0xffb00f50, "vmaxnm%u.f64\t%z1, %z2, %z0"},
   1250   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1251     0xfe800a40, 0xffb00f50, "vminnm%u.f32\t%y1, %y2, %y0"},
   1252   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1253     0xfe800b40, 0xffb00f50, "vminnm%u.f64\t%z1, %z2, %z0"},
   1254   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1255     0xfebc0a40, 0xffbc0f50, "vcvt%16-17?mpna%u.%7?su32.f32\t%y1, %y0"},
   1256   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1257     0xfebc0b40, 0xffbc0f50, "vcvt%16-17?mpna%u.%7?su32.f64\t%y1, %z0"},
   1258   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1259     0x0eb60a40, 0x0fbe0f50, "vrint%7,16??xzr%c.f32\t%y1, %y0"},
   1260   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1261     0x0eb60b40, 0x0fbe0f50, "vrint%7,16??xzr%c.f64\t%z1, %z0"},
   1262   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1263     0xfeb80a40, 0xffbc0fd0, "vrint%16-17?mpna%u.f32\t%y1, %y0"},
   1264   {ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_ARMV8),
   1265     0xfeb80b40, 0xffbc0fd0, "vrint%16-17?mpna%u.f64\t%z1, %z0"},
   1266 
   1267   {ANY, ARM_FEATURE_CORE_LOW (0), SENTINEL_GENERIC_START, 0, "" },
   1268   /* ARMv8.3 AdvSIMD instructions in the space of coprocessor 8.  */
   1269   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1270     0xfc800800, 0xfeb00f10, "vcadd%c.f16\t%12-15,22V, %16-19,7V, %0-3,5V, #%24?29%24'70"},
   1271   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1272     0xfc900800, 0xfeb00f10, "vcadd%c.f32\t%12-15,22V, %16-19,7V, %0-3,5V, #%24?29%24'70"},
   1273   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1274     0xfc200800, 0xff300f10, "vcmla%c.f16\t%12-15,22V, %16-19,7V, %0-3,5V, #%23'90"},
   1275   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1276     0xfd200800, 0xff300f10, "vcmla%c.f16\t%12-15,22V, %16-19,7V, %0-3,5V, #%23?21%23?780"},
   1277   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1278     0xfc300800, 0xff300f10, "vcmla%c.f32\t%12-15,22V, %16-19,7V, %0-3,5V, #%23'90"},
   1279   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1280     0xfd300800, 0xff300f10, "vcmla%c.f32\t%12-15,22V, %16-19,7V, %0-3,5V, #%23?21%23?780"},
   1281   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1282     0xfe000800, 0xffa00f10, "vcmla%c.f16\t%12-15,22V, %16-19,7V, %0-3D[%5?10], #%20'90"},
   1283   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1284     0xfe200800, 0xffa00f10, "vcmla%c.f16\t%12-15,22V, %16-19,7V, %0-3D[%5?10], #%20?21%20?780"},
   1285   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1286     0xfe800800, 0xffa00f10, "vcmla%c.f32\t%12-15,22V, %16-19,7V, %0-3,5D[0], #%20'90"},
   1287   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1288     0xfea00800, 0xffa00f10, "vcmla%c.f32\t%12-15,22V, %16-19,7V, %0-3,5D[0], #%20?21%20?780"},
   1289 
   1290   /* BFloat16 instructions.  */
   1291   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_BF16),
   1292     0x0eb30940, 0x0fbf0f50, "vcvt%7?tb%b.bf16.f32\t%y1, %y0"},
   1293 
   1294   /* Dot Product instructions in the space of coprocessor 13.  */
   1295   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD),
   1296     0xfc200d00, 0xffb00f00, "v%4?usdot.%4?us8\t%12-15,22V, %16-19,7V, %0-3,5V"},
   1297   {ANY, ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD),
   1298     0xfe200d00, 0xff200f00, "v%4?usdot.%4?us8\t%12-15,22V, %16-19,7V, %0-3D[%5?10]"},
   1299 
   1300   /* ARMv8.2 FMAC Long instructions in the space of coprocessor 8.  */
   1301   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
   1302     0xfc200810, 0xffb00f50, "vfmal.f16\t%12-15,22D, s%7,16-19d, s%5,0-3d"},
   1303   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
   1304     0xfca00810, 0xffb00f50, "vfmsl.f16\t%12-15,22D, s%7,16-19d, s%5,0-3d"},
   1305   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
   1306     0xfc200850, 0xffb00f50, "vfmal.f16\t%12-15,22Q, d%16-19,7d, d%0-3,5d"},
   1307   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
   1308     0xfca00850, 0xffb00f50, "vfmsl.f16\t%12-15,22Q, d%16-19,7d, d%0-3,5d"},
   1309   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
   1310     0xfe000810, 0xffb00f50, "vfmal.f16\t%12-15,22D, s%7,16-19d, s%5,0-2d[%3d]"},
   1311   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
   1312     0xfe100810, 0xffb00f50, "vfmsl.f16\t%12-15,22D, s%7,16-19d, s%5,0-2d[%3d]"},
   1313   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
   1314     0xfe000850, 0xffb00f50, "vfmal.f16\t%12-15,22Q, d%16-19,7d, d%0-2d[%3,5d]"},
   1315   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
   1316     0xfe100850, 0xffb00f50, "vfmsl.f16\t%12-15,22Q, d%16-19,7d, d%0-2d[%3,5d]"},
   1317 
   1318   /* ARMv8.2 half-precision Floating point coprocessor 9 (VFP) instructions.
   1319      cp_num: bit <11:8> == 0b1001.
   1320      cond: bit <31:28> == 0b1110, otherwise, it's UNPREDICTABLE.  */
   1321   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1322     0x0eb009c0, 0x0fbf0fd0, "vabs%c.f16\t%y1, %y0"},
   1323   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1324     0x0e300900, 0x0fb00f50, "vadd%c.f16\t%y1, %y2, %y0"},
   1325   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1326     0x0eb40940, 0x0fbf0f50, "vcmp%7'e%c.f16\t%y1, %y0"},
   1327   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1328     0x0eb50940, 0x0fbf0f70, "vcmp%7'e%c.f16\t%y1, #0.0"},
   1329   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1330     0x0eba09c0, 0x0fbe0fd0, "vcvt%c.f16.%16?us%7?31%7?26\t%y1, %y1, #%5,0-3k"},
   1331   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1332     0x0ebe09c0, 0x0fbe0fd0, "vcvt%c.%16?us%7?31%7?26.f16\t%y1, %y1, #%5,0-3k"},
   1333   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1334     0x0ebc0940, 0x0fbe0f50, "vcvt%7`r%c.%16?su32.f16\t%y1, %y0"},
   1335   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1336     0x0eb80940, 0x0fbf0f50, "vcvt%c.f16.%7?su32\t%y1, %y0"},
   1337   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1338     0xfebc0940, 0xffbc0f50, "vcvt%16-17?mpna%u.%7?su32.f16\t%y1, %y0"},
   1339   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1340     0x0e800900, 0x0fb00f50, "vdiv%c.f16\t%y1, %y2, %y0"},
   1341   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1342     0x0ea00900, 0x0fb00f50, "vfma%c.f16\t%y1, %y2, %y0"},
   1343   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1344     0x0ea00940, 0x0fb00f50, "vfms%c.f16\t%y1, %y2, %y0"},
   1345   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1346     0x0e900940, 0x0fb00f50, "vfnma%c.f16\t%y1, %y2, %y0"},
   1347   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1348     0x0e900900, 0x0fb00f50, "vfnms%c.f16\t%y1, %y2, %y0"},
   1349   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1350     0xfeb00ac0, 0xffbf0fd0, "vins.f16\t%y1, %y0"},
   1351   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1352     0xfeb00a40, 0xffbf0fd0, "vmovx%c.f16\t%y1, %y0"},
   1353   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1354     0x0d100900, 0x0f300f00, "vldr%c.16\t%y1, %A"},
   1355   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1356     0x0d000900, 0x0f300f00, "vstr%c.16\t%y1, %A"},
   1357   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1358     0xfe800900, 0xffb00f50, "vmaxnm%c.f16\t%y1, %y2, %y0"},
   1359   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1360     0xfe800940, 0xffb00f50, "vminnm%c.f16\t%y1, %y2, %y0"},
   1361   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1362     0x0e000900, 0x0fb00f50, "vmla%c.f16\t%y1, %y2, %y0"},
   1363   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1364     0x0e000940, 0x0fb00f50, "vmls%c.f16\t%y1, %y2, %y0"},
   1365   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1366     0x0e100910, 0x0ff00f7f, "vmov%c.f16\t%12-15r, %y2"},
   1367   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1368     0x0e000910, 0x0ff00f7f, "vmov%c.f16\t%y2, %12-15r"},
   1369   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1370     0xeb00900, 0x0fb00ff0, "vmov%c.f16\t%y1, #%0-3,16-19E"},
   1371   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1372     0x0e200900, 0x0fb00f50, "vmul%c.f16\t%y1, %y2, %y0"},
   1373   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1374     0x0eb10940, 0x0fbf0fd0, "vneg%c.f16\t%y1, %y0"},
   1375   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1376     0x0e100940, 0x0fb00f50, "vnmla%c.f16\t%y1, %y2, %y0"},
   1377   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1378     0x0e100900, 0x0fb00f50, "vnmls%c.f16\t%y1, %y2, %y0"},
   1379   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1380     0x0e200940, 0x0fb00f50, "vnmul%c.f16\t%y1, %y2, %y0"},
   1381   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1382     0x0eb60940, 0x0fbe0f50, "vrint%7,16??xzr%c.f16\t%y1, %y0"},
   1383   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1384     0xfeb80940, 0xffbc0fd0, "vrint%16-17?mpna%u.f16\t%y1, %y0"},
   1385   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1386     0xfe000900, 0xff800f50, "vsel%20-21c%u.f16\t%y1, %y2, %y0"},
   1387   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1388     0x0eb109c0, 0x0fbf0fd0, "vsqrt%c.f16\t%y1, %y0"},
   1389   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1390     0x0e300940, 0x0fb00f50, "vsub%c.f16\t%y1, %y2, %y0"},
   1391 
   1392   /* ARMv8.3 javascript conversion instruction.  */
   1393   {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
   1394     0x0eb90bc0, 0x0fbf0fd0, "vjcvt%c.s32.f64\t%y1, %z0"},
   1395 
   1396   {ANY, ARM_FEATURE_CORE_LOW (0), 0, 0, 0}
   1397 };
   1398 
   1399 /* Generic coprocessor instructions.  These are only matched if a more specific
   1400    SIMD or co-processor instruction does not match first.  */
   1401 
   1402 static const struct sopcode32 generic_coprocessor_opcodes[] =
   1403 {
   1404   /* Generic coprocessor instructions.  */
   1405   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V5E),
   1406     0x0c400000, 0x0ff00000, "mcrr%c\t%8-11d, %4-7d, %12-15R, %16-19r, cr%0-3d"},
   1407   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V5E),
   1408     0x0c500000, 0x0ff00000,
   1409     "mrrc%c\t%8-11d, %4-7d, %12-15Ru, %16-19Ru, cr%0-3d"},
   1410   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V2),
   1411     0x0e000000, 0x0f000010,
   1412     "cdp%c\t%8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}"},
   1413   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V2),
   1414     0x0e10f010, 0x0f10f010,
   1415     "mrc%c\t%8-11d, %21-23d, APSR_nzcv, cr%16-19d, cr%0-3d, {%5-7d}"},
   1416   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V2),
   1417     0x0e100010, 0x0f100010,
   1418     "mrc%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
   1419   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V2),
   1420     0x0e000010, 0x0f100010,
   1421     "mcr%c\t%8-11d, %21-23d, %12-15R, cr%16-19d, cr%0-3d, {%5-7d}"},
   1422   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V2),
   1423     0x0c000000, 0x0e100000, "stc%22'l%c\t%8-11d, cr%12-15d, %A"},
   1424   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V2),
   1425     0x0c100000, 0x0e100000, "ldc%22'l%c\t%8-11d, cr%12-15d, %A"},
   1426 
   1427   /* V6 coprocessor instructions.  */
   1428   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   1429     0xfc500000, 0xfff00000,
   1430     "mrrc2%c\t%8-11d, %4-7d, %12-15Ru, %16-19Ru, cr%0-3d"},
   1431   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   1432     0xfc400000, 0xfff00000,
   1433     "mcrr2%c\t%8-11d, %4-7d, %12-15R, %16-19R, cr%0-3d"},
   1434 
   1435   /* V5 coprocessor instructions.  */
   1436   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
   1437     0xfc100000, 0xfe100000, "ldc2%22'l%c\t%8-11d, cr%12-15d, %A"},
   1438   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
   1439     0xfc000000, 0xfe100000, "stc2%22'l%c\t%8-11d, cr%12-15d, %A"},
   1440   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
   1441     0xfe000000, 0xff000010,
   1442     "cdp2%c\t%8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}"},
   1443   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
   1444     0xfe000010, 0xff100010,
   1445     "mcr2%c\t%8-11d, %21-23d, %12-15R, cr%16-19d, cr%0-3d, {%5-7d}"},
   1446   {ANY, ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
   1447     0xfe100010, 0xff100010,
   1448     "mrc2%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
   1449 
   1450   {ANY, ARM_FEATURE_CORE_LOW (0), 0, 0, 0}
   1451 };
   1452 
   1453 /* Neon opcode table:  This does not encode the top byte -- that is
   1454    checked by the print_insn_neon routine, as it depends on whether we are
   1455    doing thumb32 or arm32 disassembly.  */
   1456 
   1457 /* print_insn_neon recognizes the following format control codes:
   1458 
   1459    %%			%
   1460 
   1461    %c			print condition code
   1462    %u			print condition code (unconditional in ARM mode,
   1463                           UNPREDICTABLE if not AL in Thumb)
   1464    %A			print v{st,ld}[1234] operands
   1465    %B			print v{st,ld}[1234] any one operands
   1466    %C			print v{st,ld}[1234] single->all operands
   1467    %D			print scalar
   1468    %E			print vmov, vmvn, vorr, vbic encoded constant
   1469    %F			print vtbl,vtbx register list
   1470 
   1471    %<bitfield>r		print as an ARM register
   1472    %<bitfield>d		print the bitfield in decimal
   1473    %<bitfield>e         print the 2^N - bitfield in decimal
   1474    %<bitfield>D		print as a NEON D register
   1475    %<bitfield>Q		print as a NEON Q register
   1476    %<bitfield>R		print as a NEON D or Q register
   1477    %<bitfield>Sn	print byte scaled width limited by n
   1478    %<bitfield>Tn	print short scaled width limited by n
   1479    %<bitfield>Un	print long scaled width limited by n
   1480 
   1481    %<bitfield>'c	print specified char iff bitfield is all ones
   1482    %<bitfield>`c	print specified char iff bitfield is all zeroes
   1483    %<bitfield>?ab...    select from array of values in big endian order.  */
   1484 
   1485 static const struct opcode32 neon_opcodes[] =
   1486 {
   1487   /* Extract.  */
   1488   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1489     0xf2b00840, 0xffb00850,
   1490     "vext%c.8\t%12-15,22R, %16-19,7R, %0-3,5R, #%8-11d"},
   1491   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1492     0xf2b00000, 0xffb00810,
   1493     "vext%c.8\t%12-15,22R, %16-19,7R, %0-3,5R, #%8-11d"},
   1494 
   1495   /* Data transfer between ARM and NEON registers.  */
   1496   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1497     0x0e800b10, 0x0ff00f70, "vdup%c.32\t%16-19,7D, %12-15r"},
   1498   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1499     0x0e800b30, 0x0ff00f70, "vdup%c.16\t%16-19,7D, %12-15r"},
   1500   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1501     0x0ea00b10, 0x0ff00f70, "vdup%c.32\t%16-19,7Q, %12-15r"},
   1502   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1503     0x0ea00b30, 0x0ff00f70, "vdup%c.16\t%16-19,7Q, %12-15r"},
   1504   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1505     0x0ec00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7D, %12-15r"},
   1506   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1507     0x0ee00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7Q, %12-15r"},
   1508 
   1509   /* Move data element to all lanes.  */
   1510   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1511     0xf3b40c00, 0xffb70f90, "vdup%c.32\t%12-15,22R, %0-3,5D[%19d]"},
   1512   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1513     0xf3b20c00, 0xffb30f90, "vdup%c.16\t%12-15,22R, %0-3,5D[%18-19d]"},
   1514   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1515     0xf3b10c00, 0xffb10f90, "vdup%c.8\t%12-15,22R, %0-3,5D[%17-19d]"},
   1516 
   1517   /* Table lookup.  */
   1518   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1519     0xf3b00800, 0xffb00c50, "vtbl%c.8\t%12-15,22D, %F, %0-3,5D"},
   1520   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1521     0xf3b00840, 0xffb00c50, "vtbx%c.8\t%12-15,22D, %F, %0-3,5D"},
   1522 
   1523   /* Half-precision conversions.  */
   1524   {ARM_FEATURE_COPROC (FPU_VFP_EXT_FP16),
   1525     0xf3b60600, 0xffbf0fd0, "vcvt%c.f16.f32\t%12-15,22D, %0-3,5Q"},
   1526   {ARM_FEATURE_COPROC (FPU_VFP_EXT_FP16),
   1527     0xf3b60700, 0xffbf0fd0, "vcvt%c.f32.f16\t%12-15,22Q, %0-3,5D"},
   1528 
   1529   /* NEON fused multiply add instructions.  */
   1530   {ARM_FEATURE_COPROC (FPU_NEON_EXT_FMA),
   1531     0xf2000c10, 0xffb00f10, "vfma%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1532   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1533     0xf2100c10, 0xffb00f10, "vfma%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1534   {ARM_FEATURE_COPROC (FPU_NEON_EXT_FMA),
   1535     0xf2200c10, 0xffb00f10, "vfms%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1536   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1537     0xf2300c10, 0xffb00f10, "vfms%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1538 
   1539   /* BFloat16 instructions.  */
   1540   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_BF16),
   1541     0xfc000d00, 0xffb00f10, "vdot.bf16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1542   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_BF16),
   1543     0xfe000d00, 0xffb00f10, "vdot.bf16\t%12-15,22R, %16-19,7R, d%0-3d[%5d]"},
   1544   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_BF16),
   1545     0xfc000c40, 0xffb00f50, "vmmla.bf16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1546   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_BF16),
   1547     0xf3b60640, 0xffbf0fd0, "vcvt%c.bf16.f32\t%12-15,22D, %0-3,5Q"},
   1548   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_BF16),
   1549     0xfc300810, 0xffb00f10, "vfma%6?tb.bf16\t%12-15,22Q, %16-19,7Q, %0-3,5Q"},
   1550   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_BF16),
   1551     0xfe300810, 0xffb00f10, "vfma%6?tb.bf16\t%12-15,22Q, %16-19,7Q, %0-2D[%3,5d]"},
   1552 
   1553   /* Matrix Multiply instructions.  */
   1554   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_I8MM),
   1555     0xfc200c40, 0xffb00f50, "vsmmla.s8\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1556   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_I8MM),
   1557     0xfc200c50, 0xffb00f50, "vummla.u8\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1558   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_I8MM),
   1559     0xfca00c40, 0xffb00f50, "vusmmla.s8\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1560   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_I8MM),
   1561     0xfca00d00, 0xffb00f10, "vusdot.s8\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1562   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_I8MM),
   1563     0xfe800d00, 0xffb00f10, "vusdot.s8\t%12-15,22R, %16-19,7R, d%0-3d[%5d]"},
   1564   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_I8MM),
   1565     0xfe800d10, 0xffb00f10, "vsudot.u8\t%12-15,22R, %16-19,7R, d%0-3d[%5d]"},
   1566 
   1567   /* Two registers, miscellaneous.  */
   1568   {ARM_FEATURE_COPROC (FPU_NEON_EXT_ARMV8),
   1569     0xf3ba0400, 0xffbf0c10, "vrint%7-9?p?m?zaxn%u.f32\t%12-15,22R, %0-3,5R"},
   1570   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1571     0xf3b60400, 0xffbf0c10, "vrint%7-9?p?m?zaxn%u.f16\t%12-15,22R, %0-3,5R"},
   1572   {ARM_FEATURE_COPROC (FPU_NEON_EXT_ARMV8),
   1573     0xf3bb0000, 0xffbf0c10, "vcvt%8-9?mpna%u.%7?us32.f32\t%12-15,22R, %0-3,5R"},
   1574   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1575     0xf3b70000, 0xffbf0c10, "vcvt%8-9?mpna%u.%7?us16.f16\t%12-15,22R, %0-3,5R"},
   1576   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1577     0xf3b00300, 0xffbf0fd0, "aese%u.8\t%12-15,22Q, %0-3,5Q"},
   1578   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1579     0xf3b00340, 0xffbf0fd0, "aesd%u.8\t%12-15,22Q, %0-3,5Q"},
   1580   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1581     0xf3b00380, 0xffbf0fd0, "aesmc%u.8\t%12-15,22Q, %0-3,5Q"},
   1582   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1583     0xf3b003c0, 0xffbf0fd0, "aesimc%u.8\t%12-15,22Q, %0-3,5Q"},
   1584   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1585     0xf3b902c0, 0xffbf0fd0, "sha1h%u.32\t%12-15,22Q, %0-3,5Q"},
   1586   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1587     0xf3ba0380, 0xffbf0fd0, "sha1su1%u.32\t%12-15,22Q, %0-3,5Q"},
   1588   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1589     0xf3ba03c0, 0xffbf0fd0, "sha256su0%u.32\t%12-15,22Q, %0-3,5Q"},
   1590   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1591     0xf2880a10, 0xfebf0fd0, "vmovl%c.%24?us8\t%12-15,22Q, %0-3,5D"},
   1592   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1593     0xf2900a10, 0xfebf0fd0, "vmovl%c.%24?us16\t%12-15,22Q, %0-3,5D"},
   1594   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1595     0xf2a00a10, 0xfebf0fd0, "vmovl%c.%24?us32\t%12-15,22Q, %0-3,5D"},
   1596   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1597     0xf3b00500, 0xffbf0f90, "vcnt%c.8\t%12-15,22R, %0-3,5R"},
   1598   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1599     0xf3b00580, 0xffbf0f90, "vmvn%c\t%12-15,22R, %0-3,5R"},
   1600   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1601     0xf3b20000, 0xffbf0f90, "vswp%c\t%12-15,22R, %0-3,5R"},
   1602   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1603     0xf3b20200, 0xffb30fd0, "vmovn%c.i%18-19T2\t%12-15,22D, %0-3,5Q"},
   1604   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1605     0xf3b20240, 0xffb30fd0, "vqmovun%c.s%18-19T2\t%12-15,22D, %0-3,5Q"},
   1606   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1607     0xf3b20280, 0xffb30fd0, "vqmovn%c.s%18-19T2\t%12-15,22D, %0-3,5Q"},
   1608   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1609     0xf3b202c0, 0xffb30fd0, "vqmovn%c.u%18-19T2\t%12-15,22D, %0-3,5Q"},
   1610   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1611     0xf3b20300, 0xffb30fd0,
   1612     "vshll%c.i%18-19S2\t%12-15,22Q, %0-3,5D, #%18-19S2"},
   1613   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1614     0xf3bb0400, 0xffbf0e90, "vrecpe%c.%8?fu%18-19S2\t%12-15,22R, %0-3,5R"},
   1615   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1616     0xf3b70400, 0xffbf0e90, "vrecpe%c.%8?fu16\t%12-15,22R, %0-3,5R"},
   1617   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1618     0xf3bb0480, 0xffbf0e90, "vrsqrte%c.%8?fu%18-19S2\t%12-15,22R, %0-3,5R"},
   1619   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1620     0xf3b70480, 0xffbf0e90, "vrsqrte%c.%8?fu16\t%12-15,22R, %0-3,5R"},
   1621   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1622     0xf3b00000, 0xffb30f90, "vrev64%c.%18-19S2\t%12-15,22R, %0-3,5R"},
   1623   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1624     0xf3b00080, 0xffb30f90, "vrev32%c.%18-19S2\t%12-15,22R, %0-3,5R"},
   1625   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1626     0xf3b00100, 0xffb30f90, "vrev16%c.%18-19S2\t%12-15,22R, %0-3,5R"},
   1627   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1628     0xf3b00400, 0xffb30f90, "vcls%c.s%18-19S2\t%12-15,22R, %0-3,5R"},
   1629   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1630     0xf3b00480, 0xffb30f90, "vclz%c.i%18-19S2\t%12-15,22R, %0-3,5R"},
   1631   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1632     0xf3b00700, 0xffb30f90, "vqabs%c.s%18-19S2\t%12-15,22R, %0-3,5R"},
   1633   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1634     0xf3b00780, 0xffb30f90, "vqneg%c.s%18-19S2\t%12-15,22R, %0-3,5R"},
   1635   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1636     0xf3b20080, 0xffb30f90, "vtrn%c.%18-19S2\t%12-15,22R, %0-3,5R"},
   1637   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1638     0xf3b20100, 0xffb30f90, "vuzp%c.%18-19S2\t%12-15,22R, %0-3,5R"},
   1639   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1640     0xf3b20180, 0xffb30f90, "vzip%c.%18-19S2\t%12-15,22R, %0-3,5R"},
   1641   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1642     0xf3b10000, 0xffb30b90, "vcgt%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
   1643   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1644     0xf3b10080, 0xffb30b90, "vcge%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
   1645   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1646     0xf3b10100, 0xffb30b90, "vceq%c.%10?fi%18-19S2\t%12-15,22R, %0-3,5R, #0"},
   1647   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1648     0xf3b10180, 0xffb30b90, "vcle%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
   1649   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1650     0xf3b10200, 0xffb30b90, "vclt%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
   1651   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1652     0xf3b10300, 0xffb30b90, "vabs%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R"},
   1653   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1654     0xf3b10380, 0xffb30b90, "vneg%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R"},
   1655   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1656     0xf3b00200, 0xffb30f10, "vpaddl%c.%7?us%18-19S2\t%12-15,22R, %0-3,5R"},
   1657   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1658     0xf3b00600, 0xffb30f10, "vpadal%c.%7?us%18-19S2\t%12-15,22R, %0-3,5R"},
   1659   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1660     0xf3bb0600, 0xffbf0e10,
   1661     "vcvt%c.%7-8?usff%18-19Sa.%7-8?ffus%18-19Sa\t%12-15,22R, %0-3,5R"},
   1662   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1663     0xf3b70600, 0xffbf0e10,
   1664     "vcvt%c.%7-8?usff16.%7-8?ffus16\t%12-15,22R, %0-3,5R"},
   1665 
   1666   /* Three registers of the same length.  */
   1667   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1668     0xf2000c40, 0xffb00f50, "sha1c%u.32\t%12-15,22Q, %16-19,7Q, %0-3,5Q"},
   1669   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1670     0xf2100c40, 0xffb00f50, "sha1p%u.32\t%12-15,22Q, %16-19,7Q, %0-3,5Q"},
   1671   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1672     0xf2200c40, 0xffb00f50, "sha1m%u.32\t%12-15,22Q, %16-19,7Q, %0-3,5Q"},
   1673   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1674     0xf2300c40, 0xffb00f50, "sha1su0%u.32\t%12-15,22Q, %16-19,7Q, %0-3,5Q"},
   1675   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1676     0xf3000c40, 0xffb00f50, "sha256h%u.32\t%12-15,22Q, %16-19,7Q, %0-3,5Q"},
   1677   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1678     0xf3100c40, 0xffb00f50, "sha256h2%u.32\t%12-15,22Q, %16-19,7Q, %0-3,5Q"},
   1679   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   1680     0xf3200c40, 0xffb00f50, "sha256su1%u.32\t%12-15,22Q, %16-19,7Q, %0-3,5Q"},
   1681   {ARM_FEATURE_COPROC (FPU_NEON_EXT_ARMV8),
   1682     0xf3000f10, 0xffb00f10, "vmaxnm%u.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1683   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1684     0xf3100f10, 0xffb00f10, "vmaxnm%u.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1685   {ARM_FEATURE_COPROC (FPU_NEON_EXT_ARMV8),
   1686     0xf3200f10, 0xffb00f10, "vminnm%u.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1687   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1688     0xf3300f10, 0xffb00f10, "vminnm%u.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1689   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1690     0xf2000110, 0xffb00f10, "vand%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1691   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1692     0xf2100110, 0xffb00f10, "vbic%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1693   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1694     0xf2200110, 0xffb00f10, "vorr%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1695   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1696     0xf2300110, 0xffb00f10, "vorn%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1697   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1698     0xf3000110, 0xffb00f10, "veor%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1699   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1700     0xf3100110, 0xffb00f10, "vbsl%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1701   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1702     0xf3200110, 0xffb00f10, "vbit%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1703   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1704     0xf3300110, 0xffb00f10, "vbif%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1705   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1706     0xf2000d00, 0xffb00f10, "vadd%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1707   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1708     0xf2100d00, 0xffb00f10, "vadd%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1709   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1710     0xf2000d10, 0xffb00f10, "vmla%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1711   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1712     0xf2100d10, 0xffb00f10, "vmla%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1713   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1714     0xf2000e00, 0xffb00f10, "vceq%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1715   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1716     0xf2100e00, 0xffb00f10, "vceq%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1717   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1718     0xf2000f00, 0xffb00f10, "vmax%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1719   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1720     0xf2100f00, 0xffb00f10, "vmax%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1721   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1722     0xf2000f10, 0xffb00f10, "vrecps%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1723   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1724     0xf2100f10, 0xffb00f10, "vrecps%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1725   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1726     0xf2200d00, 0xffb00f10, "vsub%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1727   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1728     0xf2300d00, 0xffb00f10, "vsub%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1729   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1730     0xf2200d10, 0xffb00f10, "vmls%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1731   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1732     0xf2300d10, 0xffb00f10, "vmls%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1733   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1734     0xf2200f00, 0xffb00f10, "vmin%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1735   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1736     0xf2300f00, 0xffb00f10, "vmin%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1737   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1738     0xf2200f10, 0xffb00f10, "vrsqrts%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1739   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1740     0xf2300f10, 0xffb00f10, "vrsqrts%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1741   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1742     0xf3000d00, 0xffb00f10, "vpadd%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1743   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1744     0xf3100d00, 0xffb00f10, "vpadd%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1745   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1746     0xf3000d10, 0xffb00f10, "vmul%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1747   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1748     0xf3100d10, 0xffb00f10, "vmul%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1749   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1750     0xf3000e00, 0xffb00f10, "vcge%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1751   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1752     0xf3100e00, 0xffb00f10, "vcge%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1753   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1754     0xf3000e10, 0xffb00f10, "vacge%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1755   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1756     0xf3100e10, 0xffb00f10, "vacge%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1757   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1758     0xf3000f00, 0xffb00f10, "vpmax%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1759   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1760     0xf3100f00, 0xffb00f10, "vpmax%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1761   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1762     0xf3200d00, 0xffb00f10, "vabd%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1763   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1764     0xf3300d00, 0xffb00f10, "vabd%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1765   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1766     0xf3200e00, 0xffb00f10, "vcgt%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1767   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1768     0xf3300e00, 0xffb00f10, "vcgt%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1769   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1770     0xf3200e10, 0xffb00f10, "vacgt%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1771   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1772     0xf3300e10, 0xffb00f10, "vacgt%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1773   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1774     0xf3200f00, 0xffb00f10, "vpmin%c.f32\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1775   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   1776     0xf3300f00, 0xffb00f10, "vpmin%c.f16\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1777   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1778     0xf2000800, 0xff800f10, "vadd%c.i%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1779   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1780     0xf2000810, 0xff800f10, "vtst%c.%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1781   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1782     0xf2000900, 0xff800f10, "vmla%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1783   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1784     0xf2000b00, 0xff800f10,
   1785     "vqdmulh%c.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1786   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1787     0xf2000b10, 0xff800f10,
   1788     "vpadd%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1789   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1790     0xf3000800, 0xff800f10, "vsub%c.i%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1791   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1792     0xf3000810, 0xff800f10, "vceq%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1793   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1794     0xf3000900, 0xff800f10, "vmls%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1795   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1796     0xf3000b00, 0xff800f10,
   1797     "vqrdmulh%c.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1798   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1799     0xf2000000, 0xfe800f10,
   1800     "vhadd%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1801   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1802     0xf2000010, 0xfe800f10,
   1803     "vqadd%c.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1804   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1805     0xf2000100, 0xfe800f10,
   1806     "vrhadd%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1807   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1808     0xf2000200, 0xfe800f10,
   1809     "vhsub%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1810   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1811     0xf2000210, 0xfe800f10,
   1812     "vqsub%c.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1813   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1814     0xf2000300, 0xfe800f10,
   1815     "vcgt%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1816   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1817     0xf2000310, 0xfe800f10,
   1818     "vcge%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1819   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1820     0xf2000400, 0xfe800f10,
   1821     "vshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
   1822   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1823     0xf2000410, 0xfe800f10,
   1824     "vqshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
   1825   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1826     0xf2000500, 0xfe800f10,
   1827     "vrshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
   1828   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1829     0xf2000510, 0xfe800f10,
   1830     "vqrshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
   1831   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1832     0xf2000600, 0xfe800f10,
   1833     "vmax%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1834   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1835     0xf2000610, 0xfe800f10,
   1836     "vmin%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1837   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1838     0xf2000700, 0xfe800f10,
   1839     "vabd%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1840   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1841     0xf2000710, 0xfe800f10,
   1842     "vaba%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1843   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1844     0xf2000910, 0xfe800f10,
   1845     "vmul%c.%24?pi%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1846   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1847     0xf2000a00, 0xfe800f10,
   1848     "vpmax%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1849   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1850     0xf2000a10, 0xfe800f10,
   1851     "vpmin%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1852   {ARM_FEATURE_COPROC (FPU_NEON_EXT_RDMA),
   1853     0xf3000b10, 0xff800f10,
   1854     "vqrdmlah%c.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1855   {ARM_FEATURE_COPROC (FPU_NEON_EXT_RDMA),
   1856     0xf3000c10, 0xff800f10,
   1857     "vqrdmlsh%c.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
   1858 
   1859   /* One register and an immediate value.  */
   1860   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1861     0xf2800e10, 0xfeb80fb0, "vmov%c.i8\t%12-15,22R, %E"},
   1862   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1863     0xf2800e30, 0xfeb80fb0, "vmov%c.i64\t%12-15,22R, %E"},
   1864   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1865     0xf2800f10, 0xfeb80fb0, "vmov%c.f32\t%12-15,22R, %E"},
   1866   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1867     0xf2800810, 0xfeb80db0, "vmov%c.i16\t%12-15,22R, %E"},
   1868   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1869     0xf2800830, 0xfeb80db0, "vmvn%c.i16\t%12-15,22R, %E"},
   1870   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1871     0xf2800910, 0xfeb80db0, "vorr%c.i16\t%12-15,22R, %E"},
   1872   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1873     0xf2800930, 0xfeb80db0, "vbic%c.i16\t%12-15,22R, %E"},
   1874   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1875     0xf2800c10, 0xfeb80eb0, "vmov%c.i32\t%12-15,22R, %E"},
   1876   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1877     0xf2800c30, 0xfeb80eb0, "vmvn%c.i32\t%12-15,22R, %E"},
   1878   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1879     0xf2800110, 0xfeb809b0, "vorr%c.i32\t%12-15,22R, %E"},
   1880   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1881     0xf2800130, 0xfeb809b0, "vbic%c.i32\t%12-15,22R, %E"},
   1882   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1883     0xf2800010, 0xfeb808b0, "vmov%c.i32\t%12-15,22R, %E"},
   1884   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1885     0xf2800030, 0xfeb808b0, "vmvn%c.i32\t%12-15,22R, %E"},
   1886 
   1887   /* Two registers and a shift amount.  */
   1888   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1889     0xf2880810, 0xffb80fd0, "vshrn%c.i16\t%12-15,22D, %0-3,5Q, #%16-18e"},
   1890   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1891     0xf2880850, 0xffb80fd0, "vrshrn%c.i16\t%12-15,22D, %0-3,5Q, #%16-18e"},
   1892   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1893     0xf2880810, 0xfeb80fd0, "vqshrun%c.s16\t%12-15,22D, %0-3,5Q, #%16-18e"},
   1894   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1895     0xf2880850, 0xfeb80fd0, "vqrshrun%c.s16\t%12-15,22D, %0-3,5Q, #%16-18e"},
   1896   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1897     0xf2880910, 0xfeb80fd0, "vqshrn%c.%24?us16\t%12-15,22D, %0-3,5Q, #%16-18e"},
   1898   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1899     0xf2880950, 0xfeb80fd0,
   1900     "vqrshrn%c.%24?us16\t%12-15,22D, %0-3,5Q, #%16-18e"},
   1901   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1902     0xf2880a10, 0xfeb80fd0, "vshll%c.%24?us8\t%12-15,22Q, %0-3,5D, #%16-18d"},
   1903   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1904     0xf2900810, 0xffb00fd0, "vshrn%c.i32\t%12-15,22D, %0-3,5Q, #%16-19e"},
   1905   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1906     0xf2900850, 0xffb00fd0, "vrshrn%c.i32\t%12-15,22D, %0-3,5Q, #%16-19e"},
   1907   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1908     0xf2880510, 0xffb80f90, "vshl%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18d"},
   1909   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1910     0xf3880410, 0xffb80f90, "vsri%c.8\t%12-15,22R, %0-3,5R, #%16-18e"},
   1911   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1912     0xf3880510, 0xffb80f90, "vsli%c.8\t%12-15,22R, %0-3,5R, #%16-18d"},
   1913   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1914     0xf3880610, 0xffb80f90, "vqshlu%c.s8\t%12-15,22R, %0-3,5R, #%16-18d"},
   1915   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1916     0xf2900810, 0xfeb00fd0, "vqshrun%c.s32\t%12-15,22D, %0-3,5Q, #%16-19e"},
   1917   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1918     0xf2900850, 0xfeb00fd0, "vqrshrun%c.s32\t%12-15,22D, %0-3,5Q, #%16-19e"},
   1919   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1920     0xf2900910, 0xfeb00fd0, "vqshrn%c.%24?us32\t%12-15,22D, %0-3,5Q, #%16-19e"},
   1921   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1922     0xf2900950, 0xfeb00fd0,
   1923     "vqrshrn%c.%24?us32\t%12-15,22D, %0-3,5Q, #%16-19e"},
   1924   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1925     0xf2900a10, 0xfeb00fd0, "vshll%c.%24?us16\t%12-15,22Q, %0-3,5D, #%16-19d"},
   1926   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1927     0xf2880010, 0xfeb80f90, "vshr%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
   1928   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1929     0xf2880110, 0xfeb80f90, "vsra%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
   1930   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1931     0xf2880210, 0xfeb80f90, "vrshr%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
   1932   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1933     0xf2880310, 0xfeb80f90, "vrsra%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
   1934   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1935     0xf2880710, 0xfeb80f90, "vqshl%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18d"},
   1936   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1937     0xf2a00810, 0xffa00fd0, "vshrn%c.i64\t%12-15,22D, %0-3,5Q, #%16-20e"},
   1938   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1939     0xf2a00850, 0xffa00fd0, "vrshrn%c.i64\t%12-15,22D, %0-3,5Q, #%16-20e"},
   1940   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1941     0xf2900510, 0xffb00f90, "vshl%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19d"},
   1942   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1943     0xf3900410, 0xffb00f90, "vsri%c.16\t%12-15,22R, %0-3,5R, #%16-19e"},
   1944   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1945     0xf3900510, 0xffb00f90, "vsli%c.16\t%12-15,22R, %0-3,5R, #%16-19d"},
   1946   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1947     0xf3900610, 0xffb00f90, "vqshlu%c.s16\t%12-15,22R, %0-3,5R, #%16-19d"},
   1948   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1949     0xf2a00a10, 0xfea00fd0, "vshll%c.%24?us32\t%12-15,22Q, %0-3,5D, #%16-20d"},
   1950   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1951     0xf2900010, 0xfeb00f90, "vshr%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
   1952   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1953     0xf2900110, 0xfeb00f90, "vsra%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
   1954   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1955     0xf2900210, 0xfeb00f90, "vrshr%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
   1956   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1957     0xf2900310, 0xfeb00f90, "vrsra%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
   1958   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1959     0xf2900710, 0xfeb00f90, "vqshl%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19d"},
   1960   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1961     0xf2a00810, 0xfea00fd0, "vqshrun%c.s64\t%12-15,22D, %0-3,5Q, #%16-20e"},
   1962   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1963     0xf2a00850, 0xfea00fd0, "vqrshrun%c.s64\t%12-15,22D, %0-3,5Q, #%16-20e"},
   1964   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1965     0xf2a00910, 0xfea00fd0, "vqshrn%c.%24?us64\t%12-15,22D, %0-3,5Q, #%16-20e"},
   1966   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1967     0xf2a00950, 0xfea00fd0,
   1968     "vqrshrn%c.%24?us64\t%12-15,22D, %0-3,5Q, #%16-20e"},
   1969   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1970     0xf2a00510, 0xffa00f90, "vshl%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20d"},
   1971   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1972     0xf3a00410, 0xffa00f90, "vsri%c.32\t%12-15,22R, %0-3,5R, #%16-20e"},
   1973   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1974     0xf3a00510, 0xffa00f90, "vsli%c.32\t%12-15,22R, %0-3,5R, #%16-20d"},
   1975   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1976     0xf3a00610, 0xffa00f90, "vqshlu%c.s32\t%12-15,22R, %0-3,5R, #%16-20d"},
   1977   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1978     0xf2a00010, 0xfea00f90, "vshr%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
   1979   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1980     0xf2a00110, 0xfea00f90, "vsra%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
   1981   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1982     0xf2a00210, 0xfea00f90, "vrshr%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
   1983   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1984     0xf2a00310, 0xfea00f90, "vrsra%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
   1985   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1986     0xf2a00710, 0xfea00f90, "vqshl%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20d"},
   1987   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1988     0xf2800590, 0xff800f90, "vshl%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21d"},
   1989   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1990     0xf3800490, 0xff800f90, "vsri%c.64\t%12-15,22R, %0-3,5R, #%16-21e"},
   1991   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1992     0xf3800590, 0xff800f90, "vsli%c.64\t%12-15,22R, %0-3,5R, #%16-21d"},
   1993   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1994     0xf3800690, 0xff800f90, "vqshlu%c.s64\t%12-15,22R, %0-3,5R, #%16-21d"},
   1995   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1996     0xf2800090, 0xfe800f90, "vshr%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
   1997   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   1998     0xf2800190, 0xfe800f90, "vsra%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
   1999   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2000     0xf2800290, 0xfe800f90, "vrshr%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
   2001   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2002     0xf2800390, 0xfe800f90, "vrsra%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
   2003   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2004     0xf2800790, 0xfe800f90, "vqshl%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21d"},
   2005   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2006     0xf2a00e10, 0xfea00e90,
   2007     "vcvt%c.%24,8?usff32.%24,8?ffus32\t%12-15,22R, %0-3,5R, #%16-20e"},
   2008   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST),
   2009     0xf2a00c10, 0xfea00e90,
   2010     "vcvt%c.%24,8?usff16.%24,8?ffus16\t%12-15,22R, %0-3,5R, #%16-20e"},
   2011 
   2012   /* Three registers of different lengths.  */
   2013   {ARM_FEATURE_COPROC (FPU_CRYPTO_EXT_ARMV8),
   2014     0xf2a00e00, 0xfeb00f50, "vmull%c.p64\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2015   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2016     0xf2800e00, 0xfea00f50, "vmull%c.p%20S0\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2017   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2018     0xf2800400, 0xff800f50,
   2019     "vaddhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
   2020   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2021     0xf2800600, 0xff800f50,
   2022     "vsubhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
   2023   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2024     0xf2800900, 0xff800f50,
   2025     "vqdmlal%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2026   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2027     0xf2800b00, 0xff800f50,
   2028     "vqdmlsl%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2029   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2030     0xf2800d00, 0xff800f50,
   2031     "vqdmull%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2032   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2033     0xf3800400, 0xff800f50,
   2034     "vraddhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
   2035   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2036     0xf3800600, 0xff800f50,
   2037     "vrsubhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
   2038   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2039     0xf2800000, 0xfe800f50,
   2040     "vaddl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2041   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2042     0xf2800100, 0xfe800f50,
   2043     "vaddw%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7Q, %0-3,5D"},
   2044   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2045     0xf2800200, 0xfe800f50,
   2046     "vsubl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2047   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2048     0xf2800300, 0xfe800f50,
   2049     "vsubw%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7Q, %0-3,5D"},
   2050   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2051     0xf2800500, 0xfe800f50,
   2052     "vabal%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2053   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2054     0xf2800700, 0xfe800f50,
   2055     "vabdl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2056   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2057     0xf2800800, 0xfe800f50,
   2058     "vmlal%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2059   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2060     0xf2800a00, 0xfe800f50,
   2061     "vmlsl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2062   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2063     0xf2800c00, 0xfe800f50,
   2064     "vmull%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
   2065 
   2066   /* Two registers and a scalar.  */
   2067   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2068     0xf2800040, 0xff800f50, "vmla%c.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
   2069   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2070     0xf2800140, 0xff900f50, "vmla%c.f%20-21Sa\t%12-15,22D, %16-19,7D, %D"},
   2071   {ARM_FEATURE_COPROC (ARM_EXT2_FP16_INST),
   2072     0xf2900140, 0xffb00f50, "vmla%c.f16\t%12-15,22D, %16-19,7D, %D"},
   2073   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2074     0xf2800340, 0xff800f50, "vqdmlal%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
   2075   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2076     0xf2800440, 0xff800f50, "vmls%c.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
   2077   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2078     0xf2800540, 0xff900f50, "vmls%c.f%20-21S6\t%12-15,22D, %16-19,7D, %D"},
   2079   {ARM_FEATURE_COPROC (ARM_EXT2_FP16_INST),
   2080     0xf2900540, 0xffb00f50, "vmls%c.f16\t%12-15,22D, %16-19,7D, %D"},
   2081   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2082     0xf2800740, 0xff800f50, "vqdmlsl%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
   2083   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2084     0xf2800840, 0xff800f50, "vmul%c.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
   2085   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2086     0xf2800940, 0xff900f50, "vmul%c.f%20-21Sa\t%12-15,22D, %16-19,7D, %D"},
   2087   {ARM_FEATURE_COPROC (ARM_EXT2_FP16_INST),
   2088     0xf2900940, 0xffb00f50, "vmul%c.f16\t%12-15,22D, %16-19,7D, %D"},
   2089   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2090     0xf2800b40, 0xff800f50, "vqdmull%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
   2091   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2092     0xf2800c40, 0xff800f50, "vqdmulh%c.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
   2093   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2094     0xf2800d40, 0xff800f50, "vqrdmulh%c.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
   2095   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2096     0xf3800040, 0xff800f50, "vmla%c.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
   2097   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2098     0xf3800140, 0xff900f50, "vmla%c.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
   2099   {ARM_FEATURE_COPROC (ARM_EXT2_FP16_INST),
   2100     0xf3900140, 0xffb00f50, "vmla%c.f16\t%12-15,22Q, %16-19,7Q, %D"},
   2101   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2102     0xf3800440, 0xff800f50, "vmls%c.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
   2103   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2104     0xf3800540, 0xff900f50, "vmls%c.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
   2105   {ARM_FEATURE_COPROC (ARM_EXT2_FP16_INST),
   2106     0xf3900540, 0xffb00f50, "vmls%c.f16\t%12-15,22Q, %16-19,7Q, %D"},
   2107   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2108     0xf3800840, 0xff800f50, "vmul%c.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
   2109   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2110     0xf3800940, 0xff900f50, "vmul%c.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
   2111   {ARM_FEATURE_COPROC (ARM_EXT2_FP16_INST),
   2112     0xf3900940, 0xffb00f50, "vmul%c.f16\t%12-15,22Q, %16-19,7Q, %D"},
   2113   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2114     0xf3800c40, 0xff800f50, "vqdmulh%c.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
   2115   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2116     0xf3800d40, 0xff800f50, "vqrdmulh%c.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
   2117   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2118     0xf2800240, 0xfe800f50,
   2119     "vmlal%c.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
   2120   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2121     0xf2800640, 0xfe800f50,
   2122     "vmlsl%c.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
   2123   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2124     0xf2800a40, 0xfe800f50,
   2125     "vmull%c.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
   2126   {ARM_FEATURE_COPROC (FPU_NEON_EXT_RDMA),
   2127     0xf2800e40, 0xff800f50,
   2128    "vqrdmlah%c.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
   2129   {ARM_FEATURE_COPROC (FPU_NEON_EXT_RDMA),
   2130     0xf2800f40, 0xff800f50,
   2131    "vqrdmlsh%c.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
   2132   {ARM_FEATURE_COPROC (FPU_NEON_EXT_RDMA),
   2133     0xf3800e40, 0xff800f50,
   2134    "vqrdmlah%c.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
   2135   {ARM_FEATURE_COPROC (FPU_NEON_EXT_RDMA),
   2136     0xf3800f40, 0xff800f50,
   2137    "vqrdmlsh%c.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"
   2138   },
   2139 
   2140   /* Element and structure load/store.  */
   2141   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2142     0xf4a00fc0, 0xffb00fc0, "vld4%c.32\t%C"},
   2143   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2144     0xf4a00c00, 0xffb00f00, "vld1%c.%6-7S2\t%C"},
   2145   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2146     0xf4a00d00, 0xffb00f00, "vld2%c.%6-7S2\t%C"},
   2147   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2148     0xf4a00e00, 0xffb00f00, "vld3%c.%6-7S2\t%C"},
   2149   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2150     0xf4a00f00, 0xffb00f00, "vld4%c.%6-7S2\t%C"},
   2151   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2152     0xf4000200, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
   2153   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2154     0xf4000300, 0xff900f00, "v%21?ls%21?dt2%c.%6-7S2\t%A"},
   2155   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2156     0xf4000400, 0xff900f00, "v%21?ls%21?dt3%c.%6-7S2\t%A"},
   2157   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2158     0xf4000500, 0xff900f00, "v%21?ls%21?dt3%c.%6-7S2\t%A"},
   2159   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2160     0xf4000600, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
   2161   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2162     0xf4000700, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
   2163   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2164     0xf4000800, 0xff900f00, "v%21?ls%21?dt2%c.%6-7S2\t%A"},
   2165   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2166     0xf4000900, 0xff900f00, "v%21?ls%21?dt2%c.%6-7S2\t%A"},
   2167   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2168     0xf4000a00, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
   2169   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2170     0xf4000000, 0xff900e00, "v%21?ls%21?dt4%c.%6-7S2\t%A"},
   2171   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2172     0xf4800000, 0xff900300, "v%21?ls%21?dt1%c.%10-11S2\t%B"},
   2173   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2174     0xf4800100, 0xff900300, "v%21?ls%21?dt2%c.%10-11S2\t%B"},
   2175   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2176     0xf4800200, 0xff900300, "v%21?ls%21?dt3%c.%10-11S2\t%B"},
   2177   {ARM_FEATURE_COPROC (FPU_NEON_EXT_V1),
   2178     0xf4800300, 0xff900300, "v%21?ls%21?dt4%c.%10-11S2\t%B"},
   2179 
   2180   {ARM_FEATURE_CORE_LOW (0), 0 ,0, 0}
   2181 };
   2182 
   2183 /* mve opcode table.  */
   2184 
   2185 /* print_insn_mve recognizes the following format control codes:
   2186 
   2187    %%			%
   2188 
   2189    %a			print '+' or '-' or imm offset in vldr[bhwd] and
   2190 			vstr[bhwd]
   2191    %c			print condition code
   2192    %d			print addr mode of MVE vldr[bhw] and vstr[bhw]
   2193    %u			print 'U' (unsigned) or 'S' for various mve instructions
   2194    %i			print MVE predicate(s) for vpt and vpst
   2195    %j			print a 5-bit immediate from hw2[14:12,7:6]
   2196    %k			print 48 if the 7th position bit is set else print 64.
   2197    %m			print rounding mode for vcvt and vrint
   2198    %n			print vector comparison code for predicated instruction
   2199    %s			print size for various vcvt instructions
   2200    %v			print vector predicate for instruction in predicated
   2201 			block
   2202    %o			print offset scaled for vldr[hwd] and vstr[hwd]
   2203    %w			print writeback mode for MVE v{st,ld}[24]
   2204    %B			print v{st,ld}[24] any one operands
   2205    %E			print vmov, vmvn, vorr, vbic encoded constant
   2206    %N			print generic index for vmov
   2207    %T			print bottom ('b') or top ('t') of source register
   2208    %X			print exchange field in vmla* instructions
   2209 
   2210    %<bitfield>r		print as an ARM register
   2211    %<bitfield>d		print the bitfield in decimal
   2212    %<bitfield>A		print accumulate or not
   2213    %<bitfield>c		print bitfield as a condition code
   2214    %<bitfield>C		print bitfield as an inverted condition code
   2215    %<bitfield>Q		print as a MVE Q register
   2216    %<bitfield>F		print as a MVE S register
   2217    %<bitfield>Z		as %<>r but r15 is ZR instead of PC and r13 is
   2218 			UNPREDICTABLE
   2219 
   2220    %<bitfield>S		as %<>r but r15 or r13 is UNPREDICTABLE
   2221    %<bitfield>s		print size for vector predicate & non VMOV instructions
   2222    %<bitfield>I		print carry flag or not
   2223    %<bitfield>i		print immediate for vstr/vldr reg +/- imm
   2224    %<bitfield>h		print high half of 64-bit destination reg
   2225    %<bitfield>k		print immediate for vector conversion instruction
   2226    %<bitfield>l		print low half of 64-bit destination reg
   2227    %<bitfield>o		print rotate value for vcmul
   2228    %<bitfield>u		print immediate value for vddup/vdwdup
   2229    %<bitfield>x		print the bitfield in hex.
   2230   */
   2231 
   2232 static const struct mopcode32 mve_opcodes[] =
   2233 {
   2234   /* MVE.  */
   2235 
   2236   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2237    MVE_VPST,
   2238    0xfe310f4d, 0xffbf1fff,
   2239    "vpst%i"
   2240   },
   2241 
   2242   /* Floating point VPT T1.  */
   2243   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2244    MVE_VPT_FP_T1,
   2245    0xee310f00, 0xefb10f50,
   2246    "vpt%i.f%28s\t%n, %17-19Q, %1-3,5Q"},
   2247   /* Floating point VPT T2.  */
   2248   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2249    MVE_VPT_FP_T2,
   2250    0xee310f40, 0xefb10f50,
   2251    "vpt%i.f%28s\t%n, %17-19Q, %0-3Z"},
   2252 
   2253   /* Vector VPT T1.  */
   2254   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2255    MVE_VPT_VEC_T1,
   2256    0xfe010f00, 0xff811f51,
   2257    "vpt%i.i%20-21s\t%n, %17-19Q, %1-3,5Q"},
   2258   /* Vector VPT T2.  */
   2259   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2260    MVE_VPT_VEC_T2,
   2261    0xfe010f01, 0xff811f51,
   2262    "vpt%i.u%20-21s\t%n, %17-19Q, %1-3,5Q"},
   2263   /* Vector VPT T3.  */
   2264   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2265    MVE_VPT_VEC_T3,
   2266    0xfe011f00, 0xff811f50,
   2267    "vpt%i.s%20-21s\t%n, %17-19Q, %1-3,5Q"},
   2268   /* Vector VPT T4.  */
   2269   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2270    MVE_VPT_VEC_T4,
   2271    0xfe010f40, 0xff811f70,
   2272    "vpt%i.i%20-21s\t%n, %17-19Q, %0-3Z"},
   2273   /* Vector VPT T5.  */
   2274   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2275    MVE_VPT_VEC_T5,
   2276    0xfe010f60, 0xff811f70,
   2277    "vpt%i.u%20-21s\t%n, %17-19Q, %0-3Z"},
   2278   /* Vector VPT T6.  */
   2279   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2280    MVE_VPT_VEC_T6,
   2281    0xfe011f40, 0xff811f50,
   2282    "vpt%i.s%20-21s\t%n, %17-19Q, %0-3Z"},
   2283 
   2284   /* Vector VBIC immediate.  */
   2285   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2286    MVE_VBIC_IMM,
   2287    0xef800070, 0xefb81070,
   2288    "vbic%v.i%8-11s\t%13-15,22Q, %E"},
   2289 
   2290   /* Vector VBIC register.  */
   2291   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2292    MVE_VBIC_REG,
   2293    0xef100150, 0xffb11f51,
   2294    "vbic%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2295 
   2296   /* Vector VABAV.  */
   2297   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2298    MVE_VABAV,
   2299    0xee800f01, 0xefc10f51,
   2300    "vabav%v.%u%20-21s\t%12-15r, %17-19,7Q, %1-3,5Q"},
   2301 
   2302   /* Vector VABD floating point.  */
   2303   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2304    MVE_VABD_FP,
   2305    0xff200d40, 0xffa11f51,
   2306    "vabd%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2307 
   2308   /* Vector VABD.  */
   2309   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2310    MVE_VABD_VEC,
   2311    0xef000740, 0xef811f51,
   2312    "vabd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2313 
   2314   /* Vector VABS floating point.  */
   2315   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2316    MVE_VABS_FP,
   2317    0xFFB10740, 0xFFB31FD1,
   2318    "vabs%v.f%18-19s\t%13-15,22Q, %1-3,5Q"},
   2319   /* Vector VABS.  */
   2320   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2321    MVE_VABS_VEC,
   2322    0xffb10340, 0xffb31fd1,
   2323    "vabs%v.s%18-19s\t%13-15,22Q, %1-3,5Q"},
   2324 
   2325   /* Vector VADD floating point T1.  */
   2326   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2327    MVE_VADD_FP_T1,
   2328    0xef000d40, 0xffa11f51,
   2329    "vadd%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2330   /* Vector VADD floating point T2.  */
   2331   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2332    MVE_VADD_FP_T2,
   2333    0xee300f40, 0xefb11f70,
   2334    "vadd%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   2335   /* Vector VADD T1.  */
   2336   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2337    MVE_VADD_VEC_T1,
   2338    0xef000840, 0xff811f51,
   2339    "vadd%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2340   /* Vector VADD T2.  */
   2341   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2342    MVE_VADD_VEC_T2,
   2343    0xee010f40, 0xff811f70,
   2344    "vadd%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   2345 
   2346   /* Vector VADDLV.  */
   2347   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2348    MVE_VADDLV,
   2349    0xee890f00, 0xef8f1fd1,
   2350    "vaddlv%5A%v.%u32\t%13-15l, %20-22h, %1-3Q"},
   2351 
   2352   /* Vector VADDV.  */
   2353   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2354    MVE_VADDV,
   2355    0xeef10f00, 0xeff31fd1,
   2356    "vaddv%5A%v.%u%18-19s\t%13-15l, %1-3Q"},
   2357 
   2358   /* Vector VADC.  */
   2359   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2360    MVE_VADC,
   2361    0xee300f00, 0xffb10f51,
   2362    "vadc%12I%v.i32\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2363 
   2364   /* Vector VAND.  */
   2365   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2366    MVE_VAND,
   2367    0xef000150, 0xffb11f51,
   2368    "vand%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2369 
   2370   /* Vector VBRSR register.  */
   2371   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2372    MVE_VBRSR,
   2373    0xfe011e60, 0xff811f70,
   2374    "vbrsr%v.%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   2375 
   2376   /* Vector VCADD floating point.  */
   2377   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2378    MVE_VCADD_FP,
   2379    0xfc800840, 0xfea11f51,
   2380    "vcadd%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%24o"},
   2381 
   2382   /* Vector VCADD.  */
   2383   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2384    MVE_VCADD_VEC,
   2385    0xfe000f00, 0xff810f51,
   2386    "vcadd%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%12o"},
   2387 
   2388   /* Vector VCLS.  */
   2389   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2390    MVE_VCLS,
   2391    0xffb00440, 0xffb31fd1,
   2392    "vcls%v.s%18-19s\t%13-15,22Q, %1-3,5Q"},
   2393 
   2394   /* Vector VCLZ.  */
   2395   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2396    MVE_VCLZ,
   2397    0xffb004c0, 0xffb31fd1,
   2398    "vclz%v.i%18-19s\t%13-15,22Q, %1-3,5Q"},
   2399 
   2400   /* Vector VCMLA.  */
   2401   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2402    MVE_VCMLA_FP,
   2403    0xfc200840, 0xfe211f51,
   2404    "vcmla%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%23-24o"},
   2405 
   2406   /* Vector VCMP floating point T1.  */
   2407   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2408    MVE_VCMP_FP_T1,
   2409    0xee310f00, 0xeff1ef50,
   2410    "vcmp%v.f%28s\t%n, %17-19Q, %1-3,5Q"},
   2411 
   2412   /* Vector VCMP floating point T2.  */
   2413   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2414    MVE_VCMP_FP_T2,
   2415    0xee310f40, 0xeff1ef50,
   2416    "vcmp%v.f%28s\t%n, %17-19Q, %0-3Z"},
   2417 
   2418   /* Vector VCMP T1.  */
   2419   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2420    MVE_VCMP_VEC_T1,
   2421    0xfe010f00, 0xffc1ff51,
   2422    "vcmp%v.i%20-21s\t%n, %17-19Q, %1-3,5Q"},
   2423   /* Vector VCMP T2.  */
   2424   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2425    MVE_VCMP_VEC_T2,
   2426    0xfe010f01, 0xffc1ff51,
   2427    "vcmp%v.u%20-21s\t%n, %17-19Q, %1-3,5Q"},
   2428   /* Vector VCMP T3.  */
   2429   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2430    MVE_VCMP_VEC_T3,
   2431    0xfe011f00, 0xffc1ff50,
   2432    "vcmp%v.s%20-21s\t%n, %17-19Q, %1-3,5Q"},
   2433   /* Vector VCMP T4.  */
   2434   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2435    MVE_VCMP_VEC_T4,
   2436    0xfe010f40, 0xffc1ff70,
   2437    "vcmp%v.i%20-21s\t%n, %17-19Q, %0-3Z"},
   2438   /* Vector VCMP T5.  */
   2439   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2440    MVE_VCMP_VEC_T5,
   2441    0xfe010f60, 0xffc1ff70,
   2442    "vcmp%v.u%20-21s\t%n, %17-19Q, %0-3Z"},
   2443   /* Vector VCMP T6.  */
   2444   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2445    MVE_VCMP_VEC_T6,
   2446    0xfe011f40, 0xffc1ff50,
   2447    "vcmp%v.s%20-21s\t%n, %17-19Q, %0-3Z"},
   2448 
   2449   /* Vector VDUP.  */
   2450   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2451    MVE_VDUP,
   2452    0xeea00b10, 0xffb10f5f,
   2453    "vdup%v.%5,22s\t%17-19,7Q, %12-15r"},
   2454 
   2455   /* Vector VEOR.  */
   2456   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2457    MVE_VEOR,
   2458    0xff000150, 0xffd11f51,
   2459    "veor%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2460 
   2461   /* Vector VFMA, vector * scalar.  */
   2462   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2463    MVE_VFMA_FP_SCALAR,
   2464    0xee310e40, 0xefb11f70,
   2465    "vfma%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   2466 
   2467   /* Vector VFMA floating point.  */
   2468   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2469    MVE_VFMA_FP,
   2470    0xef000c50, 0xffa11f51,
   2471    "vfma%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2472 
   2473   /* Vector VFMS floating point.  */
   2474   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2475    MVE_VFMS_FP,
   2476    0xef200c50, 0xffa11f51,
   2477    "vfms%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2478 
   2479   /* Vector VFMAS, vector * scalar.  */
   2480   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2481    MVE_VFMAS_FP_SCALAR,
   2482    0xee311e40, 0xefb11f70,
   2483    "vfmas%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   2484 
   2485   /* Vector VHADD T1.  */
   2486   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2487    MVE_VHADD_T1,
   2488    0xef000040, 0xef811f51,
   2489    "vhadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2490 
   2491   /* Vector VHADD T2.  */
   2492   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2493    MVE_VHADD_T2,
   2494    0xee000f40, 0xef811f70,
   2495    "vhadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   2496 
   2497   /* Vector VHSUB T1.  */
   2498   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2499    MVE_VHSUB_T1,
   2500    0xef000240, 0xef811f51,
   2501    "vhsub%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2502 
   2503   /* Vector VHSUB T2.  */
   2504   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2505    MVE_VHSUB_T2,
   2506    0xee001f40, 0xef811f70,
   2507    "vhsub%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   2508 
   2509   /* Vector VCMUL.  */
   2510   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2511    MVE_VCMUL_FP,
   2512    0xee300e00, 0xefb10f50,
   2513    "vcmul%v.f%28s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%0,12o"},
   2514 
   2515    /* Vector VCTP.  */
   2516   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2517    MVE_VCTP,
   2518    0xf000e801, 0xffc0ffff,
   2519    "vctp%v.%20-21s\t%16-19r"},
   2520 
   2521   /* Vector VDUP.  */
   2522   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2523    MVE_VDUP,
   2524    0xeea00b10, 0xffb10f5f,
   2525    "vdup%v.%5,22s\t%17-19,7Q, %12-15r"},
   2526 
   2527   /* Vector VRHADD.  */
   2528   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2529    MVE_VRHADD,
   2530    0xef000140, 0xef811f51,
   2531    "vrhadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2532 
   2533   /* Vector VCVT.  */
   2534   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2535    MVE_VCVT_FP_FIX_VEC,
   2536    0xef800c50, 0xef801cd1,
   2537    "vcvt%v.%s\t%13-15,22Q, %1-3,5Q, #%16-21k"},
   2538 
   2539   /* Vector VCVT.  */
   2540   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2541    MVE_VCVT_BETWEEN_FP_INT,
   2542    0xffb30640, 0xffb31e51,
   2543    "vcvt%v.%s\t%13-15,22Q, %1-3,5Q"},
   2544 
   2545   /* Vector VCVT between single and half-precision float, bottom half.  */
   2546   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2547    MVE_VCVT_FP_HALF_FP,
   2548    0xee3f0e01, 0xefbf1fd1,
   2549    "vcvtb%v.%s\t%13-15,22Q, %1-3,5Q"},
   2550 
   2551   /* Vector VCVT between single and half-precision float, top half.  */
   2552   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2553    MVE_VCVT_FP_HALF_FP,
   2554    0xee3f1e01, 0xefbf1fd1,
   2555    "vcvtt%v.%s\t%13-15,22Q, %1-3,5Q"},
   2556 
   2557   /* Vector VCVT.  */
   2558   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2559    MVE_VCVT_FROM_FP_TO_INT,
   2560    0xffb30040, 0xffb31c51,
   2561    "vcvt%m%v.%s\t%13-15,22Q, %1-3,5Q"},
   2562 
   2563   /* Vector VDDUP.  */
   2564   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2565    MVE_VDDUP,
   2566    0xee011f6e, 0xff811f7e,
   2567    "vddup%v.u%20-21s\t%13-15,22Q, %17-19l, #%0,7u"},
   2568 
   2569   /* Vector VDWDUP.  */
   2570   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2571    MVE_VDWDUP,
   2572    0xee011f60, 0xff811f70,
   2573    "vdwdup%v.u%20-21s\t%13-15,22Q, %17-19l, %1-3h, #%0,7u"},
   2574 
   2575   /* Vector VHCADD.  */
   2576   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2577    MVE_VHCADD,
   2578    0xee000f00, 0xff810f51,
   2579    "vhcadd%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q, #%12o"},
   2580 
   2581   /* Vector VIWDUP.  */
   2582   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2583    MVE_VIWDUP,
   2584    0xee010f60, 0xff811f70,
   2585    "viwdup%v.u%20-21s\t%13-15,22Q, %17-19l, %1-3h, #%0,7u"},
   2586 
   2587   /* Vector VIDUP.  */
   2588   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2589    MVE_VIDUP,
   2590    0xee010f6e, 0xff811f7e,
   2591    "vidup%v.u%20-21s\t%13-15,22Q, %17-19l, #%0,7u"},
   2592 
   2593   /* Vector VLD2.  */
   2594   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2595    MVE_VLD2,
   2596    0xfc901e00, 0xff901e5f,
   2597    "vld2%5d.%7-8s\t%B, [%16-19r]%w"},
   2598 
   2599   /* Vector VLD4.  */
   2600   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2601    MVE_VLD4,
   2602    0xfc901e01, 0xff901e1f,
   2603    "vld4%5-6d.%7-8s\t%B, [%16-19r]%w"},
   2604 
   2605   /* Vector VLDRB gather load.  */
   2606   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2607    MVE_VLDRB_GATHER_T1,
   2608    0xec900e00, 0xefb01e50,
   2609    "vldrb%v.%u%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q]"},
   2610 
   2611   /* Vector VLDRH gather load.  */
   2612   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2613    MVE_VLDRH_GATHER_T2,
   2614    0xec900e10, 0xefb01e50,
   2615    "vldrh%v.%u%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"},
   2616 
   2617   /* Vector VLDRW gather load.  */
   2618   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2619    MVE_VLDRW_GATHER_T3,
   2620    0xfc900f40, 0xffb01fd0,
   2621    "vldrw%v.u32\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"},
   2622 
   2623   /* Vector VLDRD gather load.  */
   2624   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2625    MVE_VLDRD_GATHER_T4,
   2626    0xec900fd0, 0xefb01fd0,
   2627    "vldrd%v.u64\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"},
   2628 
   2629   /* Vector VLDRW gather load.  */
   2630   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2631    MVE_VLDRW_GATHER_T5,
   2632    0xfd101e00, 0xff111f00,
   2633    "vldrw%v.u32\t%13-15,22Q, [%17-19,7Q, #%a%0-6i]%w"},
   2634 
   2635   /* Vector VLDRD gather load, variant T6.  */
   2636   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2637    MVE_VLDRD_GATHER_T6,
   2638    0xfd101f00, 0xff111f00,
   2639    "vldrd%v.u64\t%13-15,22Q, [%17-19,7Q, #%a%0-6i]%w"},
   2640 
   2641   /* Vector VLDRB.  */
   2642   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2643    MVE_VLDRB_T1,
   2644    0xec100e00, 0xee581e00,
   2645    "vldrb%v.%u%7-8s\t%13-15Q, %d"},
   2646 
   2647   /* Vector VLDRH.  */
   2648   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2649    MVE_VLDRH_T2,
   2650    0xec180e00, 0xee581e00,
   2651    "vldrh%v.%u%7-8s\t%13-15Q, %d"},
   2652 
   2653   /* Vector VLDRB unsigned, variant T5.  */
   2654   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2655    MVE_VLDRB_T5,
   2656    0xec101e00, 0xfe101f80,
   2657    "vldrb%v.u8\t%13-15,22Q, %d"},
   2658 
   2659   /* Vector VLDRH unsigned, variant T6.  */
   2660   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2661    MVE_VLDRH_T6,
   2662    0xec101e80, 0xfe101f80,
   2663    "vldrh%v.u16\t%13-15,22Q, %d"},
   2664 
   2665   /* Vector VLDRW unsigned, variant T7.  */
   2666   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2667    MVE_VLDRW_T7,
   2668    0xec101f00, 0xfe101f80,
   2669    "vldrw%v.u32\t%13-15,22Q, %d"},
   2670 
   2671   /* Vector VMAX.  */
   2672   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2673    MVE_VMAX,
   2674    0xef000640, 0xef811f51,
   2675    "vmax%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2676 
   2677   /* Vector VMAXA.  */
   2678   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2679    MVE_VMAXA,
   2680    0xee330e81, 0xffb31fd1,
   2681    "vmaxa%v.s%18-19s\t%13-15,22Q, %1-3,5Q"},
   2682 
   2683   /* Vector VMAXNM floating point.  */
   2684   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2685    MVE_VMAXNM_FP,
   2686    0xff000f50, 0xffa11f51,
   2687    "vmaxnm%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2688 
   2689   /* Vector VMAXNMA floating point.  */
   2690   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2691    MVE_VMAXNMA_FP,
   2692    0xee3f0e81, 0xefbf1fd1,
   2693    "vmaxnma%v.f%28s\t%13-15,22Q, %1-3,5Q"},
   2694 
   2695   /* Vector VMAXNMV floating point.  */
   2696   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2697    MVE_VMAXNMV_FP,
   2698    0xeeee0f00, 0xefff0fd1,
   2699    "vmaxnmv%v.f%28s\t%12-15r, %1-3,5Q"},
   2700 
   2701   /* Vector VMAXNMAV floating point.  */
   2702   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2703    MVE_VMAXNMAV_FP,
   2704    0xeeec0f00, 0xefff0fd1,
   2705    "vmaxnmav%v.f%28s\t%12-15r, %1-3,5Q"},
   2706 
   2707   /* Vector VMAXV.  */
   2708   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2709    MVE_VMAXV,
   2710    0xeee20f00, 0xeff30fd1,
   2711    "vmaxv%v.%u%18-19s\t%12-15r, %1-3,5Q"},
   2712 
   2713   /* Vector VMAXAV.  */
   2714   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2715    MVE_VMAXAV,
   2716    0xeee00f00, 0xfff30fd1,
   2717    "vmaxav%v.s%18-19s\t%12-15r, %1-3,5Q"},
   2718 
   2719   /* Vector VMIN.  */
   2720   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2721    MVE_VMIN,
   2722    0xef000650, 0xef811f51,
   2723    "vmin%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2724 
   2725   /* Vector VMINA.  */
   2726   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2727    MVE_VMINA,
   2728    0xee331e81, 0xffb31fd1,
   2729    "vmina%v.s%18-19s\t%13-15,22Q, %1-3,5Q"},
   2730 
   2731   /* Vector VMINNM floating point.  */
   2732   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2733    MVE_VMINNM_FP,
   2734    0xff200f50, 0xffa11f51,
   2735    "vminnm%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   2736 
   2737   /* Vector VMINNMA floating point.  */
   2738   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2739    MVE_VMINNMA_FP,
   2740    0xee3f1e81, 0xefbf1fd1,
   2741    "vminnma%v.f%28s\t%13-15,22Q, %1-3,5Q"},
   2742 
   2743   /* Vector VMINNMV floating point.  */
   2744   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2745    MVE_VMINNMV_FP,
   2746    0xeeee0f80, 0xefff0fd1,
   2747    "vminnmv%v.f%28s\t%12-15r, %1-3,5Q"},
   2748 
   2749   /* Vector VMINNMAV floating point.  */
   2750   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2751    MVE_VMINNMAV_FP,
   2752    0xeeec0f80, 0xefff0fd1,
   2753    "vminnmav%v.f%28s\t%12-15r, %1-3,5Q"},
   2754 
   2755   /* Vector VMINV.  */
   2756   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2757    MVE_VMINV,
   2758    0xeee20f80, 0xeff30fd1,
   2759    "vminv%v.%u%18-19s\t%12-15r, %1-3,5Q"},
   2760 
   2761   /* Vector VMINAV.  */
   2762   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2763    MVE_VMINAV,
   2764    0xeee00f80, 0xfff30fd1,
   2765    "vminav%v.s%18-19s\t%12-15r, %1-3,5Q"},
   2766 
   2767   /* Vector VMLA.  */
   2768   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2769    MVE_VMLA,
   2770    0xee010e40, 0xef811f70,
   2771    "vmla%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   2772 
   2773   /* Vector VMLALDAV.  Note must appear before VMLADAV due to instruction
   2774      opcode aliasing.  */
   2775   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2776    MVE_VMLALDAV,
   2777    0xee801e00, 0xef801f51,
   2778    "vmlaldav%5Ax%v.%u%16s\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"},
   2779 
   2780   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2781    MVE_VMLALDAV,
   2782    0xee800e00, 0xef801f51,
   2783    "vmlalv%5A%v.%u%16s\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"},
   2784 
   2785   /* Vector VMLAV T1 variant, same as VMLADAV but with X == 0.  */
   2786   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2787    MVE_VMLADAV_T1,
   2788    0xeef00e00, 0xeff01f51,
   2789    "vmlav%5A%v.%u%16s\t%13-15l, %17-19,7Q, %1-3Q"},
   2790 
   2791   /* Vector VMLAV T2 variant, same as VMLADAV but with X == 0.  */
   2792   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2793    MVE_VMLADAV_T2,
   2794    0xeef00f00, 0xeff11f51,
   2795    "vmlav%5A%v.%u8\t%13-15l, %17-19,7Q, %1-3Q"},
   2796 
   2797   /* Vector VMLADAV T1 variant.  */
   2798   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2799    MVE_VMLADAV_T1,
   2800    0xeef01e00, 0xeff01f51,
   2801    "vmladav%5Ax%v.%u%16s\t%13-15l, %17-19,7Q, %1-3Q"},
   2802 
   2803   /* Vector VMLADAV T2 variant.  */
   2804   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2805    MVE_VMLADAV_T2,
   2806    0xeef01f00, 0xeff11f51,
   2807    "vmladav%5Ax%v.%u8\t%13-15l, %17-19,7Q, %1-3Q"},
   2808 
   2809   /* Vector VMLAS.  */
   2810   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2811    MVE_VMLAS,
   2812    0xee011e40, 0xef811f70,
   2813    "vmlas%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   2814 
   2815   /* Vector VRMLSLDAVH.  Note must appear before VMLSDAV due to instruction
   2816      opcode aliasing.  */
   2817   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2818    MVE_VRMLSLDAVH,
   2819    0xfe800e01, 0xff810f51,
   2820    "vrmlsldavh%5A%X%v.s32\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"},
   2821 
   2822   /* Vector VMLSLDAV.  Note must appear before VMLSDAV due to instruction
   2823      opcdoe aliasing.  */
   2824   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2825    MVE_VMLSLDAV,
   2826    0xee800e01, 0xff800f51,
   2827    "vmlsldav%5A%X%v.%u%16s\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"},
   2828 
   2829   /* Vector VMLSDAV T1 Variant.  */
   2830   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2831    MVE_VMLSDAV_T1,
   2832    0xeef00e01, 0xfff00f51,
   2833    "vmlsdav%5A%X%v.s%16s\t%13-15l, %17-19,7Q, %1-3Q"},
   2834 
   2835   /* Vector VMLSDAV T2 Variant.  */
   2836   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2837    MVE_VMLSDAV_T2,
   2838    0xfef00e01, 0xfff10f51,
   2839    "vmlsdav%5A%X%v.s8\t%13-15l, %17-19,7Q, %1-3Q"},
   2840 
   2841   /* Vector VMOV between gpr and half precision register, op == 0.  */
   2842   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2843    MVE_VMOV_HFP_TO_GP,
   2844    0xee000910, 0xfff00f7f,
   2845    "vmov.f16\t%7,16-19F, %12-15r"},
   2846 
   2847   /* Vector VMOV between gpr and half precision register, op == 1.  */
   2848   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2849    MVE_VMOV_HFP_TO_GP,
   2850    0xee100910, 0xfff00f7f,
   2851    "vmov.f16\t%12-15r, %7,16-19F"},
   2852 
   2853   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2854    MVE_VMOV_GP_TO_VEC_LANE,
   2855    0xee000b10, 0xff900f1f,
   2856    "vmov%c.%5-6,21-22s\t%17-19,7Q[%N], %12-15r"},
   2857 
   2858   /* Vector VORR immediate to vector.
   2859      NOTE: MVE_VORR_IMM must appear in the table
   2860      before MVE_VMOV_IMM_TO_VEC due to opcode aliasing.  */
   2861   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2862    MVE_VORR_IMM,
   2863    0xef800050, 0xefb810f0,
   2864    "vorr%v.i%8-11s\t%13-15,22Q, %E"},
   2865 
   2866   /* Vector VQSHL T2 Variant.
   2867      NOTE: MVE_VQSHL_T2 must appear in the table before
   2868      before MVE_VMOV_IMM_TO_VEC due to opcode aliasing.  */
   2869   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2870    MVE_VQSHL_T2,
   2871    0xef800750, 0xef801fd1,
   2872    "vqshl%v.%u%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   2873 
   2874   /* Vector VQSHLU T3 Variant
   2875      NOTE: MVE_VQSHL_T2 must appear in the table before
   2876      before MVE_VMOV_IMM_TO_VEC due to opcode aliasing.  */
   2877 
   2878   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2879    MVE_VQSHLU_T3,
   2880    0xff800650, 0xff801fd1,
   2881    "vqshlu%v.s%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   2882 
   2883   /* Vector VRSHR
   2884      NOTE: MVE_VRSHR must appear in the table before
   2885      before MVE_VMOV_IMM_TO_VEC due to opcode aliasing.  */
   2886   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2887    MVE_VRSHR,
   2888    0xef800250, 0xef801fd1,
   2889    "vrshr%v.%u%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   2890 
   2891   /* Vector VSHL.
   2892      NOTE: MVE_VSHL must appear in the table before
   2893      before MVE_VMOV_IMM_TO_VEC due to opcode aliasing.  */
   2894   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2895    MVE_VSHL_T1,
   2896    0xef800550, 0xff801fd1,
   2897    "vshl%v.i%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   2898 
   2899   /* Vector VSHR
   2900      NOTE: MVE_VSHR must appear in the table before
   2901      before MVE_VMOV_IMM_TO_VEC due to opcode aliasing.  */
   2902   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2903    MVE_VSHR,
   2904    0xef800050, 0xef801fd1,
   2905    "vshr%v.%u%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   2906 
   2907   /* Vector VSLI
   2908      NOTE: MVE_VSLI must appear in the table before
   2909      before MVE_VMOV_IMM_TO_VEC due to opcode aliasing.  */
   2910   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2911    MVE_VSLI,
   2912    0xff800550, 0xff801fd1,
   2913    "vsli%v.%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   2914 
   2915   /* Vector VSRI
   2916      NOTE: MVE_VSRI must appear in the table before
   2917      before MVE_VMOV_IMM_TO_VEC due to opcode aliasing.  */
   2918   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2919    MVE_VSRI,
   2920    0xff800450, 0xff801fd1,
   2921    "vsri%v.%19-21s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   2922 
   2923   /* Vector VMOV immediate to vector,
   2924      undefinded for cmode == 1111 */
   2925   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2926    MVE_VMVN_IMM, 0xef800f70, 0xefb81ff0, UNDEFINED_INSTRUCTION},
   2927 
   2928   /* Vector VMOV immediate to vector,
   2929      cmode == 1101 */
   2930   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2931    MVE_VMOV_IMM_TO_VEC, 0xef800d50, 0xefb81fd0,
   2932    "vmov%v.%5,8-11s\t%13-15,22Q, %E"},
   2933 
   2934   /* Vector VMOV immediate to vector.  */
   2935   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2936    MVE_VMOV_IMM_TO_VEC,
   2937    0xef800050, 0xefb810d0,
   2938    "vmov%v.%5,8-11s\t%13-15,22Q, %E"},
   2939 
   2940   /* Vector VMOV two 32-bit lanes to two gprs, idx = 0.  */
   2941   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2942    MVE_VMOV2_VEC_LANE_TO_GP,
   2943    0xec000f00, 0xffb01ff0,
   2944    "vmov%c\t%0-3r, %16-19r, %13-15,22Q[2], %13-15,22Q[0]"},
   2945 
   2946   /* Vector VMOV two 32-bit lanes to two gprs, idx = 1.  */
   2947   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2948    MVE_VMOV2_VEC_LANE_TO_GP,
   2949    0xec000f10, 0xffb01ff0,
   2950    "vmov%c\t%0-3r, %16-19r, %13-15,22Q[3], %13-15,22Q[1]"},
   2951 
   2952   /* Vector VMOV Two gprs to two 32-bit lanes, idx = 0.  */
   2953   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2954    MVE_VMOV2_GP_TO_VEC_LANE,
   2955    0xec100f00, 0xffb01ff0,
   2956    "vmov%c\t%13-15,22Q[2], %13-15,22Q[0], %0-3r, %16-19r"},
   2957 
   2958   /* Vector VMOV Two gprs to two 32-bit lanes, idx = 1.  */
   2959   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2960    MVE_VMOV2_GP_TO_VEC_LANE,
   2961    0xec100f10, 0xffb01ff0,
   2962    "vmov%c\t%13-15,22Q[2], %13-15,22Q[0], %0-3r, %16-19r"},
   2963 
   2964   /* Vector VMOV Vector lane to gpr.  */
   2965   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2966    MVE_VMOV_VEC_LANE_TO_GP,
   2967    0xee100b10, 0xff100f1f,
   2968    "vmov%c.%u%5-6,21-22s\t%12-15r, %17-19,7Q[%N]"},
   2969 
   2970   /* Vector VSHLL T1 Variant.  Note: VSHLL T1 must appear before MVE_VMOVL due
   2971      to instruction opcode aliasing.  */
   2972   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2973    MVE_VSHLL_T1,
   2974    0xeea00f40, 0xefa00fd1,
   2975    "vshll%T%v.%u%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   2976 
   2977   /* Vector VMOVL long.  */
   2978   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2979    MVE_VMOVL,
   2980    0xeea00f40, 0xefa70fd1,
   2981    "vmovl%T%v.%u%19-20s\t%13-15,22Q, %1-3,5Q"},
   2982 
   2983   /* Vector VMOV and narrow.  */
   2984   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   2985    MVE_VMOVN,
   2986    0xfe310e81, 0xffb30fd1,
   2987    "vmovn%T%v.i%18-19s\t%13-15,22Q, %1-3,5Q"},
   2988 
   2989   /* Floating point move extract.  */
   2990   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2991    MVE_VMOVX,
   2992    0xfeb00a40, 0xffbf0fd0,
   2993    "vmovx.f16\t%22,12-15F, %5,0-3F"},
   2994 
   2995   /* Vector VMUL floating-point T1 variant.  */
   2996   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   2997    MVE_VMUL_FP_T1,
   2998    0xff000d50, 0xffa11f51,
   2999    "vmul%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3000 
   3001   /* Vector VMUL floating-point T2 variant.  */
   3002   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   3003    MVE_VMUL_FP_T2,
   3004    0xee310e60, 0xefb11f70,
   3005    "vmul%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3006 
   3007   /* Vector VMUL T1 variant.  */
   3008   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3009    MVE_VMUL_VEC_T1,
   3010    0xef000950, 0xff811f51,
   3011    "vmul%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3012 
   3013   /* Vector VMUL T2 variant.  */
   3014   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3015    MVE_VMUL_VEC_T2,
   3016    0xee011e60, 0xff811f70,
   3017    "vmul%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3018 
   3019   /* Vector VMULH.  */
   3020   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3021    MVE_VMULH,
   3022    0xee010e01, 0xef811f51,
   3023    "vmulh%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3024 
   3025   /* Vector VRMULH.  */
   3026   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3027    MVE_VRMULH,
   3028    0xee011e01, 0xef811f51,
   3029    "vrmulh%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3030 
   3031   /* Vector VMULL integer.  */
   3032   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3033    MVE_VMULL_INT,
   3034    0xee010e00, 0xef810f51,
   3035    "vmull%T%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3036 
   3037   /* Vector VMULL polynomial.  */
   3038   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3039    MVE_VMULL_POLY,
   3040    0xee310e00, 0xefb10f51,
   3041    "vmull%T%v.%28s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3042 
   3043   /* Vector VMVN immediate to vector.  */
   3044   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3045    MVE_VMVN_IMM,
   3046    0xef800070, 0xefb810f0,
   3047    "vmvn%v.i%8-11s\t%13-15,22Q, %E"},
   3048 
   3049   /* Vector VMVN register.  */
   3050   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3051    MVE_VMVN_REG,
   3052    0xffb005c0, 0xffbf1fd1,
   3053    "vmvn%v\t%13-15,22Q, %1-3,5Q"},
   3054 
   3055   /* Vector VNEG floating point.  */
   3056   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   3057    MVE_VNEG_FP,
   3058    0xffb107c0, 0xffb31fd1,
   3059    "vneg%v.f%18-19s\t%13-15,22Q, %1-3,5Q"},
   3060 
   3061   /* Vector VNEG.  */
   3062   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3063    MVE_VNEG_VEC,
   3064    0xffb103c0, 0xffb31fd1,
   3065    "vneg%v.s%18-19s\t%13-15,22Q, %1-3,5Q"},
   3066 
   3067   /* Vector VORN, vector bitwise or not.  */
   3068   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3069    MVE_VORN,
   3070    0xef300150, 0xffb11f51,
   3071    "vorn%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3072 
   3073   /* Vector VORR register.  */
   3074   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3075    MVE_VORR_REG,
   3076    0xef200150, 0xffb11f51,
   3077    "vorr%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3078 
   3079   /* Vector VMOV, vector to vector move. While decoding MVE_VORR_REG if
   3080      "Qm==Qn", VORR should replaced by its alias VMOV. For that to happen
   3081      MVE_VMOV_VEC_TO_VEC need to placed after MVE_VORR_REG in this mve_opcodes
   3082      array.  */
   3083 
   3084   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3085    MVE_VMOV_VEC_TO_VEC,
   3086    0xef200150, 0xffb11f51,
   3087    "vmov%v\t%13-15,22Q, %17-19,7Q"},
   3088 
   3089   /* Vector VQDMULL T1 variant.  */
   3090   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3091    MVE_VQDMULL_T1,
   3092    0xee300f01, 0xefb10f51,
   3093    "vqdmull%T%v.s%28s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3094 
   3095   /* Vector VPNOT.  */
   3096   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3097    MVE_VPNOT,
   3098    0xfe310f4d, 0xffffffff,
   3099    "vpnot%v"},
   3100 
   3101   /* Vector VPSEL.  */
   3102   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3103    MVE_VPSEL,
   3104    0xfe310f01, 0xffb11f51,
   3105    "vpsel%v\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3106 
   3107   /* Vector VQABS.  */
   3108   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3109    MVE_VQABS,
   3110    0xffb00740, 0xffb31fd1,
   3111    "vqabs%v.s%18-19s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3112 
   3113   /* Vector VQADD T1 variant.  */
   3114   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3115    MVE_VQADD_T1,
   3116    0xef000050, 0xef811f51,
   3117    "vqadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3118 
   3119   /* Vector VQADD T2 variant.  */
   3120   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3121    MVE_VQADD_T2,
   3122    0xee000f60, 0xef811f70,
   3123    "vqadd%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3124 
   3125   /* Vector VQDMULL T2 variant.  */
   3126   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3127    MVE_VQDMULL_T2,
   3128    0xee300f60, 0xefb10f70,
   3129    "vqdmull%T%v.s%28s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3130 
   3131   /* Vector VQMOVN.  */
   3132   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3133    MVE_VQMOVN,
   3134    0xee330e01, 0xefb30fd1,
   3135    "vqmovn%T%v.%u%18-19s\t%13-15,22Q, %1-3,5Q"},
   3136 
   3137   /* Vector VQMOVUN.  */
   3138   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3139    MVE_VQMOVUN,
   3140    0xee310e81, 0xffb30fd1,
   3141    "vqmovun%T%v.s%18-19s\t%13-15,22Q, %1-3,5Q"},
   3142 
   3143   /* Vector VQDMLADH.  */
   3144   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3145    MVE_VQDMLADH,
   3146    0xee000e00, 0xff810f51,
   3147    "vqdmladh%X%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3148 
   3149   /* Vector VQRDMLADH.  */
   3150   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3151    MVE_VQRDMLADH,
   3152    0xee000e01, 0xff810f51,
   3153    "vqrdmladh%X%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3154 
   3155   /* Vector VQDMLAH.  */
   3156   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3157    MVE_VQDMLAH,
   3158    0xee000e60, 0xff811f70,
   3159    "vqdmlah%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3160 
   3161   /* Vector VQRDMLAH.  */
   3162   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3163    MVE_VQRDMLAH,
   3164    0xee000e40, 0xff811f70,
   3165    "vqrdmlah%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3166 
   3167   /* Vector VQDMLASH.  */
   3168   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3169    MVE_VQDMLASH,
   3170    0xee001e60, 0xff811f70,
   3171    "vqdmlash%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3172 
   3173   /* Vector VQRDMLASH.  */
   3174   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3175    MVE_VQRDMLASH,
   3176    0xee001e40, 0xff811f70,
   3177    "vqrdmlash%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3178 
   3179   /* Vector VQDMLSDH.  */
   3180   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3181    MVE_VQDMLSDH,
   3182    0xfe000e00, 0xff810f51,
   3183    "vqdmlsdh%X%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3184 
   3185   /* Vector VQRDMLSDH.  */
   3186   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3187    MVE_VQRDMLSDH,
   3188    0xfe000e01, 0xff810f51,
   3189    "vqrdmlsdh%X%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3190 
   3191   /* Vector VQDMULH T1 variant.  */
   3192   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3193    MVE_VQDMULH_T1,
   3194    0xef000b40, 0xff811f51,
   3195    "vqdmulh%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3196 
   3197   /* Vector VQRDMULH T2 variant.  */
   3198   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3199    MVE_VQRDMULH_T2,
   3200    0xff000b40, 0xff811f51,
   3201    "vqrdmulh%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3202 
   3203   /* Vector VQDMULH T3 variant.  */
   3204   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3205    MVE_VQDMULH_T3,
   3206    0xee010e60, 0xff811f70,
   3207    "vqdmulh%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3208 
   3209   /* Vector VQRDMULH T4 variant.  */
   3210   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3211    MVE_VQRDMULH_T4,
   3212    0xfe010e60, 0xff811f70,
   3213    "vqrdmulh%v.s%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3214 
   3215   /* Vector VQNEG.  */
   3216   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3217    MVE_VQNEG,
   3218    0xffb007c0, 0xffb31fd1,
   3219    "vqneg%v.s%18-19s\t%13-15,22Q, %1-3,5Q"},
   3220 
   3221   /* Vector VQRSHL T1 variant.  */
   3222   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3223    MVE_VQRSHL_T1,
   3224    0xef000550, 0xef811f51,
   3225    "vqrshl%v.%u%20-21s\t%13-15,22Q, %1-3,5Q, %17-19,7Q"},
   3226 
   3227   /* Vector VQRSHL T2 variant.  */
   3228   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3229    MVE_VQRSHL_T2,
   3230    0xee331ee0, 0xefb31ff0,
   3231    "vqrshl%v.%u%18-19s\t%13-15,22Q, %0-3r"},
   3232 
   3233   /* Vector VQRSHRN.  */
   3234   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3235    MVE_VQRSHRN,
   3236    0xee800f41, 0xefa00fd1,
   3237    "vqrshrn%T%v.%u%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   3238 
   3239   /* Vector VQRSHRUN.  */
   3240   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3241    MVE_VQRSHRUN,
   3242    0xfe800fc0, 0xffa00fd1,
   3243    "vqrshrun%T%v.s%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   3244 
   3245   /* Vector VQSHL T1 Variant.  */
   3246   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3247    MVE_VQSHL_T1,
   3248    0xee311ee0, 0xefb31ff0,
   3249    "vqshl%v.%u%18-19s\t%13-15,22Q, %0-3r"},
   3250 
   3251   /* Vector VQSHL T4 Variant.  */
   3252   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3253    MVE_VQSHL_T4,
   3254    0xef000450, 0xef811f51,
   3255    "vqshl%v.%u%20-21s\t%13-15,22Q, %1-3,5Q, %17-19,7Q"},
   3256 
   3257   /* Vector VQSHRN.  */
   3258   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3259    MVE_VQSHRN,
   3260    0xee800f40, 0xefa00fd1,
   3261    "vqshrn%T%v.%u%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   3262 
   3263   /* Vector VQSHRUN.  */
   3264   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3265    MVE_VQSHRUN,
   3266    0xee800fc0, 0xffa00fd1,
   3267    "vqshrun%T%v.s%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   3268 
   3269   /* Vector VQSUB T1 Variant.  */
   3270   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3271    MVE_VQSUB_T1,
   3272    0xef000250, 0xef811f51,
   3273    "vqsub%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3274 
   3275   /* Vector VQSUB T2 Variant.  */
   3276   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3277    MVE_VQSUB_T2,
   3278    0xee001f60, 0xef811f70,
   3279    "vqsub%v.%u%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3280 
   3281   /* Vector VREV16.  */
   3282   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3283    MVE_VREV16,
   3284    0xffb00140, 0xffb31fd1,
   3285    "vrev16%v.8\t%13-15,22Q, %1-3,5Q"},
   3286 
   3287   /* Vector VREV32.  */
   3288   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3289    MVE_VREV32,
   3290    0xffb000c0, 0xffb31fd1,
   3291    "vrev32%v.%18-19s\t%13-15,22Q, %1-3,5Q"},
   3292 
   3293   /* Vector VREV64.  */
   3294   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3295    MVE_VREV64,
   3296    0xffb00040, 0xffb31fd1,
   3297    "vrev64%v.%18-19s\t%13-15,22Q, %1-3,5Q"},
   3298 
   3299   /* Vector VRINT floating point.  */
   3300   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   3301    MVE_VRINT_FP,
   3302    0xffb20440, 0xffb31c51,
   3303    "vrint%m%v.f%18-19s\t%13-15,22Q, %1-3,5Q"},
   3304 
   3305   /* Vector VRMLALDAVH.  */
   3306   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3307    MVE_VRMLALDAVH,
   3308    0xee800f00, 0xef811f51,
   3309    "vrmlalvh%5A%v.%u32\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"},
   3310 
   3311   /* Vector VRMLALDAVH.  */
   3312   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3313    MVE_VRMLALDAVH,
   3314    0xee801f00, 0xef811f51,
   3315    "vrmlaldavh%5Ax%v.%u32\t%13-15l, %20-22h, %17-19,7Q, %1-3Q"},
   3316 
   3317   /* Vector VRSHL T1 Variant.  */
   3318   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3319    MVE_VRSHL_T1,
   3320    0xef000540, 0xef811f51,
   3321    "vrshl%v.%u%20-21s\t%13-15,22Q, %1-3,5Q, %17-19,7Q"},
   3322 
   3323   /* Vector VRSHL T2 Variant.  */
   3324   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3325    MVE_VRSHL_T2,
   3326    0xee331e60, 0xefb31ff0,
   3327    "vrshl%v.%u%18-19s\t%13-15,22Q, %0-3r"},
   3328 
   3329   /* Vector VRSHRN.  */
   3330   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3331    MVE_VRSHRN,
   3332    0xfe800fc1, 0xffa00fd1,
   3333    "vrshrn%T%v.i%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   3334 
   3335   /* Vector VSBC.  */
   3336   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3337    MVE_VSBC,
   3338    0xfe300f00, 0xffb10f51,
   3339    "vsbc%12I%v.i32\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3340 
   3341   /* Vector VSHL T2 Variant.  */
   3342   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3343    MVE_VSHL_T2,
   3344    0xee311e60, 0xefb31ff0,
   3345    "vshl%v.%u%18-19s\t%13-15,22Q, %0-3r"},
   3346 
   3347   /* Vector VSHL T3 Variant.  */
   3348   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3349    MVE_VSHL_T3,
   3350    0xef000440, 0xef811f51,
   3351    "vshl%v.%u%20-21s\t%13-15,22Q, %1-3,5Q, %17-19,7Q"},
   3352 
   3353   /* Vector VSHLC.  */
   3354   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3355    MVE_VSHLC,
   3356    0xeea00fc0, 0xffa01ff0,
   3357    "vshlc%v\t%13-15,22Q, %0-3r, #%16-20d"},
   3358 
   3359   /* Vector VSHLL T2 Variant.  */
   3360   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3361    MVE_VSHLL_T2,
   3362    0xee310e01, 0xefb30fd1,
   3363    "vshll%T%v.%u%18-19s\t%13-15,22Q, %1-3,5Q, #%18-19d"},
   3364 
   3365   /* Vector VSHRN.  */
   3366   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3367    MVE_VSHRN,
   3368    0xee800fc1, 0xffa00fd1,
   3369    "vshrn%T%v.i%19-20s\t%13-15,22Q, %1-3,5Q, #%16-18d"},
   3370 
   3371   /* Vector VST2 no writeback.  */
   3372   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3373    MVE_VST2,
   3374    0xfc801e00, 0xffb01e5f,
   3375    "vst2%5d.%7-8s\t%B, [%16-19r]"},
   3376 
   3377   /* Vector VST2 writeback.  */
   3378   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3379    MVE_VST2,
   3380    0xfca01e00, 0xffb01e5f,
   3381    "vst2%5d.%7-8s\t%B, [%16-19r]!"},
   3382 
   3383   /* Vector VST4 no writeback.  */
   3384   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3385    MVE_VST4,
   3386    0xfc801e01, 0xffb01e1f,
   3387    "vst4%5-6d.%7-8s\t%B, [%16-19r]"},
   3388 
   3389   /* Vector VST4 writeback.  */
   3390   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3391    MVE_VST4,
   3392    0xfca01e01, 0xffb01e1f,
   3393    "vst4%5-6d.%7-8s\t%B, [%16-19r]!"},
   3394 
   3395   /* Vector VSTRB scatter store, T1 variant.  */
   3396   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3397    MVE_VSTRB_SCATTER_T1,
   3398    0xec800e00, 0xffb01e50,
   3399    "vstrb%v.%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q]"},
   3400 
   3401   /* Vector VSTRH scatter store, T2 variant.  */
   3402   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3403    MVE_VSTRH_SCATTER_T2,
   3404    0xec800e10, 0xffb01e50,
   3405    "vstrh%v.%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"},
   3406 
   3407   /* Vector VSTRW scatter store, T3 variant.  */
   3408   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3409    MVE_VSTRW_SCATTER_T3,
   3410    0xec800e40, 0xffb01e50,
   3411    "vstrw%v.%7-8s\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"},
   3412 
   3413   /* Vector VSTRD scatter store, T4 variant.  */
   3414   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3415    MVE_VSTRD_SCATTER_T4,
   3416    0xec800fd0, 0xffb01fd0,
   3417    "vstrd%v.64\t%13-15,22Q, [%16-19r, %1-3,5Q%o]"},
   3418 
   3419   /* Vector VSTRW scatter store, T5 variant.  */
   3420   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3421    MVE_VSTRW_SCATTER_T5,
   3422    0xfd001e00, 0xff111f00,
   3423    "vstrw%v.32\t%13-15,22Q, [%17-19,7Q, #%a%0-6i]%w"},
   3424 
   3425   /* Vector VSTRD scatter store, T6 variant.  */
   3426   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3427    MVE_VSTRD_SCATTER_T6,
   3428    0xfd001f00, 0xff111f00,
   3429    "vstrd%v.64\t%13-15,22Q, [%17-19,7Q, #%a%0-6i]%w"},
   3430 
   3431   /* Vector VSTRB.  */
   3432   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3433    MVE_VSTRB_T1,
   3434    0xec000e00, 0xfe581e00,
   3435    "vstrb%v.%7-8s\t%13-15Q, %d"},
   3436 
   3437   /* Vector VSTRH.  */
   3438   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3439    MVE_VSTRH_T2,
   3440    0xec080e00, 0xfe581e00,
   3441    "vstrh%v.%7-8s\t%13-15Q, %d"},
   3442 
   3443   /* Vector VSTRB variant T5.  */
   3444   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3445    MVE_VSTRB_T5,
   3446    0xec001e00, 0xfe101f80,
   3447    "vstrb%v.8\t%13-15,22Q, %d"},
   3448 
   3449   /* Vector VSTRH variant T6.  */
   3450   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3451    MVE_VSTRH_T6,
   3452    0xec001e80, 0xfe101f80,
   3453    "vstrh%v.16\t%13-15,22Q, %d"},
   3454 
   3455   /* Vector VSTRW variant T7.  */
   3456   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3457    MVE_VSTRW_T7,
   3458    0xec001f00, 0xfe101f80,
   3459    "vstrw%v.32\t%13-15,22Q, %d"},
   3460 
   3461   /* Vector VSUB floating point T1 variant.  */
   3462   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   3463    MVE_VSUB_FP_T1,
   3464    0xef200d40, 0xffa11f51,
   3465    "vsub%v.f%20s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3466 
   3467   /* Vector VSUB floating point T2 variant.  */
   3468   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE_FP),
   3469    MVE_VSUB_FP_T2,
   3470    0xee301f40, 0xefb11f70,
   3471    "vsub%v.f%28s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3472 
   3473   /* Vector VSUB T1 variant.  */
   3474   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3475    MVE_VSUB_VEC_T1,
   3476    0xff000840, 0xff811f51,
   3477    "vsub%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %1-3,5Q"},
   3478 
   3479   /* Vector VSUB T2 variant.  */
   3480   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3481    MVE_VSUB_VEC_T2,
   3482    0xee011f40, 0xff811f70,
   3483    "vsub%v.i%20-21s\t%13-15,22Q, %17-19,7Q, %0-3r"},
   3484 
   3485   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3486    MVE_ASRLI,
   3487    0xea50012f, 0xfff1813f,
   3488    "asrl%c\t%17-19l, %9-11h, %j"},
   3489 
   3490   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3491    MVE_ASRL,
   3492    0xea50012d, 0xfff101ff,
   3493    "asrl%c\t%17-19l, %9-11h, %12-15S"},
   3494 
   3495   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3496    MVE_LSLLI,
   3497    0xea50010f, 0xfff1813f,
   3498    "lsll%c\t%17-19l, %9-11h, %j"},
   3499 
   3500   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3501    MVE_LSLL,
   3502    0xea50010d, 0xfff101ff,
   3503    "lsll%c\t%17-19l, %9-11h, %12-15S"},
   3504 
   3505   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3506    MVE_LSRL,
   3507    0xea50011f, 0xfff1813f,
   3508    "lsrl%c\t%17-19l, %9-11h, %j"},
   3509 
   3510   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3511    MVE_SQRSHRL,
   3512    0xea51012d, 0xfff1017f,
   3513    "sqrshrl%c\t%17-19l, %9-11h, %k, %12-15S"},
   3514 
   3515   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3516    MVE_SQRSHR,
   3517    0xea500f2d, 0xfff00fff,
   3518    "sqrshr%c\t%16-19S, %12-15S"},
   3519 
   3520   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3521    MVE_SQSHLL,
   3522    0xea51013f, 0xfff1813f,
   3523    "sqshll%c\t%17-19l, %9-11h, %j"},
   3524 
   3525   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3526    MVE_SQSHL,
   3527    0xea500f3f, 0xfff08f3f,
   3528    "sqshl%c\t%16-19S, %j"},
   3529 
   3530   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3531    MVE_SRSHRL,
   3532    0xea51012f, 0xfff1813f,
   3533    "srshrl%c\t%17-19l, %9-11h, %j"},
   3534 
   3535   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3536    MVE_SRSHR,
   3537    0xea500f2f, 0xfff08f3f,
   3538    "srshr%c\t%16-19S, %j"},
   3539 
   3540   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3541    MVE_UQRSHLL,
   3542    0xea51010d, 0xfff1017f,
   3543    "uqrshll%c\t%17-19l, %9-11h, %k, %12-15S"},
   3544 
   3545   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3546    MVE_UQRSHL,
   3547    0xea500f0d, 0xfff00fff,
   3548    "uqrshl%c\t%16-19S, %12-15S"},
   3549 
   3550   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3551    MVE_UQSHLL,
   3552     0xea51010f, 0xfff1813f,
   3553    "uqshll%c\t%17-19l, %9-11h, %j"},
   3554 
   3555   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3556    MVE_UQSHL,
   3557    0xea500f0f, 0xfff08f3f,
   3558    "uqshl%c\t%16-19S, %j"},
   3559 
   3560   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3561    MVE_URSHRL,
   3562     0xea51011f, 0xfff1813f,
   3563    "urshrl%c\t%17-19l, %9-11h, %j"},
   3564 
   3565   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE),
   3566    MVE_URSHR,
   3567    0xea500f1f, 0xfff08f3f,
   3568    "urshr%c\t%16-19S, %j"},
   3569 
   3570   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   3571    MVE_CSINC,
   3572    0xea509000, 0xfff0f000,
   3573    "csinc\t%8-11S, %16-19Z, %0-3Z, %4-7c"},
   3574 
   3575   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   3576    MVE_CSINV,
   3577    0xea50a000, 0xfff0f000,
   3578    "csinv\t%8-11S, %16-19Z, %0-3Z, %4-7c"},
   3579 
   3580   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   3581    MVE_CSET,
   3582    0xea5f900f, 0xfffff00f,
   3583    "cset\t%8-11S, %4-7C"},
   3584 
   3585   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   3586    MVE_CSETM,
   3587    0xea5fa00f, 0xfffff00f,
   3588    "csetm\t%8-11S, %4-7C"},
   3589 
   3590   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   3591    MVE_CSEL,
   3592    0xea508000, 0xfff0f000,
   3593    "csel\t%8-11S, %16-19Z, %0-3Z, %4-7c"},
   3594 
   3595   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   3596    MVE_CSNEG,
   3597    0xea50b000, 0xfff0f000,
   3598    "csneg\t%8-11S, %16-19Z, %0-3Z, %4-7c"},
   3599 
   3600   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   3601    MVE_CINC,
   3602    0xea509000, 0xfff0f000,
   3603    "cinc\t%8-11S, %16-19Z, %4-7C"},
   3604 
   3605   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   3606    MVE_CINV,
   3607    0xea50a000, 0xfff0f000,
   3608    "cinv\t%8-11S, %16-19Z, %4-7C"},
   3609 
   3610   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   3611    MVE_CNEG,
   3612    0xea50b000, 0xfff0f000,
   3613    "cneg\t%8-11S, %16-19Z, %4-7C"},
   3614 
   3615   {ARM_FEATURE_CORE_LOW (0),
   3616    MVE_NONE,
   3617    0x00000000, 0x00000000, 0}
   3618 };
   3619 
   3620 /* Opcode tables: ARM, 16-bit Thumb, 32-bit Thumb.  All three are partially
   3621    ordered: they must be searched linearly from the top to obtain a correct
   3622    match.  */
   3623 
   3624 /* print_insn_arm recognizes the following format control codes:
   3625 
   3626    %%			%
   3627 
   3628    %a			print address for ldr/str instruction
   3629    %s                   print address for ldr/str halfword/signextend instruction
   3630    %S                   like %s but allow UNPREDICTABLE addressing
   3631    %b			print branch destination
   3632    %c			print condition code (always bits 28-31)
   3633    %m			print register mask for ldm/stm instruction
   3634    %o			print operand2 (immediate or register + shift)
   3635    %p			print 'p' iff bits 12-15 are 15
   3636    %t			print 't' iff bit 21 set and bit 24 clear
   3637    %B			print arm BLX(1) destination
   3638    %C			print the PSR sub type.
   3639    %U			print barrier type.
   3640    %P			print address for pli instruction.
   3641 
   3642    %<bitfield>r		print as an ARM register
   3643    %<bitfield>T		print as an ARM register + 1
   3644    %<bitfield>R		as %r but r15 is UNPREDICTABLE
   3645    %<bitfield>{r|R}u    as %{r|R} but if matches the other %u field then is UNPREDICTABLE
   3646    %<bitfield>{r|R}U    as %{r|R} but if matches the other %U field then is UNPREDICTABLE
   3647    %<bitfield>d		print the bitfield in decimal
   3648    %<bitfield>W         print the bitfield plus one in decimal
   3649    %<bitfield>x		print the bitfield in hex
   3650    %<bitfield>X		print the bitfield as 1 hex digit without leading "0x"
   3651 
   3652    %<bitfield>'c	print specified char iff bitfield is all ones
   3653    %<bitfield>`c	print specified char iff bitfield is all zeroes
   3654    %<bitfield>?ab...    select from array of values in big endian order
   3655 
   3656    %e                   print arm SMI operand (bits 0..7,8..19).
   3657    %E			print the LSB and WIDTH fields of a BFI or BFC instruction.
   3658    %V                   print the 16-bit immediate field of a MOVT or MOVW instruction.
   3659    %R			print the SPSR/CPSR or banked register of an MRS.  */
   3660 
   3661 static const struct opcode32 arm_opcodes[] =
   3662 {
   3663   /* ARM instructions.  */
   3664   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   3665     0xe1a00000, 0xffffffff, "nop\t\t\t; (mov r0, r0)"},
   3666   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   3667     0xe7f000f0, 0xfff000f0, "udf\t#%e"},
   3668 
   3669   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T | ARM_EXT_V5),
   3670     0x012FFF10, 0x0ffffff0, "bx%c\t%0-3r"},
   3671   {ARM_FEATURE_CORE_LOW (ARM_EXT_V2),
   3672     0x00000090, 0x0fe000f0, "mul%20's%c\t%16-19R, %0-3R, %8-11R"},
   3673   {ARM_FEATURE_CORE_LOW (ARM_EXT_V2),
   3674     0x00200090, 0x0fe000f0, "mla%20's%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   3675   {ARM_FEATURE_CORE_LOW (ARM_EXT_V2S),
   3676     0x01000090, 0x0fb00ff0, "swp%22'b%c\t%12-15RU, %0-3Ru, [%16-19RuU]"},
   3677   {ARM_FEATURE_CORE_LOW (ARM_EXT_V3M),
   3678     0x00800090, 0x0fa000f0,
   3679     "%22?sumull%20's%c\t%12-15Ru, %16-19Ru, %0-3R, %8-11R"},
   3680   {ARM_FEATURE_CORE_LOW (ARM_EXT_V3M),
   3681     0x00a00090, 0x0fa000f0,
   3682     "%22?sumlal%20's%c\t%12-15Ru, %16-19Ru, %0-3R, %8-11R"},
   3683 
   3684   /* V8.2 RAS extension instructions.  */
   3685   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_RAS),
   3686     0xe320f010, 0xffffffff, "esb"},
   3687 
   3688   /* V8-R instructions.  */
   3689   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8R),
   3690     0xf57ff04c, 0xffffffff, "dfb"},
   3691 
   3692   /* V8 instructions.  */
   3693   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   3694     0x0320f005, 0x0fffffff, "sevl"},
   3695   /* Defined in V8 but is in NOP space so available to all arch.  */
   3696   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   3697     0xe1000070, 0xfff000f0, "hlt\t0x%16-19X%12-15X%8-11X%0-3X"},
   3698   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_ATOMICS),
   3699     0x01800e90, 0x0ff00ff0, "stlex%c\t%12-15r, %0-3r, [%16-19R]"},
   3700   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3701     0x01900e9f, 0x0ff00fff, "ldaex%c\t%12-15r, [%16-19R]"},
   3702   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   3703     0x01a00e90, 0x0ff00ff0, "stlexd%c\t%12-15r, %0-3r, %0-3T, [%16-19R]"},
   3704   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   3705     0x01b00e9f, 0x0ff00fff, "ldaexd%c\t%12-15r, %12-15T, [%16-19R]"},
   3706   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3707     0x01c00e90, 0x0ff00ff0, "stlexb%c\t%12-15r, %0-3r, [%16-19R]"},
   3708   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3709     0x01d00e9f, 0x0ff00fff, "ldaexb%c\t%12-15r, [%16-19R]"},
   3710   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3711     0x01e00e90, 0x0ff00ff0, "stlexh%c\t%12-15r, %0-3r, [%16-19R]"},
   3712   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3713     0x01f00e9f, 0x0ff00fff, "ldaexh%c\t%12-15r, [%16-19R]"},
   3714   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3715     0x0180fc90, 0x0ff0fff0, "stl%c\t%0-3r, [%16-19R]"},
   3716   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3717     0x01900c9f, 0x0ff00fff, "lda%c\t%12-15r, [%16-19R]"},
   3718   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3719     0x01c0fc90, 0x0ff0fff0, "stlb%c\t%0-3r, [%16-19R]"},
   3720   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3721     0x01d00c9f, 0x0ff00fff, "ldab%c\t%12-15r, [%16-19R]"},
   3722   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3723     0x01e0fc90, 0x0ff0fff0, "stlh%c\t%0-3r, [%16-19R]"},
   3724   {ARM_FEATURE_CORE_LOW (ARM_EXT2_ATOMICS),
   3725     0x01f00c9f, 0x0ff00fff, "ldah%c\t%12-15r, [%16-19R]"},
   3726   /* CRC32 instructions.  */
   3727   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   3728     0xe1000040, 0xfff00ff0, "crc32b\t%12-15R, %16-19R, %0-3R"},
   3729   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   3730     0xe1200040, 0xfff00ff0, "crc32h\t%12-15R, %16-19R, %0-3R"},
   3731   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   3732     0xe1400040, 0xfff00ff0, "crc32w\t%12-15R, %16-19R, %0-3R"},
   3733   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   3734     0xe1000240, 0xfff00ff0, "crc32cb\t%12-15R, %16-19R, %0-3R"},
   3735   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   3736     0xe1200240, 0xfff00ff0, "crc32ch\t%12-15R, %16-19R, %0-3R"},
   3737   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   3738     0xe1400240, 0xfff00ff0, "crc32cw\t%12-15R, %16-19R, %0-3R"},
   3739 
   3740   /* Privileged Access Never extension instructions.  */
   3741   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN),
   3742     0xf1100000, 0xfffffdff, "setpan\t#%9-9d"},
   3743 
   3744   /* Virtualization Extension instructions.  */
   3745   {ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x0160006e, 0x0fffffff, "eret%c"},
   3746   {ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x01400070, 0x0ff000f0, "hvc%c\t%e"},
   3747 
   3748   /* Integer Divide Extension instructions.  */
   3749   {ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV),
   3750     0x0710f010, 0x0ff0f0f0, "sdiv%c\t%16-19r, %0-3r, %8-11r"},
   3751   {ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV),
   3752     0x0730f010, 0x0ff0f0f0, "udiv%c\t%16-19r, %0-3r, %8-11r"},
   3753 
   3754   /* MP Extension instructions.  */
   3755   {ARM_FEATURE_CORE_LOW (ARM_EXT_MP), 0xf410f000, 0xfc70f000, "pldw\t%a"},
   3756 
   3757   /* Speculation Barriers.  */
   3758   {ARM_FEATURE_CORE_LOW (ARM_EXT_V3), 0xe320f014, 0xffffffff, "csdb"},
   3759   {ARM_FEATURE_CORE_LOW (ARM_EXT_V3), 0xf57ff040, 0xffffffff, "ssbb"},
   3760   {ARM_FEATURE_CORE_LOW (ARM_EXT_V3), 0xf57ff044, 0xffffffff, "pssbb"},
   3761 
   3762   /* V7 instructions.  */
   3763   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0xf450f000, 0xfd70f000, "pli\t%P"},
   3764   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0x0320f0f0, 0x0ffffff0, "dbg%c\t#%0-3d"},
   3765   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xf57ff051, 0xfffffff3, "dmb\t%U"},
   3766   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xf57ff041, 0xfffffff3, "dsb\t%U"},
   3767   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0xf57ff050, 0xfffffff0, "dmb\t%U"},
   3768   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0xf57ff040, 0xfffffff0, "dsb\t%U"},
   3769   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0xf57ff060, 0xfffffff0, "isb\t%U"},
   3770    {ARM_FEATURE_CORE_LOW (ARM_EXT_V7),
   3771     0x0320f000, 0x0fffffff, "nop%c\t{%0-7d}"},
   3772 
   3773   /* ARM V6T2 instructions.  */
   3774   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   3775     0x07c0001f, 0x0fe0007f, "bfc%c\t%12-15R, %E"},
   3776   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   3777     0x07c00010, 0x0fe00070, "bfi%c\t%12-15R, %0-3r, %E"},
   3778   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   3779     0x00600090, 0x0ff000f0, "mls%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   3780   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   3781     0x002000b0, 0x0f3000f0, "strht%c\t%12-15R, %S"},
   3782 
   3783   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   3784     0x00300090, 0x0f3000f0, UNDEFINED_INSTRUCTION },
   3785   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   3786     0x00300090, 0x0f300090, "ldr%6's%5?hbt%c\t%12-15R, %S"},
   3787 
   3788   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   3789     0x03000000, 0x0ff00000, "movw%c\t%12-15R, %V"},
   3790   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   3791     0x03400000, 0x0ff00000, "movt%c\t%12-15R, %V"},
   3792   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   3793     0x06ff0f30, 0x0fff0ff0, "rbit%c\t%12-15R, %0-3R"},
   3794   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   3795     0x07a00050, 0x0fa00070, "%22?usbfx%c\t%12-15r, %0-3r, #%7-11d, #%16-20W"},
   3796 
   3797   /* ARM Security extension instructions.  */
   3798   {ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),
   3799     0x01600070, 0x0ff000f0, "smc%c\t%e"},
   3800 
   3801   /* ARM V6K instructions.  */
   3802   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3803     0xf57ff01f, 0xffffffff, "clrex"},
   3804   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3805     0x01d00f9f, 0x0ff00fff, "ldrexb%c\t%12-15R, [%16-19R]"},
   3806   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3807     0x01b00f9f, 0x0ff00fff, "ldrexd%c\t%12-15r, [%16-19R]"},
   3808   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3809     0x01f00f9f, 0x0ff00fff, "ldrexh%c\t%12-15R, [%16-19R]"},
   3810   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3811     0x01c00f90, 0x0ff00ff0, "strexb%c\t%12-15R, %0-3R, [%16-19R]"},
   3812   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3813     0x01a00f90, 0x0ff00ff0, "strexd%c\t%12-15R, %0-3r, [%16-19R]"},
   3814   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3815     0x01e00f90, 0x0ff00ff0, "strexh%c\t%12-15R, %0-3R, [%16-19R]"},
   3816 
   3817   /* ARMv8.5-A instructions.  */
   3818   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_SB), 0xf57ff070, 0xffffffff, "sb"},
   3819 
   3820   /* ARM V6K NOP hints.  */
   3821   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3822     0x0320f001, 0x0fffffff, "yield%c"},
   3823   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3824     0x0320f002, 0x0fffffff, "wfe%c"},
   3825   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3826     0x0320f003, 0x0fffffff, "wfi%c"},
   3827   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3828     0x0320f004, 0x0fffffff, "sev%c"},
   3829   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K),
   3830     0x0320f000, 0x0fffff00, "nop%c\t{%0-7d}"},
   3831 
   3832   /* ARM V6 instructions.  */
   3833   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3834     0xf1080000, 0xfffffe3f, "cpsie\t%8'a%7'i%6'f"},
   3835   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3836     0xf10a0000, 0xfffffe20, "cpsie\t%8'a%7'i%6'f,#%0-4d"},
   3837   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3838     0xf10C0000, 0xfffffe3f, "cpsid\t%8'a%7'i%6'f"},
   3839   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3840     0xf10e0000, 0xfffffe20, "cpsid\t%8'a%7'i%6'f,#%0-4d"},
   3841   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3842     0xf1000000, 0xfff1fe20, "cps\t#%0-4d"},
   3843   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3844     0x06800010, 0x0ff00ff0, "pkhbt%c\t%12-15R, %16-19R, %0-3R"},
   3845   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3846     0x06800010, 0x0ff00070, "pkhbt%c\t%12-15R, %16-19R, %0-3R, lsl #%7-11d"},
   3847   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3848     0x06800050, 0x0ff00ff0, "pkhtb%c\t%12-15R, %16-19R, %0-3R, asr #32"},
   3849   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3850     0x06800050, 0x0ff00070, "pkhtb%c\t%12-15R, %16-19R, %0-3R, asr #%7-11d"},
   3851   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3852     0x01900f9f, 0x0ff00fff, "ldrex%c\tr%12-15d, [%16-19R]"},
   3853   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3854     0x06200f10, 0x0ff00ff0, "qadd16%c\t%12-15R, %16-19R, %0-3R"},
   3855   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3856     0x06200f90, 0x0ff00ff0, "qadd8%c\t%12-15R, %16-19R, %0-3R"},
   3857   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3858     0x06200f30, 0x0ff00ff0, "qasx%c\t%12-15R, %16-19R, %0-3R"},
   3859   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3860     0x06200f70, 0x0ff00ff0, "qsub16%c\t%12-15R, %16-19R, %0-3R"},
   3861   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3862     0x06200ff0, 0x0ff00ff0, "qsub8%c\t%12-15R, %16-19R, %0-3R"},
   3863   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3864     0x06200f50, 0x0ff00ff0, "qsax%c\t%12-15R, %16-19R, %0-3R"},
   3865   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3866     0x06100f10, 0x0ff00ff0, "sadd16%c\t%12-15R, %16-19R, %0-3R"},
   3867   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3868     0x06100f90, 0x0ff00ff0, "sadd8%c\t%12-15R, %16-19R, %0-3R"},
   3869   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3870     0x06100f30, 0x0ff00ff0, "sasx%c\t%12-15R, %16-19R, %0-3R"},
   3871   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3872     0x06300f10, 0x0ff00ff0, "shadd16%c\t%12-15R, %16-19R, %0-3R"},
   3873   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3874     0x06300f90, 0x0ff00ff0, "shadd8%c\t%12-15R, %16-19R, %0-3R"},
   3875   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3876     0x06300f30, 0x0ff00ff0, "shasx%c\t%12-15R, %16-19R, %0-3R"},
   3877   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3878     0x06300f70, 0x0ff00ff0, "shsub16%c\t%12-15R, %16-19R, %0-3R"},
   3879   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3880     0x06300ff0, 0x0ff00ff0, "shsub8%c\t%12-15R, %16-19R, %0-3R"},
   3881   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3882     0x06300f50, 0x0ff00ff0, "shsax%c\t%12-15R, %16-19R, %0-3R"},
   3883   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3884     0x06100f70, 0x0ff00ff0, "ssub16%c\t%12-15R, %16-19R, %0-3R"},
   3885   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3886     0x06100ff0, 0x0ff00ff0, "ssub8%c\t%12-15R, %16-19R, %0-3R"},
   3887   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3888     0x06100f50, 0x0ff00ff0, "ssax%c\t%12-15R, %16-19R, %0-3R"},
   3889   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3890     0x06500f10, 0x0ff00ff0, "uadd16%c\t%12-15R, %16-19R, %0-3R"},
   3891   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3892     0x06500f90, 0x0ff00ff0, "uadd8%c\t%12-15R, %16-19R, %0-3R"},
   3893   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3894     0x06500f30, 0x0ff00ff0, "uasx%c\t%12-15R, %16-19R, %0-3R"},
   3895   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3896     0x06700f10, 0x0ff00ff0, "uhadd16%c\t%12-15R, %16-19R, %0-3R"},
   3897   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3898     0x06700f90, 0x0ff00ff0, "uhadd8%c\t%12-15R, %16-19R, %0-3R"},
   3899   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3900     0x06700f30, 0x0ff00ff0, "uhasx%c\t%12-15R, %16-19R, %0-3R"},
   3901   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3902     0x06700f70, 0x0ff00ff0, "uhsub16%c\t%12-15R, %16-19R, %0-3R"},
   3903   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3904     0x06700ff0, 0x0ff00ff0, "uhsub8%c\t%12-15R, %16-19R, %0-3R"},
   3905   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3906     0x06700f50, 0x0ff00ff0, "uhsax%c\t%12-15R, %16-19R, %0-3R"},
   3907   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3908     0x06600f10, 0x0ff00ff0, "uqadd16%c\t%12-15R, %16-19R, %0-3R"},
   3909   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3910     0x06600f90, 0x0ff00ff0, "uqadd8%c\t%12-15R, %16-19R, %0-3R"},
   3911   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3912     0x06600f30, 0x0ff00ff0, "uqasx%c\t%12-15R, %16-19R, %0-3R"},
   3913   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3914     0x06600f70, 0x0ff00ff0, "uqsub16%c\t%12-15R, %16-19R, %0-3R"},
   3915   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3916     0x06600ff0, 0x0ff00ff0, "uqsub8%c\t%12-15R, %16-19R, %0-3R"},
   3917   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3918     0x06600f50, 0x0ff00ff0, "uqsax%c\t%12-15R, %16-19R, %0-3R"},
   3919   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3920     0x06500f70, 0x0ff00ff0, "usub16%c\t%12-15R, %16-19R, %0-3R"},
   3921   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3922     0x06500ff0, 0x0ff00ff0, "usub8%c\t%12-15R, %16-19R, %0-3R"},
   3923   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3924     0x06500f50, 0x0ff00ff0, "usax%c\t%12-15R, %16-19R, %0-3R"},
   3925   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3926     0x06bf0f30, 0x0fff0ff0, "rev%c\t%12-15R, %0-3R"},
   3927   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3928     0x06bf0fb0, 0x0fff0ff0, "rev16%c\t%12-15R, %0-3R"},
   3929   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3930     0x06ff0fb0, 0x0fff0ff0, "revsh%c\t%12-15R, %0-3R"},
   3931   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3932     0xf8100a00, 0xfe50ffff, "rfe%23?id%24?ba\t%16-19r%21'!"},
   3933   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3934     0x06bf0070, 0x0fff0ff0, "sxth%c\t%12-15R, %0-3R"},
   3935   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3936     0x06bf0470, 0x0fff0ff0, "sxth%c\t%12-15R, %0-3R, ror #8"},
   3937   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3938     0x06bf0870, 0x0fff0ff0, "sxth%c\t%12-15R, %0-3R, ror #16"},
   3939   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3940     0x06bf0c70, 0x0fff0ff0, "sxth%c\t%12-15R, %0-3R, ror #24"},
   3941   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3942     0x068f0070, 0x0fff0ff0, "sxtb16%c\t%12-15R, %0-3R"},
   3943   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3944     0x068f0470, 0x0fff0ff0, "sxtb16%c\t%12-15R, %0-3R, ror #8"},
   3945   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3946     0x068f0870, 0x0fff0ff0, "sxtb16%c\t%12-15R, %0-3R, ror #16"},
   3947   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3948     0x068f0c70, 0x0fff0ff0, "sxtb16%c\t%12-15R, %0-3R, ror #24"},
   3949   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3950     0x06af0070, 0x0fff0ff0, "sxtb%c\t%12-15R, %0-3R"},
   3951   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3952     0x06af0470, 0x0fff0ff0, "sxtb%c\t%12-15R, %0-3R, ror #8"},
   3953   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3954     0x06af0870, 0x0fff0ff0, "sxtb%c\t%12-15R, %0-3R, ror #16"},
   3955   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3956     0x06af0c70, 0x0fff0ff0, "sxtb%c\t%12-15R, %0-3R, ror #24"},
   3957   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3958     0x06ff0070, 0x0fff0ff0, "uxth%c\t%12-15R, %0-3R"},
   3959   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3960     0x06ff0470, 0x0fff0ff0, "uxth%c\t%12-15R, %0-3R, ror #8"},
   3961   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3962     0x06ff0870, 0x0fff0ff0, "uxth%c\t%12-15R, %0-3R, ror #16"},
   3963   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3964     0x06ff0c70, 0x0fff0ff0, "uxth%c\t%12-15R, %0-3R, ror #24"},
   3965   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3966     0x06cf0070, 0x0fff0ff0, "uxtb16%c\t%12-15R, %0-3R"},
   3967   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3968     0x06cf0470, 0x0fff0ff0, "uxtb16%c\t%12-15R, %0-3R, ror #8"},
   3969   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3970     0x06cf0870, 0x0fff0ff0, "uxtb16%c\t%12-15R, %0-3R, ror #16"},
   3971   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3972     0x06cf0c70, 0x0fff0ff0, "uxtb16%c\t%12-15R, %0-3R, ror #24"},
   3973   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3974     0x06ef0070, 0x0fff0ff0, "uxtb%c\t%12-15R, %0-3R"},
   3975   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3976     0x06ef0470, 0x0fff0ff0, "uxtb%c\t%12-15R, %0-3R, ror #8"},
   3977   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3978     0x06ef0870, 0x0fff0ff0, "uxtb%c\t%12-15R, %0-3R, ror #16"},
   3979   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3980     0x06ef0c70, 0x0fff0ff0, "uxtb%c\t%12-15R, %0-3R, ror #24"},
   3981   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3982     0x06b00070, 0x0ff00ff0, "sxtah%c\t%12-15R, %16-19r, %0-3R"},
   3983   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3984     0x06b00470, 0x0ff00ff0, "sxtah%c\t%12-15R, %16-19r, %0-3R, ror #8"},
   3985   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3986     0x06b00870, 0x0ff00ff0, "sxtah%c\t%12-15R, %16-19r, %0-3R, ror #16"},
   3987   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3988     0x06b00c70, 0x0ff00ff0, "sxtah%c\t%12-15R, %16-19r, %0-3R, ror #24"},
   3989   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3990     0x06800070, 0x0ff00ff0, "sxtab16%c\t%12-15R, %16-19r, %0-3R"},
   3991   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3992     0x06800470, 0x0ff00ff0, "sxtab16%c\t%12-15R, %16-19r, %0-3R, ror #8"},
   3993   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3994     0x06800870, 0x0ff00ff0, "sxtab16%c\t%12-15R, %16-19r, %0-3R, ror #16"},
   3995   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3996     0x06800c70, 0x0ff00ff0, "sxtab16%c\t%12-15R, %16-19r, %0-3R, ror #24"},
   3997   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   3998     0x06a00070, 0x0ff00ff0, "sxtab%c\t%12-15R, %16-19r, %0-3R"},
   3999   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4000     0x06a00470, 0x0ff00ff0, "sxtab%c\t%12-15R, %16-19r, %0-3R, ror #8"},
   4001   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4002     0x06a00870, 0x0ff00ff0, "sxtab%c\t%12-15R, %16-19r, %0-3R, ror #16"},
   4003   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4004     0x06a00c70, 0x0ff00ff0, "sxtab%c\t%12-15R, %16-19r, %0-3R, ror #24"},
   4005   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4006     0x06f00070, 0x0ff00ff0, "uxtah%c\t%12-15R, %16-19r, %0-3R"},
   4007   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4008     0x06f00470, 0x0ff00ff0, "uxtah%c\t%12-15R, %16-19r, %0-3R, ror #8"},
   4009   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4010     0x06f00870, 0x0ff00ff0, "uxtah%c\t%12-15R, %16-19r, %0-3R, ror #16"},
   4011   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4012     0x06f00c70, 0x0ff00ff0, "uxtah%c\t%12-15R, %16-19r, %0-3R, ror #24"},
   4013   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4014     0x06c00070, 0x0ff00ff0, "uxtab16%c\t%12-15R, %16-19r, %0-3R"},
   4015   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4016     0x06c00470, 0x0ff00ff0, "uxtab16%c\t%12-15R, %16-19r, %0-3R, ror #8"},
   4017   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4018     0x06c00870, 0x0ff00ff0, "uxtab16%c\t%12-15R, %16-19r, %0-3R, ror #16"},
   4019   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4020     0x06c00c70, 0x0ff00ff0, "uxtab16%c\t%12-15R, %16-19r, %0-3R, ROR #24"},
   4021   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4022     0x06e00070, 0x0ff00ff0, "uxtab%c\t%12-15R, %16-19r, %0-3R"},
   4023   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4024     0x06e00470, 0x0ff00ff0, "uxtab%c\t%12-15R, %16-19r, %0-3R, ror #8"},
   4025   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4026     0x06e00870, 0x0ff00ff0, "uxtab%c\t%12-15R, %16-19r, %0-3R, ror #16"},
   4027   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4028     0x06e00c70, 0x0ff00ff0, "uxtab%c\t%12-15R, %16-19r, %0-3R, ror #24"},
   4029   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4030     0x06800fb0, 0x0ff00ff0, "sel%c\t%12-15R, %16-19R, %0-3R"},
   4031   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4032     0xf1010000, 0xfffffc00, "setend\t%9?ble"},
   4033   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4034     0x0700f010, 0x0ff0f0d0, "smuad%5'x%c\t%16-19R, %0-3R, %8-11R"},
   4035   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4036     0x0700f050, 0x0ff0f0d0, "smusd%5'x%c\t%16-19R, %0-3R, %8-11R"},
   4037   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4038     0x07000010, 0x0ff000d0, "smlad%5'x%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   4039   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4040     0x07400010, 0x0ff000d0, "smlald%5'x%c\t%12-15Ru, %16-19Ru, %0-3R, %8-11R"},
   4041   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4042     0x07000050, 0x0ff000d0, "smlsd%5'x%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   4043   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4044     0x07400050, 0x0ff000d0, "smlsld%5'x%c\t%12-15Ru, %16-19Ru, %0-3R, %8-11R"},
   4045   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4046     0x0750f010, 0x0ff0f0d0, "smmul%5'r%c\t%16-19R, %0-3R, %8-11R"},
   4047   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4048     0x07500010, 0x0ff000d0, "smmla%5'r%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   4049   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4050     0x075000d0, 0x0ff000d0, "smmls%5'r%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   4051   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4052     0xf84d0500, 0xfe5fffe0, "srs%23?id%24?ba\t%16-19r%21'!, #%0-4d"},
   4053   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4054     0x06a00010, 0x0fe00ff0, "ssat%c\t%12-15R, #%16-20W, %0-3R"},
   4055   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4056     0x06a00010, 0x0fe00070, "ssat%c\t%12-15R, #%16-20W, %0-3R, lsl #%7-11d"},
   4057   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4058     0x06a00050, 0x0fe00070, "ssat%c\t%12-15R, #%16-20W, %0-3R, asr #%7-11d"},
   4059   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4060     0x06a00f30, 0x0ff00ff0, "ssat16%c\t%12-15r, #%16-19W, %0-3r"},
   4061   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4062     0x01800f90, 0x0ff00ff0, "strex%c\t%12-15R, %0-3R, [%16-19R]"},
   4063   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4064     0x00400090, 0x0ff000f0, "umaal%c\t%12-15R, %16-19R, %0-3R, %8-11R"},
   4065   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4066     0x0780f010, 0x0ff0f0f0, "usad8%c\t%16-19R, %0-3R, %8-11R"},
   4067   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4068     0x07800010, 0x0ff000f0, "usada8%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   4069   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4070     0x06e00010, 0x0fe00ff0, "usat%c\t%12-15R, #%16-20d, %0-3R"},
   4071   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4072     0x06e00010, 0x0fe00070, "usat%c\t%12-15R, #%16-20d, %0-3R, lsl #%7-11d"},
   4073   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4074     0x06e00050, 0x0fe00070, "usat%c\t%12-15R, #%16-20d, %0-3R, asr #%7-11d"},
   4075   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6),
   4076     0x06e00f30, 0x0ff00ff0, "usat16%c\t%12-15R, #%16-19d, %0-3R"},
   4077 
   4078   /* V5J instruction.  */
   4079   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5J),
   4080     0x012fff20, 0x0ffffff0, "bxj%c\t%0-3R"},
   4081 
   4082   /* V5 Instructions.  */
   4083   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
   4084     0xe1200070, 0xfff000f0,
   4085     "bkpt\t0x%16-19X%12-15X%8-11X%0-3X"},
   4086   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
   4087     0xfa000000, 0xfe000000, "blx\t%B"},
   4088   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
   4089     0x012fff30, 0x0ffffff0, "blx%c\t%0-3R"},
   4090   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
   4091     0x016f0f10, 0x0fff0ff0, "clz%c\t%12-15R, %0-3R"},
   4092 
   4093   /* V5E "El Segundo" Instructions.  */
   4094   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5E),
   4095     0x000000d0, 0x0e1000f0, "ldrd%c\t%12-15r, %s"},
   4096   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5E),
   4097     0x000000f0, 0x0e1000f0, "strd%c\t%12-15r, %s"},
   4098   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5E),
   4099     0xf450f000, 0xfc70f000, "pld\t%a"},
   4100   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4101     0x01000080, 0x0ff000f0, "smlabb%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   4102   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4103     0x010000a0, 0x0ff000f0, "smlatb%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   4104   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4105     0x010000c0, 0x0ff000f0, "smlabt%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   4106   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4107     0x010000e0, 0x0ff000f0, "smlatt%c\t%16-19r, %0-3r, %8-11R, %12-15R"},
   4108 
   4109   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4110     0x01200080, 0x0ff000f0, "smlawb%c\t%16-19R, %0-3R, %8-11R, %12-15R"},
   4111   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4112     0x012000c0, 0x0ff000f0, "smlawt%c\t%16-19R, %0-3r, %8-11R, %12-15R"},
   4113 
   4114   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4115     0x01400080, 0x0ff000f0, "smlalbb%c\t%12-15Ru, %16-19Ru, %0-3R, %8-11R"},
   4116   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4117     0x014000a0, 0x0ff000f0, "smlaltb%c\t%12-15Ru, %16-19Ru, %0-3R, %8-11R"},
   4118   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4119     0x014000c0, 0x0ff000f0, "smlalbt%c\t%12-15Ru, %16-19Ru, %0-3R, %8-11R"},
   4120   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4121     0x014000e0, 0x0ff000f0, "smlaltt%c\t%12-15Ru, %16-19Ru, %0-3R, %8-11R"},
   4122 
   4123   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4124     0x01600080, 0x0ff0f0f0, "smulbb%c\t%16-19R, %0-3R, %8-11R"},
   4125   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4126     0x016000a0, 0x0ff0f0f0, "smultb%c\t%16-19R, %0-3R, %8-11R"},
   4127   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4128     0x016000c0, 0x0ff0f0f0, "smulbt%c\t%16-19R, %0-3R, %8-11R"},
   4129   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4130     0x016000e0, 0x0ff0f0f0, "smultt%c\t%16-19R, %0-3R, %8-11R"},
   4131 
   4132   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4133     0x012000a0, 0x0ff0f0f0, "smulwb%c\t%16-19R, %0-3R, %8-11R"},
   4134   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4135     0x012000e0, 0x0ff0f0f0, "smulwt%c\t%16-19R, %0-3R, %8-11R"},
   4136 
   4137   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4138     0x01000050, 0x0ff00ff0,  "qadd%c\t%12-15R, %0-3R, %16-19R"},
   4139   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4140     0x01400050, 0x0ff00ff0, "qdadd%c\t%12-15R, %0-3R, %16-19R"},
   4141   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4142     0x01200050, 0x0ff00ff0,  "qsub%c\t%12-15R, %0-3R, %16-19R"},
   4143   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP),
   4144     0x01600050, 0x0ff00ff0, "qdsub%c\t%12-15R, %0-3R, %16-19R"},
   4145 
   4146   /* ARM Instructions.  */
   4147   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4148     0x052d0004, 0x0fff0fff, "push%c\t{%12-15r}\t\t; (str%c %12-15r, %a)"},
   4149 
   4150   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4151     0x04400000, 0x0e500000, "strb%t%c\t%12-15R, %a"},
   4152   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4153     0x04000000, 0x0e500000, "str%t%c\t%12-15r, %a"},
   4154   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4155     0x06400000, 0x0e500ff0, "strb%t%c\t%12-15R, %a"},
   4156   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4157     0x06000000, 0x0e500ff0, "str%t%c\t%12-15r, %a"},
   4158   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4159     0x04400000, 0x0c500010, "strb%t%c\t%12-15R, %a"},
   4160   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4161     0x04000000, 0x0c500010, "str%t%c\t%12-15r, %a"},
   4162 
   4163   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4164     0x04400000, 0x0e500000, "strb%c\t%12-15R, %a"},
   4165   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4166     0x06400000, 0x0e500010, "strb%c\t%12-15R, %a"},
   4167   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4168     0x004000b0, 0x0e5000f0, "strh%c\t%12-15R, %s"},
   4169   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4170     0x000000b0, 0x0e500ff0, "strh%c\t%12-15R, %s"},
   4171 
   4172   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4173     0x00500090, 0x0e5000f0, UNDEFINED_INSTRUCTION},
   4174   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4175     0x00500090, 0x0e500090, "ldr%6's%5?hb%c\t%12-15R, %s"},
   4176   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4177     0x00100090, 0x0e500ff0, UNDEFINED_INSTRUCTION},
   4178   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4179     0x00100090, 0x0e500f90, "ldr%6's%5?hb%c\t%12-15R, %s"},
   4180 
   4181   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4182     0x02000000, 0x0fe00000, "and%20's%c\t%12-15r, %16-19r, %o"},
   4183   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4184     0x00000000, 0x0fe00010, "and%20's%c\t%12-15r, %16-19r, %o"},
   4185   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4186     0x00000010, 0x0fe00090, "and%20's%c\t%12-15R, %16-19R, %o"},
   4187 
   4188   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4189     0x02200000, 0x0fe00000, "eor%20's%c\t%12-15r, %16-19r, %o"},
   4190   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4191     0x00200000, 0x0fe00010, "eor%20's%c\t%12-15r, %16-19r, %o"},
   4192   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4193     0x00200010, 0x0fe00090, "eor%20's%c\t%12-15R, %16-19R, %o"},
   4194 
   4195   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4196     0x02400000, 0x0fe00000, "sub%20's%c\t%12-15r, %16-19r, %o"},
   4197   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4198     0x00400000, 0x0fe00010, "sub%20's%c\t%12-15r, %16-19r, %o"},
   4199   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4200     0x00400010, 0x0fe00090, "sub%20's%c\t%12-15R, %16-19R, %o"},
   4201 
   4202   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4203     0x02600000, 0x0fe00000, "rsb%20's%c\t%12-15r, %16-19r, %o"},
   4204   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4205     0x00600000, 0x0fe00010, "rsb%20's%c\t%12-15r, %16-19r, %o"},
   4206   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4207     0x00600010, 0x0fe00090, "rsb%20's%c\t%12-15R, %16-19R, %o"},
   4208 
   4209   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4210     0x02800000, 0x0fe00000, "add%20's%c\t%12-15r, %16-19r, %o"},
   4211   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4212     0x00800000, 0x0fe00010, "add%20's%c\t%12-15r, %16-19r, %o"},
   4213   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4214     0x00800010, 0x0fe00090, "add%20's%c\t%12-15R, %16-19R, %o"},
   4215 
   4216   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4217     0x02a00000, 0x0fe00000, "adc%20's%c\t%12-15r, %16-19r, %o"},
   4218   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4219     0x00a00000, 0x0fe00010, "adc%20's%c\t%12-15r, %16-19r, %o"},
   4220   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4221     0x00a00010, 0x0fe00090, "adc%20's%c\t%12-15R, %16-19R, %o"},
   4222 
   4223   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4224     0x02c00000, 0x0fe00000, "sbc%20's%c\t%12-15r, %16-19r, %o"},
   4225   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4226     0x00c00000, 0x0fe00010, "sbc%20's%c\t%12-15r, %16-19r, %o"},
   4227   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4228     0x00c00010, 0x0fe00090, "sbc%20's%c\t%12-15R, %16-19R, %o"},
   4229 
   4230   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4231     0x02e00000, 0x0fe00000, "rsc%20's%c\t%12-15r, %16-19r, %o"},
   4232   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4233     0x00e00000, 0x0fe00010, "rsc%20's%c\t%12-15r, %16-19r, %o"},
   4234   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4235     0x00e00010, 0x0fe00090, "rsc%20's%c\t%12-15R, %16-19R, %o"},
   4236 
   4237   {ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT),
   4238     0x0120f200, 0x0fb0f200, "msr%c\t%C, %0-3r"},
   4239   {ARM_FEATURE_CORE_LOW (ARM_EXT_V3),
   4240     0x0120f000, 0x0db0f000, "msr%c\t%C, %o"},
   4241   {ARM_FEATURE_CORE_LOW (ARM_EXT_V3),
   4242     0x01000000, 0x0fb00cff, "mrs%c\t%12-15R, %R"},
   4243 
   4244   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4245     0x03000000, 0x0fe00000, "tst%p%c\t%16-19r, %o"},
   4246   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4247     0x01000000, 0x0fe00010, "tst%p%c\t%16-19r, %o"},
   4248   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4249     0x01000010, 0x0fe00090, "tst%p%c\t%16-19R, %o"},
   4250 
   4251   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4252     0x03300000, 0x0ff00000, "teq%p%c\t%16-19r, %o"},
   4253   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4254     0x01300000, 0x0ff00010, "teq%p%c\t%16-19r, %o"},
   4255   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4256     0x01300010, 0x0ff00010, "teq%p%c\t%16-19R, %o"},
   4257 
   4258   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4259     0x03400000, 0x0fe00000, "cmp%p%c\t%16-19r, %o"},
   4260   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4261     0x01400000, 0x0fe00010, "cmp%p%c\t%16-19r, %o"},
   4262   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4263     0x01400010, 0x0fe00090, "cmp%p%c\t%16-19R, %o"},
   4264 
   4265   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4266     0x03600000, 0x0fe00000, "cmn%p%c\t%16-19r, %o"},
   4267   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4268     0x01600000, 0x0fe00010, "cmn%p%c\t%16-19r, %o"},
   4269   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4270     0x01600010, 0x0fe00090, "cmn%p%c\t%16-19R, %o"},
   4271 
   4272   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4273     0x03800000, 0x0fe00000, "orr%20's%c\t%12-15r, %16-19r, %o"},
   4274   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4275     0x01800000, 0x0fe00010, "orr%20's%c\t%12-15r, %16-19r, %o"},
   4276   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4277     0x01800010, 0x0fe00090, "orr%20's%c\t%12-15R, %16-19R, %o"},
   4278 
   4279   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4280     0x03a00000, 0x0fef0000, "mov%20's%c\t%12-15r, %o"},
   4281   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4282     0x01a00000, 0x0def0ff0, "mov%20's%c\t%12-15r, %0-3r"},
   4283   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4284     0x01a00000, 0x0def0060, "lsl%20's%c\t%12-15R, %q"},
   4285   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4286     0x01a00020, 0x0def0060, "lsr%20's%c\t%12-15R, %q"},
   4287   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4288     0x01a00040, 0x0def0060, "asr%20's%c\t%12-15R, %q"},
   4289   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4290     0x01a00060, 0x0def0ff0, "rrx%20's%c\t%12-15r, %0-3r"},
   4291   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4292     0x01a00060, 0x0def0060, "ror%20's%c\t%12-15R, %q"},
   4293 
   4294   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4295     0x03c00000, 0x0fe00000, "bic%20's%c\t%12-15r, %16-19r, %o"},
   4296   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4297     0x01c00000, 0x0fe00010, "bic%20's%c\t%12-15r, %16-19r, %o"},
   4298   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4299     0x01c00010, 0x0fe00090, "bic%20's%c\t%12-15R, %16-19R, %o"},
   4300 
   4301   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4302     0x03e00000, 0x0fe00000, "mvn%20's%c\t%12-15r, %o"},
   4303   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4304     0x01e00000, 0x0fe00010, "mvn%20's%c\t%12-15r, %o"},
   4305   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4306     0x01e00010, 0x0fe00090, "mvn%20's%c\t%12-15R, %o"},
   4307 
   4308   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4309     0x06000010, 0x0e000010, UNDEFINED_INSTRUCTION},
   4310   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4311     0x049d0004, 0x0fff0fff, "pop%c\t{%12-15r}\t\t; (ldr%c %12-15r, %a)"},
   4312 
   4313   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4314     0x04500000, 0x0c500000, "ldrb%t%c\t%12-15R, %a"},
   4315 
   4316   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4317     0x04300000, 0x0d700000, "ldrt%c\t%12-15R, %a"},
   4318   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4319     0x04100000, 0x0c500000, "ldr%c\t%12-15r, %a"},
   4320 
   4321   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4322     0x092d0001, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4323   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4324     0x092d0002, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4325   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4326     0x092d0004, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4327   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4328     0x092d0008, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4329   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4330     0x092d0010, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4331   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4332     0x092d0020, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4333   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4334     0x092d0040, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4335   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4336     0x092d0080, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4337   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4338     0x092d0100, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4339   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4340     0x092d0200, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4341   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4342     0x092d0400, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4343   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4344     0x092d0800, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4345   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4346     0x092d1000, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4347   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4348     0x092d2000, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4349   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4350     0x092d4000, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4351   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4352     0x092d8000, 0x0fffffff, "stmfd%c\t%16-19R!, %m"},
   4353   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4354     0x092d0000, 0x0fff0000, "push%c\t%m"},
   4355   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4356     0x08800000, 0x0ff00000, "stm%c\t%16-19R%21'!, %m%22'^"},
   4357   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4358     0x08000000, 0x0e100000, "stm%23?id%24?ba%c\t%16-19R%21'!, %m%22'^"},
   4359 
   4360   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4361     0x08bd0001, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4362   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4363     0x08bd0002, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4364   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4365     0x08bd0004, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4366   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4367     0x08bd0008, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4368   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4369     0x08bd0010, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4370   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4371     0x08bd0020, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4372   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4373     0x08bd0040, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4374   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4375     0x08bd0080, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4376   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4377     0x08bd0100, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4378   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4379     0x08bd0200, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4380   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4381     0x08bd0400, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4382   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4383     0x08bd0800, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4384   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4385     0x08bd1000, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4386   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4387     0x08bd2000, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4388   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4389     0x08bd4000, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4390   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4391     0x08bd8000, 0x0fffffff, "ldmfd%c\t%16-19R!, %m"},
   4392   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4393     0x08bd0000, 0x0fff0000, "pop%c\t%m"},
   4394   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4395     0x08900000, 0x0f900000, "ldm%c\t%16-19R%21'!, %m%22'^"},
   4396   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4397     0x08100000, 0x0e100000, "ldm%23?id%24?ba%c\t%16-19R%21'!, %m%22'^"},
   4398 
   4399   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4400     0x0a000000, 0x0e000000, "b%24'l%c\t%b"},
   4401   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4402     0x0f000000, 0x0f000000, "svc%c\t%0-23x"},
   4403 
   4404   /* The rest.  */
   4405   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7),
   4406     0x03200000, 0x0fff00ff, "nop%c\t{%0-7d}" UNPREDICTABLE_INSTRUCTION},
   4407   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   4408     0x00000000, 0x00000000, UNDEFINED_INSTRUCTION},
   4409   {ARM_FEATURE_CORE_LOW (0),
   4410     0x00000000, 0x00000000, 0}
   4411 };
   4412 
   4413 /* print_insn_thumb16 recognizes the following format control codes:
   4414 
   4415    %S                   print Thumb register (bits 3..5 as high number if bit 6 set)
   4416    %D                   print Thumb register (bits 0..2 as high number if bit 7 set)
   4417    %<bitfield>I         print bitfield as a signed decimal
   4418    				(top bit of range being the sign bit)
   4419    %N                   print Thumb register mask (with LR)
   4420    %O                   print Thumb register mask (with PC)
   4421    %M                   print Thumb register mask
   4422    %b			print CZB's 6-bit unsigned branch destination
   4423    %s			print Thumb right-shift immediate (6..10; 0 == 32).
   4424    %c			print the condition code
   4425    %C			print the condition code, or "s" if not conditional
   4426    %x			print warning if conditional an not at end of IT block"
   4427    %X			print "\t; unpredictable <IT:code>" if conditional
   4428    %I			print IT instruction suffix and operands
   4429    %W			print Thumb Writeback indicator for LDMIA
   4430    %<bitfield>r		print bitfield as an ARM register
   4431    %<bitfield>d		print bitfield as a decimal
   4432    %<bitfield>H         print (bitfield * 2) as a decimal
   4433    %<bitfield>W         print (bitfield * 4) as a decimal
   4434    %<bitfield>a         print (bitfield * 4) as a pc-rel offset + decoded symbol
   4435    %<bitfield>B         print Thumb branch destination (signed displacement)
   4436    %<bitfield>c         print bitfield as a condition code
   4437    %<bitnum>'c		print specified char iff bit is one
   4438    %<bitnum>?ab		print a if bit is one else print b.  */
   4439 
   4440 static const struct opcode16 thumb_opcodes[] =
   4441 {
   4442   /* Thumb instructions.  */
   4443 
   4444   /* ARMv8-M Security Extensions instructions.  */
   4445   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8M), 0x4784, 0xff87, "blxns\t%3-6r"},
   4446   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8M), 0x4704, 0xff87, "bxns\t%3-6r"},
   4447 
   4448   /* ARM V8 instructions.  */
   4449   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),  0xbf50, 0xffff, "sevl%c"},
   4450   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),  0xba80, 0xffc0, "hlt\t%0-5x"},
   4451   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN),  0xb610, 0xfff7, "setpan\t#%3-3d"},
   4452 
   4453   /* ARM V6K no-argument instructions.  */
   4454   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf00, 0xffff, "nop%c"},
   4455   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf10, 0xffff, "yield%c"},
   4456   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf20, 0xffff, "wfe%c"},
   4457   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf30, 0xffff, "wfi%c"},
   4458   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf40, 0xffff, "sev%c"},
   4459   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf00, 0xff0f, "nop%c\t{%4-7d}"},
   4460 
   4461   /* ARM V6T2 instructions.  */
   4462   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   4463     0xb900, 0xfd00, "cbnz\t%0-2r, %b%X"},
   4464   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   4465     0xb100, 0xfd00, "cbz\t%0-2r, %b%X"},
   4466   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xbf00, 0xff00, "it%I%X"},
   4467 
   4468   /* ARM V6.  */
   4469   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xb660, 0xfff8, "cpsie\t%2'a%1'i%0'f%X"},
   4470   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xb670, 0xfff8, "cpsid\t%2'a%1'i%0'f%X"},
   4471   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0x4600, 0xffc0, "mov%c\t%0-2r, %3-5r"},
   4472   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xba00, 0xffc0, "rev%c\t%0-2r, %3-5r"},
   4473   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xba40, 0xffc0, "rev16%c\t%0-2r, %3-5r"},
   4474   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xbac0, 0xffc0, "revsh%c\t%0-2r, %3-5r"},
   4475   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xb650, 0xfff7, "setend\t%3?ble%X"},
   4476   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xb200, 0xffc0, "sxth%c\t%0-2r, %3-5r"},
   4477   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xb240, 0xffc0, "sxtb%c\t%0-2r, %3-5r"},
   4478   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xb280, 0xffc0, "uxth%c\t%0-2r, %3-5r"},
   4479   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6), 0xb2c0, 0xffc0, "uxtb%c\t%0-2r, %3-5r"},
   4480 
   4481   /* ARM V5 ISA extends Thumb.  */
   4482   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5T),
   4483     0xbe00, 0xff00, "bkpt\t%0-7x"}, /* Is always unconditional.  */
   4484   /* This is BLX(2).  BLX(1) is a 32-bit instruction.  */
   4485   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5T),
   4486     0x4780, 0xff87, "blx%c\t%3-6r%x"},	/* note: 4 bit register number.  */
   4487   /* ARM V4T ISA (Thumb v1).  */
   4488   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4489     0x46C0, 0xFFFF, "nop%c\t\t\t; (mov r8, r8)"},
   4490   /* Format 4.  */
   4491   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4000, 0xFFC0, "and%C\t%0-2r, %3-5r"},
   4492   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4040, 0xFFC0, "eor%C\t%0-2r, %3-5r"},
   4493   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4080, 0xFFC0, "lsl%C\t%0-2r, %3-5r"},
   4494   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x40C0, 0xFFC0, "lsr%C\t%0-2r, %3-5r"},
   4495   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4100, 0xFFC0, "asr%C\t%0-2r, %3-5r"},
   4496   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4140, 0xFFC0, "adc%C\t%0-2r, %3-5r"},
   4497   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4180, 0xFFC0, "sbc%C\t%0-2r, %3-5r"},
   4498   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x41C0, 0xFFC0, "ror%C\t%0-2r, %3-5r"},
   4499   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4200, 0xFFC0, "tst%c\t%0-2r, %3-5r"},
   4500   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4240, 0xFFC0, "neg%C\t%0-2r, %3-5r"},
   4501   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4280, 0xFFC0, "cmp%c\t%0-2r, %3-5r"},
   4502   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x42C0, 0xFFC0, "cmn%c\t%0-2r, %3-5r"},
   4503   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4300, 0xFFC0, "orr%C\t%0-2r, %3-5r"},
   4504   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4340, 0xFFC0, "mul%C\t%0-2r, %3-5r"},
   4505   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4380, 0xFFC0, "bic%C\t%0-2r, %3-5r"},
   4506   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x43C0, 0xFFC0, "mvn%C\t%0-2r, %3-5r"},
   4507   /* format 13 */
   4508   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xB000, 0xFF80, "add%c\tsp, #%0-6W"},
   4509   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xB080, 0xFF80, "sub%c\tsp, #%0-6W"},
   4510   /* format 5 */
   4511   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4700, 0xFF80, "bx%c\t%S%x"},
   4512   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4400, 0xFF00, "add%c\t%D, %S"},
   4513   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4500, 0xFF00, "cmp%c\t%D, %S"},
   4514   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x4600, 0xFF00, "mov%c\t%D, %S"},
   4515   /* format 14 */
   4516   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xB400, 0xFE00, "push%c\t%N"},
   4517   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xBC00, 0xFE00, "pop%c\t%O"},
   4518   /* format 2 */
   4519   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4520     0x1800, 0xFE00, "add%C\t%0-2r, %3-5r, %6-8r"},
   4521   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4522     0x1A00, 0xFE00, "sub%C\t%0-2r, %3-5r, %6-8r"},
   4523   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4524     0x1C00, 0xFE00, "add%C\t%0-2r, %3-5r, #%6-8d"},
   4525   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4526     0x1E00, 0xFE00, "sub%C\t%0-2r, %3-5r, #%6-8d"},
   4527   /* format 8 */
   4528   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4529     0x5200, 0xFE00, "strh%c\t%0-2r, [%3-5r, %6-8r]"},
   4530   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4531     0x5A00, 0xFE00, "ldrh%c\t%0-2r, [%3-5r, %6-8r]"},
   4532   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4533     0x5600, 0xF600, "ldrs%11?hb%c\t%0-2r, [%3-5r, %6-8r]"},
   4534   /* format 7 */
   4535   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4536     0x5000, 0xFA00, "str%10'b%c\t%0-2r, [%3-5r, %6-8r]"},
   4537   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4538     0x5800, 0xFA00, "ldr%10'b%c\t%0-2r, [%3-5r, %6-8r]"},
   4539   /* format 1 */
   4540   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x0000, 0xFFC0, "mov%C\t%0-2r, %3-5r"},
   4541   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4542     0x0000, 0xF800, "lsl%C\t%0-2r, %3-5r, #%6-10d"},
   4543   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x0800, 0xF800, "lsr%C\t%0-2r, %3-5r, %s"},
   4544   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x1000, 0xF800, "asr%C\t%0-2r, %3-5r, %s"},
   4545   /* format 3 */
   4546   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x2000, 0xF800, "mov%C\t%8-10r, #%0-7d"},
   4547   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x2800, 0xF800, "cmp%c\t%8-10r, #%0-7d"},
   4548   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x3000, 0xF800, "add%C\t%8-10r, #%0-7d"},
   4549   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0x3800, 0xF800, "sub%C\t%8-10r, #%0-7d"},
   4550   /* format 6 */
   4551   /* TODO: Disassemble PC relative "LDR rD,=<symbolic>" */
   4552   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4553     0x4800, 0xF800,
   4554     "ldr%c\t%8-10r, [pc, #%0-7W]\t; (%0-7a)"},
   4555   /* format 9 */
   4556   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4557     0x6000, 0xF800, "str%c\t%0-2r, [%3-5r, #%6-10W]"},
   4558   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4559     0x6800, 0xF800, "ldr%c\t%0-2r, [%3-5r, #%6-10W]"},
   4560   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4561     0x7000, 0xF800, "strb%c\t%0-2r, [%3-5r, #%6-10d]"},
   4562   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4563     0x7800, 0xF800, "ldrb%c\t%0-2r, [%3-5r, #%6-10d]"},
   4564   /* format 10 */
   4565   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4566     0x8000, 0xF800, "strh%c\t%0-2r, [%3-5r, #%6-10H]"},
   4567   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4568     0x8800, 0xF800, "ldrh%c\t%0-2r, [%3-5r, #%6-10H]"},
   4569   /* format 11 */
   4570   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4571     0x9000, 0xF800, "str%c\t%8-10r, [sp, #%0-7W]"},
   4572   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4573     0x9800, 0xF800, "ldr%c\t%8-10r, [sp, #%0-7W]"},
   4574   /* format 12 */
   4575   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4576     0xA000, 0xF800, "add%c\t%8-10r, pc, #%0-7W\t; (adr %8-10r, %0-7a)"},
   4577   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   4578     0xA800, 0xF800, "add%c\t%8-10r, sp, #%0-7W"},
   4579   /* format 15 */
   4580   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xC000, 0xF800, "stmia%c\t%8-10r!, %M"},
   4581   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xC800, 0xF800, "ldmia%c\t%8-10r%W, %M"},
   4582   /* format 17 */
   4583   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xDF00, 0xFF00, "svc%c\t%0-7d"},
   4584   /* format 16 */
   4585   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xDE00, 0xFF00, "udf%c\t#%0-7d"},
   4586   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xDE00, 0xFE00, UNDEFINED_INSTRUCTION},
   4587   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xD000, 0xF000, "b%8-11c.n\t%0-7B%X"},
   4588   /* format 18 */
   4589   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T), 0xE000, 0xF800, "b%c.n\t%0-10B%x"},
   4590 
   4591   /* The E800 .. FFFF range is unconditionally redirected to the
   4592      32-bit table, because even in pre-V6T2 ISAs, BL and BLX(1) pairs
   4593      are processed via that table.  Thus, we can never encounter a
   4594      bare "second half of BL/BLX(1)" instruction here.  */
   4595   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),  0x0000, 0x0000, UNDEFINED_INSTRUCTION},
   4596   {ARM_FEATURE_CORE_LOW (0), 0, 0, 0}
   4597 };
   4598 
   4599 /* Thumb32 opcodes use the same table structure as the ARM opcodes.
   4600    We adopt the convention that hw1 is the high 16 bits of .value and
   4601    .mask, hw2 the low 16 bits.
   4602 
   4603    print_insn_thumb32 recognizes the following format control codes:
   4604 
   4605        %%		%
   4606 
   4607        %I		print a 12-bit immediate from hw1[10],hw2[14:12,7:0]
   4608        %M		print a modified 12-bit immediate (same location)
   4609        %J		print a 16-bit immediate from hw1[3:0,10],hw2[14:12,7:0]
   4610        %K		print a 16-bit immediate from hw2[3:0],hw1[3:0],hw2[11:4]
   4611        %H		print a 16-bit immediate from hw2[3:0],hw1[11:0]
   4612        %S		print a possibly-shifted Rm
   4613 
   4614        %L		print address for a ldrd/strd instruction
   4615        %a		print the address of a plain load/store
   4616        %w		print the width and signedness of a core load/store
   4617        %m		print register mask for ldm/stm
   4618        %n		print register mask for clrm
   4619 
   4620        %E		print the lsb and width fields of a bfc/bfi instruction
   4621        %F		print the lsb and width fields of a sbfx/ubfx instruction
   4622        %G		print a fallback offset for Branch Future instructions
   4623        %W		print an offset for BF instruction
   4624        %Y		print an offset for BFL instruction
   4625        %Z		print an offset for BFCSEL instruction
   4626        %Q		print an offset for Low Overhead Loop instructions
   4627        %P		print an offset for Low Overhead Loop end instructions
   4628        %b		print a conditional branch offset
   4629        %B		print an unconditional branch offset
   4630        %s		print the shift field of an SSAT instruction
   4631        %R		print the rotation field of an SXT instruction
   4632        %U		print barrier type.
   4633        %P		print address for pli instruction.
   4634        %c		print the condition code
   4635        %x		print warning if conditional an not at end of IT block"
   4636        %X		print "\t; unpredictable <IT:code>" if conditional
   4637 
   4638        %<bitfield>d	print bitfield in decimal
   4639        %<bitfield>D     print bitfield plus one in decimal
   4640        %<bitfield>W	print bitfield*4 in decimal
   4641        %<bitfield>r	print bitfield as an ARM register
   4642        %<bitfield>R	as %<>r but r15 is UNPREDICTABLE
   4643        %<bitfield>S	as %<>r but r13 and r15 is UNPREDICTABLE
   4644        %<bitfield>c	print bitfield as a condition code
   4645 
   4646        %<bitfield>'c	print specified char iff bitfield is all ones
   4647        %<bitfield>`c	print specified char iff bitfield is all zeroes
   4648        %<bitfield>?ab... select from array of values in big endian order
   4649 
   4650    With one exception at the bottom (done because BL and BLX(1) need
   4651    to come dead last), this table was machine-sorted first in
   4652    decreasing order of number of bits set in the mask, then in
   4653    increasing numeric order of mask, then in increasing numeric order
   4654    of opcode.  This order is not the clearest for a human reader, but
   4655    is guaranteed never to catch a special-case bit pattern with a more
   4656    general mask, which is important, because this instruction encoding
   4657    makes heavy use of special-case bit patterns.  */
   4658 static const struct opcode32 thumb32_opcodes[] =
   4659 {
   4660   /* Armv8.1-M Mainline and Armv8.1-M Mainline Security Extensions
   4661      instructions.  */
   4662   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4663     0xf00fe001, 0xffffffff, "lctp%c"},
   4664   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4665     0xf02fc001, 0xfffff001, "le\t%P"},
   4666   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4667     0xf00fc001, 0xfffff001, "le\tlr, %P"},
   4668   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4669     0xf01fc001, 0xfffff001, "letp\tlr, %P"},
   4670   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4671     0xf040c001, 0xfff0f001, "wls\tlr, %16-19S, %Q"},
   4672   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4673     0xf000c001, 0xffc0f001, "wlstp.%20-21s\tlr, %16-19S, %Q"},
   4674   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4675     0xf040e001, 0xfff0ffff, "dls\tlr, %16-19S"},
   4676   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4677     0xf000e001, 0xffc0ffff, "dlstp.%20-21s\tlr, %16-19S"},
   4678 
   4679   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4680     0xf040e001, 0xf860f001, "bf%c\t%G, %W"},
   4681   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4682     0xf060e001, 0xf8f0f001, "bfx%c\t%G, %16-19S"},
   4683   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4684     0xf000c001, 0xf800f001, "bfl%c\t%G, %Y"},
   4685   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4686     0xf070e001, 0xf8f0f001, "bflx%c\t%G, %16-19S"},
   4687   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4688     0xf000e001, 0xf840f001, "bfcsel\t%G, %Z, %18-21c"},
   4689 
   4690   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN),
   4691     0xe89f0000, 0xffff2000, "clrm%c\t%n"},
   4692 
   4693   /* ARMv8-M and ARMv8-M Security Extensions instructions.  */
   4694   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8M), 0xe97fe97f, 0xffffffff, "sg"},
   4695   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8M),
   4696     0xe840f000, 0xfff0f0ff, "tt\t%8-11r, %16-19r"},
   4697   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8M),
   4698     0xe840f040, 0xfff0f0ff, "ttt\t%8-11r, %16-19r"},
   4699   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8M),
   4700     0xe840f080, 0xfff0f0ff, "tta\t%8-11r, %16-19r"},
   4701   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8M),
   4702     0xe840f0c0, 0xfff0f0ff, "ttat\t%8-11r, %16-19r"},
   4703 
   4704   /* ARM V8.2 RAS extension instructions.  */
   4705   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_RAS),
   4706     0xf3af8010, 0xffffffff, "esb"},
   4707 
   4708   /* V8 instructions.  */
   4709   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4710     0xf3af8005, 0xffffffff, "sevl%c.w"},
   4711   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4712     0xf78f8000, 0xfffffffc, "dcps%0-1d"},
   4713   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4714     0xe8c00f8f, 0xfff00fff, "stlb%c\t%12-15r, [%16-19R]"},
   4715   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4716     0xe8c00f9f, 0xfff00fff, "stlh%c\t%12-15r, [%16-19R]"},
   4717   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4718     0xe8c00faf, 0xfff00fff, "stl%c\t%12-15r, [%16-19R]"},
   4719   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4720     0xe8c00fc0, 0xfff00ff0, "stlexb%c\t%0-3r, %12-15r, [%16-19R]"},
   4721   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4722     0xe8c00fd0, 0xfff00ff0, "stlexh%c\t%0-3r, %12-15r, [%16-19R]"},
   4723   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4724     0xe8c00fe0, 0xfff00ff0, "stlex%c\t%0-3r, %12-15r, [%16-19R]"},
   4725   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4726     0xe8c000f0, 0xfff000f0, "stlexd%c\t%0-3r, %12-15r, %8-11r, [%16-19R]"},
   4727   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4728     0xe8d00f8f, 0xfff00fff, "ldab%c\t%12-15r, [%16-19R]"},
   4729   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4730     0xe8d00f9f, 0xfff00fff, "ldah%c\t%12-15r, [%16-19R]"},
   4731   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4732     0xe8d00faf, 0xfff00fff, "lda%c\t%12-15r, [%16-19R]"},
   4733   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4734     0xe8d00fcf, 0xfff00fff, "ldaexb%c\t%12-15r, [%16-19R]"},
   4735   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4736     0xe8d00fdf, 0xfff00fff, "ldaexh%c\t%12-15r, [%16-19R]"},
   4737   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4738     0xe8d00fef, 0xfff00fff, "ldaex%c\t%12-15r, [%16-19R]"},
   4739   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),
   4740     0xe8d000ff, 0xfff000ff, "ldaexd%c\t%12-15r, %8-11r, [%16-19R]"},
   4741 
   4742   /* V8-R instructions.  */
   4743   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8R),
   4744     0xf3bf8f4c, 0xffffffff, "dfb%c"},
   4745 
   4746   /* CRC32 instructions.  */
   4747   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   4748     0xfac0f080, 0xfff0f0f0, "crc32b\t%8-11R, %16-19R, %0-3R"},
   4749   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   4750     0xfac0f090, 0xfff0f0f0, "crc32h\t%9-11R, %16-19R, %0-3R"},
   4751   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   4752     0xfac0f0a0, 0xfff0f0f0, "crc32w\t%8-11R, %16-19R, %0-3R"},
   4753   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   4754     0xfad0f080, 0xfff0f0f0, "crc32cb\t%8-11R, %16-19R, %0-3R"},
   4755   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   4756     0xfad0f090, 0xfff0f0f0, "crc32ch\t%8-11R, %16-19R, %0-3R"},
   4757   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_CRC),
   4758     0xfad0f0a0, 0xfff0f0f0, "crc32cw\t%8-11R, %16-19R, %0-3R"},
   4759 
   4760   /* Speculation Barriers.  */
   4761   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf3af8014, 0xffffffff, "csdb"},
   4762   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf3bf8f40, 0xffffffff, "ssbb"},
   4763   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf3bf8f44, 0xffffffff, "pssbb"},
   4764 
   4765   /* V7 instructions.  */
   4766   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0xf910f000, 0xff70f000, "pli%c\t%a"},
   4767   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0xf3af80f0, 0xfffffff0, "dbg%c\t#%0-3d"},
   4768   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xf3bf8f51, 0xfffffff3, "dmb%c\t%U"},
   4769   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xf3bf8f41, 0xfffffff3, "dsb%c\t%U"},
   4770   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0xf3bf8f50, 0xfffffff0, "dmb%c\t%U"},
   4771   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0xf3bf8f40, 0xfffffff0, "dsb%c\t%U"},
   4772   {ARM_FEATURE_CORE_LOW (ARM_EXT_V7), 0xf3bf8f60, 0xfffffff0, "isb%c\t%U"},
   4773   {ARM_FEATURE_CORE_LOW (ARM_EXT_DIV),
   4774     0xfb90f0f0, 0xfff0f0f0, "sdiv%c\t%8-11r, %16-19r, %0-3r"},
   4775   {ARM_FEATURE_CORE_LOW (ARM_EXT_DIV),
   4776     0xfbb0f0f0, 0xfff0f0f0, "udiv%c\t%8-11r, %16-19r, %0-3r"},
   4777 
   4778   /* Virtualization Extension instructions.  */
   4779   {ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0xf7e08000, 0xfff0f000, "hvc%c\t%V"},
   4780   /* We skip ERET as that is SUBS pc, lr, #0.  */
   4781 
   4782   /* MP Extension instructions.  */
   4783   {ARM_FEATURE_CORE_LOW (ARM_EXT_MP),   0xf830f000, 0xff70f000, "pldw%c\t%a"},
   4784 
   4785   /* Security extension instructions.  */
   4786   {ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),  0xf7f08000, 0xfff0f000, "smc%c\t%K"},
   4787 
   4788   /* ARMv8.5-A instructions.  */
   4789   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_SB), 0xf3bf8f70, 0xffffffff, "sb"},
   4790 
   4791   /* Instructions defined in the basic V6T2 set.  */
   4792   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf3af8000, 0xffffffff, "nop%c.w"},
   4793   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf3af8001, 0xffffffff, "yield%c.w"},
   4794   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf3af8002, 0xffffffff, "wfe%c.w"},
   4795   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf3af8003, 0xffffffff, "wfi%c.w"},
   4796   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf3af8004, 0xffffffff, "sev%c.w"},
   4797   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4798     0xf3af8000, 0xffffff00, "nop%c.w\t{%0-7d}"},
   4799   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf7f0a000, 0xfff0f000, "udf%c.w\t%H"},
   4800 
   4801   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   4802     0xf3bf8f2f, 0xffffffff, "clrex%c"},
   4803   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4804     0xf3af8400, 0xffffff1f, "cpsie.w\t%7'a%6'i%5'f%X"},
   4805   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4806     0xf3af8600, 0xffffff1f, "cpsid.w\t%7'a%6'i%5'f%X"},
   4807   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4808     0xf3c08f00, 0xfff0ffff, "bxj%c\t%16-19r%x"},
   4809   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4810     0xe810c000, 0xffd0ffff, "rfedb%c\t%16-19r%21'!"},
   4811   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4812     0xe990c000, 0xffd0ffff, "rfeia%c\t%16-19r%21'!"},
   4813   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4814     0xf3e08000, 0xffe0f000, "mrs%c\t%8-11r, %D"},
   4815   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4816     0xf3af8100, 0xffffffe0, "cps\t#%0-4d%X"},
   4817   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4818     0xe8d0f000, 0xfff0fff0, "tbb%c\t[%16-19r, %0-3r]%x"},
   4819   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4820     0xe8d0f010, 0xfff0fff0, "tbh%c\t[%16-19r, %0-3r, lsl #1]%x"},
   4821   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4822     0xf3af8500, 0xffffff00, "cpsie\t%7'a%6'i%5'f, #%0-4d%X"},
   4823   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4824     0xf3af8700, 0xffffff00, "cpsid\t%7'a%6'i%5'f, #%0-4d%X"},
   4825   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4826     0xf3de8f00, 0xffffff00, "subs%c\tpc, lr, #%0-7d"},
   4827   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4828     0xf3808000, 0xffe0f000, "msr%c\t%C, %16-19r"},
   4829   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   4830     0xe8500f00, 0xfff00fff, "ldrex%c\t%12-15r, [%16-19r]"},
   4831   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   4832     0xe8d00f4f, 0xfff00fef, "ldrex%4?hb%c\t%12-15r, [%16-19r]"},
   4833   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4834     0xe800c000, 0xffd0ffe0, "srsdb%c\t%16-19r%21'!, #%0-4d"},
   4835   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4836     0xe980c000, 0xffd0ffe0, "srsia%c\t%16-19r%21'!, #%0-4d"},
   4837   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4838     0xfa0ff080, 0xfffff0c0, "sxth%c.w\t%8-11r, %0-3r%R"},
   4839   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4840     0xfa1ff080, 0xfffff0c0, "uxth%c.w\t%8-11r, %0-3r%R"},
   4841   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4842     0xfa2ff080, 0xfffff0c0, "sxtb16%c\t%8-11r, %0-3r%R"},
   4843   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4844     0xfa3ff080, 0xfffff0c0, "uxtb16%c\t%8-11r, %0-3r%R"},
   4845   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4846     0xfa4ff080, 0xfffff0c0, "sxtb%c.w\t%8-11r, %0-3r%R"},
   4847   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4848     0xfa5ff080, 0xfffff0c0, "uxtb%c.w\t%8-11r, %0-3r%R"},
   4849   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   4850     0xe8400000, 0xfff000ff, "strex%c\t%8-11r, %12-15r, [%16-19r]"},
   4851   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4852     0xe8d0007f, 0xfff000ff, "ldrexd%c\t%12-15r, %8-11r, [%16-19r]"},
   4853   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4854     0xfa80f000, 0xfff0f0f0, "sadd8%c\t%8-11r, %16-19r, %0-3r"},
   4855   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4856     0xfa80f010, 0xfff0f0f0, "qadd8%c\t%8-11r, %16-19r, %0-3r"},
   4857   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4858     0xfa80f020, 0xfff0f0f0, "shadd8%c\t%8-11r, %16-19r, %0-3r"},
   4859   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4860     0xfa80f040, 0xfff0f0f0, "uadd8%c\t%8-11r, %16-19r, %0-3r"},
   4861   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4862     0xfa80f050, 0xfff0f0f0, "uqadd8%c\t%8-11r, %16-19r, %0-3r"},
   4863   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4864     0xfa80f060, 0xfff0f0f0, "uhadd8%c\t%8-11r, %16-19r, %0-3r"},
   4865   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4866     0xfa80f080, 0xfff0f0f0, "qadd%c\t%8-11r, %0-3r, %16-19r"},
   4867   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4868     0xfa80f090, 0xfff0f0f0, "qdadd%c\t%8-11r, %0-3r, %16-19r"},
   4869   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4870     0xfa80f0a0, 0xfff0f0f0, "qsub%c\t%8-11r, %0-3r, %16-19r"},
   4871   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4872     0xfa80f0b0, 0xfff0f0f0, "qdsub%c\t%8-11r, %0-3r, %16-19r"},
   4873   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4874     0xfa90f000, 0xfff0f0f0, "sadd16%c\t%8-11r, %16-19r, %0-3r"},
   4875   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4876     0xfa90f010, 0xfff0f0f0, "qadd16%c\t%8-11r, %16-19r, %0-3r"},
   4877   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4878     0xfa90f020, 0xfff0f0f0, "shadd16%c\t%8-11r, %16-19r, %0-3r"},
   4879   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4880     0xfa90f040, 0xfff0f0f0, "uadd16%c\t%8-11r, %16-19r, %0-3r"},
   4881   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4882     0xfa90f050, 0xfff0f0f0, "uqadd16%c\t%8-11r, %16-19r, %0-3r"},
   4883   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4884     0xfa90f060, 0xfff0f0f0, "uhadd16%c\t%8-11r, %16-19r, %0-3r"},
   4885   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4886     0xfa90f080, 0xfff0f0f0, "rev%c.w\t%8-11r, %16-19r"},
   4887   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4888     0xfa90f090, 0xfff0f0f0, "rev16%c.w\t%8-11r, %16-19r"},
   4889   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4890     0xfa90f0a0, 0xfff0f0f0, "rbit%c\t%8-11r, %16-19r"},
   4891   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4892     0xfa90f0b0, 0xfff0f0f0, "revsh%c.w\t%8-11r, %16-19r"},
   4893   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4894     0xfaa0f000, 0xfff0f0f0, "sasx%c\t%8-11r, %16-19r, %0-3r"},
   4895   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4896     0xfaa0f010, 0xfff0f0f0, "qasx%c\t%8-11r, %16-19r, %0-3r"},
   4897   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4898     0xfaa0f020, 0xfff0f0f0, "shasx%c\t%8-11r, %16-19r, %0-3r"},
   4899   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4900     0xfaa0f040, 0xfff0f0f0, "uasx%c\t%8-11r, %16-19r, %0-3r"},
   4901   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4902     0xfaa0f050, 0xfff0f0f0, "uqasx%c\t%8-11r, %16-19r, %0-3r"},
   4903   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4904     0xfaa0f060, 0xfff0f0f0, "uhasx%c\t%8-11r, %16-19r, %0-3r"},
   4905   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4906     0xfaa0f080, 0xfff0f0f0, "sel%c\t%8-11r, %16-19r, %0-3r"},
   4907   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4908     0xfab0f080, 0xfff0f0f0, "clz%c\t%8-11r, %16-19r"},
   4909   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4910     0xfac0f000, 0xfff0f0f0, "ssub8%c\t%8-11r, %16-19r, %0-3r"},
   4911   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4912     0xfac0f010, 0xfff0f0f0, "qsub8%c\t%8-11r, %16-19r, %0-3r"},
   4913   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4914     0xfac0f020, 0xfff0f0f0, "shsub8%c\t%8-11r, %16-19r, %0-3r"},
   4915   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4916     0xfac0f040, 0xfff0f0f0, "usub8%c\t%8-11r, %16-19r, %0-3r"},
   4917   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4918     0xfac0f050, 0xfff0f0f0, "uqsub8%c\t%8-11r, %16-19r, %0-3r"},
   4919   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4920     0xfac0f060, 0xfff0f0f0, "uhsub8%c\t%8-11r, %16-19r, %0-3r"},
   4921   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4922     0xfad0f000, 0xfff0f0f0, "ssub16%c\t%8-11r, %16-19r, %0-3r"},
   4923   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4924     0xfad0f010, 0xfff0f0f0, "qsub16%c\t%8-11r, %16-19r, %0-3r"},
   4925   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4926     0xfad0f020, 0xfff0f0f0, "shsub16%c\t%8-11r, %16-19r, %0-3r"},
   4927   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4928     0xfad0f040, 0xfff0f0f0, "usub16%c\t%8-11r, %16-19r, %0-3r"},
   4929   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4930     0xfad0f050, 0xfff0f0f0, "uqsub16%c\t%8-11r, %16-19r, %0-3r"},
   4931   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4932     0xfad0f060, 0xfff0f0f0, "uhsub16%c\t%8-11r, %16-19r, %0-3r"},
   4933   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4934     0xfae0f000, 0xfff0f0f0, "ssax%c\t%8-11r, %16-19r, %0-3r"},
   4935   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4936     0xfae0f010, 0xfff0f0f0, "qsax%c\t%8-11r, %16-19r, %0-3r"},
   4937   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4938     0xfae0f020, 0xfff0f0f0, "shsax%c\t%8-11r, %16-19r, %0-3r"},
   4939   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4940     0xfae0f040, 0xfff0f0f0, "usax%c\t%8-11r, %16-19r, %0-3r"},
   4941   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4942     0xfae0f050, 0xfff0f0f0, "uqsax%c\t%8-11r, %16-19r, %0-3r"},
   4943   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4944     0xfae0f060, 0xfff0f0f0, "uhsax%c\t%8-11r, %16-19r, %0-3r"},
   4945   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4946     0xfb00f000, 0xfff0f0f0, "mul%c.w\t%8-11r, %16-19r, %0-3r"},
   4947   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4948     0xfb70f000, 0xfff0f0f0, "usad8%c\t%8-11r, %16-19r, %0-3r"},
   4949   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4950     0xfa00f000, 0xffe0f0f0, "lsl%20's%c.w\t%8-11R, %16-19R, %0-3R"},
   4951   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4952     0xfa20f000, 0xffe0f0f0, "lsr%20's%c.w\t%8-11R, %16-19R, %0-3R"},
   4953   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4954     0xfa40f000, 0xffe0f0f0, "asr%20's%c.w\t%8-11R, %16-19R, %0-3R"},
   4955   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4956     0xfa60f000, 0xffe0f0f0, "ror%20's%c.w\t%8-11r, %16-19r, %0-3r"},
   4957   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   4958     0xe8c00f40, 0xfff00fe0, "strex%4?hb%c\t%0-3r, %12-15r, [%16-19r]"},
   4959   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4960     0xf3200000, 0xfff0f0e0, "ssat16%c\t%8-11r, #%0-4D, %16-19r"},
   4961   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4962     0xf3a00000, 0xfff0f0e0, "usat16%c\t%8-11r, #%0-4d, %16-19r"},
   4963   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4964     0xfb20f000, 0xfff0f0e0, "smuad%4'x%c\t%8-11r, %16-19r, %0-3r"},
   4965   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4966     0xfb30f000, 0xfff0f0e0, "smulw%4?tb%c\t%8-11r, %16-19r, %0-3r"},
   4967   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4968     0xfb40f000, 0xfff0f0e0, "smusd%4'x%c\t%8-11r, %16-19r, %0-3r"},
   4969   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4970     0xfb50f000, 0xfff0f0e0, "smmul%4'r%c\t%8-11r, %16-19r, %0-3r"},
   4971   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4972     0xfa00f080, 0xfff0f0c0, "sxtah%c\t%8-11r, %16-19r, %0-3r%R"},
   4973   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4974     0xfa10f080, 0xfff0f0c0, "uxtah%c\t%8-11r, %16-19r, %0-3r%R"},
   4975   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4976     0xfa20f080, 0xfff0f0c0, "sxtab16%c\t%8-11r, %16-19r, %0-3r%R"},
   4977   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4978     0xfa30f080, 0xfff0f0c0, "uxtab16%c\t%8-11r, %16-19r, %0-3r%R"},
   4979   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4980     0xfa40f080, 0xfff0f0c0, "sxtab%c\t%8-11r, %16-19r, %0-3r%R"},
   4981   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4982     0xfa50f080, 0xfff0f0c0, "uxtab%c\t%8-11r, %16-19r, %0-3r%R"},
   4983   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4984     0xfb10f000, 0xfff0f0c0, "smul%5?tb%4?tb%c\t%8-11r, %16-19r, %0-3r"},
   4985   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4986     0xf36f0000, 0xffff8020, "bfc%c\t%8-11r, %E"},
   4987   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4988     0xea100f00, 0xfff08f00, "tst%c.w\t%16-19r, %S"},
   4989   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4990     0xea900f00, 0xfff08f00, "teq%c\t%16-19r, %S"},
   4991   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4992     0xeb100f00, 0xfff08f00, "cmn%c.w\t%16-19r, %S"},
   4993   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4994     0xebb00f00, 0xfff08f00, "cmp%c.w\t%16-19r, %S"},
   4995   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4996     0xf0100f00, 0xfbf08f00, "tst%c.w\t%16-19r, %M"},
   4997   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   4998     0xf0900f00, 0xfbf08f00, "teq%c\t%16-19r, %M"},
   4999   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5000     0xf1100f00, 0xfbf08f00, "cmn%c.w\t%16-19r, %M"},
   5001   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5002     0xf1b00f00, 0xfbf08f00, "cmp%c.w\t%16-19r, %M"},
   5003   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5004     0xea4f0000, 0xffef8000, "mov%20's%c.w\t%8-11r, %S"},
   5005   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5006     0xea6f0000, 0xffef8000, "mvn%20's%c.w\t%8-11r, %S"},
   5007   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5008     0xe8c00070, 0xfff000f0, "strexd%c\t%0-3r, %12-15r, %8-11r, [%16-19r]"},
   5009   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5010     0xfb000000, 0xfff000f0, "mla%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
   5011   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5012     0xfb000010, 0xfff000f0, "mls%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
   5013   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5014     0xfb700000, 0xfff000f0, "usada8%c\t%8-11R, %16-19R, %0-3R, %12-15R"},
   5015   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5016     0xfb800000, 0xfff000f0, "smull%c\t%12-15R, %8-11R, %16-19R, %0-3R"},
   5017   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5018     0xfba00000, 0xfff000f0, "umull%c\t%12-15R, %8-11R, %16-19R, %0-3R"},
   5019   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5020     0xfbc00000, 0xfff000f0, "smlal%c\t%12-15R, %8-11R, %16-19R, %0-3R"},
   5021   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5022     0xfbe00000, 0xfff000f0, "umlal%c\t%12-15R, %8-11R, %16-19R, %0-3R"},
   5023   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5024     0xfbe00060, 0xfff000f0, "umaal%c\t%12-15R, %8-11R, %16-19R, %0-3R"},
   5025   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   5026     0xe8500f00, 0xfff00f00, "ldrex%c\t%12-15r, [%16-19r, #%0-7W]"},
   5027   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5028     0xf04f0000, 0xfbef8000, "mov%20's%c.w\t%8-11r, %M"},
   5029   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5030     0xf06f0000, 0xfbef8000, "mvn%20's%c.w\t%8-11r, %M"},
   5031   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5032     0xf810f000, 0xff70f000, "pld%c\t%a"},
   5033   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5034     0xfb200000, 0xfff000e0, "smlad%4'x%c\t%8-11R, %16-19R, %0-3R, %12-15R"},
   5035   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5036     0xfb300000, 0xfff000e0, "smlaw%4?tb%c\t%8-11R, %16-19R, %0-3R, %12-15R"},
   5037   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5038     0xfb400000, 0xfff000e0, "smlsd%4'x%c\t%8-11R, %16-19R, %0-3R, %12-15R"},
   5039   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5040     0xfb500000, 0xfff000e0, "smmla%4'r%c\t%8-11R, %16-19R, %0-3R, %12-15R"},
   5041   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5042     0xfb600000, 0xfff000e0, "smmls%4'r%c\t%8-11R, %16-19R, %0-3R, %12-15R"},
   5043   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5044     0xfbc000c0, 0xfff000e0, "smlald%4'x%c\t%12-15R, %8-11R, %16-19R, %0-3R"},
   5045   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5046     0xfbd000c0, 0xfff000e0, "smlsld%4'x%c\t%12-15R, %8-11R, %16-19R, %0-3R"},
   5047   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5048     0xeac00000, 0xfff08030, "pkhbt%c\t%8-11r, %16-19r, %S"},
   5049   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5050     0xeac00020, 0xfff08030, "pkhtb%c\t%8-11r, %16-19r, %S"},
   5051   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5052     0xf3400000, 0xfff08020, "sbfx%c\t%8-11r, %16-19r, %F"},
   5053   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5054     0xf3c00000, 0xfff08020, "ubfx%c\t%8-11r, %16-19r, %F"},
   5055   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5056     0xf8000e00, 0xff900f00, "str%wt%c\t%12-15r, %a"},
   5057   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5058     0xfb100000, 0xfff000c0,
   5059     "smla%5?tb%4?tb%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
   5060   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5061     0xfbc00080, 0xfff000c0,
   5062     "smlal%5?tb%4?tb%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
   5063   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5064     0xf3600000, 0xfff08020, "bfi%c\t%8-11r, %16-19r, %E"},
   5065   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5066     0xf8100e00, 0xfe900f00, "ldr%wt%c\t%12-15r, %a"},
   5067   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5068     0xf3000000, 0xffd08020, "ssat%c\t%8-11r, #%0-4D, %16-19r%s"},
   5069   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5070     0xf3800000, 0xffd08020, "usat%c\t%8-11r, #%0-4d, %16-19r%s"},
   5071   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5072     0xf2000000, 0xfbf08000, "addw%c\t%8-11r, %16-19r, %I"},
   5073   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   5074     0xf2400000, 0xfbf08000, "movw%c\t%8-11r, %J"},
   5075   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5076     0xf2a00000, 0xfbf08000, "subw%c\t%8-11r, %16-19r, %I"},
   5077   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   5078     0xf2c00000, 0xfbf08000, "movt%c\t%8-11r, %J"},
   5079   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5080     0xea000000, 0xffe08000, "and%20's%c.w\t%8-11r, %16-19r, %S"},
   5081   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5082     0xea200000, 0xffe08000, "bic%20's%c.w\t%8-11r, %16-19r, %S"},
   5083   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5084     0xea400000, 0xffe08000, "orr%20's%c.w\t%8-11r, %16-19r, %S"},
   5085   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5086     0xea600000, 0xffe08000, "orn%20's%c\t%8-11r, %16-19r, %S"},
   5087   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5088     0xea800000, 0xffe08000, "eor%20's%c.w\t%8-11r, %16-19r, %S"},
   5089   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5090     0xeb000000, 0xffe08000, "add%20's%c.w\t%8-11r, %16-19r, %S"},
   5091   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5092     0xeb400000, 0xffe08000, "adc%20's%c.w\t%8-11r, %16-19r, %S"},
   5093   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5094     0xeb600000, 0xffe08000, "sbc%20's%c.w\t%8-11r, %16-19r, %S"},
   5095   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5096     0xeba00000, 0xffe08000, "sub%20's%c.w\t%8-11r, %16-19r, %S"},
   5097   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5098     0xebc00000, 0xffe08000, "rsb%20's%c\t%8-11r, %16-19r, %S"},
   5099   {ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
   5100     0xe8400000, 0xfff00000, "strex%c\t%8-11r, %12-15r, [%16-19r, #%0-7W]"},
   5101   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5102     0xf0000000, 0xfbe08000, "and%20's%c.w\t%8-11r, %16-19r, %M"},
   5103   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5104     0xf0200000, 0xfbe08000, "bic%20's%c.w\t%8-11r, %16-19r, %M"},
   5105   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5106     0xf0400000, 0xfbe08000, "orr%20's%c.w\t%8-11r, %16-19r, %M"},
   5107   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5108     0xf0600000, 0xfbe08000, "orn%20's%c\t%8-11r, %16-19r, %M"},
   5109   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5110     0xf0800000, 0xfbe08000, "eor%20's%c.w\t%8-11r, %16-19r, %M"},
   5111   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5112     0xf1000000, 0xfbe08000, "add%20's%c.w\t%8-11r, %16-19r, %M"},
   5113   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5114     0xf1400000, 0xfbe08000, "adc%20's%c.w\t%8-11r, %16-19r, %M"},
   5115   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5116     0xf1600000, 0xfbe08000, "sbc%20's%c.w\t%8-11r, %16-19r, %M"},
   5117   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5118     0xf1a00000, 0xfbe08000, "sub%20's%c.w\t%8-11r, %16-19r, %M"},
   5119   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5120     0xf1c00000, 0xfbe08000, "rsb%20's%c\t%8-11r, %16-19r, %M"},
   5121   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5122     0xe8800000, 0xffd00000, "stmia%c.w\t%16-19r%21'!, %m"},
   5123   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5124     0xe8900000, 0xffd00000, "ldmia%c.w\t%16-19r%21'!, %m"},
   5125   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5126     0xe9000000, 0xffd00000, "stmdb%c\t%16-19r%21'!, %m"},
   5127   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5128     0xe9100000, 0xffd00000, "ldmdb%c\t%16-19r%21'!, %m"},
   5129   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5130     0xe9c00000, 0xffd000ff, "strd%c\t%12-15r, %8-11r, [%16-19r]"},
   5131   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5132     0xe9d00000, 0xffd000ff, "ldrd%c\t%12-15r, %8-11r, [%16-19r]"},
   5133   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5134     0xe9400000, 0xff500000,
   5135     "strd%c\t%12-15r, %8-11r, [%16-19r, #%23`-%0-7W]%21'!%L"},
   5136   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5137     0xe9500000, 0xff500000,
   5138     "ldrd%c\t%12-15r, %8-11r, [%16-19r, #%23`-%0-7W]%21'!%L"},
   5139   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5140     0xe8600000, 0xff700000,
   5141     "strd%c\t%12-15r, %8-11r, [%16-19r], #%23`-%0-7W%L"},
   5142   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5143     0xe8700000, 0xff700000,
   5144     "ldrd%c\t%12-15r, %8-11r, [%16-19r], #%23`-%0-7W%L"},
   5145   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5146     0xf8000000, 0xff100000, "str%w%c.w\t%12-15r, %a"},
   5147   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5148     0xf8100000, 0xfe100000, "ldr%w%c.w\t%12-15r, %a"},
   5149 
   5150   /* Filter out Bcc with cond=E or F, which are used for other instructions.  */
   5151   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5152     0xf3c08000, 0xfbc0d000, "undefined (bcc, cond=0xF)"},
   5153   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5154     0xf3808000, 0xfbc0d000, "undefined (bcc, cond=0xE)"},
   5155   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5156     0xf0008000, 0xf800d000, "b%22-25c.w\t%b%X"},
   5157   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
   5158     0xf0009000, 0xf800d000, "b%c.w\t%B%x"},
   5159 
   5160   /* These have been 32-bit since the invention of Thumb.  */
   5161   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   5162      0xf000c000, 0xf800d001, "blx%c\t%B%x"},
   5163   {ARM_FEATURE_CORE_LOW (ARM_EXT_V4T),
   5164      0xf000d000, 0xf800d000, "bl%c\t%B%x"},
   5165 
   5166   /* Fallback.  */
   5167   {ARM_FEATURE_CORE_LOW (ARM_EXT_V1),
   5168       0x00000000, 0x00000000, UNDEFINED_INSTRUCTION},
   5169   {ARM_FEATURE_CORE_LOW (0), 0, 0, 0}
   5170 };
   5171 
   5172 static const char *const arm_conditional[] =
   5173 {"eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc",
   5174  "hi", "ls", "ge", "lt", "gt", "le", "al", "<und>", ""};
   5175 
   5176 static const char *const arm_fp_const[] =
   5177 {"0.0", "1.0", "2.0", "3.0", "4.0", "5.0", "0.5", "10.0"};
   5178 
   5179 static const char *const arm_shift[] =
   5180 {"lsl", "lsr", "asr", "ror"};
   5181 
   5182 typedef struct
   5183 {
   5184   const char *name;
   5185   const char *description;
   5186   const char *reg_names[16];
   5187 }
   5188 arm_regname;
   5189 
   5190 static const arm_regname regnames[] =
   5191 {
   5192   { "reg-names-raw", N_("Select raw register names"),
   5193     { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"}},
   5194   { "reg-names-gcc", N_("Select register names used by GCC"),
   5195     { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "sl",  "fp",  "ip",  "sp",  "lr",  "pc" }},
   5196   { "reg-names-std", N_("Select register names used in ARM's ISA documentation"),
   5197     { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "sp",  "lr",  "pc" }},
   5198   { "force-thumb", N_("Assume all insns are Thumb insns"), {NULL} },
   5199   { "no-force-thumb", N_("Examine preceding label to determine an insn's type"), {NULL} },
   5200   { "reg-names-apcs", N_("Select register names used in the APCS"),
   5201     { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "sl",  "fp",  "ip",  "sp",  "lr",  "pc" }},
   5202   { "reg-names-atpcs", N_("Select register names used in the ATPCS"),
   5203     { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "v7",  "v8",  "IP",  "SP",  "LR",  "PC" }},
   5204   { "reg-names-special-atpcs", N_("Select special register names used in the ATPCS"),
   5205     { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL",  "FP",  "IP",  "SP",  "LR",  "PC" }},
   5206   { "coproc<N>=(cde|generic)", N_("Enable CDE extensions for coprocessor N space"), { NULL } }
   5207 };
   5208 
   5209 static const char *const iwmmxt_wwnames[] =
   5210 {"b", "h", "w", "d"};
   5211 
   5212 static const char *const iwmmxt_wwssnames[] =
   5213 {"b", "bus", "bc", "bss",
   5214  "h", "hus", "hc", "hss",
   5215  "w", "wus", "wc", "wss",
   5216  "d", "dus", "dc", "dss"
   5217 };
   5218 
   5219 static const char *const iwmmxt_regnames[] =
   5220 { "wr0", "wr1", "wr2", "wr3", "wr4", "wr5", "wr6", "wr7",
   5221   "wr8", "wr9", "wr10", "wr11", "wr12", "wr13", "wr14", "wr15"
   5222 };
   5223 
   5224 static const char *const iwmmxt_cregnames[] =
   5225 { "wcid", "wcon", "wcssf", "wcasf", "reserved", "reserved", "reserved", "reserved",
   5226   "wcgr0", "wcgr1", "wcgr2", "wcgr3", "reserved", "reserved", "reserved", "reserved"
   5227 };
   5228 
   5229 static const char *const vec_condnames[] =
   5230 { "eq", "ne", "cs", "hi", "ge", "lt", "gt", "le"
   5231 };
   5232 
   5233 static const char *const mve_predicatenames[] =
   5234 { "", "ttt", "tt", "tte", "t", "tee", "te", "tet", "",
   5235   "eee", "ee", "eet", "e", "ett", "et", "ete"
   5236 };
   5237 
   5238 /* Names for 2-bit size field for mve vector isntructions.  */
   5239 static const char *const mve_vec_sizename[] =
   5240   { "8", "16", "32", "64"};
   5241 
   5242 /* Indicates whether we are processing a then predicate,
   5243    else predicate or none at all.  */
   5244 enum vpt_pred_state
   5245 {
   5246   PRED_NONE,
   5247   PRED_THEN,
   5248   PRED_ELSE
   5249 };
   5250 
   5251 /* Information used to process a vpt block and subsequent instructions.  */
   5252 struct vpt_block
   5253 {
   5254   /* Are we in a vpt block.  */
   5255   bfd_boolean in_vpt_block;
   5256 
   5257   /* Next predicate state if in vpt block.  */
   5258   enum vpt_pred_state next_pred_state;
   5259 
   5260   /* Mask from vpt/vpst instruction.  */
   5261   long predicate_mask;
   5262 
   5263   /* Instruction number in vpt block.  */
   5264   long current_insn_num;
   5265 
   5266   /* Number of instructions in vpt block..   */
   5267   long num_pred_insn;
   5268 };
   5269 
   5270 static struct vpt_block vpt_block_state =
   5271 {
   5272   FALSE,
   5273   PRED_NONE,
   5274   0,
   5275   0,
   5276   0
   5277 };
   5278 
   5279 /* Default to GCC register name set.  */
   5280 static unsigned int regname_selected = 1;
   5281 
   5282 #define NUM_ARM_OPTIONS   ARRAY_SIZE (regnames)
   5283 #define arm_regnames      regnames[regname_selected].reg_names
   5284 
   5285 static bfd_boolean force_thumb = FALSE;
   5286 static uint16_t cde_coprocs = 0;
   5287 
   5288 /* Current IT instruction state.  This contains the same state as the IT
   5289    bits in the CPSR.  */
   5290 static unsigned int ifthen_state;
   5291 /* IT state for the next instruction.  */
   5292 static unsigned int ifthen_next_state;
   5293 /* The address of the insn for which the IT state is valid.  */
   5294 static bfd_vma ifthen_address;
   5295 #define IFTHEN_COND ((ifthen_state >> 4) & 0xf)
   5296 /* Indicates that the current Conditional state is unconditional or outside
   5297    an IT block.  */
   5298 #define COND_UNCOND 16
   5299 
   5300 
   5301 /* Functions.  */
   5303 /* Extract the predicate mask for a VPT or VPST instruction.
   5304    The mask is composed of bits 13-15 (Mkl) and bit 22 (Mkh).  */
   5305 
   5306 static long
   5307 mve_extract_pred_mask (long given)
   5308 {
   5309   return ((given & 0x00400000) >> 19) | ((given & 0xe000) >> 13);
   5310 }
   5311 
   5312 /* Return the number of instructions in a MVE predicate block.  */
   5313 static long
   5314 num_instructions_vpt_block (long given)
   5315 {
   5316   long mask = mve_extract_pred_mask (given);
   5317   if (mask == 0)
   5318     return 0;
   5319 
   5320   if (mask == 8)
   5321     return 1;
   5322 
   5323   if ((mask & 7) == 4)
   5324     return 2;
   5325 
   5326   if ((mask & 3) == 2)
   5327     return 3;
   5328 
   5329   if ((mask & 1) == 1)
   5330     return 4;
   5331 
   5332   return 0;
   5333 }
   5334 
   5335 static void
   5336 mark_outside_vpt_block (void)
   5337 {
   5338   vpt_block_state.in_vpt_block = FALSE;
   5339   vpt_block_state.next_pred_state = PRED_NONE;
   5340   vpt_block_state.predicate_mask = 0;
   5341   vpt_block_state.current_insn_num = 0;
   5342   vpt_block_state.num_pred_insn = 0;
   5343 }
   5344 
   5345 static void
   5346 mark_inside_vpt_block (long given)
   5347 {
   5348   vpt_block_state.in_vpt_block = TRUE;
   5349   vpt_block_state.next_pred_state = PRED_THEN;
   5350   vpt_block_state.predicate_mask = mve_extract_pred_mask (given);
   5351   vpt_block_state.current_insn_num = 0;
   5352   vpt_block_state.num_pred_insn = num_instructions_vpt_block (given);
   5353   assert (vpt_block_state.num_pred_insn >= 1);
   5354 }
   5355 
   5356 static enum vpt_pred_state
   5357 invert_next_predicate_state (enum vpt_pred_state astate)
   5358 {
   5359   if (astate == PRED_THEN)
   5360     return PRED_ELSE;
   5361   else if (astate == PRED_ELSE)
   5362     return PRED_THEN;
   5363   else
   5364     return PRED_NONE;
   5365 }
   5366 
   5367 static enum vpt_pred_state
   5368 update_next_predicate_state (void)
   5369 {
   5370   long pred_mask = vpt_block_state.predicate_mask;
   5371   long mask_for_insn = 0;
   5372 
   5373   switch (vpt_block_state.current_insn_num)
   5374     {
   5375     case 1:
   5376       mask_for_insn = 8;
   5377       break;
   5378 
   5379     case 2:
   5380       mask_for_insn = 4;
   5381       break;
   5382 
   5383     case 3:
   5384       mask_for_insn = 2;
   5385       break;
   5386 
   5387     case 4:
   5388       return PRED_NONE;
   5389     }
   5390 
   5391   if (pred_mask & mask_for_insn)
   5392     return invert_next_predicate_state (vpt_block_state.next_pred_state);
   5393   else
   5394     return vpt_block_state.next_pred_state;
   5395 }
   5396 
   5397 static void
   5398 update_vpt_block_state (void)
   5399 {
   5400   vpt_block_state.current_insn_num++;
   5401   if (vpt_block_state.current_insn_num == vpt_block_state.num_pred_insn)
   5402     {
   5403       /* No more instructions to process in vpt block.  */
   5404       mark_outside_vpt_block ();
   5405       return;
   5406     }
   5407 
   5408   vpt_block_state.next_pred_state = update_next_predicate_state ();
   5409 }
   5410 
   5411 /* Decode a bitfield of the form matching regexp (N(-N)?,)*N(-N)?.
   5412    Returns pointer to following character of the format string and
   5413    fills in *VALUEP and *WIDTHP with the extracted value and number of
   5414    bits extracted.  WIDTHP can be NULL.  */
   5415 
   5416 static const char *
   5417 arm_decode_bitfield (const char *ptr,
   5418 		     unsigned long insn,
   5419 		     unsigned long *valuep,
   5420 		     int *widthp)
   5421 {
   5422   unsigned long value = 0;
   5423   int width = 0;
   5424 
   5425   do
   5426     {
   5427       int start, end;
   5428       int bits;
   5429 
   5430       for (start = 0; *ptr >= '0' && *ptr <= '9'; ptr++)
   5431 	start = start * 10 + *ptr - '0';
   5432       if (*ptr == '-')
   5433 	for (end = 0, ptr++; *ptr >= '0' && *ptr <= '9'; ptr++)
   5434 	  end = end * 10 + *ptr - '0';
   5435       else
   5436 	end = start;
   5437       bits = end - start;
   5438       if (bits < 0)
   5439 	abort ();
   5440       value |= ((insn >> start) & ((2ul << bits) - 1)) << width;
   5441       width += bits + 1;
   5442     }
   5443   while (*ptr++ == ',');
   5444   *valuep = value;
   5445   if (widthp)
   5446     *widthp = width;
   5447   return ptr - 1;
   5448 }
   5449 
   5450 static void
   5451 arm_decode_shift (long given, fprintf_ftype func, void *stream,
   5452 		  bfd_boolean print_shift)
   5453 {
   5454   func (stream, "%s", arm_regnames[given & 0xf]);
   5455 
   5456   if ((given & 0xff0) != 0)
   5457     {
   5458       if ((given & 0x10) == 0)
   5459 	{
   5460 	  int amount = (given & 0xf80) >> 7;
   5461 	  int shift = (given & 0x60) >> 5;
   5462 
   5463 	  if (amount == 0)
   5464 	    {
   5465 	      if (shift == 3)
   5466 		{
   5467 		  func (stream, ", rrx");
   5468 		  return;
   5469 		}
   5470 
   5471 	      amount = 32;
   5472 	    }
   5473 
   5474 	  if (print_shift)
   5475 	    func (stream, ", %s #%d", arm_shift[shift], amount);
   5476 	  else
   5477 	    func (stream, ", #%d", amount);
   5478 	}
   5479       else if ((given & 0x80) == 0x80)
   5480 	func (stream, "\t; <illegal shifter operand>");
   5481       else if (print_shift)
   5482 	func (stream, ", %s %s", arm_shift[(given & 0x60) >> 5],
   5483 	      arm_regnames[(given & 0xf00) >> 8]);
   5484       else
   5485 	func (stream, ", %s", arm_regnames[(given & 0xf00) >> 8]);
   5486     }
   5487 }
   5488 
   5489 /* Return TRUE if the MATCHED_INSN can be inside an IT block.  */
   5490 
   5491 static bfd_boolean
   5492 is_mve_okay_in_it (enum mve_instructions matched_insn)
   5493 {
   5494   switch (matched_insn)
   5495     {
   5496     case MVE_VMOV_GP_TO_VEC_LANE:
   5497     case MVE_VMOV2_VEC_LANE_TO_GP:
   5498     case MVE_VMOV2_GP_TO_VEC_LANE:
   5499     case MVE_VMOV_VEC_LANE_TO_GP:
   5500     case MVE_LSLL:
   5501     case MVE_LSLLI:
   5502     case MVE_LSRL:
   5503     case MVE_ASRL:
   5504     case MVE_ASRLI:
   5505     case MVE_SQRSHRL:
   5506     case MVE_SQRSHR:
   5507     case MVE_UQRSHL:
   5508     case MVE_UQRSHLL:
   5509     case MVE_UQSHL:
   5510     case MVE_UQSHLL:
   5511     case MVE_URSHRL:
   5512     case MVE_URSHR:
   5513     case MVE_SRSHRL:
   5514     case MVE_SRSHR:
   5515     case MVE_SQSHLL:
   5516     case MVE_SQSHL:
   5517       return TRUE;
   5518     default:
   5519       return FALSE;
   5520     }
   5521 }
   5522 
   5523 static bfd_boolean
   5524 is_mve_architecture (struct disassemble_info *info)
   5525 {
   5526   struct arm_private_data *private_data = info->private_data;
   5527   arm_feature_set allowed_arches = private_data->features;
   5528 
   5529   arm_feature_set arm_ext_v8_1m_main
   5530     = ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN);
   5531 
   5532   if (ARM_CPU_HAS_FEATURE (arm_ext_v8_1m_main, allowed_arches)
   5533       && !ARM_CPU_IS_ANY (allowed_arches))
   5534     return TRUE;
   5535   else
   5536     return FALSE;
   5537 }
   5538 
   5539 static bfd_boolean
   5540 is_vpt_instruction (long given)
   5541 {
   5542 
   5543   /* If mkh:mkl is '0000' then its not a vpt/vpst instruction.  */
   5544   if ((given & 0x0040e000) == 0)
   5545     return FALSE;
   5546 
   5547   /* VPT floating point T1 variant.  */
   5548   if (((given & 0xefb10f50) == 0xee310f00 && ((given & 0x1001) != 0x1))
   5549   /* VPT floating point T2 variant.  */
   5550       || ((given & 0xefb10f50) == 0xee310f40)
   5551   /* VPT vector T1 variant.  */
   5552       || ((given & 0xff811f51) == 0xfe010f00)
   5553   /* VPT vector T2 variant.  */
   5554       || ((given & 0xff811f51) == 0xfe010f01
   5555 	  && ((given & 0x300000) != 0x300000))
   5556   /* VPT vector T3 variant.  */
   5557       || ((given & 0xff811f50) == 0xfe011f00)
   5558   /* VPT vector T4 variant.  */
   5559       || ((given & 0xff811f70) == 0xfe010f40)
   5560   /* VPT vector T5 variant.  */
   5561       || ((given & 0xff811f70) == 0xfe010f60)
   5562   /* VPT vector T6 variant.  */
   5563       || ((given & 0xff811f50) == 0xfe011f40)
   5564   /* VPST vector T variant.  */
   5565       || ((given & 0xffbf1fff) == 0xfe310f4d))
   5566     return TRUE;
   5567   else
   5568     return FALSE;
   5569 }
   5570 
   5571 /* Decode a bitfield from opcode GIVEN, with starting bitfield = START
   5572    and ending bitfield = END.  END must be greater than START.  */
   5573 
   5574 static unsigned long
   5575 arm_decode_field (unsigned long given, unsigned int start, unsigned int end)
   5576 {
   5577   int bits = end - start;
   5578 
   5579   if (bits < 0)
   5580     abort ();
   5581 
   5582   return ((given >> start) & ((2ul << bits) - 1));
   5583 }
   5584 
   5585 /* Decode a bitfield from opcode GIVEN, with multiple bitfields:
   5586    START:END and START2:END2.  END/END2 must be greater than
   5587    START/START2.  */
   5588 
   5589 static unsigned long
   5590 arm_decode_field_multiple (unsigned long given, unsigned int start,
   5591 			   unsigned int end, unsigned int start2,
   5592 			   unsigned int end2)
   5593 {
   5594   int bits = end - start;
   5595   int bits2 = end2 - start2;
   5596   unsigned long value = 0;
   5597   int width = 0;
   5598 
   5599   if (bits2 < 0)
   5600     abort ();
   5601 
   5602   value = arm_decode_field (given, start, end);
   5603   width += bits + 1;
   5604 
   5605   value |= ((given >> start2) & ((2ul << bits2) - 1)) << width;
   5606   return value;
   5607 }
   5608 
   5609 /* Return TRUE if the GIVEN encoding should not be decoded as MATCHED_INSN.
   5610    This helps us decode instructions that change mnemonic depending on specific
   5611    operand values/encodings.  */
   5612 
   5613 static bfd_boolean
   5614 is_mve_encoding_conflict (unsigned long given,
   5615 			  enum mve_instructions matched_insn)
   5616 {
   5617   switch (matched_insn)
   5618     {
   5619     case MVE_VPST:
   5620       if (arm_decode_field_multiple (given, 13, 15, 22, 22) == 0)
   5621 	return TRUE;
   5622       else
   5623 	return FALSE;
   5624 
   5625     case MVE_VPT_FP_T1:
   5626       if (arm_decode_field_multiple (given, 13, 15, 22, 22) == 0)
   5627 	return TRUE;
   5628       if ((arm_decode_field (given, 12, 12) == 0)
   5629 	  && (arm_decode_field (given, 0, 0) == 1))
   5630 	return TRUE;
   5631       return FALSE;
   5632 
   5633     case MVE_VPT_FP_T2:
   5634       if (arm_decode_field_multiple (given, 13, 15, 22, 22) == 0)
   5635 	return TRUE;
   5636       if (arm_decode_field (given, 0, 3) == 0xd)
   5637 	return TRUE;
   5638       return FALSE;
   5639 
   5640     case MVE_VPT_VEC_T1:
   5641     case MVE_VPT_VEC_T2:
   5642     case MVE_VPT_VEC_T3:
   5643     case MVE_VPT_VEC_T4:
   5644     case MVE_VPT_VEC_T5:
   5645     case MVE_VPT_VEC_T6:
   5646       if (arm_decode_field_multiple (given, 13, 15, 22, 22) == 0)
   5647 	return TRUE;
   5648       if (arm_decode_field (given, 20, 21) == 3)
   5649 	return TRUE;
   5650       return FALSE;
   5651 
   5652     case MVE_VCMP_FP_T1:
   5653       if ((arm_decode_field (given, 12, 12) == 0)
   5654 	  && (arm_decode_field (given, 0, 0) == 1))
   5655 	return TRUE;
   5656       else
   5657 	return FALSE;
   5658 
   5659     case MVE_VCMP_FP_T2:
   5660       if (arm_decode_field (given, 0, 3) == 0xd)
   5661 	return TRUE;
   5662       else
   5663 	return FALSE;
   5664 
   5665     case MVE_VQADD_T2:
   5666     case MVE_VQSUB_T2:
   5667     case MVE_VMUL_VEC_T2:
   5668     case MVE_VMULH:
   5669     case MVE_VRMULH:
   5670     case MVE_VMLA:
   5671     case MVE_VMAX:
   5672     case MVE_VMIN:
   5673     case MVE_VBRSR:
   5674     case MVE_VADD_VEC_T2:
   5675     case MVE_VSUB_VEC_T2:
   5676     case MVE_VABAV:
   5677     case MVE_VQRSHL_T1:
   5678     case MVE_VQSHL_T4:
   5679     case MVE_VRSHL_T1:
   5680     case MVE_VSHL_T3:
   5681     case MVE_VCADD_VEC:
   5682     case MVE_VHCADD:
   5683     case MVE_VDDUP:
   5684     case MVE_VIDUP:
   5685     case MVE_VQRDMLADH:
   5686     case MVE_VQDMLAH:
   5687     case MVE_VQRDMLAH:
   5688     case MVE_VQDMLASH:
   5689     case MVE_VQRDMLASH:
   5690     case MVE_VQDMLSDH:
   5691     case MVE_VQRDMLSDH:
   5692     case MVE_VQDMULH_T3:
   5693     case MVE_VQRDMULH_T4:
   5694     case MVE_VQDMLADH:
   5695     case MVE_VMLAS:
   5696     case MVE_VMULL_INT:
   5697     case MVE_VHADD_T2:
   5698     case MVE_VHSUB_T2:
   5699     case MVE_VCMP_VEC_T1:
   5700     case MVE_VCMP_VEC_T2:
   5701     case MVE_VCMP_VEC_T3:
   5702     case MVE_VCMP_VEC_T4:
   5703     case MVE_VCMP_VEC_T5:
   5704     case MVE_VCMP_VEC_T6:
   5705       if (arm_decode_field (given, 20, 21) == 3)
   5706 	return TRUE;
   5707       else
   5708 	return FALSE;
   5709 
   5710     case MVE_VLD2:
   5711     case MVE_VLD4:
   5712     case MVE_VST2:
   5713     case MVE_VST4:
   5714       if (arm_decode_field (given, 7, 8) == 3)
   5715 	return TRUE;
   5716       else
   5717 	return FALSE;
   5718 
   5719     case MVE_VSTRB_T1:
   5720     case MVE_VSTRH_T2:
   5721       if ((arm_decode_field (given, 24, 24) == 0)
   5722 	  && (arm_decode_field (given, 21, 21) == 0))
   5723 	{
   5724 	    return TRUE;
   5725 	}
   5726       else if ((arm_decode_field (given, 7, 8) == 3))
   5727 	return TRUE;
   5728       else
   5729 	return FALSE;
   5730 
   5731     case MVE_VSTRB_T5:
   5732     case MVE_VSTRH_T6:
   5733     case MVE_VSTRW_T7:
   5734       if ((arm_decode_field (given, 24, 24) == 0)
   5735 	  && (arm_decode_field (given, 21, 21) == 0))
   5736 	{
   5737 	    return TRUE;
   5738 	}
   5739       else
   5740 	return FALSE;
   5741 
   5742     case MVE_VCVT_FP_FIX_VEC:
   5743       return (arm_decode_field (given, 16, 21) & 0x38) == 0;
   5744 
   5745     case MVE_VBIC_IMM:
   5746     case MVE_VORR_IMM:
   5747       {
   5748 	unsigned long cmode = arm_decode_field (given, 8, 11);
   5749 
   5750 	if ((cmode & 1) == 0)
   5751 	  return TRUE;
   5752 	else if ((cmode & 0xc) == 0xc)
   5753 	  return TRUE;
   5754 	else
   5755 	  return FALSE;
   5756       }
   5757 
   5758     case MVE_VMVN_IMM:
   5759       {
   5760 	unsigned long cmode = arm_decode_field (given, 8, 11);
   5761 
   5762 	if (cmode == 0xe)
   5763 	  return TRUE;
   5764 	else if ((cmode & 0x9) == 1)
   5765 	  return TRUE;
   5766 	else if ((cmode & 0xd) == 9)
   5767 	  return TRUE;
   5768 	else
   5769 	  return FALSE;
   5770       }
   5771 
   5772     case MVE_VMOV_IMM_TO_VEC:
   5773       if ((arm_decode_field (given, 5, 5) == 1)
   5774 	  && (arm_decode_field (given, 8, 11) != 0xe))
   5775 	return TRUE;
   5776       else
   5777 	return FALSE;
   5778 
   5779     case MVE_VMOVL:
   5780       {
   5781 	unsigned long size = arm_decode_field (given, 19, 20);
   5782 	if ((size == 0) || (size == 3))
   5783 	  return TRUE;
   5784 	else
   5785 	  return FALSE;
   5786       }
   5787 
   5788     case MVE_VMAXA:
   5789     case MVE_VMINA:
   5790     case MVE_VMAXV:
   5791     case MVE_VMAXAV:
   5792     case MVE_VMINV:
   5793     case MVE_VMINAV:
   5794     case MVE_VQRSHL_T2:
   5795     case MVE_VQSHL_T1:
   5796     case MVE_VRSHL_T2:
   5797     case MVE_VSHL_T2:
   5798     case MVE_VSHLL_T2:
   5799     case MVE_VADDV:
   5800     case MVE_VMOVN:
   5801     case MVE_VQMOVUN:
   5802     case MVE_VQMOVN:
   5803       if (arm_decode_field (given, 18, 19) == 3)
   5804 	return TRUE;
   5805       else
   5806 	return FALSE;
   5807 
   5808     case MVE_VMLSLDAV:
   5809     case MVE_VRMLSLDAVH:
   5810     case MVE_VMLALDAV:
   5811     case MVE_VADDLV:
   5812       if (arm_decode_field (given, 20, 22) == 7)
   5813 	return TRUE;
   5814       else
   5815 	return FALSE;
   5816 
   5817     case MVE_VRMLALDAVH:
   5818       if ((arm_decode_field (given, 20, 22) & 6) == 6)
   5819 	return TRUE;
   5820       else
   5821 	return FALSE;
   5822 
   5823     case MVE_VDWDUP:
   5824     case MVE_VIWDUP:
   5825       if ((arm_decode_field (given, 20, 21) == 3)
   5826 	  || (arm_decode_field (given, 1, 3) == 7))
   5827 	return TRUE;
   5828       else
   5829 	return FALSE;
   5830 
   5831 
   5832     case MVE_VSHLL_T1:
   5833       if (arm_decode_field (given, 16, 18) == 0)
   5834 	{
   5835 	  unsigned long sz = arm_decode_field (given, 19, 20);
   5836 
   5837 	  if ((sz == 1) || (sz == 2))
   5838 	    return TRUE;
   5839 	  else
   5840 	    return FALSE;
   5841 	}
   5842       else
   5843 	return FALSE;
   5844 
   5845     case MVE_VQSHL_T2:
   5846     case MVE_VQSHLU_T3:
   5847     case MVE_VRSHR:
   5848     case MVE_VSHL_T1:
   5849     case MVE_VSHR:
   5850     case MVE_VSLI:
   5851     case MVE_VSRI:
   5852       if (arm_decode_field (given, 19, 21) == 0)
   5853 	return TRUE;
   5854       else
   5855 	return FALSE;
   5856 
   5857     case MVE_VCTP:
   5858     if (arm_decode_field (given, 16, 19) == 0xf)
   5859       return TRUE;
   5860     else
   5861       return FALSE;
   5862 
   5863     case MVE_ASRLI:
   5864     case MVE_ASRL:
   5865     case MVE_LSLLI:
   5866     case MVE_LSLL:
   5867     case MVE_LSRL:
   5868     case MVE_SQRSHRL:
   5869     case MVE_SQSHLL:
   5870     case MVE_SRSHRL:
   5871     case MVE_UQRSHLL:
   5872     case MVE_UQSHLL:
   5873     case MVE_URSHRL:
   5874       if (arm_decode_field (given, 9, 11) == 0x7)
   5875 	return TRUE;
   5876       else
   5877 	return FALSE;
   5878 
   5879     case MVE_CSINC:
   5880     case MVE_CSINV:
   5881       {
   5882 	unsigned long rm, rn;
   5883 	rm = arm_decode_field (given, 0, 3);
   5884 	rn = arm_decode_field (given, 16, 19);
   5885 	/* CSET/CSETM.  */
   5886 	if (rm == 0xf && rn == 0xf)
   5887 	  return TRUE;
   5888 	/* CINC/CINV.  */
   5889 	else if (rn == rm && rn != 0xf)
   5890 	  return TRUE;
   5891       }
   5892     /* Fall through.  */
   5893     case MVE_CSEL:
   5894     case MVE_CSNEG:
   5895       if (arm_decode_field (given, 0, 3) == 0xd)
   5896 	return TRUE;
   5897       /* CNEG.  */
   5898       else if (matched_insn == MVE_CSNEG)
   5899 	if (arm_decode_field (given, 0, 3) == arm_decode_field (given, 16, 19))
   5900 	  return TRUE;
   5901       return FALSE;
   5902 
   5903     default:
   5904     case MVE_VADD_FP_T1:
   5905     case MVE_VADD_FP_T2:
   5906     case MVE_VADD_VEC_T1:
   5907       return FALSE;
   5908 
   5909     }
   5910 }
   5911 
   5912 static void
   5913 print_mve_vld_str_addr (struct disassemble_info *info,
   5914 			unsigned long given,
   5915 			enum mve_instructions matched_insn)
   5916 {
   5917   void *stream = info->stream;
   5918   fprintf_ftype func = info->fprintf_func;
   5919 
   5920   unsigned long p, w, gpr, imm, add, mod_imm;
   5921 
   5922   imm = arm_decode_field (given, 0, 6);
   5923   mod_imm = imm;
   5924 
   5925   switch (matched_insn)
   5926     {
   5927     case MVE_VLDRB_T1:
   5928     case MVE_VSTRB_T1:
   5929       gpr = arm_decode_field (given, 16, 18);
   5930       break;
   5931 
   5932     case MVE_VLDRH_T2:
   5933     case MVE_VSTRH_T2:
   5934       gpr = arm_decode_field (given, 16, 18);
   5935       mod_imm = imm << 1;
   5936       break;
   5937 
   5938     case MVE_VLDRH_T6:
   5939     case MVE_VSTRH_T6:
   5940       gpr = arm_decode_field (given, 16, 19);
   5941       mod_imm = imm << 1;
   5942       break;
   5943 
   5944     case MVE_VLDRW_T7:
   5945     case MVE_VSTRW_T7:
   5946       gpr = arm_decode_field (given, 16, 19);
   5947       mod_imm = imm << 2;
   5948       break;
   5949 
   5950     case MVE_VLDRB_T5:
   5951     case MVE_VSTRB_T5:
   5952       gpr = arm_decode_field (given, 16, 19);
   5953       break;
   5954 
   5955     default:
   5956       return;
   5957     }
   5958 
   5959   p = arm_decode_field (given, 24, 24);
   5960   w = arm_decode_field (given, 21, 21);
   5961 
   5962   add = arm_decode_field (given, 23, 23);
   5963 
   5964   char * add_sub;
   5965 
   5966   /* Don't print anything for '+' as it is implied.  */
   5967   if (add == 1)
   5968     add_sub = "";
   5969   else
   5970     add_sub = "-";
   5971 
   5972   if (p == 1)
   5973     {
   5974       /* Offset mode.  */
   5975       if (w == 0)
   5976 	func (stream, "[%s, #%s%lu]", arm_regnames[gpr], add_sub, mod_imm);
   5977       /* Pre-indexed mode.  */
   5978       else
   5979 	func (stream, "[%s, #%s%lu]!", arm_regnames[gpr], add_sub, mod_imm);
   5980     }
   5981   else if ((p == 0) && (w == 1))
   5982     /* Post-index mode.  */
   5983     func (stream, "[%s], #%s%lu", arm_regnames[gpr], add_sub, mod_imm);
   5984 }
   5985 
   5986 /* Return FALSE if GIVEN is not an undefined encoding for MATCHED_INSN.
   5987    Otherwise, return TRUE and set UNDEFINED_CODE to give a reason as to why
   5988    this encoding is undefined.  */
   5989 
   5990 static bfd_boolean
   5991 is_mve_undefined (unsigned long given, enum mve_instructions matched_insn,
   5992 		  enum mve_undefined *undefined_code)
   5993 {
   5994   *undefined_code = UNDEF_NONE;
   5995 
   5996   switch (matched_insn)
   5997     {
   5998     case MVE_VDUP:
   5999       if (arm_decode_field_multiple (given, 5, 5, 22, 22) == 3)
   6000 	{
   6001 	  *undefined_code = UNDEF_SIZE_3;
   6002 	  return TRUE;
   6003 	}
   6004       else
   6005 	return FALSE;
   6006 
   6007     case MVE_VQADD_T1:
   6008     case MVE_VQSUB_T1:
   6009     case MVE_VMUL_VEC_T1:
   6010     case MVE_VABD_VEC:
   6011     case MVE_VADD_VEC_T1:
   6012     case MVE_VSUB_VEC_T1:
   6013     case MVE_VQDMULH_T1:
   6014     case MVE_VQRDMULH_T2:
   6015     case MVE_VRHADD:
   6016     case MVE_VHADD_T1:
   6017     case MVE_VHSUB_T1:
   6018       if (arm_decode_field (given, 20, 21) == 3)
   6019 	{
   6020 	  *undefined_code = UNDEF_SIZE_3;
   6021 	  return TRUE;
   6022 	}
   6023       else
   6024 	return FALSE;
   6025 
   6026     case MVE_VLDRB_T1:
   6027       if (arm_decode_field (given, 7, 8) == 3)
   6028 	{
   6029 	  *undefined_code = UNDEF_SIZE_3;
   6030 	  return TRUE;
   6031 	}
   6032       else
   6033 	return FALSE;
   6034 
   6035     case MVE_VLDRH_T2:
   6036       if (arm_decode_field (given, 7, 8) <= 1)
   6037 	{
   6038 	  *undefined_code = UNDEF_SIZE_LE_1;
   6039 	  return TRUE;
   6040 	}
   6041       else
   6042 	return FALSE;
   6043 
   6044     case MVE_VSTRB_T1:
   6045       if ((arm_decode_field (given, 7, 8) == 0))
   6046 	{
   6047 	  *undefined_code = UNDEF_SIZE_0;
   6048 	  return TRUE;
   6049 	}
   6050       else
   6051 	return FALSE;
   6052 
   6053     case MVE_VSTRH_T2:
   6054       if ((arm_decode_field (given, 7, 8) <= 1))
   6055 	{
   6056 	  *undefined_code = UNDEF_SIZE_LE_1;
   6057 	  return TRUE;
   6058 	}
   6059       else
   6060 	return FALSE;
   6061 
   6062     case MVE_VLDRB_GATHER_T1:
   6063       if (arm_decode_field (given, 7, 8) == 3)
   6064 	{
   6065 	  *undefined_code = UNDEF_SIZE_3;
   6066 	  return TRUE;
   6067 	}
   6068       else if ((arm_decode_field (given, 28, 28) == 0)
   6069 	       && (arm_decode_field (given, 7, 8) == 0))
   6070 	{
   6071 	  *undefined_code = UNDEF_NOT_UNS_SIZE_0;
   6072 	  return TRUE;
   6073 	}
   6074       else
   6075 	return FALSE;
   6076 
   6077     case MVE_VLDRH_GATHER_T2:
   6078       if (arm_decode_field (given, 7, 8) == 3)
   6079 	{
   6080 	  *undefined_code = UNDEF_SIZE_3;
   6081 	  return TRUE;
   6082 	}
   6083       else if ((arm_decode_field (given, 28, 28) == 0)
   6084 	       && (arm_decode_field (given, 7, 8) == 1))
   6085 	{
   6086 	  *undefined_code = UNDEF_NOT_UNS_SIZE_1;
   6087 	  return TRUE;
   6088 	}
   6089       else if (arm_decode_field (given, 7, 8) == 0)
   6090 	{
   6091 	  *undefined_code = UNDEF_SIZE_0;
   6092 	  return TRUE;
   6093 	}
   6094       else
   6095 	return FALSE;
   6096 
   6097     case MVE_VLDRW_GATHER_T3:
   6098       if (arm_decode_field (given, 7, 8) != 2)
   6099 	{
   6100 	  *undefined_code = UNDEF_SIZE_NOT_2;
   6101 	  return TRUE;
   6102 	}
   6103       else if (arm_decode_field (given, 28, 28) == 0)
   6104 	{
   6105 	  *undefined_code = UNDEF_NOT_UNSIGNED;
   6106 	  return TRUE;
   6107 	}
   6108       else
   6109 	return FALSE;
   6110 
   6111     case MVE_VLDRD_GATHER_T4:
   6112       if (arm_decode_field (given, 7, 8) != 3)
   6113 	{
   6114 	  *undefined_code = UNDEF_SIZE_NOT_3;
   6115 	  return TRUE;
   6116 	}
   6117       else if (arm_decode_field (given, 28, 28) == 0)
   6118 	{
   6119 	  *undefined_code = UNDEF_NOT_UNSIGNED;
   6120 	  return TRUE;
   6121 	}
   6122       else
   6123 	return FALSE;
   6124 
   6125     case MVE_VSTRB_SCATTER_T1:
   6126       if (arm_decode_field (given, 7, 8) == 3)
   6127 	{
   6128 	  *undefined_code = UNDEF_SIZE_3;
   6129 	  return TRUE;
   6130 	}
   6131       else
   6132 	return FALSE;
   6133 
   6134     case MVE_VSTRH_SCATTER_T2:
   6135       {
   6136 	unsigned long size = arm_decode_field (given, 7, 8);
   6137 	if (size == 3)
   6138 	  {
   6139 	    *undefined_code = UNDEF_SIZE_3;
   6140 	    return TRUE;
   6141 	  }
   6142 	else if (size == 0)
   6143 	  {
   6144 	    *undefined_code = UNDEF_SIZE_0;
   6145 	    return TRUE;
   6146 	  }
   6147 	else
   6148 	  return FALSE;
   6149       }
   6150 
   6151     case MVE_VSTRW_SCATTER_T3:
   6152       if (arm_decode_field (given, 7, 8) != 2)
   6153 	{
   6154 	  *undefined_code = UNDEF_SIZE_NOT_2;
   6155 	  return TRUE;
   6156 	}
   6157       else
   6158 	return FALSE;
   6159 
   6160     case MVE_VSTRD_SCATTER_T4:
   6161       if (arm_decode_field (given, 7, 8) != 3)
   6162 	{
   6163 	  *undefined_code = UNDEF_SIZE_NOT_3;
   6164 	  return TRUE;
   6165 	}
   6166       else
   6167 	return FALSE;
   6168 
   6169     case MVE_VCVT_FP_FIX_VEC:
   6170       {
   6171 	unsigned long imm6 = arm_decode_field (given, 16, 21);
   6172 	if ((imm6 & 0x20) == 0)
   6173 	  {
   6174 	    *undefined_code = UNDEF_VCVT_IMM6;
   6175 	    return TRUE;
   6176 	  }
   6177 
   6178 	if ((arm_decode_field (given, 9, 9) == 0)
   6179 	    && ((imm6 & 0x30) == 0x20))
   6180 	  {
   6181 	    *undefined_code = UNDEF_VCVT_FSI_IMM6;
   6182 	    return TRUE;
   6183 	  }
   6184 
   6185 	return FALSE;
   6186       }
   6187 
   6188     case MVE_VNEG_FP:
   6189     case MVE_VABS_FP:
   6190     case MVE_VCVT_BETWEEN_FP_INT:
   6191     case MVE_VCVT_FROM_FP_TO_INT:
   6192       {
   6193 	unsigned long size = arm_decode_field (given, 18, 19);
   6194 	if (size == 0)
   6195 	  {
   6196 	    *undefined_code = UNDEF_SIZE_0;
   6197 	    return TRUE;
   6198 	  }
   6199 	else if (size == 3)
   6200 	  {
   6201 	    *undefined_code = UNDEF_SIZE_3;
   6202 	    return TRUE;
   6203 	  }
   6204 	else
   6205 	  return FALSE;
   6206       }
   6207 
   6208     case MVE_VMOV_VEC_LANE_TO_GP:
   6209       {
   6210 	unsigned long op1 = arm_decode_field (given, 21, 22);
   6211 	unsigned long op2 = arm_decode_field (given, 5, 6);
   6212 	unsigned long u = arm_decode_field (given, 23, 23);
   6213 
   6214 	if ((op2 == 0) && (u == 1))
   6215 	  {
   6216 	    if ((op1 == 0) || (op1 == 1))
   6217 	      {
   6218 		*undefined_code = UNDEF_BAD_U_OP1_OP2;
   6219 		return TRUE;
   6220 	      }
   6221 	    else
   6222 	      return FALSE;
   6223 	  }
   6224 	else if (op2 == 2)
   6225 	  {
   6226 	    if ((op1 == 0) || (op1 == 1))
   6227 	      {
   6228 		*undefined_code = UNDEF_BAD_OP1_OP2;
   6229 		return TRUE;
   6230 	      }
   6231 	    else
   6232 	      return FALSE;
   6233 	  }
   6234 
   6235 	return FALSE;
   6236       }
   6237 
   6238     case MVE_VMOV_GP_TO_VEC_LANE:
   6239       if (arm_decode_field (given, 5, 6) == 2)
   6240 	{
   6241 	  unsigned long op1 = arm_decode_field (given, 21, 22);
   6242 	  if ((op1 == 0) || (op1 == 1))
   6243 	    {
   6244 	      *undefined_code = UNDEF_BAD_OP1_OP2;
   6245 	      return TRUE;
   6246 	    }
   6247 	  else
   6248 	    return FALSE;
   6249 	}
   6250       else
   6251 	return FALSE;
   6252 
   6253     case MVE_VMOV_VEC_TO_VEC:
   6254       if ((arm_decode_field (given, 5, 5) == 1)
   6255 	  || (arm_decode_field (given, 22, 22) == 1))
   6256 	  return TRUE;
   6257       return FALSE;
   6258 
   6259     case MVE_VMOV_IMM_TO_VEC:
   6260       if (arm_decode_field (given, 5, 5) == 0)
   6261       {
   6262 	unsigned long cmode = arm_decode_field (given, 8, 11);
   6263 
   6264 	if (((cmode & 9) == 1) || ((cmode & 5) == 1))
   6265 	  {
   6266 	    *undefined_code = UNDEF_OP_0_BAD_CMODE;
   6267 	    return TRUE;
   6268 	  }
   6269 	else
   6270 	  return FALSE;
   6271       }
   6272       else
   6273 	return FALSE;
   6274 
   6275     case MVE_VSHLL_T2:
   6276     case MVE_VMOVN:
   6277       if (arm_decode_field (given, 18, 19) == 2)
   6278 	{
   6279 	  *undefined_code = UNDEF_SIZE_2;
   6280 	  return TRUE;
   6281 	}
   6282       else
   6283 	return FALSE;
   6284 
   6285     case MVE_VRMLALDAVH:
   6286     case MVE_VMLADAV_T1:
   6287     case MVE_VMLADAV_T2:
   6288     case MVE_VMLALDAV:
   6289       if ((arm_decode_field (given, 28, 28) == 1)
   6290 	  && (arm_decode_field (given, 12, 12) == 1))
   6291 	{
   6292 	  *undefined_code = UNDEF_XCHG_UNS;
   6293 	  return TRUE;
   6294 	}
   6295       else
   6296 	return FALSE;
   6297 
   6298     case MVE_VQSHRN:
   6299     case MVE_VQSHRUN:
   6300     case MVE_VSHLL_T1:
   6301     case MVE_VSHRN:
   6302       {
   6303 	unsigned long sz = arm_decode_field (given, 19, 20);
   6304 	if (sz == 1)
   6305 	  return FALSE;
   6306 	else if ((sz & 2) == 2)
   6307 	  return FALSE;
   6308 	else
   6309 	  {
   6310 	    *undefined_code = UNDEF_SIZE;
   6311 	    return TRUE;
   6312 	  }
   6313       }
   6314       break;
   6315 
   6316     case MVE_VQSHL_T2:
   6317     case MVE_VQSHLU_T3:
   6318     case MVE_VRSHR:
   6319     case MVE_VSHL_T1:
   6320     case MVE_VSHR:
   6321     case MVE_VSLI:
   6322     case MVE_VSRI:
   6323       {
   6324 	unsigned long sz = arm_decode_field (given, 19, 21);
   6325 	if ((sz & 7) == 1)
   6326 	  return FALSE;
   6327 	else if ((sz & 6) == 2)
   6328 	  return FALSE;
   6329 	else if ((sz & 4) == 4)
   6330 	  return FALSE;
   6331 	else
   6332 	  {
   6333 	    *undefined_code = UNDEF_SIZE;
   6334 	    return TRUE;
   6335 	  }
   6336       }
   6337 
   6338     case MVE_VQRSHRN:
   6339     case MVE_VQRSHRUN:
   6340       if (arm_decode_field (given, 19, 20) == 0)
   6341 	{
   6342 	  *undefined_code = UNDEF_SIZE_0;
   6343 	  return TRUE;
   6344 	}
   6345       else
   6346 	return FALSE;
   6347 
   6348     case MVE_VABS_VEC:
   6349 	if (arm_decode_field (given, 18, 19) == 3)
   6350 	{
   6351 	  *undefined_code = UNDEF_SIZE_3;
   6352 	  return TRUE;
   6353 	}
   6354 	else
   6355 	  return FALSE;
   6356 
   6357     case MVE_VQNEG:
   6358     case MVE_VQABS:
   6359     case MVE_VNEG_VEC:
   6360     case MVE_VCLS:
   6361     case MVE_VCLZ:
   6362       if (arm_decode_field (given, 18, 19) == 3)
   6363 	{
   6364 	  *undefined_code = UNDEF_SIZE_3;
   6365 	  return TRUE;
   6366 	}
   6367       else
   6368 	return FALSE;
   6369 
   6370     case MVE_VREV16:
   6371       if (arm_decode_field (given, 18, 19) == 0)
   6372 	return FALSE;
   6373       else
   6374 	{
   6375 	  *undefined_code = UNDEF_SIZE_NOT_0;
   6376 	  return TRUE;
   6377 	}
   6378 
   6379     case MVE_VREV32:
   6380       {
   6381 	unsigned long size = arm_decode_field (given, 18, 19);
   6382 	if ((size & 2) == 2)
   6383 	  {
   6384 	    *undefined_code = UNDEF_SIZE_2;
   6385 	    return TRUE;
   6386 	  }
   6387 	else
   6388 	  return FALSE;
   6389       }
   6390 
   6391     case MVE_VREV64:
   6392       if (arm_decode_field (given, 18, 19) != 3)
   6393 	return FALSE;
   6394       else
   6395 	{
   6396 	  *undefined_code = UNDEF_SIZE_3;
   6397 	  return TRUE;
   6398 	}
   6399 
   6400     default:
   6401       return FALSE;
   6402     }
   6403 }
   6404 
   6405 /* Return FALSE if GIVEN is not an unpredictable encoding for MATCHED_INSN.
   6406    Otherwise, return TRUE and set UNPREDICTABLE_CODE to give a reason as to
   6407    why this encoding is unpredictable.  */
   6408 
   6409 static bfd_boolean
   6410 is_mve_unpredictable (unsigned long given, enum mve_instructions matched_insn,
   6411 		      enum mve_unpredictable *unpredictable_code)
   6412 {
   6413   *unpredictable_code = UNPRED_NONE;
   6414 
   6415   switch (matched_insn)
   6416     {
   6417     case MVE_VCMP_FP_T2:
   6418     case MVE_VPT_FP_T2:
   6419       if ((arm_decode_field (given, 12, 12) == 0)
   6420 	  && (arm_decode_field (given, 5, 5) == 1))
   6421 	{
   6422 	  *unpredictable_code = UNPRED_FCA_0_FCB_1;
   6423 	  return TRUE;
   6424 	}
   6425       else
   6426 	return FALSE;
   6427 
   6428     case MVE_VPT_VEC_T4:
   6429     case MVE_VPT_VEC_T5:
   6430     case MVE_VPT_VEC_T6:
   6431     case MVE_VCMP_VEC_T4:
   6432     case MVE_VCMP_VEC_T5:
   6433     case MVE_VCMP_VEC_T6:
   6434       if (arm_decode_field (given, 0, 3) == 0xd)
   6435 	{
   6436 	  *unpredictable_code = UNPRED_R13;
   6437 	  return TRUE;
   6438 	}
   6439       else
   6440 	return FALSE;
   6441 
   6442     case MVE_VDUP:
   6443       {
   6444 	unsigned long gpr = arm_decode_field (given, 12, 15);
   6445 	if (gpr == 0xd)
   6446 	  {
   6447 	    *unpredictable_code = UNPRED_R13;
   6448 	    return TRUE;
   6449 	  }
   6450 	else if (gpr == 0xf)
   6451 	  {
   6452 	    *unpredictable_code = UNPRED_R15;
   6453 	    return TRUE;
   6454 	  }
   6455 
   6456 	return FALSE;
   6457       }
   6458 
   6459     case MVE_VQADD_T2:
   6460     case MVE_VQSUB_T2:
   6461     case MVE_VMUL_FP_T2:
   6462     case MVE_VMUL_VEC_T2:
   6463     case MVE_VMLA:
   6464     case MVE_VBRSR:
   6465     case MVE_VADD_FP_T2:
   6466     case MVE_VSUB_FP_T2:
   6467     case MVE_VADD_VEC_T2:
   6468     case MVE_VSUB_VEC_T2:
   6469     case MVE_VQRSHL_T2:
   6470     case MVE_VQSHL_T1:
   6471     case MVE_VRSHL_T2:
   6472     case MVE_VSHL_T2:
   6473     case MVE_VSHLC:
   6474     case MVE_VQDMLAH:
   6475     case MVE_VQRDMLAH:
   6476     case MVE_VQDMLASH:
   6477     case MVE_VQRDMLASH:
   6478     case MVE_VQDMULH_T3:
   6479     case MVE_VQRDMULH_T4:
   6480     case MVE_VMLAS:
   6481     case MVE_VFMA_FP_SCALAR:
   6482     case MVE_VFMAS_FP_SCALAR:
   6483     case MVE_VHADD_T2:
   6484     case MVE_VHSUB_T2:
   6485       {
   6486 	unsigned long gpr = arm_decode_field (given, 0, 3);
   6487 	if (gpr == 0xd)
   6488 	  {
   6489 	    *unpredictable_code = UNPRED_R13;
   6490 	    return TRUE;
   6491 	  }
   6492 	else if (gpr == 0xf)
   6493 	  {
   6494 	    *unpredictable_code = UNPRED_R15;
   6495 	    return TRUE;
   6496 	  }
   6497 
   6498 	return FALSE;
   6499       }
   6500 
   6501     case MVE_VLD2:
   6502     case MVE_VST2:
   6503       {
   6504 	unsigned long rn = arm_decode_field (given, 16, 19);
   6505 
   6506 	if ((rn == 0xd) && (arm_decode_field (given, 21, 21) == 1))
   6507 	  {
   6508 	    *unpredictable_code = UNPRED_R13_AND_WB;
   6509 	    return TRUE;
   6510 	  }
   6511 
   6512 	if (rn == 0xf)
   6513 	  {
   6514 	    *unpredictable_code = UNPRED_R15;
   6515 	    return TRUE;
   6516 	  }
   6517 
   6518 	if (arm_decode_field_multiple (given, 13, 15, 22, 22) > 6)
   6519 	  {
   6520 	    *unpredictable_code = UNPRED_Q_GT_6;
   6521 	    return TRUE;
   6522 	  }
   6523 	else
   6524 	  return FALSE;
   6525       }
   6526 
   6527     case MVE_VLD4:
   6528     case MVE_VST4:
   6529       {
   6530 	unsigned long rn = arm_decode_field (given, 16, 19);
   6531 
   6532 	if ((rn == 0xd) && (arm_decode_field (given, 21, 21) == 1))
   6533 	  {
   6534 	    *unpredictable_code = UNPRED_R13_AND_WB;
   6535 	    return TRUE;
   6536 	  }
   6537 
   6538 	if (rn == 0xf)
   6539 	  {
   6540 	    *unpredictable_code = UNPRED_R15;
   6541 	    return TRUE;
   6542 	  }
   6543 
   6544 	if (arm_decode_field_multiple (given, 13, 15, 22, 22) > 4)
   6545 	  {
   6546 	    *unpredictable_code = UNPRED_Q_GT_4;
   6547 	    return TRUE;
   6548 	  }
   6549 	else
   6550 	  return FALSE;
   6551       }
   6552 
   6553     case MVE_VLDRB_T5:
   6554     case MVE_VLDRH_T6:
   6555     case MVE_VLDRW_T7:
   6556     case MVE_VSTRB_T5:
   6557     case MVE_VSTRH_T6:
   6558     case MVE_VSTRW_T7:
   6559       {
   6560 	unsigned long rn = arm_decode_field (given, 16, 19);
   6561 
   6562 	if ((rn == 0xd) && (arm_decode_field (given, 21, 21) == 1))
   6563 	  {
   6564 	    *unpredictable_code = UNPRED_R13_AND_WB;
   6565 	    return TRUE;
   6566 	  }
   6567 	else if (rn == 0xf)
   6568 	  {
   6569 	    *unpredictable_code = UNPRED_R15;
   6570 	    return TRUE;
   6571 	  }
   6572 	else
   6573 	  return FALSE;
   6574       }
   6575 
   6576     case MVE_VLDRB_GATHER_T1:
   6577       if (arm_decode_field (given, 0, 0) == 1)
   6578 	{
   6579 	  *unpredictable_code = UNPRED_OS;
   6580 	  return TRUE;
   6581 	}
   6582 
   6583       /*  fall through.  */
   6584       /* To handle common code with T2-T4 variants.  */
   6585     case MVE_VLDRH_GATHER_T2:
   6586     case MVE_VLDRW_GATHER_T3:
   6587     case MVE_VLDRD_GATHER_T4:
   6588       {
   6589 	unsigned long qd = arm_decode_field_multiple (given, 13, 15, 22, 22);
   6590 	unsigned long qm = arm_decode_field_multiple (given, 1, 3, 5, 5);
   6591 
   6592 	if (qd == qm)
   6593 	  {
   6594 	    *unpredictable_code = UNPRED_Q_REGS_EQUAL;
   6595 	    return TRUE;
   6596 	  }
   6597 
   6598 	if (arm_decode_field (given, 16, 19) == 0xf)
   6599 	  {
   6600 	    *unpredictable_code = UNPRED_R15;
   6601 	    return TRUE;
   6602 	  }
   6603 
   6604 	return FALSE;
   6605       }
   6606 
   6607     case MVE_VLDRW_GATHER_T5:
   6608     case MVE_VLDRD_GATHER_T6:
   6609       {
   6610 	unsigned long qd = arm_decode_field_multiple (given, 13, 15, 22, 22);
   6611 	unsigned long qm = arm_decode_field_multiple (given, 17, 19, 7, 7);
   6612 
   6613 	if (qd == qm)
   6614 	  {
   6615 	    *unpredictable_code = UNPRED_Q_REGS_EQUAL;
   6616 	    return TRUE;
   6617 	  }
   6618 	else
   6619 	  return FALSE;
   6620       }
   6621 
   6622     case MVE_VSTRB_SCATTER_T1:
   6623       if (arm_decode_field (given, 16, 19) == 0xf)
   6624 	{
   6625 	  *unpredictable_code = UNPRED_R15;
   6626 	  return TRUE;
   6627 	}
   6628       else if (arm_decode_field (given, 0, 0) == 1)
   6629 	{
   6630 	  *unpredictable_code = UNPRED_OS;
   6631 	  return TRUE;
   6632 	}
   6633       else
   6634 	return FALSE;
   6635 
   6636     case MVE_VSTRH_SCATTER_T2:
   6637     case MVE_VSTRW_SCATTER_T3:
   6638     case MVE_VSTRD_SCATTER_T4:
   6639       if (arm_decode_field (given, 16, 19) == 0xf)
   6640 	{
   6641 	  *unpredictable_code = UNPRED_R15;
   6642 	  return TRUE;
   6643 	}
   6644       else
   6645 	return FALSE;
   6646 
   6647     case MVE_VMOV2_VEC_LANE_TO_GP:
   6648     case MVE_VMOV2_GP_TO_VEC_LANE:
   6649     case MVE_VCVT_BETWEEN_FP_INT:
   6650     case MVE_VCVT_FROM_FP_TO_INT:
   6651       {
   6652 	unsigned long rt = arm_decode_field (given, 0, 3);
   6653 	unsigned long rt2 = arm_decode_field (given, 16, 19);
   6654 
   6655 	if ((rt == 0xd) || (rt2 == 0xd))
   6656 	  {
   6657 	    *unpredictable_code = UNPRED_R13;
   6658 	    return TRUE;
   6659 	  }
   6660 	else if ((rt == 0xf) || (rt2 == 0xf))
   6661 	  {
   6662 	    *unpredictable_code = UNPRED_R15;
   6663 	    return TRUE;
   6664 	  }
   6665 	else if (rt == rt2)
   6666 	  {
   6667 	    *unpredictable_code = UNPRED_GP_REGS_EQUAL;
   6668 	    return TRUE;
   6669 	  }
   6670 
   6671 	return FALSE;
   6672       }
   6673 
   6674     case MVE_VMAXV:
   6675     case MVE_VMAXAV:
   6676     case MVE_VMAXNMV_FP:
   6677     case MVE_VMAXNMAV_FP:
   6678     case MVE_VMINNMV_FP:
   6679     case MVE_VMINNMAV_FP:
   6680     case MVE_VMINV:
   6681     case MVE_VMINAV:
   6682     case MVE_VABAV:
   6683     case MVE_VMOV_HFP_TO_GP:
   6684     case MVE_VMOV_GP_TO_VEC_LANE:
   6685     case MVE_VMOV_VEC_LANE_TO_GP:
   6686       {
   6687 	unsigned long rda = arm_decode_field (given, 12, 15);
   6688 	if (rda == 0xd)
   6689 	  {
   6690 	    *unpredictable_code = UNPRED_R13;
   6691 	    return TRUE;
   6692 	  }
   6693 	else if (rda == 0xf)
   6694 	  {
   6695 	    *unpredictable_code = UNPRED_R15;
   6696 	    return TRUE;
   6697 	  }
   6698 
   6699 	return FALSE;
   6700       }
   6701 
   6702     case MVE_VMULL_INT:
   6703       {
   6704 	unsigned long Qd;
   6705 	unsigned long Qm;
   6706 	unsigned long Qn;
   6707 
   6708 	if (arm_decode_field (given, 20, 21) == 2)
   6709 	  {
   6710 	    Qd = arm_decode_field_multiple (given, 13, 15, 22, 22);
   6711 	    Qm = arm_decode_field_multiple (given, 1, 3, 5, 5);
   6712 	    Qn = arm_decode_field_multiple (given, 17, 19, 7, 7);
   6713 
   6714 	    if ((Qd == Qn) || (Qd == Qm))
   6715 	      {
   6716 		*unpredictable_code = UNPRED_Q_REGS_EQ_AND_SIZE_2;
   6717 		return TRUE;
   6718 	      }
   6719 	    else
   6720 	      return FALSE;
   6721 	  }
   6722 	else
   6723 	  return FALSE;
   6724       }
   6725 
   6726     case MVE_VCMUL_FP:
   6727     case MVE_VQDMULL_T1:
   6728       {
   6729 	unsigned long Qd;
   6730 	unsigned long Qm;
   6731 	unsigned long Qn;
   6732 
   6733 	if (arm_decode_field (given, 28, 28) == 1)
   6734 	  {
   6735 	    Qd = arm_decode_field_multiple (given, 13, 15, 22, 22);
   6736 	    Qm = arm_decode_field_multiple (given, 1, 3, 5, 5);
   6737 	    Qn = arm_decode_field_multiple (given, 17, 19, 7, 7);
   6738 
   6739 	    if ((Qd == Qn) || (Qd == Qm))
   6740 	      {
   6741 		*unpredictable_code = UNPRED_Q_REGS_EQ_AND_SIZE_1;
   6742 		return TRUE;
   6743 	      }
   6744 	    else
   6745 	      return FALSE;
   6746 	  }
   6747 	else
   6748 	  return FALSE;
   6749       }
   6750 
   6751     case MVE_VQDMULL_T2:
   6752       {
   6753 	unsigned long gpr = arm_decode_field (given, 0, 3);
   6754 	if (gpr == 0xd)
   6755 	  {
   6756 	    *unpredictable_code = UNPRED_R13;
   6757 	    return TRUE;
   6758 	  }
   6759 	else if (gpr == 0xf)
   6760 	  {
   6761 	    *unpredictable_code = UNPRED_R15;
   6762 	    return TRUE;
   6763 	  }
   6764 
   6765 	if (arm_decode_field (given, 28, 28) == 1)
   6766 	  {
   6767 	    unsigned long Qd
   6768 	      = arm_decode_field_multiple (given, 13, 15, 22, 22);
   6769 	    unsigned long Qn = arm_decode_field_multiple (given, 17, 19, 7, 7);
   6770 
   6771 	    if (Qd == Qn)
   6772 	      {
   6773 		*unpredictable_code = UNPRED_Q_REGS_EQ_AND_SIZE_1;
   6774 		return TRUE;
   6775 	      }
   6776 	    else
   6777 	      return FALSE;
   6778 	  }
   6779 
   6780 	return FALSE;
   6781       }
   6782 
   6783     case MVE_VMLSLDAV:
   6784     case MVE_VRMLSLDAVH:
   6785     case MVE_VMLALDAV:
   6786     case MVE_VADDLV:
   6787       if (arm_decode_field (given, 20, 22) == 6)
   6788 	{
   6789 	  *unpredictable_code = UNPRED_R13;
   6790 	  return TRUE;
   6791 	}
   6792       else
   6793 	return FALSE;
   6794 
   6795     case MVE_VDWDUP:
   6796     case MVE_VIWDUP:
   6797       if (arm_decode_field (given, 1, 3) == 6)
   6798 	{
   6799 	  *unpredictable_code = UNPRED_R13;
   6800 	  return TRUE;
   6801 	}
   6802       else
   6803 	return FALSE;
   6804 
   6805     case MVE_VCADD_VEC:
   6806     case MVE_VHCADD:
   6807       {
   6808 	unsigned long Qd = arm_decode_field_multiple (given, 13, 15, 22, 22);
   6809 	unsigned long Qm = arm_decode_field_multiple (given, 1, 3, 5, 5);
   6810 	if ((Qd == Qm) && arm_decode_field (given, 20, 21) == 2)
   6811 	  {
   6812 	    *unpredictable_code = UNPRED_Q_REGS_EQ_AND_SIZE_2;
   6813 	    return TRUE;
   6814 	  }
   6815 	else
   6816 	  return FALSE;
   6817       }
   6818 
   6819     case MVE_VCADD_FP:
   6820       {
   6821 	unsigned long Qd = arm_decode_field_multiple (given, 13, 15, 22, 22);
   6822 	unsigned long Qm = arm_decode_field_multiple (given, 1, 3, 5, 5);
   6823 	if ((Qd == Qm) && arm_decode_field (given, 20, 20) == 1)
   6824 	  {
   6825 	    *unpredictable_code = UNPRED_Q_REGS_EQ_AND_SIZE_1;
   6826 	    return TRUE;
   6827 	  }
   6828 	else
   6829 	  return FALSE;
   6830       }
   6831 
   6832     case MVE_VCMLA_FP:
   6833       {
   6834 	unsigned long Qda;
   6835 	unsigned long Qm;
   6836 	unsigned long Qn;
   6837 
   6838 	if (arm_decode_field (given, 20, 20) == 1)
   6839 	  {
   6840 	    Qda = arm_decode_field_multiple (given, 13, 15, 22, 22);
   6841 	    Qm = arm_decode_field_multiple (given, 1, 3, 5, 5);
   6842 	    Qn = arm_decode_field_multiple (given, 17, 19, 7, 7);
   6843 
   6844 	    if ((Qda == Qn) || (Qda == Qm))
   6845 	      {
   6846 		*unpredictable_code = UNPRED_Q_REGS_EQ_AND_SIZE_1;
   6847 		return TRUE;
   6848 	      }
   6849 	    else
   6850 	      return FALSE;
   6851 	  }
   6852 	else
   6853 	  return FALSE;
   6854 
   6855       }
   6856 
   6857     case MVE_VCTP:
   6858       if (arm_decode_field (given, 16, 19) == 0xd)
   6859 	{
   6860 	  *unpredictable_code = UNPRED_R13;
   6861 	  return TRUE;
   6862 	}
   6863       else
   6864 	return FALSE;
   6865 
   6866     case MVE_VREV64:
   6867       {
   6868 	unsigned long qd = arm_decode_field_multiple (given, 13, 15, 22, 22);
   6869 	unsigned long qm = arm_decode_field_multiple (given, 1, 3, 6, 6);
   6870 
   6871 	if (qd == qm)
   6872 	  {
   6873 	    *unpredictable_code = UNPRED_Q_REGS_EQUAL;
   6874 	    return TRUE;
   6875 	  }
   6876 	else
   6877 	  return FALSE;
   6878       }
   6879 
   6880     case MVE_LSLL:
   6881     case MVE_LSLLI:
   6882     case MVE_LSRL:
   6883     case MVE_ASRL:
   6884     case MVE_ASRLI:
   6885     case MVE_UQSHLL:
   6886     case MVE_UQRSHLL:
   6887     case MVE_URSHRL:
   6888     case MVE_SRSHRL:
   6889     case MVE_SQSHLL:
   6890     case MVE_SQRSHRL:
   6891       {
   6892 	unsigned long gpr = arm_decode_field (given, 9, 11);
   6893 	gpr = ((gpr << 1) | 1);
   6894 	if (gpr == 0xd)
   6895 	  {
   6896 	    *unpredictable_code = UNPRED_R13;
   6897 	    return TRUE;
   6898 	  }
   6899 	else if (gpr == 0xf)
   6900 	  {
   6901 	    *unpredictable_code = UNPRED_R15;
   6902 	    return TRUE;
   6903 	  }
   6904 
   6905 	return FALSE;
   6906       }
   6907 
   6908     default:
   6909       return FALSE;
   6910     }
   6911 }
   6912 
   6913 static void
   6914 print_mve_vmov_index (struct disassemble_info *info, unsigned long given)
   6915 {
   6916   unsigned long op1 = arm_decode_field (given, 21, 22);
   6917   unsigned long op2 = arm_decode_field (given, 5, 6);
   6918   unsigned long h = arm_decode_field (given, 16, 16);
   6919   unsigned long index_operand, esize, targetBeat, idx;
   6920   void *stream = info->stream;
   6921   fprintf_ftype func = info->fprintf_func;
   6922 
   6923   if ((op1 & 0x2) == 0x2)
   6924     {
   6925       index_operand = op2;
   6926       esize = 8;
   6927     }
   6928   else if (((op1 & 0x2) == 0x0) && ((op2 & 0x1) == 0x1))
   6929     {
   6930       index_operand = op2  >> 1;
   6931       esize = 16;
   6932     }
   6933   else if (((op1 & 0x2) == 0) && ((op2 & 0x3) == 0))
   6934     {
   6935       index_operand = 0;
   6936       esize = 32;
   6937     }
   6938   else
   6939     {
   6940       func (stream, "<undefined index>");
   6941       return;
   6942     }
   6943 
   6944   targetBeat =  (op1 & 0x1) | (h << 1);
   6945   idx = index_operand + targetBeat * (32/esize);
   6946 
   6947   func (stream, "%lu", idx);
   6948 }
   6949 
   6950 /* Print neon and mve 8-bit immediate that can be a 8, 16, 32, or 64-bits
   6951    in length and integer of floating-point type.  */
   6952 static void
   6953 print_simd_imm8 (struct disassemble_info *info, unsigned long given,
   6954 		 unsigned int ibit_loc, const struct mopcode32 *insn)
   6955 {
   6956   int bits = 0;
   6957   int cmode = (given >> 8) & 0xf;
   6958   int op = (given >> 5) & 0x1;
   6959   unsigned long value = 0, hival = 0;
   6960   unsigned shift;
   6961   int size = 0;
   6962   int isfloat = 0;
   6963   void *stream = info->stream;
   6964   fprintf_ftype func = info->fprintf_func;
   6965 
   6966   /* On Neon the 'i' bit is at bit 24, on mve it is
   6967      at bit 28.  */
   6968   bits |= ((given >> ibit_loc) & 1) << 7;
   6969   bits |= ((given >> 16) & 7) << 4;
   6970   bits |= ((given >> 0) & 15) << 0;
   6971 
   6972   if (cmode < 8)
   6973     {
   6974       shift = (cmode >> 1) & 3;
   6975       value = (unsigned long) bits << (8 * shift);
   6976       size = 32;
   6977     }
   6978   else if (cmode < 12)
   6979     {
   6980       shift = (cmode >> 1) & 1;
   6981       value = (unsigned long) bits << (8 * shift);
   6982       size = 16;
   6983     }
   6984   else if (cmode < 14)
   6985     {
   6986       shift = (cmode & 1) + 1;
   6987       value = (unsigned long) bits << (8 * shift);
   6988       value |= (1ul << (8 * shift)) - 1;
   6989       size = 32;
   6990     }
   6991   else if (cmode == 14)
   6992     {
   6993       if (op)
   6994 	{
   6995 	  /* Bit replication into bytes.  */
   6996 	  int ix;
   6997 	  unsigned long mask;
   6998 
   6999 	  value = 0;
   7000 	  hival = 0;
   7001 	  for (ix = 7; ix >= 0; ix--)
   7002 	    {
   7003 	      mask = ((bits >> ix) & 1) ? 0xff : 0;
   7004 	      if (ix <= 3)
   7005 		value = (value << 8) | mask;
   7006 	      else
   7007 		hival = (hival << 8) | mask;
   7008 	    }
   7009 	  size = 64;
   7010 	}
   7011       else
   7012 	{
   7013 	  /* Byte replication.  */
   7014 	  value = (unsigned long) bits;
   7015 	  size = 8;
   7016 	}
   7017     }
   7018   else if (!op)
   7019     {
   7020       /* Floating point encoding.  */
   7021       int tmp;
   7022 
   7023       value = (unsigned long)  (bits & 0x7f) << 19;
   7024       value |= (unsigned long) (bits & 0x80) << 24;
   7025       tmp = bits & 0x40 ? 0x3c : 0x40;
   7026       value |= (unsigned long) tmp << 24;
   7027       size = 32;
   7028       isfloat = 1;
   7029     }
   7030   else
   7031     {
   7032       func (stream, "<illegal constant %.8x:%x:%x>",
   7033 	    bits, cmode, op);
   7034       size = 32;
   7035       return;
   7036     }
   7037 
   7038   /* printU determines whether the immediate value should be printed as
   7039      unsigned.  */
   7040   unsigned printU = 0;
   7041   switch (insn->mve_op)
   7042     {
   7043     default:
   7044       break;
   7045     /* We want this for instructions that don't have a 'signed' type.  */
   7046     case MVE_VBIC_IMM:
   7047     case MVE_VORR_IMM:
   7048     case MVE_VMVN_IMM:
   7049     case MVE_VMOV_IMM_TO_VEC:
   7050       printU = 1;
   7051       break;
   7052     }
   7053   switch (size)
   7054     {
   7055     case 8:
   7056       func (stream, "#%ld\t; 0x%.2lx", value, value);
   7057       break;
   7058 
   7059     case 16:
   7060       func (stream,
   7061 	    printU
   7062 	    ? "#%lu\t; 0x%.4lx"
   7063 	    : "#%ld\t; 0x%.4lx", value, value);
   7064       break;
   7065 
   7066     case 32:
   7067       if (isfloat)
   7068 	{
   7069 	  unsigned char valbytes[4];
   7070 	  double fvalue;
   7071 
   7072 	  /* Do this a byte at a time so we don't have to
   7073 	     worry about the host's endianness.  */
   7074 	  valbytes[0] = value & 0xff;
   7075 	  valbytes[1] = (value >> 8) & 0xff;
   7076 	  valbytes[2] = (value >> 16) & 0xff;
   7077 	  valbytes[3] = (value >> 24) & 0xff;
   7078 
   7079 	  floatformat_to_double
   7080 	    (& floatformat_ieee_single_little, valbytes,
   7081 	     & fvalue);
   7082 
   7083 	  func (stream, "#%.7g\t; 0x%.8lx", fvalue,
   7084 		value);
   7085 	}
   7086       else
   7087 	func (stream,
   7088 	      printU
   7089 	      ? "#%lu\t; 0x%.8lx"
   7090 	      : "#%ld\t; 0x%.8lx",
   7091 	      (long) (((value & 0x80000000L) != 0)
   7092 		      && !printU
   7093 		      ? value | ~0xffffffffL : value),
   7094 	      value);
   7095       break;
   7096 
   7097     case 64:
   7098       func (stream, "#0x%.8lx%.8lx", hival, value);
   7099       break;
   7100 
   7101     default:
   7102       abort ();
   7103     }
   7104 
   7105 }
   7106 
   7107 static void
   7108 print_mve_undefined (struct disassemble_info *info,
   7109 		     enum mve_undefined undefined_code)
   7110 {
   7111   void *stream = info->stream;
   7112   fprintf_ftype func = info->fprintf_func;
   7113 
   7114   func (stream, "\t\tundefined instruction: ");
   7115 
   7116   switch (undefined_code)
   7117     {
   7118     case UNDEF_SIZE:
   7119       func (stream, "illegal size");
   7120       break;
   7121 
   7122     case UNDEF_SIZE_0:
   7123       func (stream, "size equals zero");
   7124       break;
   7125 
   7126     case UNDEF_SIZE_2:
   7127       func (stream, "size equals two");
   7128       break;
   7129 
   7130     case UNDEF_SIZE_3:
   7131       func (stream, "size equals three");
   7132       break;
   7133 
   7134     case UNDEF_SIZE_LE_1:
   7135       func (stream, "size <= 1");
   7136       break;
   7137 
   7138     case UNDEF_SIZE_NOT_0:
   7139       func (stream, "size not equal to 0");
   7140       break;
   7141 
   7142     case UNDEF_SIZE_NOT_2:
   7143       func (stream, "size not equal to 2");
   7144       break;
   7145 
   7146     case UNDEF_SIZE_NOT_3:
   7147       func (stream, "size not equal to 3");
   7148       break;
   7149 
   7150     case UNDEF_NOT_UNS_SIZE_0:
   7151       func (stream, "not unsigned and size = zero");
   7152       break;
   7153 
   7154     case UNDEF_NOT_UNS_SIZE_1:
   7155       func (stream, "not unsigned and size = one");
   7156       break;
   7157 
   7158     case UNDEF_NOT_UNSIGNED:
   7159       func (stream, "not unsigned");
   7160       break;
   7161 
   7162     case UNDEF_VCVT_IMM6:
   7163       func (stream, "invalid imm6");
   7164       break;
   7165 
   7166     case UNDEF_VCVT_FSI_IMM6:
   7167       func (stream, "fsi = 0 and invalid imm6");
   7168       break;
   7169 
   7170     case UNDEF_BAD_OP1_OP2:
   7171       func (stream, "bad size with op2 = 2 and op1 = 0 or 1");
   7172       break;
   7173 
   7174     case UNDEF_BAD_U_OP1_OP2:
   7175       func (stream, "unsigned with op2 = 0 and op1 = 0 or 1");
   7176       break;
   7177 
   7178     case UNDEF_OP_0_BAD_CMODE:
   7179       func (stream, "op field equal 0 and bad cmode");
   7180       break;
   7181 
   7182     case UNDEF_XCHG_UNS:
   7183       func (stream, "exchange and unsigned together");
   7184       break;
   7185 
   7186     case UNDEF_NONE:
   7187       break;
   7188     }
   7189 
   7190 }
   7191 
   7192 static void
   7193 print_mve_unpredictable (struct disassemble_info *info,
   7194 			 enum mve_unpredictable unpredict_code)
   7195 {
   7196   void *stream = info->stream;
   7197   fprintf_ftype func = info->fprintf_func;
   7198 
   7199   func (stream, "%s: ", UNPREDICTABLE_INSTRUCTION);
   7200 
   7201   switch (unpredict_code)
   7202     {
   7203     case UNPRED_IT_BLOCK:
   7204       func (stream, "mve instruction in it block");
   7205       break;
   7206 
   7207     case UNPRED_FCA_0_FCB_1:
   7208       func (stream, "condition bits, fca = 0 and fcb = 1");
   7209       break;
   7210 
   7211     case UNPRED_R13:
   7212       func (stream, "use of r13 (sp)");
   7213       break;
   7214 
   7215     case UNPRED_R15:
   7216       func (stream, "use of r15 (pc)");
   7217       break;
   7218 
   7219     case UNPRED_Q_GT_4:
   7220       func (stream, "start register block > r4");
   7221       break;
   7222 
   7223     case UNPRED_Q_GT_6:
   7224       func (stream, "start register block > r6");
   7225       break;
   7226 
   7227     case UNPRED_R13_AND_WB:
   7228       func (stream, "use of r13 and write back");
   7229       break;
   7230 
   7231     case UNPRED_Q_REGS_EQUAL:
   7232       func (stream,
   7233 	    "same vector register used for destination and other operand");
   7234       break;
   7235 
   7236     case UNPRED_OS:
   7237       func (stream, "use of offset scaled");
   7238       break;
   7239 
   7240     case UNPRED_GP_REGS_EQUAL:
   7241       func (stream, "same general-purpose register used for both operands");
   7242       break;
   7243 
   7244     case UNPRED_Q_REGS_EQ_AND_SIZE_1:
   7245       func (stream, "use of identical q registers and size = 1");
   7246       break;
   7247 
   7248     case UNPRED_Q_REGS_EQ_AND_SIZE_2:
   7249       func (stream, "use of identical q registers and size = 1");
   7250       break;
   7251 
   7252     case UNPRED_NONE:
   7253       break;
   7254     }
   7255 }
   7256 
   7257 /* Print register block operand for mve vld2/vld4/vst2/vld4.  */
   7258 
   7259 static void
   7260 print_mve_register_blocks (struct disassemble_info *info,
   7261 			   unsigned long given,
   7262 			   enum mve_instructions matched_insn)
   7263 {
   7264   void *stream = info->stream;
   7265   fprintf_ftype func = info->fprintf_func;
   7266 
   7267   unsigned long q_reg_start = arm_decode_field_multiple (given,
   7268 							 13, 15,
   7269 							 22, 22);
   7270   switch (matched_insn)
   7271     {
   7272     case MVE_VLD2:
   7273     case MVE_VST2:
   7274       if (q_reg_start <= 6)
   7275 	func (stream, "{q%ld, q%ld}", q_reg_start, q_reg_start + 1);
   7276       else
   7277 	func (stream, "<illegal reg q%ld>", q_reg_start);
   7278       break;
   7279 
   7280     case MVE_VLD4:
   7281     case MVE_VST4:
   7282       if (q_reg_start <= 4)
   7283 	func (stream, "{q%ld, q%ld, q%ld, q%ld}", q_reg_start,
   7284 	      q_reg_start + 1, q_reg_start + 2,
   7285 	      q_reg_start + 3);
   7286       else
   7287 	func (stream, "<illegal reg q%ld>", q_reg_start);
   7288       break;
   7289 
   7290     default:
   7291       break;
   7292     }
   7293 }
   7294 
   7295 static void
   7296 print_mve_rounding_mode (struct disassemble_info *info,
   7297 			 unsigned long given,
   7298 			 enum mve_instructions matched_insn)
   7299 {
   7300   void *stream = info->stream;
   7301   fprintf_ftype func = info->fprintf_func;
   7302 
   7303   switch (matched_insn)
   7304     {
   7305     case MVE_VCVT_FROM_FP_TO_INT:
   7306       {
   7307 	switch (arm_decode_field (given, 8, 9))
   7308 	  {
   7309 	  case 0:
   7310 	    func (stream, "a");
   7311 	    break;
   7312 
   7313 	  case 1:
   7314 	    func (stream, "n");
   7315 	    break;
   7316 
   7317 	  case 2:
   7318 	    func (stream, "p");
   7319 	    break;
   7320 
   7321 	  case 3:
   7322 	    func (stream, "m");
   7323 	    break;
   7324 
   7325 	  default:
   7326 	    break;
   7327 	  }
   7328       }
   7329       break;
   7330 
   7331     case MVE_VRINT_FP:
   7332       {
   7333 	switch (arm_decode_field (given, 7, 9))
   7334 	  {
   7335 	  case 0:
   7336 	    func (stream, "n");
   7337 	    break;
   7338 
   7339 	  case 1:
   7340 	    func (stream, "x");
   7341 	    break;
   7342 
   7343 	  case 2:
   7344 	    func (stream, "a");
   7345 	    break;
   7346 
   7347 	  case 3:
   7348 	    func (stream, "z");
   7349 	    break;
   7350 
   7351 	  case 5:
   7352 	    func (stream, "m");
   7353 	    break;
   7354 
   7355 	  case 7:
   7356 	    func (stream, "p");
   7357 
   7358 	  case 4:
   7359 	  case 6:
   7360 	  default:
   7361 	    break;
   7362 	  }
   7363       }
   7364       break;
   7365 
   7366     default:
   7367       break;
   7368     }
   7369 }
   7370 
   7371 static void
   7372 print_mve_vcvt_size (struct disassemble_info *info,
   7373 		     unsigned long given,
   7374 		     enum mve_instructions matched_insn)
   7375 {
   7376   unsigned long mode = 0;
   7377   void *stream = info->stream;
   7378   fprintf_ftype func = info->fprintf_func;
   7379 
   7380   switch (matched_insn)
   7381     {
   7382     case MVE_VCVT_FP_FIX_VEC:
   7383       {
   7384 	mode = (((given & 0x200) >> 7)
   7385 		| ((given & 0x10000000) >> 27)
   7386 		| ((given & 0x100) >> 8));
   7387 
   7388 	switch (mode)
   7389 	  {
   7390 	  case 0:
   7391 	    func (stream, "f16.s16");
   7392 	    break;
   7393 
   7394 	  case 1:
   7395 	    func (stream, "s16.f16");
   7396 	    break;
   7397 
   7398 	  case 2:
   7399 	    func (stream, "f16.u16");
   7400 	    break;
   7401 
   7402 	  case 3:
   7403 	    func (stream, "u16.f16");
   7404 	    break;
   7405 
   7406 	  case 4:
   7407 	    func (stream, "f32.s32");
   7408 	    break;
   7409 
   7410 	  case 5:
   7411 	    func (stream, "s32.f32");
   7412 	    break;
   7413 
   7414 	  case 6:
   7415 	    func (stream, "f32.u32");
   7416 	    break;
   7417 
   7418 	  case 7:
   7419 	    func (stream, "u32.f32");
   7420 	    break;
   7421 
   7422 	  default:
   7423 	    break;
   7424 	  }
   7425 	break;
   7426       }
   7427     case MVE_VCVT_BETWEEN_FP_INT:
   7428       {
   7429 	unsigned long size = arm_decode_field (given, 18, 19);
   7430 	unsigned long op = arm_decode_field (given, 7, 8);
   7431 
   7432 	if (size == 1)
   7433 	  {
   7434 	    switch (op)
   7435 	      {
   7436 	      case 0:
   7437 		func (stream, "f16.s16");
   7438 		break;
   7439 
   7440 	      case 1:
   7441 		func (stream, "f16.u16");
   7442 		break;
   7443 
   7444 	      case 2:
   7445 		func (stream, "s16.f16");
   7446 		break;
   7447 
   7448 	      case 3:
   7449 		func (stream, "u16.f16");
   7450 		break;
   7451 
   7452 	      default:
   7453 		break;
   7454 	      }
   7455 	  }
   7456 	else if (size == 2)
   7457 	  {
   7458 	    switch (op)
   7459 	      {
   7460 	      case 0:
   7461 		func (stream, "f32.s32");
   7462 		break;
   7463 
   7464 	      case 1:
   7465 		func (stream, "f32.u32");
   7466 		break;
   7467 
   7468 	      case 2:
   7469 		func (stream, "s32.f32");
   7470 		break;
   7471 
   7472 	      case 3:
   7473 		func (stream, "u32.f32");
   7474 		break;
   7475 	      }
   7476 	  }
   7477       }
   7478       break;
   7479 
   7480     case MVE_VCVT_FP_HALF_FP:
   7481       {
   7482 	unsigned long op = arm_decode_field (given, 28, 28);
   7483 	if (op == 0)
   7484 	  func (stream, "f16.f32");
   7485 	else if (op == 1)
   7486 	  func (stream, "f32.f16");
   7487       }
   7488       break;
   7489 
   7490     case MVE_VCVT_FROM_FP_TO_INT:
   7491       {
   7492 	unsigned long size = arm_decode_field_multiple (given, 7, 7, 18, 19);
   7493 
   7494 	switch (size)
   7495 	  {
   7496 	  case 2:
   7497 	    func (stream, "s16.f16");
   7498 	    break;
   7499 
   7500 	  case 3:
   7501 	    func (stream, "u16.f16");
   7502 	    break;
   7503 
   7504 	  case 4:
   7505 	    func (stream, "s32.f32");
   7506 	    break;
   7507 
   7508 	  case 5:
   7509 	    func (stream, "u32.f32");
   7510 	    break;
   7511 
   7512 	  default:
   7513 	    break;
   7514 	  }
   7515       }
   7516       break;
   7517 
   7518     default:
   7519       break;
   7520     }
   7521 }
   7522 
   7523 static void
   7524 print_mve_rotate (struct disassemble_info *info, unsigned long rot,
   7525 		  unsigned long rot_width)
   7526 {
   7527   void *stream = info->stream;
   7528   fprintf_ftype func = info->fprintf_func;
   7529 
   7530   if (rot_width == 1)
   7531     {
   7532       switch (rot)
   7533 	{
   7534 	case 0:
   7535 	  func (stream, "90");
   7536 	  break;
   7537 	case 1:
   7538 	  func (stream, "270");
   7539 	  break;
   7540 	default:
   7541 	  break;
   7542 	}
   7543     }
   7544   else if (rot_width == 2)
   7545     {
   7546       switch (rot)
   7547 	{
   7548 	case 0:
   7549 	  func (stream, "0");
   7550 	  break;
   7551 	case 1:
   7552 	  func (stream, "90");
   7553 	  break;
   7554 	case 2:
   7555 	  func (stream, "180");
   7556 	  break;
   7557 	case 3:
   7558 	  func (stream, "270");
   7559 	  break;
   7560 	default:
   7561 	  break;
   7562 	}
   7563     }
   7564 }
   7565 
   7566 static void
   7567 print_instruction_predicate (struct disassemble_info *info)
   7568 {
   7569   void *stream = info->stream;
   7570   fprintf_ftype func = info->fprintf_func;
   7571 
   7572   if (vpt_block_state.next_pred_state == PRED_THEN)
   7573     func (stream, "t");
   7574   else if (vpt_block_state.next_pred_state == PRED_ELSE)
   7575     func (stream, "e");
   7576 }
   7577 
   7578 static void
   7579 print_mve_size (struct disassemble_info *info,
   7580 		unsigned long size,
   7581 		enum mve_instructions matched_insn)
   7582 {
   7583   void *stream = info->stream;
   7584   fprintf_ftype func = info->fprintf_func;
   7585 
   7586   switch (matched_insn)
   7587     {
   7588     case MVE_VABAV:
   7589     case MVE_VABD_VEC:
   7590     case MVE_VABS_FP:
   7591     case MVE_VABS_VEC:
   7592     case MVE_VADD_VEC_T1:
   7593     case MVE_VADD_VEC_T2:
   7594     case MVE_VADDV:
   7595     case MVE_VBRSR:
   7596     case MVE_VCADD_VEC:
   7597     case MVE_VCLS:
   7598     case MVE_VCLZ:
   7599     case MVE_VCMP_VEC_T1:
   7600     case MVE_VCMP_VEC_T2:
   7601     case MVE_VCMP_VEC_T3:
   7602     case MVE_VCMP_VEC_T4:
   7603     case MVE_VCMP_VEC_T5:
   7604     case MVE_VCMP_VEC_T6:
   7605     case MVE_VCTP:
   7606     case MVE_VDDUP:
   7607     case MVE_VDWDUP:
   7608     case MVE_VHADD_T1:
   7609     case MVE_VHADD_T2:
   7610     case MVE_VHCADD:
   7611     case MVE_VHSUB_T1:
   7612     case MVE_VHSUB_T2:
   7613     case MVE_VIDUP:
   7614     case MVE_VIWDUP:
   7615     case MVE_VLD2:
   7616     case MVE_VLD4:
   7617     case MVE_VLDRB_GATHER_T1:
   7618     case MVE_VLDRH_GATHER_T2:
   7619     case MVE_VLDRW_GATHER_T3:
   7620     case MVE_VLDRD_GATHER_T4:
   7621     case MVE_VLDRB_T1:
   7622     case MVE_VLDRH_T2:
   7623     case MVE_VMAX:
   7624     case MVE_VMAXA:
   7625     case MVE_VMAXV:
   7626     case MVE_VMAXAV:
   7627     case MVE_VMIN:
   7628     case MVE_VMINA:
   7629     case MVE_VMINV:
   7630     case MVE_VMINAV:
   7631     case MVE_VMLA:
   7632     case MVE_VMLAS:
   7633     case MVE_VMUL_VEC_T1:
   7634     case MVE_VMUL_VEC_T2:
   7635     case MVE_VMULH:
   7636     case MVE_VRMULH:
   7637     case MVE_VMULL_INT:
   7638     case MVE_VNEG_FP:
   7639     case MVE_VNEG_VEC:
   7640     case MVE_VPT_VEC_T1:
   7641     case MVE_VPT_VEC_T2:
   7642     case MVE_VPT_VEC_T3:
   7643     case MVE_VPT_VEC_T4:
   7644     case MVE_VPT_VEC_T5:
   7645     case MVE_VPT_VEC_T6:
   7646     case MVE_VQABS:
   7647     case MVE_VQADD_T1:
   7648     case MVE_VQADD_T2:
   7649     case MVE_VQDMLADH:
   7650     case MVE_VQRDMLADH:
   7651     case MVE_VQDMLAH:
   7652     case MVE_VQRDMLAH:
   7653     case MVE_VQDMLASH:
   7654     case MVE_VQRDMLASH:
   7655     case MVE_VQDMLSDH:
   7656     case MVE_VQRDMLSDH:
   7657     case MVE_VQDMULH_T1:
   7658     case MVE_VQRDMULH_T2:
   7659     case MVE_VQDMULH_T3:
   7660     case MVE_VQRDMULH_T4:
   7661     case MVE_VQNEG:
   7662     case MVE_VQRSHL_T1:
   7663     case MVE_VQRSHL_T2:
   7664     case MVE_VQSHL_T1:
   7665     case MVE_VQSHL_T4:
   7666     case MVE_VQSUB_T1:
   7667     case MVE_VQSUB_T2:
   7668     case MVE_VREV32:
   7669     case MVE_VREV64:
   7670     case MVE_VRHADD:
   7671     case MVE_VRINT_FP:
   7672     case MVE_VRSHL_T1:
   7673     case MVE_VRSHL_T2:
   7674     case MVE_VSHL_T2:
   7675     case MVE_VSHL_T3:
   7676     case MVE_VSHLL_T2:
   7677     case MVE_VST2:
   7678     case MVE_VST4:
   7679     case MVE_VSTRB_SCATTER_T1:
   7680     case MVE_VSTRH_SCATTER_T2:
   7681     case MVE_VSTRW_SCATTER_T3:
   7682     case MVE_VSTRB_T1:
   7683     case MVE_VSTRH_T2:
   7684     case MVE_VSUB_VEC_T1:
   7685     case MVE_VSUB_VEC_T2:
   7686       if (size <= 3)
   7687 	func (stream, "%s", mve_vec_sizename[size]);
   7688       else
   7689 	func (stream, "<undef size>");
   7690       break;
   7691 
   7692     case MVE_VABD_FP:
   7693     case MVE_VADD_FP_T1:
   7694     case MVE_VADD_FP_T2:
   7695     case MVE_VSUB_FP_T1:
   7696     case MVE_VSUB_FP_T2:
   7697     case MVE_VCMP_FP_T1:
   7698     case MVE_VCMP_FP_T2:
   7699     case MVE_VFMA_FP_SCALAR:
   7700     case MVE_VFMA_FP:
   7701     case MVE_VFMS_FP:
   7702     case MVE_VFMAS_FP_SCALAR:
   7703     case MVE_VMAXNM_FP:
   7704     case MVE_VMAXNMA_FP:
   7705     case MVE_VMAXNMV_FP:
   7706     case MVE_VMAXNMAV_FP:
   7707     case MVE_VMINNM_FP:
   7708     case MVE_VMINNMA_FP:
   7709     case MVE_VMINNMV_FP:
   7710     case MVE_VMINNMAV_FP:
   7711     case MVE_VMUL_FP_T1:
   7712     case MVE_VMUL_FP_T2:
   7713     case MVE_VPT_FP_T1:
   7714     case MVE_VPT_FP_T2:
   7715       if (size == 0)
   7716 	func (stream, "32");
   7717       else if (size == 1)
   7718 	func (stream, "16");
   7719       break;
   7720 
   7721     case MVE_VCADD_FP:
   7722     case MVE_VCMLA_FP:
   7723     case MVE_VCMUL_FP:
   7724     case MVE_VMLADAV_T1:
   7725     case MVE_VMLALDAV:
   7726     case MVE_VMLSDAV_T1:
   7727     case MVE_VMLSLDAV:
   7728     case MVE_VMOVN:
   7729     case MVE_VQDMULL_T1:
   7730     case MVE_VQDMULL_T2:
   7731     case MVE_VQMOVN:
   7732     case MVE_VQMOVUN:
   7733       if (size == 0)
   7734 	func (stream, "16");
   7735       else if (size == 1)
   7736 	func (stream, "32");
   7737       break;
   7738 
   7739     case MVE_VMOVL:
   7740       if (size == 1)
   7741 	func (stream, "8");
   7742       else if (size == 2)
   7743 	func (stream, "16");
   7744       break;
   7745 
   7746     case MVE_VDUP:
   7747       switch (size)
   7748 	{
   7749 	case 0:
   7750 	  func (stream, "32");
   7751 	  break;
   7752 	case 1:
   7753 	  func (stream, "16");
   7754 	  break;
   7755 	case 2:
   7756 	  func (stream, "8");
   7757 	  break;
   7758 	default:
   7759 	  break;
   7760 	}
   7761       break;
   7762 
   7763     case MVE_VMOV_GP_TO_VEC_LANE:
   7764     case MVE_VMOV_VEC_LANE_TO_GP:
   7765       switch (size)
   7766 	{
   7767 	case 0: case 4:
   7768 	  func (stream, "32");
   7769 	  break;
   7770 
   7771 	case 1: case 3:
   7772 	case 5: case 7:
   7773 	  func (stream, "16");
   7774 	  break;
   7775 
   7776 	case 8: case 9: case 10: case 11:
   7777 	case 12: case 13: case 14: case 15:
   7778 	  func (stream, "8");
   7779 	  break;
   7780 
   7781 	default:
   7782 	  break;
   7783 	}
   7784       break;
   7785 
   7786     case MVE_VMOV_IMM_TO_VEC:
   7787       switch (size)
   7788 	{
   7789 	case 0: case 4: case 8:
   7790 	case 12: case 24: case 26:
   7791 	  func (stream, "i32");
   7792 	  break;
   7793 	case 16: case 20:
   7794 	  func (stream, "i16");
   7795 	  break;
   7796 	case 28:
   7797 	  func (stream, "i8");
   7798 	  break;
   7799 	case 29:
   7800 	  func (stream, "i64");
   7801 	  break;
   7802 	case 30:
   7803 	  func (stream, "f32");
   7804 	  break;
   7805 	default:
   7806 	  break;
   7807 	}
   7808       break;
   7809 
   7810     case MVE_VMULL_POLY:
   7811       if (size == 0)
   7812 	func (stream, "p8");
   7813       else if (size == 1)
   7814 	func (stream, "p16");
   7815       break;
   7816 
   7817     case MVE_VMVN_IMM:
   7818       switch (size)
   7819 	{
   7820 	case 0: case 2: case 4:
   7821 	case 6: case 12: case 13:
   7822 	  func (stream, "32");
   7823 	  break;
   7824 
   7825 	case 8: case 10:
   7826 	  func (stream, "16");
   7827 	  break;
   7828 
   7829 	default:
   7830 	  break;
   7831 	}
   7832       break;
   7833 
   7834     case MVE_VBIC_IMM:
   7835     case MVE_VORR_IMM:
   7836       switch (size)
   7837 	{
   7838 	case 1: case 3:
   7839 	case 5: case 7:
   7840 	  func (stream, "32");
   7841 	  break;
   7842 
   7843 	case 9: case 11:
   7844 	  func (stream, "16");
   7845 	  break;
   7846 
   7847 	default:
   7848 	  break;
   7849 	}
   7850       break;
   7851 
   7852     case MVE_VQSHRN:
   7853     case MVE_VQSHRUN:
   7854     case MVE_VQRSHRN:
   7855     case MVE_VQRSHRUN:
   7856     case MVE_VRSHRN:
   7857     case MVE_VSHRN:
   7858       {
   7859 	switch (size)
   7860 	{
   7861 	case 1:
   7862 	  func (stream, "16");
   7863 	  break;
   7864 
   7865 	case 2: case 3:
   7866 	  func (stream, "32");
   7867 	  break;
   7868 
   7869 	default:
   7870 	  break;
   7871 	}
   7872       }
   7873       break;
   7874 
   7875     case MVE_VQSHL_T2:
   7876     case MVE_VQSHLU_T3:
   7877     case MVE_VRSHR:
   7878     case MVE_VSHL_T1:
   7879     case MVE_VSHLL_T1:
   7880     case MVE_VSHR:
   7881     case MVE_VSLI:
   7882     case MVE_VSRI:
   7883       {
   7884 	switch (size)
   7885 	{
   7886 	case 1:
   7887 	  func (stream, "8");
   7888 	  break;
   7889 
   7890 	case 2: case 3:
   7891 	  func (stream, "16");
   7892 	  break;
   7893 
   7894 	case 4: case 5: case 6: case 7:
   7895 	  func (stream, "32");
   7896 	  break;
   7897 
   7898 	default:
   7899 	  break;
   7900 	}
   7901       }
   7902       break;
   7903 
   7904     default:
   7905       break;
   7906     }
   7907 }
   7908 
   7909 static void
   7910 print_mve_shift_n (struct disassemble_info *info, long given,
   7911 		   enum mve_instructions matched_insn)
   7912 {
   7913   void *stream = info->stream;
   7914   fprintf_ftype func = info->fprintf_func;
   7915 
   7916   int startAt0
   7917     = matched_insn == MVE_VQSHL_T2
   7918       || matched_insn == MVE_VQSHLU_T3
   7919       || matched_insn == MVE_VSHL_T1
   7920       || matched_insn == MVE_VSHLL_T1
   7921       || matched_insn == MVE_VSLI;
   7922 
   7923   unsigned imm6 = (given & 0x3f0000) >> 16;
   7924 
   7925   if (matched_insn == MVE_VSHLL_T1)
   7926     imm6 &= 0x1f;
   7927 
   7928   unsigned shiftAmount = 0;
   7929   if ((imm6 & 0x20) != 0)
   7930     shiftAmount = startAt0 ? imm6 - 32 : 64 - imm6;
   7931   else if ((imm6 & 0x10) != 0)
   7932     shiftAmount = startAt0 ? imm6 - 16 : 32 - imm6;
   7933   else if ((imm6 & 0x08) != 0)
   7934     shiftAmount = startAt0 ? imm6 - 8 : 16 - imm6;
   7935   else
   7936     print_mve_undefined (info, UNDEF_SIZE_0);
   7937 
   7938   func (stream, "%u", shiftAmount);
   7939 }
   7940 
   7941 static void
   7942 print_vec_condition (struct disassemble_info *info, long given,
   7943 		     enum mve_instructions matched_insn)
   7944 {
   7945   void *stream = info->stream;
   7946   fprintf_ftype func = info->fprintf_func;
   7947   long vec_cond = 0;
   7948 
   7949   switch (matched_insn)
   7950     {
   7951     case MVE_VPT_FP_T1:
   7952     case MVE_VCMP_FP_T1:
   7953       vec_cond = (((given & 0x1000) >> 10)
   7954 		  | ((given & 1) << 1)
   7955 		  | ((given & 0x0080) >> 7));
   7956       func (stream, "%s",vec_condnames[vec_cond]);
   7957       break;
   7958 
   7959     case MVE_VPT_FP_T2:
   7960     case MVE_VCMP_FP_T2:
   7961       vec_cond = (((given & 0x1000) >> 10)
   7962 		  | ((given & 0x0020) >> 4)
   7963 		  | ((given & 0x0080) >> 7));
   7964       func (stream, "%s",vec_condnames[vec_cond]);
   7965       break;
   7966 
   7967     case MVE_VPT_VEC_T1:
   7968     case MVE_VCMP_VEC_T1:
   7969       vec_cond = (given & 0x0080) >> 7;
   7970       func (stream, "%s",vec_condnames[vec_cond]);
   7971       break;
   7972 
   7973     case MVE_VPT_VEC_T2:
   7974     case MVE_VCMP_VEC_T2:
   7975       vec_cond = 2 | ((given & 0x0080) >> 7);
   7976       func (stream, "%s",vec_condnames[vec_cond]);
   7977       break;
   7978 
   7979     case MVE_VPT_VEC_T3:
   7980     case MVE_VCMP_VEC_T3:
   7981       vec_cond = 4 | ((given & 1) << 1) | ((given & 0x0080) >> 7);
   7982       func (stream, "%s",vec_condnames[vec_cond]);
   7983       break;
   7984 
   7985     case MVE_VPT_VEC_T4:
   7986     case MVE_VCMP_VEC_T4:
   7987       vec_cond = (given & 0x0080) >> 7;
   7988       func (stream, "%s",vec_condnames[vec_cond]);
   7989       break;
   7990 
   7991     case MVE_VPT_VEC_T5:
   7992     case MVE_VCMP_VEC_T5:
   7993       vec_cond = 2 | ((given & 0x0080) >> 7);
   7994       func (stream, "%s",vec_condnames[vec_cond]);
   7995       break;
   7996 
   7997     case MVE_VPT_VEC_T6:
   7998     case MVE_VCMP_VEC_T6:
   7999       vec_cond = 4 | ((given & 0x0020) >> 4) | ((given & 0x0080) >> 7);
   8000       func (stream, "%s",vec_condnames[vec_cond]);
   8001       break;
   8002 
   8003     case MVE_NONE:
   8004     case MVE_VPST:
   8005     default:
   8006       break;
   8007     }
   8008 }
   8009 
   8010 #define W_BIT 21
   8011 #define I_BIT 22
   8012 #define U_BIT 23
   8013 #define P_BIT 24
   8014 
   8015 #define WRITEBACK_BIT_SET (given & (1 << W_BIT))
   8016 #define IMMEDIATE_BIT_SET (given & (1 << I_BIT))
   8017 #define NEGATIVE_BIT_SET  ((given & (1 << U_BIT)) == 0)
   8018 #define PRE_BIT_SET	  (given & (1 << P_BIT))
   8019 
   8020 
   8021 /* Print one coprocessor instruction on INFO->STREAM.
   8022    Return TRUE if the instuction matched, FALSE if this is not a
   8023    recognised coprocessor instruction.  */
   8024 
   8025 static bfd_boolean
   8026 print_insn_coprocessor_1 (const struct sopcode32 *opcodes,
   8027 			  bfd_vma pc,
   8028 			  struct disassemble_info *info,
   8029 			  long given,
   8030 			  bfd_boolean thumb)
   8031 {
   8032   const struct sopcode32 *insn;
   8033   void *stream = info->stream;
   8034   fprintf_ftype func = info->fprintf_func;
   8035   unsigned long mask;
   8036   unsigned long value = 0;
   8037   int cond;
   8038   int cp_num;
   8039   struct arm_private_data *private_data = info->private_data;
   8040   arm_feature_set allowed_arches = ARM_ARCH_NONE;
   8041   arm_feature_set arm_ext_v8_1m_main =
   8042     ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_1M_MAIN);
   8043 
   8044   allowed_arches = private_data->features;
   8045 
   8046   for (insn = opcodes; insn->assembler; insn++)
   8047     {
   8048       unsigned long u_reg = 16;
   8049       bfd_boolean is_unpredictable = FALSE;
   8050       signed long value_in_comment = 0;
   8051       const char *c;
   8052 
   8053       if (ARM_FEATURE_ZERO (insn->arch))
   8054 	switch (insn->value)
   8055 	  {
   8056 	  case SENTINEL_IWMMXT_START:
   8057 	    if (info->mach != bfd_mach_arm_XScale
   8058 		&& info->mach != bfd_mach_arm_iWMMXt
   8059 		&& info->mach != bfd_mach_arm_iWMMXt2)
   8060 	      do
   8061 		insn++;
   8062 	      while ((! ARM_FEATURE_ZERO (insn->arch))
   8063 		     && insn->value != SENTINEL_IWMMXT_END);
   8064 	    continue;
   8065 
   8066 	  case SENTINEL_IWMMXT_END:
   8067 	    continue;
   8068 
   8069 	  case SENTINEL_GENERIC_START:
   8070 	    allowed_arches = private_data->features;
   8071 	    continue;
   8072 
   8073 	  default:
   8074 	    abort ();
   8075 	  }
   8076 
   8077       mask = insn->mask;
   8078       value = insn->value;
   8079       cp_num = (given >> 8) & 0xf;
   8080 
   8081       if (thumb)
   8082 	{
   8083 	  /* The high 4 bits are 0xe for Arm conditional instructions, and
   8084 	     0xe for arm unconditional instructions.  The rest of the
   8085 	     encoding is the same.  */
   8086 	  mask |= 0xf0000000;
   8087 	  value |= 0xe0000000;
   8088 	  if (ifthen_state)
   8089 	    cond = IFTHEN_COND;
   8090 	  else
   8091 	    cond = COND_UNCOND;
   8092 	}
   8093       else
   8094 	{
   8095 	  /* Only match unconditional instuctions against unconditional
   8096 	     patterns.  */
   8097 	  if ((given & 0xf0000000) == 0xf0000000)
   8098 	    {
   8099 	      mask |= 0xf0000000;
   8100 	      cond = COND_UNCOND;
   8101 	    }
   8102 	  else
   8103 	    {
   8104 	      cond = (given >> 28) & 0xf;
   8105 	      if (cond == 0xe)
   8106 		cond = COND_UNCOND;
   8107 	    }
   8108 	}
   8109 
   8110       if ((insn->isa == T32 && !thumb)
   8111 	  || (insn->isa == ARM && thumb))
   8112 	continue;
   8113 
   8114       if ((given & mask) != value)
   8115 	continue;
   8116 
   8117       if (! ARM_CPU_HAS_FEATURE (insn->arch, allowed_arches))
   8118 	continue;
   8119 
   8120       if (insn->value == 0xfe000010     /* mcr2  */
   8121 	  || insn->value == 0xfe100010  /* mrc2  */
   8122 	  || insn->value == 0xfc100000  /* ldc2  */
   8123 	  || insn->value == 0xfc000000) /* stc2  */
   8124 	{
   8125 	  if (cp_num == 9 || cp_num == 10 || cp_num == 11)
   8126 	    is_unpredictable = TRUE;
   8127 
   8128 	  /* Armv8.1-M Mainline FP & MVE instructions.  */
   8129 	  if (ARM_CPU_HAS_FEATURE (arm_ext_v8_1m_main, allowed_arches)
   8130 	      && !ARM_CPU_IS_ANY (allowed_arches)
   8131 	      && (cp_num == 8 || cp_num == 14 || cp_num == 15))
   8132 	    continue;
   8133 
   8134 	}
   8135       else if (insn->value == 0x0e000000     /* cdp  */
   8136 	       || insn->value == 0xfe000000  /* cdp2  */
   8137 	       || insn->value == 0x0e000010  /* mcr  */
   8138 	       || insn->value == 0x0e100010  /* mrc  */
   8139 	       || insn->value == 0x0c100000  /* ldc  */
   8140 	       || insn->value == 0x0c000000) /* stc  */
   8141 	{
   8142 	  /* Floating-point instructions.  */
   8143 	  if (cp_num == 9 || cp_num == 10 || cp_num == 11)
   8144 	    continue;
   8145 
   8146 	  /* Armv8.1-M Mainline FP & MVE instructions.  */
   8147 	  if (ARM_CPU_HAS_FEATURE (arm_ext_v8_1m_main, allowed_arches)
   8148 	      && !ARM_CPU_IS_ANY (allowed_arches)
   8149 	      && (cp_num == 8 || cp_num == 14 || cp_num == 15))
   8150 	    continue;
   8151 	}
   8152       else if ((insn->value == 0xec100f80      /* vldr (system register) */
   8153 		|| insn->value == 0xec000f80)  /* vstr (system register) */
   8154 	       && arm_decode_field (given, 24, 24) == 0
   8155 	       && arm_decode_field (given, 21, 21) == 0)
   8156 	/* If the P and W bits are both 0 then these encodings match the MVE
   8157 	   VLDR and VSTR instructions, these are in a different table, so we
   8158 	   don't let it match here.  */
   8159 	continue;
   8160 
   8161       for (c = insn->assembler; *c; c++)
   8162 	{
   8163 	  if (*c == '%')
   8164 	    {
   8165 	      const char mod = *++c;
   8166 	      switch (mod)
   8167 		{
   8168 		case '%':
   8169 		  func (stream, "%%");
   8170 		  break;
   8171 
   8172 		case 'A':
   8173 		case 'K':
   8174 		  {
   8175 		    int rn = (given >> 16) & 0xf;
   8176 		    bfd_vma offset = given & 0xff;
   8177 
   8178 		    if (mod == 'K')
   8179 		      offset = given & 0x7f;
   8180 
   8181 		    func (stream, "[%s", arm_regnames [(given >> 16) & 0xf]);
   8182 
   8183 		    if (PRE_BIT_SET || WRITEBACK_BIT_SET)
   8184 		      {
   8185 			/* Not unindexed.  The offset is scaled.  */
   8186 			if (cp_num == 9)
   8187 			  /* vldr.16/vstr.16 will shift the address
   8188 			     left by 1 bit only.  */
   8189 			  offset = offset * 2;
   8190 			else
   8191 			  offset = offset * 4;
   8192 
   8193 			if (NEGATIVE_BIT_SET)
   8194 			  offset = - offset;
   8195 			if (rn != 15)
   8196 			  value_in_comment = offset;
   8197 		      }
   8198 
   8199 		    if (PRE_BIT_SET)
   8200 		      {
   8201 			if (offset)
   8202 			  func (stream, ", #%d]%s",
   8203 				(int) offset,
   8204 				WRITEBACK_BIT_SET ? "!" : "");
   8205 			else if (NEGATIVE_BIT_SET)
   8206 			  func (stream, ", #-0]");
   8207 			else
   8208 			  func (stream, "]");
   8209 		      }
   8210 		    else
   8211 		      {
   8212 			func (stream, "]");
   8213 
   8214 			if (WRITEBACK_BIT_SET)
   8215 			  {
   8216 			    if (offset)
   8217 			      func (stream, ", #%d", (int) offset);
   8218 			    else if (NEGATIVE_BIT_SET)
   8219 			      func (stream, ", #-0");
   8220 			  }
   8221 			else
   8222 			  {
   8223 			    func (stream, ", {%s%d}",
   8224 				  (NEGATIVE_BIT_SET && !offset) ? "-" : "",
   8225 				  (int) offset);
   8226 			    value_in_comment = offset;
   8227 			  }
   8228 		      }
   8229 		    if (rn == 15 && (PRE_BIT_SET || WRITEBACK_BIT_SET))
   8230 		      {
   8231 			func (stream, "\t; ");
   8232 			/* For unaligned PCs, apply off-by-alignment
   8233 			   correction.  */
   8234 			info->print_address_func (offset + pc
   8235 						  + info->bytes_per_chunk * 2
   8236 						  - (pc & 3),
   8237 						  info);
   8238 		      }
   8239 		  }
   8240 		  break;
   8241 
   8242 		case 'B':
   8243 		  {
   8244 		    int regno = ((given >> 12) & 0xf) | ((given >> (22 - 4)) & 0x10);
   8245 		    int offset = (given >> 1) & 0x3f;
   8246 
   8247 		    if (offset == 1)
   8248 		      func (stream, "{d%d}", regno);
   8249 		    else if (regno + offset > 32)
   8250 		      func (stream, "{d%d-<overflow reg d%d>}", regno, regno + offset - 1);
   8251 		    else
   8252 		      func (stream, "{d%d-d%d}", regno, regno + offset - 1);
   8253 		  }
   8254 		  break;
   8255 
   8256 		case 'C':
   8257 		  {
   8258 		    bfd_boolean single = ((given >> 8) & 1) == 0;
   8259 		    char reg_prefix = single ? 's' : 'd';
   8260 		    int Dreg = (given >> 22) & 0x1;
   8261 		    int Vdreg = (given >> 12) & 0xf;
   8262 		    int reg = single ? ((Vdreg << 1) | Dreg)
   8263 				     : ((Dreg << 4) | Vdreg);
   8264 		    int num = (given >> (single ? 0 : 1)) & 0x7f;
   8265 		    int maxreg = single ? 31 : 15;
   8266 		    int topreg = reg + num - 1;
   8267 
   8268 		    if (!num)
   8269 		      func (stream, "{VPR}");
   8270 		    else if (num == 1)
   8271 		      func (stream, "{%c%d, VPR}", reg_prefix, reg);
   8272 		    else if (topreg > maxreg)
   8273 		      func (stream, "{%c%d-<overflow reg d%d, VPR}",
   8274 			    reg_prefix, reg, single ? topreg >> 1 : topreg);
   8275 		    else
   8276 		      func (stream, "{%c%d-%c%d, VPR}", reg_prefix, reg,
   8277 			    reg_prefix, topreg);
   8278 		  }
   8279 		  break;
   8280 
   8281 		case 'u':
   8282 		  if (cond != COND_UNCOND)
   8283 		    is_unpredictable = TRUE;
   8284 
   8285 		  /* Fall through.  */
   8286 		case 'c':
   8287 		  if (cond != COND_UNCOND && cp_num == 9)
   8288 		    is_unpredictable = TRUE;
   8289 
   8290 		  /* Fall through.  */
   8291 		case 'b':
   8292 		  func (stream, "%s", arm_conditional[cond]);
   8293 		  break;
   8294 
   8295 		case 'I':
   8296 		  /* Print a Cirrus/DSP shift immediate.  */
   8297 		  /* Immediates are 7bit signed ints with bits 0..3 in
   8298 		     bits 0..3 of opcode and bits 4..6 in bits 5..7
   8299 		     of opcode.  */
   8300 		  {
   8301 		    int imm;
   8302 
   8303 		    imm = (given & 0xf) | ((given & 0xe0) >> 1);
   8304 
   8305 		    /* Is ``imm'' a negative number?  */
   8306 		    if (imm & 0x40)
   8307 		      imm -= 0x80;
   8308 
   8309 		    func (stream, "%d", imm);
   8310 		  }
   8311 
   8312 		  break;
   8313 
   8314 		case 'J':
   8315 		  {
   8316 		    unsigned long regno
   8317 		      = arm_decode_field_multiple (given, 13, 15, 22, 22);
   8318 
   8319 		    switch (regno)
   8320 		      {
   8321 		      case 0x1:
   8322 			func (stream, "FPSCR");
   8323 			break;
   8324 		      case 0x2:
   8325 			func (stream, "FPSCR_nzcvqc");
   8326 			break;
   8327 		      case 0xc:
   8328 			func (stream, "VPR");
   8329 			break;
   8330 		      case 0xd:
   8331 			func (stream, "P0");
   8332 			break;
   8333 		      case 0xe:
   8334 			func (stream, "FPCXTNS");
   8335 			break;
   8336 		      case 0xf:
   8337 			func (stream, "FPCXTS");
   8338 			break;
   8339 		      default:
   8340 			func (stream, "<invalid reg %lu>", regno);
   8341 			break;
   8342 		      }
   8343 		  }
   8344 		  break;
   8345 
   8346 		case 'F':
   8347 		  switch (given & 0x00408000)
   8348 		    {
   8349 		    case 0:
   8350 		      func (stream, "4");
   8351 		      break;
   8352 		    case 0x8000:
   8353 		      func (stream, "1");
   8354 		      break;
   8355 		    case 0x00400000:
   8356 		      func (stream, "2");
   8357 		      break;
   8358 		    default:
   8359 		      func (stream, "3");
   8360 		    }
   8361 		  break;
   8362 
   8363 		case 'P':
   8364 		  switch (given & 0x00080080)
   8365 		    {
   8366 		    case 0:
   8367 		      func (stream, "s");
   8368 		      break;
   8369 		    case 0x80:
   8370 		      func (stream, "d");
   8371 		      break;
   8372 		    case 0x00080000:
   8373 		      func (stream, "e");
   8374 		      break;
   8375 		    default:
   8376 		      func (stream, _("<illegal precision>"));
   8377 		      break;
   8378 		    }
   8379 		  break;
   8380 
   8381 		case 'Q':
   8382 		  switch (given & 0x00408000)
   8383 		    {
   8384 		    case 0:
   8385 		      func (stream, "s");
   8386 		      break;
   8387 		    case 0x8000:
   8388 		      func (stream, "d");
   8389 		      break;
   8390 		    case 0x00400000:
   8391 		      func (stream, "e");
   8392 		      break;
   8393 		    default:
   8394 		      func (stream, "p");
   8395 		      break;
   8396 		    }
   8397 		  break;
   8398 
   8399 		case 'R':
   8400 		  switch (given & 0x60)
   8401 		    {
   8402 		    case 0:
   8403 		      break;
   8404 		    case 0x20:
   8405 		      func (stream, "p");
   8406 		      break;
   8407 		    case 0x40:
   8408 		      func (stream, "m");
   8409 		      break;
   8410 		    default:
   8411 		      func (stream, "z");
   8412 		      break;
   8413 		    }
   8414 		  break;
   8415 
   8416 		case '0': case '1': case '2': case '3': case '4':
   8417 		case '5': case '6': case '7': case '8': case '9':
   8418 		  {
   8419 		    int width;
   8420 
   8421 		    c = arm_decode_bitfield (c, given, &value, &width);
   8422 
   8423 		    switch (*c)
   8424 		      {
   8425 		      case 'R':
   8426 			if (value == 15)
   8427 			  is_unpredictable = TRUE;
   8428 			/* Fall through.  */
   8429 		      case 'r':
   8430 			if (c[1] == 'u')
   8431 			  {
   8432 			    /* Eat the 'u' character.  */
   8433 			    ++ c;
   8434 
   8435 			    if (u_reg == value)
   8436 			      is_unpredictable = TRUE;
   8437 			    u_reg = value;
   8438 			  }
   8439 			func (stream, "%s", arm_regnames[value]);
   8440 			break;
   8441 		      case 'V':
   8442 			if (given & (1 << 6))
   8443 			  goto Q;
   8444 			/* FALLTHROUGH */
   8445 		      case 'D':
   8446 			func (stream, "d%ld", value);
   8447 			break;
   8448 		      case 'Q':
   8449 		      Q:
   8450 			if (value & 1)
   8451 			  func (stream, "<illegal reg q%ld.5>", value >> 1);
   8452 			else
   8453 			  func (stream, "q%ld", value >> 1);
   8454 			break;
   8455 		      case 'd':
   8456 			func (stream, "%ld", value);
   8457 			value_in_comment = value;
   8458 			break;
   8459 		      case 'E':
   8460                         {
   8461 			  /* Converts immediate 8 bit back to float value.  */
   8462 			  unsigned floatVal = (value & 0x80) << 24
   8463 			    | (value & 0x3F) << 19
   8464 			    | ((value & 0x40) ? (0xF8 << 22) : (1 << 30));
   8465 
   8466 			  /* Quarter float have a maximum value of 31.0.
   8467 			     Get floating point value multiplied by 1e7.
   8468 			     The maximum value stays in limit of a 32-bit int.  */
   8469 			  unsigned decVal =
   8470 			    (78125 << (((floatVal >> 23) & 0xFF) - 124)) *
   8471 			    (16 + (value & 0xF));
   8472 
   8473 			  if (!(decVal % 1000000))
   8474 			    func (stream, "%ld\t; 0x%08x %c%u.%01u", value,
   8475 				  floatVal, value & 0x80 ? '-' : ' ',
   8476 				  decVal / 10000000,
   8477 				  decVal % 10000000 / 1000000);
   8478 			  else if (!(decVal % 10000))
   8479 			    func (stream, "%ld\t; 0x%08x %c%u.%03u", value,
   8480 				  floatVal, value & 0x80 ? '-' : ' ',
   8481 				  decVal / 10000000,
   8482 				  decVal % 10000000 / 10000);
   8483 			  else
   8484 			    func (stream, "%ld\t; 0x%08x %c%u.%07u", value,
   8485 				  floatVal, value & 0x80 ? '-' : ' ',
   8486 				  decVal / 10000000, decVal % 10000000);
   8487 			  break;
   8488 			}
   8489 		      case 'k':
   8490 			{
   8491 			  int from = (given & (1 << 7)) ? 32 : 16;
   8492 			  func (stream, "%ld", from - value);
   8493 			}
   8494 			break;
   8495 
   8496 		      case 'f':
   8497 			if (value > 7)
   8498 			  func (stream, "#%s", arm_fp_const[value & 7]);
   8499 			else
   8500 			  func (stream, "f%ld", value);
   8501 			break;
   8502 
   8503 		      case 'w':
   8504 			if (width == 2)
   8505 			  func (stream, "%s", iwmmxt_wwnames[value]);
   8506 			else
   8507 			  func (stream, "%s", iwmmxt_wwssnames[value]);
   8508 			break;
   8509 
   8510 		      case 'g':
   8511 			func (stream, "%s", iwmmxt_regnames[value]);
   8512 			break;
   8513 		      case 'G':
   8514 			func (stream, "%s", iwmmxt_cregnames[value]);
   8515 			break;
   8516 
   8517 		      case 'x':
   8518 			func (stream, "0x%lx", (value & 0xffffffffUL));
   8519 			break;
   8520 
   8521 		      case 'c':
   8522 			switch (value)
   8523 			  {
   8524 			  case 0:
   8525 			    func (stream, "eq");
   8526 			    break;
   8527 
   8528 			  case 1:
   8529 			    func (stream, "vs");
   8530 			    break;
   8531 
   8532 			  case 2:
   8533 			    func (stream, "ge");
   8534 			    break;
   8535 
   8536 			  case 3:
   8537 			    func (stream, "gt");
   8538 			    break;
   8539 
   8540 			  default:
   8541 			    func (stream, "??");
   8542 			    break;
   8543 			  }
   8544 			break;
   8545 
   8546 		      case '`':
   8547 			c++;
   8548 			if (value == 0)
   8549 			  func (stream, "%c", *c);
   8550 			break;
   8551 		      case '\'':
   8552 			c++;
   8553 			if (value == ((1ul << width) - 1))
   8554 			  func (stream, "%c", *c);
   8555 			break;
   8556 		      case '?':
   8557 			func (stream, "%c", c[(1 << width) - (int) value]);
   8558 			c += 1 << width;
   8559 			break;
   8560 		      default:
   8561 			abort ();
   8562 		      }
   8563 		  }
   8564 		  break;
   8565 
   8566 		case 'y':
   8567 		case 'z':
   8568 		  {
   8569 		    int single = *c++ == 'y';
   8570 		    int regno;
   8571 
   8572 		    switch (*c)
   8573 		      {
   8574 		      case '4': /* Sm pair */
   8575 		      case '0': /* Sm, Dm */
   8576 			regno = given & 0x0000000f;
   8577 			if (single)
   8578 			  {
   8579 			    regno <<= 1;
   8580 			    regno += (given >> 5) & 1;
   8581 			  }
   8582 			else
   8583 			  regno += ((given >> 5) & 1) << 4;
   8584 			break;
   8585 
   8586 		      case '1': /* Sd, Dd */
   8587 			regno = (given >> 12) & 0x0000000f;
   8588 			if (single)
   8589 			  {
   8590 			    regno <<= 1;
   8591 			    regno += (given >> 22) & 1;
   8592 			  }
   8593 			else
   8594 			  regno += ((given >> 22) & 1) << 4;
   8595 			break;
   8596 
   8597 		      case '2': /* Sn, Dn */
   8598 			regno = (given >> 16) & 0x0000000f;
   8599 			if (single)
   8600 			  {
   8601 			    regno <<= 1;
   8602 			    regno += (given >> 7) & 1;
   8603 			  }
   8604 			else
   8605 			  regno += ((given >> 7) & 1) << 4;
   8606 			break;
   8607 
   8608 		      case '3': /* List */
   8609 			func (stream, "{");
   8610 			regno = (given >> 12) & 0x0000000f;
   8611 			if (single)
   8612 			  {
   8613 			    regno <<= 1;
   8614 			    regno += (given >> 22) & 1;
   8615 			  }
   8616 			else
   8617 			  regno += ((given >> 22) & 1) << 4;
   8618 			break;
   8619 
   8620 		      default:
   8621 			abort ();
   8622 		      }
   8623 
   8624 		    func (stream, "%c%d", single ? 's' : 'd', regno);
   8625 
   8626 		    if (*c == '3')
   8627 		      {
   8628 			int count = given & 0xff;
   8629 
   8630 			if (single == 0)
   8631 			  count >>= 1;
   8632 
   8633 			if (--count)
   8634 			  {
   8635 			    func (stream, "-%c%d",
   8636 				  single ? 's' : 'd',
   8637 				  regno + count);
   8638 			  }
   8639 
   8640 			func (stream, "}");
   8641 		      }
   8642 		    else if (*c == '4')
   8643 		      func (stream, ", %c%d", single ? 's' : 'd',
   8644 			    regno + 1);
   8645 		  }
   8646 		  break;
   8647 
   8648 		case 'L':
   8649 		  switch (given & 0x00400100)
   8650 		    {
   8651 		    case 0x00000000: func (stream, "b"); break;
   8652 		    case 0x00400000: func (stream, "h"); break;
   8653 		    case 0x00000100: func (stream, "w"); break;
   8654 		    case 0x00400100: func (stream, "d"); break;
   8655 		    default:
   8656 		      break;
   8657 		    }
   8658 		  break;
   8659 
   8660 		case 'Z':
   8661 		  {
   8662 		    /* given (20, 23) | given (0, 3) */
   8663 		    value = ((given >> 16) & 0xf0) | (given & 0xf);
   8664 		    func (stream, "%d", (int) value);
   8665 		  }
   8666 		  break;
   8667 
   8668 		case 'l':
   8669 		  /* This is like the 'A' operator, except that if
   8670 		     the width field "M" is zero, then the offset is
   8671 		     *not* multiplied by four.  */
   8672 		  {
   8673 		    int offset = given & 0xff;
   8674 		    int multiplier = (given & 0x00000100) ? 4 : 1;
   8675 
   8676 		    func (stream, "[%s", arm_regnames [(given >> 16) & 0xf]);
   8677 
   8678 		    if (multiplier > 1)
   8679 		      {
   8680 			value_in_comment = offset * multiplier;
   8681 			if (NEGATIVE_BIT_SET)
   8682 			  value_in_comment = - value_in_comment;
   8683 		      }
   8684 
   8685 		    if (offset)
   8686 		      {
   8687 			if (PRE_BIT_SET)
   8688 			  func (stream, ", #%s%d]%s",
   8689 				NEGATIVE_BIT_SET ? "-" : "",
   8690 				offset * multiplier,
   8691 				WRITEBACK_BIT_SET ? "!" : "");
   8692 			else
   8693 			  func (stream, "], #%s%d",
   8694 				NEGATIVE_BIT_SET ? "-" : "",
   8695 				offset * multiplier);
   8696 		      }
   8697 		    else
   8698 		      func (stream, "]");
   8699 		  }
   8700 		  break;
   8701 
   8702 		case 'r':
   8703 		  {
   8704 		    int imm4 = (given >> 4) & 0xf;
   8705 		    int puw_bits = ((given >> 22) & 6) | ((given >> W_BIT) & 1);
   8706 		    int ubit = ! NEGATIVE_BIT_SET;
   8707 		    const char *rm = arm_regnames [given & 0xf];
   8708 		    const char *rn = arm_regnames [(given >> 16) & 0xf];
   8709 
   8710 		    switch (puw_bits)
   8711 		      {
   8712 		      case 1:
   8713 		      case 3:
   8714 			func (stream, "[%s], %c%s", rn, ubit ? '+' : '-', rm);
   8715 			if (imm4)
   8716 			  func (stream, ", lsl #%d", imm4);
   8717 			break;
   8718 
   8719 		      case 4:
   8720 		      case 5:
   8721 		      case 6:
   8722 		      case 7:
   8723 			func (stream, "[%s, %c%s", rn, ubit ? '+' : '-', rm);
   8724 			if (imm4 > 0)
   8725 			  func (stream, ", lsl #%d", imm4);
   8726 			func (stream, "]");
   8727 			if (puw_bits == 5 || puw_bits == 7)
   8728 			  func (stream, "!");
   8729 			break;
   8730 
   8731 		      default:
   8732 			func (stream, "INVALID");
   8733 		      }
   8734 		  }
   8735 		  break;
   8736 
   8737 		case 'i':
   8738 		  {
   8739 		    long imm5;
   8740 		    imm5 = ((given & 0x100) >> 4) | (given & 0xf);
   8741 		    func (stream, "%ld", (imm5 == 0) ? 32 : imm5);
   8742 		  }
   8743 		  break;
   8744 
   8745 		default:
   8746 		  abort ();
   8747 		}
   8748 	    }
   8749 	  else
   8750 	    func (stream, "%c", *c);
   8751 	}
   8752 
   8753       if (value_in_comment > 32 || value_in_comment < -16)
   8754 	func (stream, "\t; 0x%lx", (value_in_comment & 0xffffffffUL));
   8755 
   8756       if (is_unpredictable)
   8757 	func (stream, UNPREDICTABLE_INSTRUCTION);
   8758 
   8759       return TRUE;
   8760     }
   8761   return FALSE;
   8762 }
   8763 
   8764 static bfd_boolean
   8765 print_insn_coprocessor (bfd_vma pc,
   8766 			struct disassemble_info *info,
   8767 			long given,
   8768 			bfd_boolean thumb)
   8769 {
   8770   return print_insn_coprocessor_1 (coprocessor_opcodes,
   8771 				   pc, info, given, thumb);
   8772 }
   8773 
   8774 static bfd_boolean
   8775 print_insn_generic_coprocessor (bfd_vma pc,
   8776 				struct disassemble_info *info,
   8777 				long given,
   8778 				bfd_boolean thumb)
   8779 {
   8780   return print_insn_coprocessor_1 (generic_coprocessor_opcodes,
   8781 				   pc, info, given, thumb);
   8782 }
   8783 
   8784 /* Decodes and prints ARM addressing modes.  Returns the offset
   8785    used in the address, if any, if it is worthwhile printing the
   8786    offset as a hexadecimal value in a comment at the end of the
   8787    line of disassembly.  */
   8788 
   8789 static signed long
   8790 print_arm_address (bfd_vma pc, struct disassemble_info *info, long given)
   8791 {
   8792   void *stream = info->stream;
   8793   fprintf_ftype func = info->fprintf_func;
   8794   bfd_vma offset = 0;
   8795 
   8796   if (((given & 0x000f0000) == 0x000f0000)
   8797       && ((given & 0x02000000) == 0))
   8798     {
   8799       offset = given & 0xfff;
   8800 
   8801       func (stream, "[pc");
   8802 
   8803       if (PRE_BIT_SET)
   8804 	{
   8805 	  /* Pre-indexed.  Elide offset of positive zero when
   8806 	     non-writeback.  */
   8807 	  if (WRITEBACK_BIT_SET || NEGATIVE_BIT_SET || offset)
   8808 	    func (stream, ", #%s%d", NEGATIVE_BIT_SET ? "-" : "", (int) offset);
   8809 
   8810 	  if (NEGATIVE_BIT_SET)
   8811 	    offset = -offset;
   8812 
   8813 	  offset += pc + 8;
   8814 
   8815 	  /* Cope with the possibility of write-back
   8816 	     being used.  Probably a very dangerous thing
   8817 	     for the programmer to do, but who are we to
   8818 	     argue ?  */
   8819 	  func (stream, "]%s", WRITEBACK_BIT_SET ? "!" : "");
   8820 	}
   8821       else  /* Post indexed.  */
   8822 	{
   8823 	  func (stream, "], #%s%d", NEGATIVE_BIT_SET ? "-" : "", (int) offset);
   8824 
   8825 	  /* Ie ignore the offset.  */
   8826 	  offset = pc + 8;
   8827 	}
   8828 
   8829       func (stream, "\t; ");
   8830       info->print_address_func (offset, info);
   8831       offset = 0;
   8832     }
   8833   else
   8834     {
   8835       func (stream, "[%s",
   8836 	    arm_regnames[(given >> 16) & 0xf]);
   8837 
   8838       if (PRE_BIT_SET)
   8839 	{
   8840 	  if ((given & 0x02000000) == 0)
   8841 	    {
   8842 	      /* Elide offset of positive zero when non-writeback.  */
   8843 	      offset = given & 0xfff;
   8844 	      if (WRITEBACK_BIT_SET || NEGATIVE_BIT_SET || offset)
   8845 		func (stream, ", #%s%d", NEGATIVE_BIT_SET ? "-" : "", (int) offset);
   8846 	    }
   8847 	  else
   8848 	    {
   8849 	      func (stream, ", %s", NEGATIVE_BIT_SET ? "-" : "");
   8850 	      arm_decode_shift (given, func, stream, TRUE);
   8851 	    }
   8852 
   8853 	  func (stream, "]%s",
   8854 		WRITEBACK_BIT_SET ? "!" : "");
   8855 	}
   8856       else
   8857 	{
   8858 	  if ((given & 0x02000000) == 0)
   8859 	    {
   8860 	      /* Always show offset.  */
   8861 	      offset = given & 0xfff;
   8862 	      func (stream, "], #%s%d",
   8863 		    NEGATIVE_BIT_SET ? "-" : "", (int) offset);
   8864 	    }
   8865 	  else
   8866 	    {
   8867 	      func (stream, "], %s",
   8868 		    NEGATIVE_BIT_SET ? "-" : "");
   8869 	      arm_decode_shift (given, func, stream, TRUE);
   8870 	    }
   8871 	}
   8872       if (NEGATIVE_BIT_SET)
   8873 	offset = -offset;
   8874     }
   8875 
   8876   return (signed long) offset;
   8877 }
   8878 
   8879 
   8880 /* Print one cde instruction on INFO->STREAM.
   8881    Return TRUE if the instuction matched, FALSE if this is not a
   8882    recognised cde instruction.  */
   8883 static bfd_boolean
   8884 print_insn_cde (struct disassemble_info *info, long given, bfd_boolean thumb)
   8885 {
   8886   const struct cdeopcode32 *insn;
   8887   void *stream = info->stream;
   8888   fprintf_ftype func = info->fprintf_func;
   8889 
   8890   if (thumb)
   8891   {
   8892     /* Manually extract the coprocessor code from a known point.
   8893        This position is the same across all CDE instructions.  */
   8894     for (insn = cde_opcodes; insn->assembler; insn++)
   8895     {
   8896       uint16_t coproc = (given >> insn->coproc_shift) & insn->coproc_mask;
   8897       uint16_t coproc_mask = 1 << coproc;
   8898       if (! (coproc_mask & cde_coprocs))
   8899 	continue;
   8900 
   8901       if ((given & insn->mask) == insn->value)
   8902       {
   8903 	bfd_boolean is_unpredictable = FALSE;
   8904 	const char *c;
   8905 
   8906 	for (c = insn->assembler; *c; c++)
   8907 	{
   8908 	  if (*c == '%')
   8909 	  {
   8910 	    switch (*++c)
   8911 	    {
   8912 	      case '%':
   8913 		func (stream, "%%");
   8914 		break;
   8915 
   8916 	      case '0': case '1': case '2': case '3': case '4':
   8917 	      case '5': case '6': case '7': case '8': case '9':
   8918 	      {
   8919 		int width;
   8920 		unsigned long value;
   8921 
   8922 		c = arm_decode_bitfield (c, given, &value, &width);
   8923 
   8924 		switch (*c)
   8925 		{
   8926 		  case 'S':
   8927 		    if (value > 10)
   8928 		      is_unpredictable = TRUE;
   8929 		    /* Fall through.  */
   8930 		  case 'R':
   8931 		    if (value == 13)
   8932 		      is_unpredictable = TRUE;
   8933 		    /* Fall through.  */
   8934 		  case 'r':
   8935 		    func (stream, "%s", arm_regnames[value]);
   8936 		    break;
   8937 
   8938 		  case 'n':
   8939 		    if (value == 15)
   8940 		      func (stream, "%s", "APSR_nzcv");
   8941 		    else
   8942 		      func (stream, "%s", arm_regnames[value]);
   8943 		    break;
   8944 
   8945 		  case 'T':
   8946 		    func (stream, "%s", arm_regnames[value + 1]);
   8947 		    break;
   8948 
   8949 		  case 'd':
   8950 		    func (stream, "%ld", value);
   8951 		    break;
   8952 
   8953 		  case 'V':
   8954 		    if (given & (1 << 6))
   8955 		      func (stream, "q%ld", value >> 1);
   8956 		    else if (given & (1 << 24))
   8957 		      func (stream, "d%ld", value);
   8958 		    else
   8959 		      {
   8960 			/* Encoding for S register is different than for D and
   8961 			   Q registers.  S registers are encoded using the top
   8962 			   single bit in position 22 as the lowest bit of the
   8963 			   register number, while for Q and D it represents the
   8964 			   highest bit of the register number.  */
   8965 			uint8_t top_bit = (value >> 4) & 1;
   8966 			uint8_t tmp = (value << 1) & 0x1e;
   8967 			uint8_t res = tmp | top_bit;
   8968 			func (stream, "s%u", res);
   8969 		      }
   8970 		    break;
   8971 
   8972 		default:
   8973 		  abort ();
   8974 		}
   8975 	      }
   8976 	    break;
   8977 
   8978 	    case 'p':
   8979 	      {
   8980 		uint8_t proc_number = (given >> 8) & 0x7;
   8981 		func (stream, "p%u", proc_number);
   8982 		break;
   8983 	      }
   8984 
   8985 	    case 'a':
   8986 	      {
   8987 		uint8_t a_offset = 28;
   8988 		if (given & (1 << a_offset))
   8989 		  func (stream, "a");
   8990 		break;
   8991 	      }
   8992 	  default:
   8993 	    abort ();
   8994 	  }
   8995 	}
   8996 	else
   8997 	  func (stream, "%c", *c);
   8998       }
   8999 
   9000       if (is_unpredictable)
   9001 	func (stream, UNPREDICTABLE_INSTRUCTION);
   9002 
   9003       return TRUE;
   9004       }
   9005     }
   9006     return FALSE;
   9007   }
   9008   else
   9009     return FALSE;
   9010 }
   9011 
   9012 
   9013 /* Print one neon instruction on INFO->STREAM.
   9014    Return TRUE if the instuction matched, FALSE if this is not a
   9015    recognised neon instruction.  */
   9016 
   9017 static bfd_boolean
   9018 print_insn_neon (struct disassemble_info *info, long given, bfd_boolean thumb)
   9019 {
   9020   const struct opcode32 *insn;
   9021   void *stream = info->stream;
   9022   fprintf_ftype func = info->fprintf_func;
   9023 
   9024   if (thumb)
   9025     {
   9026       if ((given & 0xef000000) == 0xef000000)
   9027 	{
   9028 	  /* Move bit 28 to bit 24 to translate Thumb2 to ARM encoding.  */
   9029 	  unsigned long bit28 = given & (1 << 28);
   9030 
   9031 	  given &= 0x00ffffff;
   9032 	  if (bit28)
   9033             given |= 0xf3000000;
   9034           else
   9035 	    given |= 0xf2000000;
   9036 	}
   9037       else if ((given & 0xff000000) == 0xf9000000)
   9038 	given ^= 0xf9000000 ^ 0xf4000000;
   9039       /* BFloat16 neon instructions without special top byte handling.  */
   9040       else if ((given & 0xff000000) == 0xfe000000
   9041 	       || (given & 0xff000000) == 0xfc000000)
   9042 	;
   9043       /* vdup is also a valid neon instruction.  */
   9044       else if ((given & 0xff900f5f) != 0xee800b10)
   9045 	return FALSE;
   9046     }
   9047 
   9048   for (insn = neon_opcodes; insn->assembler; insn++)
   9049     {
   9050       unsigned long cond_mask = insn->mask;
   9051       unsigned long cond_value = insn->value;
   9052       int cond;
   9053 
   9054       if (thumb)
   9055         {
   9056           if ((cond_mask & 0xf0000000) == 0) {
   9057               /* For the entries in neon_opcodes, an opcode mask/value with
   9058                  the high 4 bits equal to 0 indicates a conditional
   9059                  instruction. For thumb however, we need to include those
   9060                  bits in the instruction matching.  */
   9061               cond_mask |= 0xf0000000;
   9062               /* Furthermore, the thumb encoding of a conditional instruction
   9063                  will have the high 4 bits equal to 0xe.  */
   9064               cond_value |= 0xe0000000;
   9065           }
   9066           if (ifthen_state)
   9067             cond = IFTHEN_COND;
   9068           else
   9069             cond = COND_UNCOND;
   9070         }
   9071       else
   9072         {
   9073           if ((given & 0xf0000000) == 0xf0000000)
   9074             {
   9075               /* If the instruction is unconditional, update the mask to only
   9076                  match against unconditional opcode values.  */
   9077               cond_mask |= 0xf0000000;
   9078               cond = COND_UNCOND;
   9079             }
   9080           else
   9081             {
   9082               cond = (given >> 28) & 0xf;
   9083               if (cond == 0xe)
   9084                 cond = COND_UNCOND;
   9085             }
   9086         }
   9087 
   9088       if ((given & cond_mask) == cond_value)
   9089 	{
   9090 	  signed long value_in_comment = 0;
   9091 	  bfd_boolean is_unpredictable = FALSE;
   9092 	  const char *c;
   9093 
   9094 	  for (c = insn->assembler; *c; c++)
   9095 	    {
   9096 	      if (*c == '%')
   9097 		{
   9098 		  switch (*++c)
   9099 		    {
   9100 		    case '%':
   9101 		      func (stream, "%%");
   9102 		      break;
   9103 
   9104 		    case 'u':
   9105 		      if (thumb && ifthen_state)
   9106 			is_unpredictable = TRUE;
   9107 
   9108 		      /* Fall through.  */
   9109 		    case 'c':
   9110 		      func (stream, "%s", arm_conditional[cond]);
   9111 		      break;
   9112 
   9113 		    case 'A':
   9114 		      {
   9115 			static const unsigned char enc[16] =
   9116 			{
   9117 			  0x4, 0x14, /* st4 0,1 */
   9118 			  0x4, /* st1 2 */
   9119 			  0x4, /* st2 3 */
   9120 			  0x3, /* st3 4 */
   9121 			  0x13, /* st3 5 */
   9122 			  0x3, /* st1 6 */
   9123 			  0x1, /* st1 7 */
   9124 			  0x2, /* st2 8 */
   9125 			  0x12, /* st2 9 */
   9126 			  0x2, /* st1 10 */
   9127 			  0, 0, 0, 0, 0
   9128 			};
   9129 			int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
   9130 			int rn = ((given >> 16) & 0xf);
   9131 			int rm = ((given >> 0) & 0xf);
   9132 			int align = ((given >> 4) & 0x3);
   9133 			int type = ((given >> 8) & 0xf);
   9134 			int n = enc[type] & 0xf;
   9135 			int stride = (enc[type] >> 4) + 1;
   9136 			int ix;
   9137 
   9138 			func (stream, "{");
   9139 			if (stride > 1)
   9140 			  for (ix = 0; ix != n; ix++)
   9141 			    func (stream, "%sd%d", ix ? "," : "", rd + ix * stride);
   9142 			else if (n == 1)
   9143 			  func (stream, "d%d", rd);
   9144 			else
   9145 			  func (stream, "d%d-d%d", rd, rd + n - 1);
   9146 			func (stream, "}, [%s", arm_regnames[rn]);
   9147 			if (align)
   9148 			  func (stream, " :%d", 32 << align);
   9149 			func (stream, "]");
   9150 			if (rm == 0xd)
   9151 			  func (stream, "!");
   9152 			else if (rm != 0xf)
   9153 			  func (stream, ", %s", arm_regnames[rm]);
   9154 		      }
   9155 		      break;
   9156 
   9157 		    case 'B':
   9158 		      {
   9159 			int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
   9160 			int rn = ((given >> 16) & 0xf);
   9161 			int rm = ((given >> 0) & 0xf);
   9162 			int idx_align = ((given >> 4) & 0xf);
   9163                         int align = 0;
   9164 			int size = ((given >> 10) & 0x3);
   9165 			int idx = idx_align >> (size + 1);
   9166                         int length = ((given >> 8) & 3) + 1;
   9167                         int stride = 1;
   9168                         int i;
   9169 
   9170                         if (length > 1 && size > 0)
   9171                           stride = (idx_align & (1 << size)) ? 2 : 1;
   9172 
   9173                         switch (length)
   9174                           {
   9175                           case 1:
   9176                             {
   9177                               int amask = (1 << size) - 1;
   9178                               if ((idx_align & (1 << size)) != 0)
   9179                                 return FALSE;
   9180                               if (size > 0)
   9181                                 {
   9182                                   if ((idx_align & amask) == amask)
   9183                                     align = 8 << size;
   9184                                   else if ((idx_align & amask) != 0)
   9185                                     return FALSE;
   9186                                 }
   9187                               }
   9188                             break;
   9189 
   9190                           case 2:
   9191                             if (size == 2 && (idx_align & 2) != 0)
   9192                               return FALSE;
   9193                             align = (idx_align & 1) ? 16 << size : 0;
   9194                             break;
   9195 
   9196                           case 3:
   9197                             if ((size == 2 && (idx_align & 3) != 0)
   9198                                 || (idx_align & 1) != 0)
   9199                               return FALSE;
   9200                             break;
   9201 
   9202                           case 4:
   9203                             if (size == 2)
   9204                               {
   9205                                 if ((idx_align & 3) == 3)
   9206                                   return FALSE;
   9207                                 align = (idx_align & 3) * 64;
   9208                               }
   9209                             else
   9210                               align = (idx_align & 1) ? 32 << size : 0;
   9211                             break;
   9212 
   9213                           default:
   9214                             abort ();
   9215                           }
   9216 
   9217 			func (stream, "{");
   9218                         for (i = 0; i < length; i++)
   9219                           func (stream, "%sd%d[%d]", (i == 0) ? "" : ",",
   9220                             rd + i * stride, idx);
   9221                         func (stream, "}, [%s", arm_regnames[rn]);
   9222 			if (align)
   9223 			  func (stream, " :%d", align);
   9224 			func (stream, "]");
   9225 			if (rm == 0xd)
   9226 			  func (stream, "!");
   9227 			else if (rm != 0xf)
   9228 			  func (stream, ", %s", arm_regnames[rm]);
   9229 		      }
   9230 		      break;
   9231 
   9232 		    case 'C':
   9233 		      {
   9234 			int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
   9235 			int rn = ((given >> 16) & 0xf);
   9236 			int rm = ((given >> 0) & 0xf);
   9237 			int align = ((given >> 4) & 0x1);
   9238 			int size = ((given >> 6) & 0x3);
   9239 			int type = ((given >> 8) & 0x3);
   9240 			int n = type + 1;
   9241 			int stride = ((given >> 5) & 0x1);
   9242 			int ix;
   9243 
   9244 			if (stride && (n == 1))
   9245 			  n++;
   9246 			else
   9247 			  stride++;
   9248 
   9249 			func (stream, "{");
   9250 			if (stride > 1)
   9251 			  for (ix = 0; ix != n; ix++)
   9252 			    func (stream, "%sd%d[]", ix ? "," : "", rd + ix * stride);
   9253 			else if (n == 1)
   9254 			  func (stream, "d%d[]", rd);
   9255 			else
   9256 			  func (stream, "d%d[]-d%d[]", rd, rd + n - 1);
   9257 			func (stream, "}, [%s", arm_regnames[rn]);
   9258 			if (align)
   9259 			  {
   9260                             align = (8 * (type + 1)) << size;
   9261                             if (type == 3)
   9262                               align = (size > 1) ? align >> 1 : align;
   9263 			    if (type == 2 || (type == 0 && !size))
   9264 			      func (stream, " :<bad align %d>", align);
   9265 			    else
   9266 			      func (stream, " :%d", align);
   9267 			  }
   9268 			func (stream, "]");
   9269 			if (rm == 0xd)
   9270 			  func (stream, "!");
   9271 			else if (rm != 0xf)
   9272 			  func (stream, ", %s", arm_regnames[rm]);
   9273 		      }
   9274 		      break;
   9275 
   9276 		    case 'D':
   9277 		      {
   9278 			int raw_reg = (given & 0xf) | ((given >> 1) & 0x10);
   9279 			int size = (given >> 20) & 3;
   9280 			int reg = raw_reg & ((4 << size) - 1);
   9281 			int ix = raw_reg >> size >> 2;
   9282 
   9283 			func (stream, "d%d[%d]", reg, ix);
   9284 		      }
   9285 		      break;
   9286 
   9287 		    case 'E':
   9288 		      /* Neon encoded constant for mov, mvn, vorr, vbic.  */
   9289 		      {
   9290 			int bits = 0;
   9291 			int cmode = (given >> 8) & 0xf;
   9292 			int op = (given >> 5) & 0x1;
   9293 			unsigned long value = 0, hival = 0;
   9294 			unsigned shift;
   9295                         int size = 0;
   9296                         int isfloat = 0;
   9297 
   9298 			bits |= ((given >> 24) & 1) << 7;
   9299 			bits |= ((given >> 16) & 7) << 4;
   9300 			bits |= ((given >> 0) & 15) << 0;
   9301 
   9302 			if (cmode < 8)
   9303 			  {
   9304 			    shift = (cmode >> 1) & 3;
   9305 			    value = (unsigned long) bits << (8 * shift);
   9306                             size = 32;
   9307 			  }
   9308 			else if (cmode < 12)
   9309 			  {
   9310 			    shift = (cmode >> 1) & 1;
   9311 			    value = (unsigned long) bits << (8 * shift);
   9312                             size = 16;
   9313 			  }
   9314 			else if (cmode < 14)
   9315 			  {
   9316 			    shift = (cmode & 1) + 1;
   9317 			    value = (unsigned long) bits << (8 * shift);
   9318 			    value |= (1ul << (8 * shift)) - 1;
   9319                             size = 32;
   9320 			  }
   9321 			else if (cmode == 14)
   9322 			  {
   9323 			    if (op)
   9324 			      {
   9325 				/* Bit replication into bytes.  */
   9326 				int ix;
   9327 				unsigned long mask;
   9328 
   9329 				value = 0;
   9330                                 hival = 0;
   9331 				for (ix = 7; ix >= 0; ix--)
   9332 				  {
   9333 				    mask = ((bits >> ix) & 1) ? 0xff : 0;
   9334                                     if (ix <= 3)
   9335 				      value = (value << 8) | mask;
   9336                                     else
   9337                                       hival = (hival << 8) | mask;
   9338 				  }
   9339                                 size = 64;
   9340 			      }
   9341                             else
   9342                               {
   9343                                 /* Byte replication.  */
   9344                                 value = (unsigned long) bits;
   9345                                 size = 8;
   9346                               }
   9347 			  }
   9348 			else if (!op)
   9349 			  {
   9350 			    /* Floating point encoding.  */
   9351 			    int tmp;
   9352 
   9353 			    value = (unsigned long)  (bits & 0x7f) << 19;
   9354 			    value |= (unsigned long) (bits & 0x80) << 24;
   9355 			    tmp = bits & 0x40 ? 0x3c : 0x40;
   9356 			    value |= (unsigned long) tmp << 24;
   9357                             size = 32;
   9358                             isfloat = 1;
   9359 			  }
   9360 			else
   9361 			  {
   9362 			    func (stream, "<illegal constant %.8x:%x:%x>",
   9363                                   bits, cmode, op);
   9364                             size = 32;
   9365 			    break;
   9366 			  }
   9367                         switch (size)
   9368                           {
   9369                           case 8:
   9370 			    func (stream, "#%ld\t; 0x%.2lx", value, value);
   9371                             break;
   9372 
   9373                           case 16:
   9374                             func (stream, "#%ld\t; 0x%.4lx", value, value);
   9375                             break;
   9376 
   9377                           case 32:
   9378                             if (isfloat)
   9379                               {
   9380                                 unsigned char valbytes[4];
   9381                                 double fvalue;
   9382 
   9383                                 /* Do this a byte at a time so we don't have to
   9384                                    worry about the host's endianness.  */
   9385                                 valbytes[0] = value & 0xff;
   9386                                 valbytes[1] = (value >> 8) & 0xff;
   9387                                 valbytes[2] = (value >> 16) & 0xff;
   9388                                 valbytes[3] = (value >> 24) & 0xff;
   9389 
   9390                                 floatformat_to_double
   9391                                   (& floatformat_ieee_single_little, valbytes,
   9392                                   & fvalue);
   9393 
   9394                                 func (stream, "#%.7g\t; 0x%.8lx", fvalue,
   9395                                       value);
   9396                               }
   9397                             else
   9398                               func (stream, "#%ld\t; 0x%.8lx",
   9399 				    (long) (((value & 0x80000000L) != 0)
   9400 					    ? value | ~0xffffffffL : value),
   9401 				    value);
   9402                             break;
   9403 
   9404                           case 64:
   9405                             func (stream, "#0x%.8lx%.8lx", hival, value);
   9406                             break;
   9407 
   9408                           default:
   9409                             abort ();
   9410                           }
   9411 		      }
   9412 		      break;
   9413 
   9414 		    case 'F':
   9415 		      {
   9416 			int regno = ((given >> 16) & 0xf) | ((given >> (7 - 4)) & 0x10);
   9417 			int num = (given >> 8) & 0x3;
   9418 
   9419 			if (!num)
   9420 			  func (stream, "{d%d}", regno);
   9421 			else if (num + regno >= 32)
   9422 			  func (stream, "{d%d-<overflow reg d%d}", regno, regno + num);
   9423 			else
   9424 			  func (stream, "{d%d-d%d}", regno, regno + num);
   9425 		      }
   9426 		      break;
   9427 
   9428 
   9429 		    case '0': case '1': case '2': case '3': case '4':
   9430 		    case '5': case '6': case '7': case '8': case '9':
   9431 		      {
   9432 			int width;
   9433 			unsigned long value;
   9434 
   9435 			c = arm_decode_bitfield (c, given, &value, &width);
   9436 
   9437 			switch (*c)
   9438 			  {
   9439 			  case 'r':
   9440 			    func (stream, "%s", arm_regnames[value]);
   9441 			    break;
   9442 			  case 'd':
   9443 			    func (stream, "%ld", value);
   9444 			    value_in_comment = value;
   9445 			    break;
   9446 			  case 'e':
   9447 			    func (stream, "%ld", (1ul << width) - value);
   9448 			    break;
   9449 
   9450 			  case 'S':
   9451 			  case 'T':
   9452 			  case 'U':
   9453 			    /* Various width encodings.  */
   9454 			    {
   9455 			      int base = 8 << (*c - 'S'); /* 8,16 or 32 */
   9456 			      int limit;
   9457 			      unsigned low, high;
   9458 
   9459 			      c++;
   9460 			      if (*c >= '0' && *c <= '9')
   9461 				limit = *c - '0';
   9462 			      else if (*c >= 'a' && *c <= 'f')
   9463 				limit = *c - 'a' + 10;
   9464 			      else
   9465 				abort ();
   9466 			      low = limit >> 2;
   9467 			      high = limit & 3;
   9468 
   9469 			      if (value < low || value > high)
   9470 				func (stream, "<illegal width %d>", base << value);
   9471 			      else
   9472 				func (stream, "%d", base << value);
   9473 			    }
   9474 			    break;
   9475 			  case 'R':
   9476 			    if (given & (1 << 6))
   9477 			      goto Q;
   9478 			    /* FALLTHROUGH */
   9479 			  case 'D':
   9480 			    func (stream, "d%ld", value);
   9481 			    break;
   9482 			  case 'Q':
   9483 			  Q:
   9484 			    if (value & 1)
   9485 			      func (stream, "<illegal reg q%ld.5>", value >> 1);
   9486 			    else
   9487 			      func (stream, "q%ld", value >> 1);
   9488 			    break;
   9489 
   9490 			  case '`':
   9491 			    c++;
   9492 			    if (value == 0)
   9493 			      func (stream, "%c", *c);
   9494 			    break;
   9495 			  case '\'':
   9496 			    c++;
   9497 			    if (value == ((1ul << width) - 1))
   9498 			      func (stream, "%c", *c);
   9499 			    break;
   9500 			  case '?':
   9501 			    func (stream, "%c", c[(1 << width) - (int) value]);
   9502 			    c += 1 << width;
   9503 			    break;
   9504 			  default:
   9505 			    abort ();
   9506 			  }
   9507 		      }
   9508 		      break;
   9509 
   9510 		    default:
   9511 		      abort ();
   9512 		    }
   9513 		}
   9514 	      else
   9515 		func (stream, "%c", *c);
   9516 	    }
   9517 
   9518 	  if (value_in_comment > 32 || value_in_comment < -16)
   9519 	    func (stream, "\t; 0x%lx", value_in_comment);
   9520 
   9521 	  if (is_unpredictable)
   9522 	    func (stream, UNPREDICTABLE_INSTRUCTION);
   9523 
   9524 	  return TRUE;
   9525 	}
   9526     }
   9527   return FALSE;
   9528 }
   9529 
   9530 /* Print one mve instruction on INFO->STREAM.
   9531    Return TRUE if the instuction matched, FALSE if this is not a
   9532    recognised mve instruction.  */
   9533 
   9534 static bfd_boolean
   9535 print_insn_mve (struct disassemble_info *info, long given)
   9536 {
   9537   const struct mopcode32 *insn;
   9538   void *stream = info->stream;
   9539   fprintf_ftype func = info->fprintf_func;
   9540 
   9541   for (insn = mve_opcodes; insn->assembler; insn++)
   9542     {
   9543       if (((given & insn->mask) == insn->value)
   9544 	  && !is_mve_encoding_conflict (given, insn->mve_op))
   9545 	{
   9546 	  signed long value_in_comment = 0;
   9547 	  bfd_boolean is_unpredictable = FALSE;
   9548 	  bfd_boolean is_undefined = FALSE;
   9549 	  const char *c;
   9550 	  enum mve_unpredictable unpredictable_cond = UNPRED_NONE;
   9551 	  enum mve_undefined undefined_cond = UNDEF_NONE;
   9552 
   9553 	  /* Most vector mve instruction are illegal in a it block.
   9554 	     There are a few exceptions; check for them.  */
   9555 	  if (ifthen_state && !is_mve_okay_in_it (insn->mve_op))
   9556 	    {
   9557 	      is_unpredictable = TRUE;
   9558 	      unpredictable_cond = UNPRED_IT_BLOCK;
   9559 	    }
   9560 	  else if (is_mve_unpredictable (given, insn->mve_op,
   9561 					 &unpredictable_cond))
   9562 	    is_unpredictable = TRUE;
   9563 
   9564 	  if (is_mve_undefined (given, insn->mve_op, &undefined_cond))
   9565 	    is_undefined = TRUE;
   9566 
   9567 	  /* In "VORR Qd, Qm, Qn", if Qm==Qn, VORR is nothing but VMOV,
   9568 	     i.e "VMOV Qd, Qm".  */
   9569 	  if ((insn->mve_op == MVE_VORR_REG)
   9570 	      && (arm_decode_field (given, 1, 3)
   9571 		  == arm_decode_field (given, 17, 19)))
   9572 	    continue;
   9573 
   9574 	  for (c = insn->assembler; *c; c++)
   9575 	    {
   9576 	      if (*c == '%')
   9577 		{
   9578 		  switch (*++c)
   9579 		    {
   9580 		    case '%':
   9581 		      func (stream, "%%");
   9582 		      break;
   9583 
   9584 		    case 'a':
   9585 		      /* Don't print anything for '+' as it is implied.  */
   9586 		      if (arm_decode_field (given, 23, 23) == 0)
   9587 			func (stream, "-");
   9588 		      break;
   9589 
   9590 		    case 'c':
   9591 		      if (ifthen_state)
   9592 			func (stream, "%s", arm_conditional[IFTHEN_COND]);
   9593 		      break;
   9594 
   9595 		    case 'd':
   9596 		      print_mve_vld_str_addr (info, given, insn->mve_op);
   9597 		      break;
   9598 
   9599 		    case 'i':
   9600 		      {
   9601 			long mve_mask = mve_extract_pred_mask (given);
   9602 			func (stream, "%s", mve_predicatenames[mve_mask]);
   9603 		      }
   9604 		      break;
   9605 
   9606 		    case 'j':
   9607 		      {
   9608 			unsigned int imm5 = 0;
   9609 			imm5 |= arm_decode_field (given, 6, 7);
   9610 			imm5 |= (arm_decode_field (given, 12, 14) << 2);
   9611 			func (stream, "#%u", (imm5 == 0) ? 32 : imm5);
   9612 		      }
   9613 		      break;
   9614 
   9615 		    case 'k':
   9616 		      func (stream, "#%u",
   9617 			    (arm_decode_field (given, 7, 7) == 0) ? 64 : 48);
   9618 		      break;
   9619 
   9620 		    case 'n':
   9621 		      print_vec_condition (info, given, insn->mve_op);
   9622 		      break;
   9623 
   9624 		    case 'o':
   9625 		      if (arm_decode_field (given, 0, 0) == 1)
   9626 			{
   9627 			  unsigned long size
   9628 			    = arm_decode_field (given, 4, 4)
   9629 			      | (arm_decode_field (given, 6, 6) << 1);
   9630 
   9631 			  func (stream, ", uxtw #%lu", size);
   9632 			}
   9633 		      break;
   9634 
   9635 		    case 'm':
   9636 		      print_mve_rounding_mode (info, given, insn->mve_op);
   9637 		      break;
   9638 
   9639 		    case 's':
   9640 		      print_mve_vcvt_size (info, given, insn->mve_op);
   9641 		      break;
   9642 
   9643 		    case 'u':
   9644 		      {
   9645 			unsigned long op1 = arm_decode_field (given, 21, 22);
   9646 
   9647 			if ((insn->mve_op == MVE_VMOV_VEC_LANE_TO_GP))
   9648 			  {
   9649 			    /* Check for signed.  */
   9650 			    if (arm_decode_field (given, 23, 23) == 0)
   9651 			      {
   9652 				/* We don't print 's' for S32.  */
   9653 				if ((arm_decode_field (given, 5, 6) == 0)
   9654 				    && ((op1 == 0) || (op1 == 1)))
   9655 				  ;
   9656 				else
   9657 				  func (stream, "s");
   9658 			      }
   9659 			    else
   9660 			      func (stream, "u");
   9661 			  }
   9662 			else
   9663 			  {
   9664 			    if (arm_decode_field (given, 28, 28) == 0)
   9665 			      func (stream, "s");
   9666 			    else
   9667 			      func (stream, "u");
   9668 			  }
   9669 		      }
   9670 		      break;
   9671 
   9672 		    case 'v':
   9673 		      print_instruction_predicate (info);
   9674 		      break;
   9675 
   9676 		    case 'w':
   9677 		      if (arm_decode_field (given, 21, 21) == 1)
   9678 			func (stream, "!");
   9679 		      break;
   9680 
   9681 		    case 'B':
   9682 		      print_mve_register_blocks (info, given, insn->mve_op);
   9683 		      break;
   9684 
   9685 		    case 'E':
   9686 		      /* SIMD encoded constant for mov, mvn, vorr, vbic.  */
   9687 
   9688 		      print_simd_imm8 (info, given, 28, insn);
   9689 		      break;
   9690 
   9691 		    case 'N':
   9692 		      print_mve_vmov_index (info, given);
   9693 		      break;
   9694 
   9695 		    case 'T':
   9696 		      if (arm_decode_field (given, 12, 12) == 0)
   9697 			func (stream, "b");
   9698 		      else
   9699 			func (stream, "t");
   9700 		      break;
   9701 
   9702 		    case 'X':
   9703 		      if (arm_decode_field (given, 12, 12) == 1)
   9704 			func (stream, "x");
   9705 		      break;
   9706 
   9707 		    case '0': case '1': case '2': case '3': case '4':
   9708 		    case '5': case '6': case '7': case '8': case '9':
   9709 		      {
   9710 			int width;
   9711 			unsigned long value;
   9712 
   9713 			c = arm_decode_bitfield (c, given, &value, &width);
   9714 
   9715 			switch (*c)
   9716 			  {
   9717 			  case 'Z':
   9718 			    if (value == 13)
   9719 			      is_unpredictable = TRUE;
   9720 			    else if (value == 15)
   9721 			      func (stream, "zr");
   9722 			    else
   9723 			      func (stream, "%s", arm_regnames[value]);
   9724 			    break;
   9725 
   9726 			  case 'c':
   9727 			    func (stream, "%s", arm_conditional[value]);
   9728 			    break;
   9729 
   9730 			  case 'C':
   9731 			    value ^= 1;
   9732 			    func (stream, "%s", arm_conditional[value]);
   9733 			    break;
   9734 
   9735 			  case 'S':
   9736 			    if (value == 13 || value == 15)
   9737 			      is_unpredictable = TRUE;
   9738 			    else
   9739 			      func (stream, "%s", arm_regnames[value]);
   9740 			    break;
   9741 
   9742 			  case 's':
   9743 			    print_mve_size (info,
   9744 					    value,
   9745 					    insn->mve_op);
   9746 			    break;
   9747 			  case 'I':
   9748 			    if (value == 1)
   9749 			      func (stream, "i");
   9750 			    break;
   9751 			  case 'A':
   9752 			    if (value == 1)
   9753 			      func (stream, "a");
   9754 			    break;
   9755 			  case 'h':
   9756 			    {
   9757 			      unsigned int odd_reg = (value << 1) | 1;
   9758 			      func (stream, "%s", arm_regnames[odd_reg]);
   9759 			    }
   9760 			    break;
   9761 			  case 'i':
   9762 			    {
   9763 			      unsigned long imm
   9764 				= arm_decode_field (given, 0, 6);
   9765 			      unsigned long mod_imm = imm;
   9766 
   9767 			      switch (insn->mve_op)
   9768 				{
   9769 				case MVE_VLDRW_GATHER_T5:
   9770 				case MVE_VSTRW_SCATTER_T5:
   9771 				  mod_imm = mod_imm << 2;
   9772 				  break;
   9773 				case MVE_VSTRD_SCATTER_T6:
   9774 				case MVE_VLDRD_GATHER_T6:
   9775 				  mod_imm = mod_imm << 3;
   9776 				  break;
   9777 
   9778 				default:
   9779 				  break;
   9780 				}
   9781 
   9782 			      func (stream, "%lu", mod_imm);
   9783 			    }
   9784 			    break;
   9785 			  case 'k':
   9786 			    func (stream, "%lu", 64 - value);
   9787 			    break;
   9788 			  case 'l':
   9789 			    {
   9790 			      unsigned int even_reg = value << 1;
   9791 			      func (stream, "%s", arm_regnames[even_reg]);
   9792 			    }
   9793 			    break;
   9794 			  case 'u':
   9795 			    switch (value)
   9796 			      {
   9797 			      case 0:
   9798 				func (stream, "1");
   9799 				break;
   9800 			      case 1:
   9801 				func (stream, "2");
   9802 				break;
   9803 			      case 2:
   9804 				func (stream, "4");
   9805 				break;
   9806 			      case 3:
   9807 				func (stream, "8");
   9808 				break;
   9809 			      default:
   9810 				break;
   9811 			      }
   9812 			    break;
   9813 			  case 'o':
   9814 			    print_mve_rotate (info, value, width);
   9815 			    break;
   9816 			  case 'r':
   9817 			    func (stream, "%s", arm_regnames[value]);
   9818 			    break;
   9819 			  case 'd':
   9820 			    if (insn->mve_op == MVE_VQSHL_T2
   9821 				|| insn->mve_op == MVE_VQSHLU_T3
   9822 				|| insn->mve_op == MVE_VRSHR
   9823 				|| insn->mve_op == MVE_VRSHRN
   9824 				|| insn->mve_op == MVE_VSHL_T1
   9825 				|| insn->mve_op == MVE_VSHLL_T1
   9826 				|| insn->mve_op == MVE_VSHR
   9827 				|| insn->mve_op == MVE_VSHRN
   9828 				|| insn->mve_op == MVE_VSLI
   9829 				|| insn->mve_op == MVE_VSRI)
   9830 			      print_mve_shift_n (info, given, insn->mve_op);
   9831 			    else if (insn->mve_op == MVE_VSHLL_T2)
   9832 			      {
   9833 				switch (value)
   9834 				  {
   9835 				  case 0x00:
   9836 				    func (stream, "8");
   9837 				    break;
   9838 				  case 0x01:
   9839 				    func (stream, "16");
   9840 				    break;
   9841 				  case 0x10:
   9842 				    print_mve_undefined (info, UNDEF_SIZE_0);
   9843 				    break;
   9844 				  default:
   9845 				    assert (0);
   9846 				    break;
   9847 				  }
   9848 			      }
   9849 			    else
   9850 			      {
   9851 				if (insn->mve_op == MVE_VSHLC && value == 0)
   9852 				  value = 32;
   9853 				func (stream, "%ld", value);
   9854 				value_in_comment = value;
   9855 			      }
   9856 			    break;
   9857 			  case 'F':
   9858 			    func (stream, "s%ld", value);
   9859 			    break;
   9860 			  case 'Q':
   9861 			    if (value & 0x8)
   9862 			      func (stream, "<illegal reg q%ld.5>", value);
   9863 			    else
   9864 			      func (stream, "q%ld", value);
   9865 			    break;
   9866 			  case 'x':
   9867 			    func (stream, "0x%08lx", value);
   9868 			    break;
   9869 			  default:
   9870 			    abort ();
   9871 			  }
   9872 			break;
   9873 		      default:
   9874 			abort ();
   9875 		      }
   9876 		    }
   9877 		}
   9878 	      else
   9879 		func (stream, "%c", *c);
   9880 	    }
   9881 
   9882 	  if (value_in_comment > 32 || value_in_comment < -16)
   9883 	    func (stream, "\t; 0x%lx", value_in_comment);
   9884 
   9885 	  if (is_unpredictable)
   9886 	    print_mve_unpredictable (info, unpredictable_cond);
   9887 
   9888 	  if (is_undefined)
   9889 	    print_mve_undefined (info, undefined_cond);
   9890 
   9891 	  if ((vpt_block_state.in_vpt_block == FALSE)
   9892 	      && !ifthen_state
   9893 	      && (is_vpt_instruction (given) == TRUE))
   9894 	    mark_inside_vpt_block (given);
   9895 	  else if (vpt_block_state.in_vpt_block == TRUE)
   9896 	    update_vpt_block_state ();
   9897 
   9898 	  return TRUE;
   9899 	}
   9900     }
   9901   return FALSE;
   9902 }
   9903 
   9904 
   9905 /* Return the name of a v7A special register.  */
   9906 
   9907 static const char *
   9908 banked_regname (unsigned reg)
   9909 {
   9910   switch (reg)
   9911     {
   9912       case 15: return "CPSR";
   9913       case 32: return "R8_usr";
   9914       case 33: return "R9_usr";
   9915       case 34: return "R10_usr";
   9916       case 35: return "R11_usr";
   9917       case 36: return "R12_usr";
   9918       case 37: return "SP_usr";
   9919       case 38: return "LR_usr";
   9920       case 40: return "R8_fiq";
   9921       case 41: return "R9_fiq";
   9922       case 42: return "R10_fiq";
   9923       case 43: return "R11_fiq";
   9924       case 44: return "R12_fiq";
   9925       case 45: return "SP_fiq";
   9926       case 46: return "LR_fiq";
   9927       case 48: return "LR_irq";
   9928       case 49: return "SP_irq";
   9929       case 50: return "LR_svc";
   9930       case 51: return "SP_svc";
   9931       case 52: return "LR_abt";
   9932       case 53: return "SP_abt";
   9933       case 54: return "LR_und";
   9934       case 55: return "SP_und";
   9935       case 60: return "LR_mon";
   9936       case 61: return "SP_mon";
   9937       case 62: return "ELR_hyp";
   9938       case 63: return "SP_hyp";
   9939       case 79: return "SPSR";
   9940       case 110: return "SPSR_fiq";
   9941       case 112: return "SPSR_irq";
   9942       case 114: return "SPSR_svc";
   9943       case 116: return "SPSR_abt";
   9944       case 118: return "SPSR_und";
   9945       case 124: return "SPSR_mon";
   9946       case 126: return "SPSR_hyp";
   9947       default: return NULL;
   9948     }
   9949 }
   9950 
   9951 /* Return the name of the DMB/DSB option.  */
   9952 static const char *
   9953 data_barrier_option (unsigned option)
   9954 {
   9955   switch (option & 0xf)
   9956     {
   9957     case 0xf: return "sy";
   9958     case 0xe: return "st";
   9959     case 0xd: return "ld";
   9960     case 0xb: return "ish";
   9961     case 0xa: return "ishst";
   9962     case 0x9: return "ishld";
   9963     case 0x7: return "un";
   9964     case 0x6: return "unst";
   9965     case 0x5: return "nshld";
   9966     case 0x3: return "osh";
   9967     case 0x2: return "oshst";
   9968     case 0x1: return "oshld";
   9969     default:  return NULL;
   9970     }
   9971 }
   9972 
   9973 /* Print one ARM instruction from PC on INFO->STREAM.  */
   9974 
   9975 static void
   9976 print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
   9977 {
   9978   const struct opcode32 *insn;
   9979   void *stream = info->stream;
   9980   fprintf_ftype func = info->fprintf_func;
   9981   struct arm_private_data *private_data = info->private_data;
   9982 
   9983   if (print_insn_coprocessor (pc, info, given, FALSE))
   9984     return;
   9985 
   9986   if (print_insn_neon (info, given, FALSE))
   9987     return;
   9988 
   9989   if (print_insn_generic_coprocessor (pc, info, given, FALSE))
   9990     return;
   9991 
   9992   for (insn = arm_opcodes; insn->assembler; insn++)
   9993     {
   9994       if ((given & insn->mask) != insn->value)
   9995 	continue;
   9996 
   9997       if (! ARM_CPU_HAS_FEATURE (insn->arch, private_data->features))
   9998 	continue;
   9999 
   10000       /* Special case: an instruction with all bits set in the condition field
   10001 	 (0xFnnn_nnnn) is only matched if all those bits are set in insn->mask,
   10002 	 or by the catchall at the end of the table.  */
   10003       if ((given & 0xF0000000) != 0xF0000000
   10004 	  || (insn->mask & 0xF0000000) == 0xF0000000
   10005 	  || (insn->mask == 0 && insn->value == 0))
   10006 	{
   10007 	  unsigned long u_reg = 16;
   10008 	  unsigned long U_reg = 16;
   10009 	  bfd_boolean is_unpredictable = FALSE;
   10010 	  signed long value_in_comment = 0;
   10011 	  const char *c;
   10012 
   10013 	  for (c = insn->assembler; *c; c++)
   10014 	    {
   10015 	      if (*c == '%')
   10016 		{
   10017 		  bfd_boolean allow_unpredictable = FALSE;
   10018 
   10019 		  switch (*++c)
   10020 		    {
   10021 		    case '%':
   10022 		      func (stream, "%%");
   10023 		      break;
   10024 
   10025 		    case 'a':
   10026 		      value_in_comment = print_arm_address (pc, info, given);
   10027 		      break;
   10028 
   10029 		    case 'P':
   10030 		      /* Set P address bit and use normal address
   10031 			 printing routine.  */
   10032 		      value_in_comment = print_arm_address (pc, info, given | (1 << P_BIT));
   10033 		      break;
   10034 
   10035 		    case 'S':
   10036 		      allow_unpredictable = TRUE;
   10037 		      /* Fall through.  */
   10038 		    case 's':
   10039                       if ((given & 0x004f0000) == 0x004f0000)
   10040 			{
   10041                           /* PC relative with immediate offset.  */
   10042 			  bfd_vma offset = ((given & 0xf00) >> 4) | (given & 0xf);
   10043 
   10044 			  if (PRE_BIT_SET)
   10045 			    {
   10046 			      /* Elide positive zero offset.  */
   10047 			      if (offset || NEGATIVE_BIT_SET)
   10048 				func (stream, "[pc, #%s%d]\t; ",
   10049 				      NEGATIVE_BIT_SET ? "-" : "", (int) offset);
   10050 			      else
   10051 				func (stream, "[pc]\t; ");
   10052 			      if (NEGATIVE_BIT_SET)
   10053 				offset = -offset;
   10054 			      info->print_address_func (offset + pc + 8, info);
   10055 			    }
   10056 			  else
   10057 			    {
   10058 			      /* Always show the offset.  */
   10059 			      func (stream, "[pc], #%s%d",
   10060 				    NEGATIVE_BIT_SET ? "-" : "", (int) offset);
   10061 			      if (! allow_unpredictable)
   10062 				is_unpredictable = TRUE;
   10063 			    }
   10064 			}
   10065 		      else
   10066 			{
   10067 			  int offset = ((given & 0xf00) >> 4) | (given & 0xf);
   10068 
   10069 			  func (stream, "[%s",
   10070 				arm_regnames[(given >> 16) & 0xf]);
   10071 
   10072 			  if (PRE_BIT_SET)
   10073 			    {
   10074 			      if (IMMEDIATE_BIT_SET)
   10075 				{
   10076 				  /* Elide offset for non-writeback
   10077 				     positive zero.  */
   10078 				  if (WRITEBACK_BIT_SET || NEGATIVE_BIT_SET
   10079 				      || offset)
   10080 				    func (stream, ", #%s%d",
   10081 					  NEGATIVE_BIT_SET ? "-" : "", offset);
   10082 
   10083 				  if (NEGATIVE_BIT_SET)
   10084 				    offset = -offset;
   10085 
   10086 				  value_in_comment = offset;
   10087 				}
   10088 			      else
   10089 				{
   10090 				  /* Register Offset or Register Pre-Indexed.  */
   10091 				  func (stream, ", %s%s",
   10092 					NEGATIVE_BIT_SET ? "-" : "",
   10093 					arm_regnames[given & 0xf]);
   10094 
   10095 				  /* Writing back to the register that is the source/
   10096 				     destination of the load/store is unpredictable.  */
   10097 				  if (! allow_unpredictable
   10098 				      && WRITEBACK_BIT_SET
   10099 				      && ((given & 0xf) == ((given >> 12) & 0xf)))
   10100 				    is_unpredictable = TRUE;
   10101 				}
   10102 
   10103 			      func (stream, "]%s",
   10104 				    WRITEBACK_BIT_SET ? "!" : "");
   10105 			    }
   10106 			  else
   10107 			    {
   10108 			      if (IMMEDIATE_BIT_SET)
   10109 				{
   10110 				  /* Immediate Post-indexed.  */
   10111 				  /* PR 10924: Offset must be printed, even if it is zero.  */
   10112 				  func (stream, "], #%s%d",
   10113 					NEGATIVE_BIT_SET ? "-" : "", offset);
   10114 				  if (NEGATIVE_BIT_SET)
   10115 				    offset = -offset;
   10116 				  value_in_comment = offset;
   10117 				}
   10118 			      else
   10119 				{
   10120 				  /* Register Post-indexed.  */
   10121 				  func (stream, "], %s%s",
   10122 					NEGATIVE_BIT_SET ? "-" : "",
   10123 					arm_regnames[given & 0xf]);
   10124 
   10125 				  /* Writing back to the register that is the source/
   10126 				     destination of the load/store is unpredictable.  */
   10127 				  if (! allow_unpredictable
   10128 				      && (given & 0xf) == ((given >> 12) & 0xf))
   10129 				    is_unpredictable = TRUE;
   10130 				}
   10131 
   10132 			      if (! allow_unpredictable)
   10133 				{
   10134 				  /* Writeback is automatically implied by post- addressing.
   10135 				     Setting the W bit is unnecessary and ARM specify it as
   10136 				     being unpredictable.  */
   10137 				  if (WRITEBACK_BIT_SET
   10138 				      /* Specifying the PC register as the post-indexed
   10139 					 registers is also unpredictable.  */
   10140 				      || (! IMMEDIATE_BIT_SET && ((given & 0xf) == 0xf)))
   10141 				    is_unpredictable = TRUE;
   10142 				}
   10143 			    }
   10144 			}
   10145 		      break;
   10146 
   10147 		    case 'b':
   10148 		      {
   10149 			bfd_vma disp = (((given & 0xffffff) ^ 0x800000) - 0x800000);
   10150 			bfd_vma target = disp * 4 + pc + 8;
   10151 			info->print_address_func (target, info);
   10152 
   10153 			/* Fill in instruction information.  */
   10154 			info->insn_info_valid = 1;
   10155 			info->insn_type = dis_branch;
   10156 			info->target = target;
   10157 		      }
   10158 		      break;
   10159 
   10160 		    case 'c':
   10161 		      if (((given >> 28) & 0xf) != 0xe)
   10162 			func (stream, "%s",
   10163 			      arm_conditional [(given >> 28) & 0xf]);
   10164 		      break;
   10165 
   10166 		    case 'm':
   10167 		      {
   10168 			int started = 0;
   10169 			int reg;
   10170 
   10171 			func (stream, "{");
   10172 			for (reg = 0; reg < 16; reg++)
   10173 			  if ((given & (1 << reg)) != 0)
   10174 			    {
   10175 			      if (started)
   10176 				func (stream, ", ");
   10177 			      started = 1;
   10178 			      func (stream, "%s", arm_regnames[reg]);
   10179 			    }
   10180 			func (stream, "}");
   10181 			if (! started)
   10182 			  is_unpredictable = TRUE;
   10183 		      }
   10184 		      break;
   10185 
   10186 		    case 'q':
   10187 		      arm_decode_shift (given, func, stream, FALSE);
   10188 		      break;
   10189 
   10190 		    case 'o':
   10191 		      if ((given & 0x02000000) != 0)
   10192 			{
   10193 			  unsigned int rotate = (given & 0xf00) >> 7;
   10194 			  unsigned int immed = (given & 0xff);
   10195 			  unsigned int a, i;
   10196 
   10197 			  a = (immed << ((32 - rotate) & 31)
   10198 			       | immed >> rotate) & 0xffffffff;
   10199 			  /* If there is another encoding with smaller rotate,
   10200 			     the rotate should be specified directly.  */
   10201 			  for (i = 0; i < 32; i += 2)
   10202 			    if ((a << i | a >> ((32 - i) & 31)) <= 0xff)
   10203 			      break;
   10204 
   10205 			  if (i != rotate)
   10206 			    func (stream, "#%d, %d", immed, rotate);
   10207 			  else
   10208 			    func (stream, "#%d", a);
   10209 			  value_in_comment = a;
   10210 			}
   10211 		      else
   10212 			arm_decode_shift (given, func, stream, TRUE);
   10213 		      break;
   10214 
   10215 		    case 'p':
   10216 		      if ((given & 0x0000f000) == 0x0000f000)
   10217 			{
   10218 			  arm_feature_set arm_ext_v6 =
   10219 			    ARM_FEATURE_CORE_LOW (ARM_EXT_V6);
   10220 
   10221 			  /* The p-variants of tst/cmp/cmn/teq are the pre-V6
   10222 			     mechanism for setting PSR flag bits.  They are
   10223 			     obsolete in V6 onwards.  */
   10224 			  if (! ARM_CPU_HAS_FEATURE (private_data->features, \
   10225 						     arm_ext_v6))
   10226 			    func (stream, "p");
   10227 			  else
   10228 			    is_unpredictable = TRUE;
   10229 			}
   10230 		      break;
   10231 
   10232 		    case 't':
   10233 		      if ((given & 0x01200000) == 0x00200000)
   10234 			func (stream, "t");
   10235 		      break;
   10236 
   10237 		    case 'A':
   10238 		      {
   10239 			int offset = given & 0xff;
   10240 
   10241 			value_in_comment = offset * 4;
   10242 			if (NEGATIVE_BIT_SET)
   10243 			  value_in_comment = - value_in_comment;
   10244 
   10245 			func (stream, "[%s", arm_regnames [(given >> 16) & 0xf]);
   10246 
   10247 			if (PRE_BIT_SET)
   10248 			  {
   10249 			    if (offset)
   10250 			      func (stream, ", #%d]%s",
   10251 				    (int) value_in_comment,
   10252 				    WRITEBACK_BIT_SET ? "!" : "");
   10253 			    else
   10254 			      func (stream, "]");
   10255 			  }
   10256 			else
   10257 			  {
   10258 			    func (stream, "]");
   10259 
   10260 			    if (WRITEBACK_BIT_SET)
   10261 			      {
   10262 				if (offset)
   10263 				  func (stream, ", #%d", (int) value_in_comment);
   10264 			      }
   10265 			    else
   10266 			      {
   10267 				func (stream, ", {%d}", (int) offset);
   10268 				value_in_comment = offset;
   10269 			      }
   10270 			  }
   10271 		      }
   10272 		      break;
   10273 
   10274 		    case 'B':
   10275 		      /* Print ARM V5 BLX(1) address: pc+25 bits.  */
   10276 		      {
   10277 			bfd_vma address;
   10278 			bfd_vma offset = 0;
   10279 
   10280 			if (! NEGATIVE_BIT_SET)
   10281 			  /* Is signed, hi bits should be ones.  */
   10282 			  offset = (-1) ^ 0x00ffffff;
   10283 
   10284 			/* Offset is (SignExtend(offset field)<<2).  */
   10285 			offset += given & 0x00ffffff;
   10286 			offset <<= 2;
   10287 			address = offset + pc + 8;
   10288 
   10289 			if (given & 0x01000000)
   10290 			  /* H bit allows addressing to 2-byte boundaries.  */
   10291 			  address += 2;
   10292 
   10293 		        info->print_address_func (address, info);
   10294 
   10295 			/* Fill in instruction information.  */
   10296 			info->insn_info_valid = 1;
   10297 			info->insn_type = dis_branch;
   10298 			info->target = address;
   10299 		      }
   10300 		      break;
   10301 
   10302 		    case 'C':
   10303 		      if ((given & 0x02000200) == 0x200)
   10304 			{
   10305 			  const char * name;
   10306 			  unsigned sysm = (given & 0x004f0000) >> 16;
   10307 
   10308 			  sysm |= (given & 0x300) >> 4;
   10309 			  name = banked_regname (sysm);
   10310 
   10311 			  if (name != NULL)
   10312 			    func (stream, "%s", name);
   10313 			  else
   10314 			    func (stream, "(UNDEF: %lu)", (unsigned long) sysm);
   10315 			}
   10316 		      else
   10317 			{
   10318 			  func (stream, "%cPSR_",
   10319 				(given & 0x00400000) ? 'S' : 'C');
   10320 			  if (given & 0x80000)
   10321 			    func (stream, "f");
   10322 			  if (given & 0x40000)
   10323 			    func (stream, "s");
   10324 			  if (given & 0x20000)
   10325 			    func (stream, "x");
   10326 			  if (given & 0x10000)
   10327 			    func (stream, "c");
   10328 			}
   10329 		      break;
   10330 
   10331 		    case 'U':
   10332 		      if ((given & 0xf0) == 0x60)
   10333 			{
   10334 			  switch (given & 0xf)
   10335 			    {
   10336 			    case 0xf: func (stream, "sy"); break;
   10337 			    default:
   10338 			      func (stream, "#%d", (int) given & 0xf);
   10339 			      break;
   10340 			    }
   10341 			}
   10342 		      else
   10343 			{
   10344 			  const char * opt = data_barrier_option (given & 0xf);
   10345 			  if (opt != NULL)
   10346 			    func (stream, "%s", opt);
   10347 			  else
   10348 			      func (stream, "#%d", (int) given & 0xf);
   10349 			}
   10350 		      break;
   10351 
   10352 		    case '0': case '1': case '2': case '3': case '4':
   10353 		    case '5': case '6': case '7': case '8': case '9':
   10354 		      {
   10355 			int width;
   10356 			unsigned long value;
   10357 
   10358 			c = arm_decode_bitfield (c, given, &value, &width);
   10359 
   10360 			switch (*c)
   10361 			  {
   10362 			  case 'R':
   10363 			    if (value == 15)
   10364 			      is_unpredictable = TRUE;
   10365 			    /* Fall through.  */
   10366 			  case 'r':
   10367 			  case 'T':
   10368 			    /* We want register + 1 when decoding T.  */
   10369 			    if (*c == 'T')
   10370 			      value = (value + 1) & 0xf;
   10371 
   10372 			    if (c[1] == 'u')
   10373 			      {
   10374 				/* Eat the 'u' character.  */
   10375 				++ c;
   10376 
   10377 				if (u_reg == value)
   10378 				  is_unpredictable = TRUE;
   10379 				u_reg = value;
   10380 			      }
   10381 			    if (c[1] == 'U')
   10382 			      {
   10383 				/* Eat the 'U' character.  */
   10384 				++ c;
   10385 
   10386 				if (U_reg == value)
   10387 				  is_unpredictable = TRUE;
   10388 				U_reg = value;
   10389 			      }
   10390 			    func (stream, "%s", arm_regnames[value]);
   10391 			    break;
   10392 			  case 'd':
   10393 			    func (stream, "%ld", value);
   10394 			    value_in_comment = value;
   10395 			    break;
   10396 			  case 'b':
   10397 			    func (stream, "%ld", value * 8);
   10398 			    value_in_comment = value * 8;
   10399 			    break;
   10400 			  case 'W':
   10401 			    func (stream, "%ld", value + 1);
   10402 			    value_in_comment = value + 1;
   10403 			    break;
   10404 			  case 'x':
   10405 			    func (stream, "0x%08lx", value);
   10406 
   10407 			    /* Some SWI instructions have special
   10408 			       meanings.  */
   10409 			    if ((given & 0x0fffffff) == 0x0FF00000)
   10410 			      func (stream, "\t; IMB");
   10411 			    else if ((given & 0x0fffffff) == 0x0FF00001)
   10412 			      func (stream, "\t; IMBRange");
   10413 			    break;
   10414 			  case 'X':
   10415 			    func (stream, "%01lx", value & 0xf);
   10416 			    value_in_comment = value;
   10417 			    break;
   10418 			  case '`':
   10419 			    c++;
   10420 			    if (value == 0)
   10421 			      func (stream, "%c", *c);
   10422 			    break;
   10423 			  case '\'':
   10424 			    c++;
   10425 			    if (value == ((1ul << width) - 1))
   10426 			      func (stream, "%c", *c);
   10427 			    break;
   10428 			  case '?':
   10429 			    func (stream, "%c", c[(1 << width) - (int) value]);
   10430 			    c += 1 << width;
   10431 			    break;
   10432 			  default:
   10433 			    abort ();
   10434 			  }
   10435 		      }
   10436 		      break;
   10437 
   10438 		    case 'e':
   10439 		      {
   10440 			int imm;
   10441 
   10442 			imm = (given & 0xf) | ((given & 0xfff00) >> 4);
   10443 			func (stream, "%d", imm);
   10444 			value_in_comment = imm;
   10445 		      }
   10446 		      break;
   10447 
   10448 		    case 'E':
   10449 		      /* LSB and WIDTH fields of BFI or BFC.  The machine-
   10450 			 language instruction encodes LSB and MSB.  */
   10451 		      {
   10452 			long msb = (given & 0x001f0000) >> 16;
   10453 			long lsb = (given & 0x00000f80) >> 7;
   10454 			long w = msb - lsb + 1;
   10455 
   10456 			if (w > 0)
   10457 			  func (stream, "#%lu, #%lu", lsb, w);
   10458 			else
   10459 			  func (stream, "(invalid: %lu:%lu)", lsb, msb);
   10460 		      }
   10461 		      break;
   10462 
   10463 		    case 'R':
   10464 		      /* Get the PSR/banked register name.  */
   10465 		      {
   10466 			const char * name;
   10467 			unsigned sysm = (given & 0x004f0000) >> 16;
   10468 
   10469 			sysm |= (given & 0x300) >> 4;
   10470 			name = banked_regname (sysm);
   10471 
   10472 			if (name != NULL)
   10473 			  func (stream, "%s", name);
   10474 			else
   10475 			  func (stream, "(UNDEF: %lu)", (unsigned long) sysm);
   10476 		      }
   10477 		      break;
   10478 
   10479 		    case 'V':
   10480 		      /* 16-bit unsigned immediate from a MOVT or MOVW
   10481 			 instruction, encoded in bits 0:11 and 15:19.  */
   10482 		      {
   10483 			long hi = (given & 0x000f0000) >> 4;
   10484 			long lo = (given & 0x00000fff);
   10485 			long imm16 = hi | lo;
   10486 
   10487 			func (stream, "#%lu", imm16);
   10488 			value_in_comment = imm16;
   10489 		      }
   10490 		      break;
   10491 
   10492 		    default:
   10493 		      abort ();
   10494 		    }
   10495 		}
   10496 	      else
   10497 		func (stream, "%c", *c);
   10498 	    }
   10499 
   10500 	  if (value_in_comment > 32 || value_in_comment < -16)
   10501 	    func (stream, "\t; 0x%lx", (value_in_comment & 0xffffffffUL));
   10502 
   10503 	  if (is_unpredictable)
   10504 	    func (stream, UNPREDICTABLE_INSTRUCTION);
   10505 
   10506 	  return;
   10507 	}
   10508     }
   10509   func (stream, UNKNOWN_INSTRUCTION_32BIT, (unsigned)given);
   10510   return;
   10511 }
   10512 
   10513 /* Print one 16-bit Thumb instruction from PC on INFO->STREAM.  */
   10514 
   10515 static void
   10516 print_insn_thumb16 (bfd_vma pc, struct disassemble_info *info, long given)
   10517 {
   10518   const struct opcode16 *insn;
   10519   void *stream = info->stream;
   10520   fprintf_ftype func = info->fprintf_func;
   10521 
   10522   for (insn = thumb_opcodes; insn->assembler; insn++)
   10523     if ((given & insn->mask) == insn->value)
   10524       {
   10525 	signed long value_in_comment = 0;
   10526 	const char *c = insn->assembler;
   10527 
   10528 	for (; *c; c++)
   10529 	  {
   10530 	    int domaskpc = 0;
   10531 	    int domasklr = 0;
   10532 
   10533 	    if (*c != '%')
   10534 	      {
   10535 		func (stream, "%c", *c);
   10536 		continue;
   10537 	      }
   10538 
   10539 	    switch (*++c)
   10540 	      {
   10541 	      case '%':
   10542 		func (stream, "%%");
   10543 		break;
   10544 
   10545 	      case 'c':
   10546 		if (ifthen_state)
   10547 		  func (stream, "%s", arm_conditional[IFTHEN_COND]);
   10548 		break;
   10549 
   10550 	      case 'C':
   10551 		if (ifthen_state)
   10552 		  func (stream, "%s", arm_conditional[IFTHEN_COND]);
   10553 		else
   10554 		  func (stream, "s");
   10555 		break;
   10556 
   10557 	      case 'I':
   10558 		{
   10559 		  unsigned int tmp;
   10560 
   10561 		  ifthen_next_state = given & 0xff;
   10562 		  for (tmp = given << 1; tmp & 0xf; tmp <<= 1)
   10563 		    func (stream, ((given ^ tmp) & 0x10) ? "e" : "t");
   10564 		  func (stream, "\t%s", arm_conditional[(given >> 4) & 0xf]);
   10565 		}
   10566 		break;
   10567 
   10568 	      case 'x':
   10569 		if (ifthen_next_state)
   10570 		  func (stream, "\t; unpredictable branch in IT block\n");
   10571 		break;
   10572 
   10573 	      case 'X':
   10574 		if (ifthen_state)
   10575 		  func (stream, "\t; unpredictable <IT:%s>",
   10576 			arm_conditional[IFTHEN_COND]);
   10577 		break;
   10578 
   10579 	      case 'S':
   10580 		{
   10581 		  long reg;
   10582 
   10583 		  reg = (given >> 3) & 0x7;
   10584 		  if (given & (1 << 6))
   10585 		    reg += 8;
   10586 
   10587 		  func (stream, "%s", arm_regnames[reg]);
   10588 		}
   10589 		break;
   10590 
   10591 	      case 'D':
   10592 		{
   10593 		  long reg;
   10594 
   10595 		  reg = given & 0x7;
   10596 		  if (given & (1 << 7))
   10597 		    reg += 8;
   10598 
   10599 		  func (stream, "%s", arm_regnames[reg]);
   10600 		}
   10601 		break;
   10602 
   10603 	      case 'N':
   10604 		if (given & (1 << 8))
   10605 		  domasklr = 1;
   10606 		/* Fall through.  */
   10607 	      case 'O':
   10608 		if (*c == 'O' && (given & (1 << 8)))
   10609 		  domaskpc = 1;
   10610 		/* Fall through.  */
   10611 	      case 'M':
   10612 		{
   10613 		  int started = 0;
   10614 		  int reg;
   10615 
   10616 		  func (stream, "{");
   10617 
   10618 		  /* It would be nice if we could spot
   10619 		     ranges, and generate the rS-rE format: */
   10620 		  for (reg = 0; (reg < 8); reg++)
   10621 		    if ((given & (1 << reg)) != 0)
   10622 		      {
   10623 			if (started)
   10624 			  func (stream, ", ");
   10625 			started = 1;
   10626 			func (stream, "%s", arm_regnames[reg]);
   10627 		      }
   10628 
   10629 		  if (domasklr)
   10630 		    {
   10631 		      if (started)
   10632 			func (stream, ", ");
   10633 		      started = 1;
   10634 		      func (stream, "%s", arm_regnames[14] /* "lr" */);
   10635 		    }
   10636 
   10637 		  if (domaskpc)
   10638 		    {
   10639 		      if (started)
   10640 			func (stream, ", ");
   10641 		      func (stream, "%s", arm_regnames[15] /* "pc" */);
   10642 		    }
   10643 
   10644 		  func (stream, "}");
   10645 		}
   10646 		break;
   10647 
   10648 	      case 'W':
   10649 		/* Print writeback indicator for a LDMIA.  We are doing a
   10650 		   writeback if the base register is not in the register
   10651 		   mask.  */
   10652 		if ((given & (1 << ((given & 0x0700) >> 8))) == 0)
   10653 		  func (stream, "!");
   10654 		break;
   10655 
   10656 	      case 'b':
   10657 		/* Print ARM V6T2 CZB address: pc+4+6 bits.  */
   10658 		{
   10659 		  bfd_vma address = (pc + 4
   10660 				     + ((given & 0x00f8) >> 2)
   10661 				     + ((given & 0x0200) >> 3));
   10662 		  info->print_address_func (address, info);
   10663 
   10664 		  /* Fill in instruction information.  */
   10665 		  info->insn_info_valid = 1;
   10666 		  info->insn_type = dis_branch;
   10667 		  info->target = address;
   10668 		}
   10669 		break;
   10670 
   10671 	      case 's':
   10672 		/* Right shift immediate -- bits 6..10; 1-31 print
   10673 		   as themselves, 0 prints as 32.  */
   10674 		{
   10675 		  long imm = (given & 0x07c0) >> 6;
   10676 		  if (imm == 0)
   10677 		    imm = 32;
   10678 		  func (stream, "#%ld", imm);
   10679 		}
   10680 		break;
   10681 
   10682 	      case '0': case '1': case '2': case '3': case '4':
   10683 	      case '5': case '6': case '7': case '8': case '9':
   10684 		{
   10685 		  int bitstart = *c++ - '0';
   10686 		  int bitend = 0;
   10687 
   10688 		  while (*c >= '0' && *c <= '9')
   10689 		    bitstart = (bitstart * 10) + *c++ - '0';
   10690 
   10691 		  switch (*c)
   10692 		    {
   10693 		    case '-':
   10694 		      {
   10695 			bfd_vma reg;
   10696 
   10697 			c++;
   10698 			while (*c >= '0' && *c <= '9')
   10699 			  bitend = (bitend * 10) + *c++ - '0';
   10700 			if (!bitend)
   10701 			  abort ();
   10702 			reg = given >> bitstart;
   10703 			reg &= (2 << (bitend - bitstart)) - 1;
   10704 
   10705 			switch (*c)
   10706 			  {
   10707 			  case 'r':
   10708 			    func (stream, "%s", arm_regnames[reg]);
   10709 			    break;
   10710 
   10711 			  case 'd':
   10712 			    func (stream, "%ld", (long) reg);
   10713 			    value_in_comment = reg;
   10714 			    break;
   10715 
   10716 			  case 'H':
   10717 			    func (stream, "%ld", (long) (reg << 1));
   10718 			    value_in_comment = reg << 1;
   10719 			    break;
   10720 
   10721 			  case 'W':
   10722 			    func (stream, "%ld", (long) (reg << 2));
   10723 			    value_in_comment = reg << 2;
   10724 			    break;
   10725 
   10726 			  case 'a':
   10727 			    /* PC-relative address -- the bottom two
   10728 			       bits of the address are dropped
   10729 			       before the calculation.  */
   10730 			    info->print_address_func
   10731 			      (((pc + 4) & ~3) + (reg << 2), info);
   10732 			    value_in_comment = 0;
   10733 			    break;
   10734 
   10735 			  case 'x':
   10736 			    func (stream, "0x%04lx", (long) reg);
   10737 			    break;
   10738 
   10739 			  case 'B':
   10740 			    reg = ((reg ^ (1 << bitend)) - (1 << bitend));
   10741 			    bfd_vma target = reg * 2 + pc + 4;
   10742 			    info->print_address_func (target, info);
   10743 			    value_in_comment = 0;
   10744 
   10745 			    /* Fill in instruction information.  */
   10746 			    info->insn_info_valid = 1;
   10747 			    info->insn_type = dis_branch;
   10748 			    info->target = target;
   10749 			    break;
   10750 
   10751 			  case 'c':
   10752 			    func (stream, "%s", arm_conditional [reg]);
   10753 			    break;
   10754 
   10755 			  default:
   10756 			    abort ();
   10757 			  }
   10758 		      }
   10759 		      break;
   10760 
   10761 		    case '\'':
   10762 		      c++;
   10763 		      if ((given & (1 << bitstart)) != 0)
   10764 			func (stream, "%c", *c);
   10765 		      break;
   10766 
   10767 		    case '?':
   10768 		      ++c;
   10769 		      if ((given & (1 << bitstart)) != 0)
   10770 			func (stream, "%c", *c++);
   10771 		      else
   10772 			func (stream, "%c", *++c);
   10773 		      break;
   10774 
   10775 		    default:
   10776 		      abort ();
   10777 		    }
   10778 		}
   10779 		break;
   10780 
   10781 	      default:
   10782 		abort ();
   10783 	      }
   10784 	  }
   10785 
   10786 	if (value_in_comment > 32 || value_in_comment < -16)
   10787 	  func (stream, "\t; 0x%lx", value_in_comment);
   10788 	return;
   10789       }
   10790 
   10791   /* No match.  */
   10792   func (stream, UNKNOWN_INSTRUCTION_16BIT, (unsigned)given);
   10793   return;
   10794 }
   10795 
   10796 /* Return the name of an V7M special register.  */
   10797 
   10798 static const char *
   10799 psr_name (int regno)
   10800 {
   10801   switch (regno)
   10802     {
   10803     case 0x0: return "APSR";
   10804     case 0x1: return "IAPSR";
   10805     case 0x2: return "EAPSR";
   10806     case 0x3: return "PSR";
   10807     case 0x5: return "IPSR";
   10808     case 0x6: return "EPSR";
   10809     case 0x7: return "IEPSR";
   10810     case 0x8: return "MSP";
   10811     case 0x9: return "PSP";
   10812     case 0xa: return "MSPLIM";
   10813     case 0xb: return "PSPLIM";
   10814     case 0x10: return "PRIMASK";
   10815     case 0x11: return "BASEPRI";
   10816     case 0x12: return "BASEPRI_MAX";
   10817     case 0x13: return "FAULTMASK";
   10818     case 0x14: return "CONTROL";
   10819     case 0x88: return "MSP_NS";
   10820     case 0x89: return "PSP_NS";
   10821     case 0x8a: return "MSPLIM_NS";
   10822     case 0x8b: return "PSPLIM_NS";
   10823     case 0x90: return "PRIMASK_NS";
   10824     case 0x91: return "BASEPRI_NS";
   10825     case 0x93: return "FAULTMASK_NS";
   10826     case 0x94: return "CONTROL_NS";
   10827     case 0x98: return "SP_NS";
   10828     default: return "<unknown>";
   10829     }
   10830 }
   10831 
   10832 /* Print one 32-bit Thumb instruction from PC on INFO->STREAM.  */
   10833 
   10834 static void
   10835 print_insn_thumb32 (bfd_vma pc, struct disassemble_info *info, long given)
   10836 {
   10837   const struct opcode32 *insn;
   10838   void *stream = info->stream;
   10839   fprintf_ftype func = info->fprintf_func;
   10840   bfd_boolean is_mve = is_mve_architecture (info);
   10841 
   10842   if (print_insn_coprocessor (pc, info, given, TRUE))
   10843     return;
   10844 
   10845   if ((is_mve == FALSE) && print_insn_neon (info, given, TRUE))
   10846     return;
   10847 
   10848   if (is_mve && print_insn_mve (info, given))
   10849     return;
   10850 
   10851   if (print_insn_cde (info, given, TRUE))
   10852     return;
   10853 
   10854   if (print_insn_generic_coprocessor (pc, info, given, TRUE))
   10855     return;
   10856 
   10857   for (insn = thumb32_opcodes; insn->assembler; insn++)
   10858     if ((given & insn->mask) == insn->value)
   10859       {
   10860 	bfd_boolean is_clrm = FALSE;
   10861 	bfd_boolean is_unpredictable = FALSE;
   10862 	signed long value_in_comment = 0;
   10863 	const char *c = insn->assembler;
   10864 
   10865 	for (; *c; c++)
   10866 	  {
   10867 	    if (*c != '%')
   10868 	      {
   10869 		func (stream, "%c", *c);
   10870 		continue;
   10871 	      }
   10872 
   10873 	    switch (*++c)
   10874 	      {
   10875 	      case '%':
   10876 		func (stream, "%%");
   10877 		break;
   10878 
   10879 	      case 'c':
   10880 		if (ifthen_state)
   10881 		  func (stream, "%s", arm_conditional[IFTHEN_COND]);
   10882 		break;
   10883 
   10884 	      case 'x':
   10885 		if (ifthen_next_state)
   10886 		  func (stream, "\t; unpredictable branch in IT block\n");
   10887 		break;
   10888 
   10889 	      case 'X':
   10890 		if (ifthen_state)
   10891 		  func (stream, "\t; unpredictable <IT:%s>",
   10892 			arm_conditional[IFTHEN_COND]);
   10893 		break;
   10894 
   10895 	      case 'I':
   10896 		{
   10897 		  unsigned int imm12 = 0;
   10898 
   10899 		  imm12 |= (given & 0x000000ffu);
   10900 		  imm12 |= (given & 0x00007000u) >> 4;
   10901 		  imm12 |= (given & 0x04000000u) >> 15;
   10902 		  func (stream, "#%u", imm12);
   10903 		  value_in_comment = imm12;
   10904 		}
   10905 		break;
   10906 
   10907 	      case 'M':
   10908 		{
   10909 		  unsigned int bits = 0, imm, imm8, mod;
   10910 
   10911 		  bits |= (given & 0x000000ffu);
   10912 		  bits |= (given & 0x00007000u) >> 4;
   10913 		  bits |= (given & 0x04000000u) >> 15;
   10914 		  imm8 = (bits & 0x0ff);
   10915 		  mod = (bits & 0xf00) >> 8;
   10916 		  switch (mod)
   10917 		    {
   10918 		    case 0: imm = imm8; break;
   10919 		    case 1: imm = ((imm8 << 16) | imm8); break;
   10920 		    case 2: imm = ((imm8 << 24) | (imm8 << 8)); break;
   10921 		    case 3: imm = ((imm8 << 24) | (imm8 << 16) | (imm8 << 8) | imm8); break;
   10922 		    default:
   10923 		      mod  = (bits & 0xf80) >> 7;
   10924 		      imm8 = (bits & 0x07f) | 0x80;
   10925 		      imm  = (((imm8 << (32 - mod)) | (imm8 >> mod)) & 0xffffffff);
   10926 		    }
   10927 		  func (stream, "#%u", imm);
   10928 		  value_in_comment = imm;
   10929 		}
   10930 		break;
   10931 
   10932 	      case 'J':
   10933 		{
   10934 		  unsigned int imm = 0;
   10935 
   10936 		  imm |= (given & 0x000000ffu);
   10937 		  imm |= (given & 0x00007000u) >> 4;
   10938 		  imm |= (given & 0x04000000u) >> 15;
   10939 		  imm |= (given & 0x000f0000u) >> 4;
   10940 		  func (stream, "#%u", imm);
   10941 		  value_in_comment = imm;
   10942 		}
   10943 		break;
   10944 
   10945 	      case 'K':
   10946 		{
   10947 		  unsigned int imm = 0;
   10948 
   10949 		  imm |= (given & 0x000f0000u) >> 16;
   10950 		  imm |= (given & 0x00000ff0u) >> 0;
   10951 		  imm |= (given & 0x0000000fu) << 12;
   10952 		  func (stream, "#%u", imm);
   10953 		  value_in_comment = imm;
   10954 		}
   10955 		break;
   10956 
   10957 	      case 'H':
   10958 		{
   10959 		  unsigned int imm = 0;
   10960 
   10961 		  imm |= (given & 0x000f0000u) >> 4;
   10962 		  imm |= (given & 0x00000fffu) >> 0;
   10963 		  func (stream, "#%u", imm);
   10964 		  value_in_comment = imm;
   10965 		}
   10966 		break;
   10967 
   10968 	      case 'V':
   10969 		{
   10970 		  unsigned int imm = 0;
   10971 
   10972 		  imm |= (given & 0x00000fffu);
   10973 		  imm |= (given & 0x000f0000u) >> 4;
   10974 		  func (stream, "#%u", imm);
   10975 		  value_in_comment = imm;
   10976 		}
   10977 		break;
   10978 
   10979 	      case 'S':
   10980 		{
   10981 		  unsigned int reg = (given & 0x0000000fu);
   10982 		  unsigned int stp = (given & 0x00000030u) >> 4;
   10983 		  unsigned int imm = 0;
   10984 		  imm |= (given & 0x000000c0u) >> 6;
   10985 		  imm |= (given & 0x00007000u) >> 10;
   10986 
   10987 		  func (stream, "%s", arm_regnames[reg]);
   10988 		  switch (stp)
   10989 		    {
   10990 		    case 0:
   10991 		      if (imm > 0)
   10992 			func (stream, ", lsl #%u", imm);
   10993 		      break;
   10994 
   10995 		    case 1:
   10996 		      if (imm == 0)
   10997 			imm = 32;
   10998 		      func (stream, ", lsr #%u", imm);
   10999 		      break;
   11000 
   11001 		    case 2:
   11002 		      if (imm == 0)
   11003 			imm = 32;
   11004 		      func (stream, ", asr #%u", imm);
   11005 		      break;
   11006 
   11007 		    case 3:
   11008 		      if (imm == 0)
   11009 			func (stream, ", rrx");
   11010 		      else
   11011 			func (stream, ", ror #%u", imm);
   11012 		    }
   11013 		}
   11014 		break;
   11015 
   11016 	      case 'a':
   11017 		{
   11018 		  unsigned int Rn  = (given & 0x000f0000) >> 16;
   11019 		  unsigned int U   = ! NEGATIVE_BIT_SET;
   11020 		  unsigned int op  = (given & 0x00000f00) >> 8;
   11021 		  unsigned int i12 = (given & 0x00000fff);
   11022 		  unsigned int i8  = (given & 0x000000ff);
   11023 		  bfd_boolean writeback = FALSE, postind = FALSE;
   11024 		  bfd_vma offset = 0;
   11025 
   11026 		  func (stream, "[%s", arm_regnames[Rn]);
   11027 		  if (U) /* 12-bit positive immediate offset.  */
   11028 		    {
   11029 		      offset = i12;
   11030 		      if (Rn != 15)
   11031 			value_in_comment = offset;
   11032 		    }
   11033 		  else if (Rn == 15) /* 12-bit negative immediate offset.  */
   11034 		    offset = - (int) i12;
   11035 		  else if (op == 0x0) /* Shifted register offset.  */
   11036 		    {
   11037 		      unsigned int Rm = (i8 & 0x0f);
   11038 		      unsigned int sh = (i8 & 0x30) >> 4;
   11039 
   11040 		      func (stream, ", %s", arm_regnames[Rm]);
   11041 		      if (sh)
   11042 			func (stream, ", lsl #%u", sh);
   11043 		      func (stream, "]");
   11044 		      break;
   11045 		    }
   11046 		  else switch (op)
   11047 		    {
   11048 		    case 0xE:  /* 8-bit positive immediate offset.  */
   11049 		      offset = i8;
   11050 		      break;
   11051 
   11052 		    case 0xC:  /* 8-bit negative immediate offset.  */
   11053 		      offset = -i8;
   11054 		      break;
   11055 
   11056 		    case 0xF:  /* 8-bit + preindex with wb.  */
   11057 		      offset = i8;
   11058 		      writeback = TRUE;
   11059 		      break;
   11060 
   11061 		    case 0xD:  /* 8-bit - preindex with wb.  */
   11062 		      offset = -i8;
   11063 		      writeback = TRUE;
   11064 		      break;
   11065 
   11066 		    case 0xB:  /* 8-bit + postindex.  */
   11067 		      offset = i8;
   11068 		      postind = TRUE;
   11069 		      break;
   11070 
   11071 		    case 0x9:  /* 8-bit - postindex.  */
   11072 		      offset = -i8;
   11073 		      postind = TRUE;
   11074 		      break;
   11075 
   11076 		    default:
   11077 		      func (stream, ", <undefined>]");
   11078 		      goto skip;
   11079 		    }
   11080 
   11081 		  if (postind)
   11082 		    func (stream, "], #%d", (int) offset);
   11083 		  else
   11084 		    {
   11085 		      if (offset)
   11086 			func (stream, ", #%d", (int) offset);
   11087 		      func (stream, writeback ? "]!" : "]");
   11088 		    }
   11089 
   11090 		  if (Rn == 15)
   11091 		    {
   11092 		      func (stream, "\t; ");
   11093 		      info->print_address_func (((pc + 4) & ~3) + offset, info);
   11094 		    }
   11095 		}
   11096 	      skip:
   11097 		break;
   11098 
   11099 	      case 'A':
   11100 		{
   11101 		  unsigned int U   = ! NEGATIVE_BIT_SET;
   11102 		  unsigned int W   = WRITEBACK_BIT_SET;
   11103 		  unsigned int Rn  = (given & 0x000f0000) >> 16;
   11104 		  unsigned int off = (given & 0x000000ff);
   11105 
   11106 		  func (stream, "[%s", arm_regnames[Rn]);
   11107 
   11108 		  if (PRE_BIT_SET)
   11109 		    {
   11110 		      if (off || !U)
   11111 			{
   11112 			  func (stream, ", #%c%u", U ? '+' : '-', off * 4);
   11113 			  value_in_comment = off * 4 * (U ? 1 : -1);
   11114 			}
   11115 		      func (stream, "]");
   11116 		      if (W)
   11117 			func (stream, "!");
   11118 		    }
   11119 		  else
   11120 		    {
   11121 		      func (stream, "], ");
   11122 		      if (W)
   11123 			{
   11124 			  func (stream, "#%c%u", U ? '+' : '-', off * 4);
   11125 			  value_in_comment = off * 4 * (U ? 1 : -1);
   11126 			}
   11127 		      else
   11128 			{
   11129 			  func (stream, "{%u}", off);
   11130 			  value_in_comment = off;
   11131 			}
   11132 		    }
   11133 		}
   11134 		break;
   11135 
   11136 	      case 'w':
   11137 		{
   11138 		  unsigned int Sbit = (given & 0x01000000) >> 24;
   11139 		  unsigned int type = (given & 0x00600000) >> 21;
   11140 
   11141 		  switch (type)
   11142 		    {
   11143 		    case 0: func (stream, Sbit ? "sb" : "b"); break;
   11144 		    case 1: func (stream, Sbit ? "sh" : "h"); break;
   11145 		    case 2:
   11146 		      if (Sbit)
   11147 			func (stream, "??");
   11148 		      break;
   11149 		    case 3:
   11150 		      func (stream, "??");
   11151 		      break;
   11152 		    }
   11153 		}
   11154 		break;
   11155 
   11156 	      case 'n':
   11157 		is_clrm = TRUE;
   11158 		/* Fall through.  */
   11159 	      case 'm':
   11160 		{
   11161 		  int started = 0;
   11162 		  int reg;
   11163 
   11164 		  func (stream, "{");
   11165 		  for (reg = 0; reg < 16; reg++)
   11166 		    if ((given & (1 << reg)) != 0)
   11167 		      {
   11168 			if (started)
   11169 			  func (stream, ", ");
   11170 			started = 1;
   11171 			if (is_clrm && reg == 13)
   11172 			  func (stream, "(invalid: %s)", arm_regnames[reg]);
   11173 			else if (is_clrm && reg == 15)
   11174 			  func (stream, "%s", "APSR");
   11175 			else
   11176 			  func (stream, "%s", arm_regnames[reg]);
   11177 		      }
   11178 		  func (stream, "}");
   11179 		}
   11180 		break;
   11181 
   11182 	      case 'E':
   11183 		{
   11184 		  unsigned int msb = (given & 0x0000001f);
   11185 		  unsigned int lsb = 0;
   11186 
   11187 		  lsb |= (given & 0x000000c0u) >> 6;
   11188 		  lsb |= (given & 0x00007000u) >> 10;
   11189 		  func (stream, "#%u, #%u", lsb, msb - lsb + 1);
   11190 		}
   11191 		break;
   11192 
   11193 	      case 'F':
   11194 		{
   11195 		  unsigned int width = (given & 0x0000001f) + 1;
   11196 		  unsigned int lsb = 0;
   11197 
   11198 		  lsb |= (given & 0x000000c0u) >> 6;
   11199 		  lsb |= (given & 0x00007000u) >> 10;
   11200 		  func (stream, "#%u, #%u", lsb, width);
   11201 		}
   11202 		break;
   11203 
   11204 	      case 'G':
   11205 		{
   11206 		  unsigned int boff = (((given & 0x07800000) >> 23) << 1);
   11207 		  func (stream, "%x", boff);
   11208 		}
   11209 		break;
   11210 
   11211 	      case 'W':
   11212 		{
   11213 		  unsigned int immA = (given & 0x001f0000u) >> 16;
   11214 		  unsigned int immB = (given & 0x000007feu) >> 1;
   11215 		  unsigned int immC = (given & 0x00000800u) >> 11;
   11216 		  bfd_vma offset = 0;
   11217 
   11218 		  offset |= immA << 12;
   11219 		  offset |= immB << 2;
   11220 		  offset |= immC << 1;
   11221 		  /* Sign extend.  */
   11222 		  offset = (offset & 0x10000) ? offset - (1 << 17) : offset;
   11223 
   11224 		  info->print_address_func (pc + 4 + offset, info);
   11225 		}
   11226 		break;
   11227 
   11228 	      case 'Y':
   11229 		{
   11230 		  unsigned int immA = (given & 0x007f0000u) >> 16;
   11231 		  unsigned int immB = (given & 0x000007feu) >> 1;
   11232 		  unsigned int immC = (given & 0x00000800u) >> 11;
   11233 		  bfd_vma offset = 0;
   11234 
   11235 		  offset |= immA << 12;
   11236 		  offset |= immB << 2;
   11237 		  offset |= immC << 1;
   11238 		  /* Sign extend.  */
   11239 		  offset = (offset & 0x40000) ? offset - (1 << 19) : offset;
   11240 
   11241 		  info->print_address_func (pc + 4 + offset, info);
   11242 		}
   11243 		break;
   11244 
   11245 	      case 'Z':
   11246 		{
   11247 		  unsigned int immA = (given & 0x00010000u) >> 16;
   11248 		  unsigned int immB = (given & 0x000007feu) >> 1;
   11249 		  unsigned int immC = (given & 0x00000800u) >> 11;
   11250 		  bfd_vma offset = 0;
   11251 
   11252 		  offset |= immA << 12;
   11253 		  offset |= immB << 2;
   11254 		  offset |= immC << 1;
   11255 		  /* Sign extend.  */
   11256 		  offset = (offset & 0x1000) ? offset - (1 << 13) : offset;
   11257 
   11258 		  info->print_address_func (pc + 4 + offset, info);
   11259 
   11260 		  unsigned int T    = (given & 0x00020000u) >> 17;
   11261 		  unsigned int endoffset = (((given & 0x07800000) >> 23) << 1);
   11262 		  unsigned int boffset   = (T == 1) ? 4 : 2;
   11263 		  func (stream, ", ");
   11264 		  func (stream, "%x", endoffset + boffset);
   11265 		}
   11266 		break;
   11267 
   11268 	      case 'Q':
   11269 		{
   11270 		  unsigned int immh = (given & 0x000007feu) >> 1;
   11271 		  unsigned int imml = (given & 0x00000800u) >> 11;
   11272 		  bfd_vma imm32 = 0;
   11273 
   11274 		  imm32 |= immh << 2;
   11275 		  imm32 |= imml << 1;
   11276 
   11277 		  info->print_address_func (pc + 4 + imm32, info);
   11278 		}
   11279 		break;
   11280 
   11281 	      case 'P':
   11282 		{
   11283 		  unsigned int immh = (given & 0x000007feu) >> 1;
   11284 		  unsigned int imml = (given & 0x00000800u) >> 11;
   11285 		  bfd_vma imm32 = 0;
   11286 
   11287 		  imm32 |= immh << 2;
   11288 		  imm32 |= imml << 1;
   11289 
   11290 		  info->print_address_func (pc + 4 - imm32, info);
   11291 		}
   11292 		break;
   11293 
   11294 	      case 'b':
   11295 		{
   11296 		  unsigned int S = (given & 0x04000000u) >> 26;
   11297 		  unsigned int J1 = (given & 0x00002000u) >> 13;
   11298 		  unsigned int J2 = (given & 0x00000800u) >> 11;
   11299 		  bfd_vma offset = 0;
   11300 
   11301 		  offset |= !S << 20;
   11302 		  offset |= J2 << 19;
   11303 		  offset |= J1 << 18;
   11304 		  offset |= (given & 0x003f0000) >> 4;
   11305 		  offset |= (given & 0x000007ff) << 1;
   11306 		  offset -= (1 << 20);
   11307 
   11308 		  bfd_vma target = pc + 4 + offset;
   11309 		  info->print_address_func (target, info);
   11310 
   11311 		  /* Fill in instruction information.  */
   11312 		  info->insn_info_valid = 1;
   11313 		  info->insn_type = dis_branch;
   11314 		  info->target = target;
   11315 		}
   11316 		break;
   11317 
   11318 	      case 'B':
   11319 		{
   11320 		  unsigned int S = (given & 0x04000000u) >> 26;
   11321 		  unsigned int I1 = (given & 0x00002000u) >> 13;
   11322 		  unsigned int I2 = (given & 0x00000800u) >> 11;
   11323 		  bfd_vma offset = 0;
   11324 
   11325 		  offset |= !S << 24;
   11326 		  offset |= !(I1 ^ S) << 23;
   11327 		  offset |= !(I2 ^ S) << 22;
   11328 		  offset |= (given & 0x03ff0000u) >> 4;
   11329 		  offset |= (given & 0x000007ffu) << 1;
   11330 		  offset -= (1 << 24);
   11331 		  offset += pc + 4;
   11332 
   11333 		  /* BLX target addresses are always word aligned.  */
   11334 		  if ((given & 0x00001000u) == 0)
   11335 		      offset &= ~2u;
   11336 
   11337 		  info->print_address_func (offset, info);
   11338 
   11339 		  /* Fill in instruction information.  */
   11340 		  info->insn_info_valid = 1;
   11341 		  info->insn_type = dis_branch;
   11342 		  info->target = offset;
   11343 		}
   11344 		break;
   11345 
   11346 	      case 's':
   11347 		{
   11348 		  unsigned int shift = 0;
   11349 
   11350 		  shift |= (given & 0x000000c0u) >> 6;
   11351 		  shift |= (given & 0x00007000u) >> 10;
   11352 		  if (WRITEBACK_BIT_SET)
   11353 		    func (stream, ", asr #%u", shift);
   11354 		  else if (shift)
   11355 		    func (stream, ", lsl #%u", shift);
   11356 		  /* else print nothing - lsl #0 */
   11357 		}
   11358 		break;
   11359 
   11360 	      case 'R':
   11361 		{
   11362 		  unsigned int rot = (given & 0x00000030) >> 4;
   11363 
   11364 		  if (rot)
   11365 		    func (stream, ", ror #%u", rot * 8);
   11366 		}
   11367 		break;
   11368 
   11369 	      case 'U':
   11370 		if ((given & 0xf0) == 0x60)
   11371 		  {
   11372 		    switch (given & 0xf)
   11373 		      {
   11374 			case 0xf: func (stream, "sy"); break;
   11375 			default:
   11376 			  func (stream, "#%d", (int) given & 0xf);
   11377 			      break;
   11378 		      }
   11379 		  }
   11380 		else
   11381 		  {
   11382 		    const char * opt = data_barrier_option (given & 0xf);
   11383 		    if (opt != NULL)
   11384 		      func (stream, "%s", opt);
   11385 		    else
   11386 		      func (stream, "#%d", (int) given & 0xf);
   11387 		   }
   11388 		break;
   11389 
   11390 	      case 'C':
   11391 		if ((given & 0xff) == 0)
   11392 		  {
   11393 		    func (stream, "%cPSR_", (given & 0x100000) ? 'S' : 'C');
   11394 		    if (given & 0x800)
   11395 		      func (stream, "f");
   11396 		    if (given & 0x400)
   11397 		      func (stream, "s");
   11398 		    if (given & 0x200)
   11399 		      func (stream, "x");
   11400 		    if (given & 0x100)
   11401 		      func (stream, "c");
   11402 		  }
   11403 		else if ((given & 0x20) == 0x20)
   11404 		  {
   11405 		    char const* name;
   11406 		    unsigned sysm = (given & 0xf00) >> 8;
   11407 
   11408 		    sysm |= (given & 0x30);
   11409 		    sysm |= (given & 0x00100000) >> 14;
   11410 		    name = banked_regname (sysm);
   11411 
   11412 		    if (name != NULL)
   11413 		      func (stream, "%s", name);
   11414 		    else
   11415 		      func (stream, "(UNDEF: %lu)", (unsigned long) sysm);
   11416 		  }
   11417 		else
   11418 		  {
   11419 		    func (stream, "%s", psr_name (given & 0xff));
   11420 		  }
   11421 		break;
   11422 
   11423 	      case 'D':
   11424 		if (((given & 0xff) == 0)
   11425 		    || ((given & 0x20) == 0x20))
   11426 		  {
   11427 		    char const* name;
   11428 		    unsigned sm = (given & 0xf0000) >> 16;
   11429 
   11430 		    sm |= (given & 0x30);
   11431 		    sm |= (given & 0x00100000) >> 14;
   11432 		    name = banked_regname (sm);
   11433 
   11434 		    if (name != NULL)
   11435 		      func (stream, "%s", name);
   11436 		    else
   11437 		      func (stream, "(UNDEF: %lu)", (unsigned long) sm);
   11438 		  }
   11439 		else
   11440 		  func (stream, "%s", psr_name (given & 0xff));
   11441 		break;
   11442 
   11443 	      case '0': case '1': case '2': case '3': case '4':
   11444 	      case '5': case '6': case '7': case '8': case '9':
   11445 		{
   11446 		  int width;
   11447 		  unsigned long val;
   11448 
   11449 		  c = arm_decode_bitfield (c, given, &val, &width);
   11450 
   11451 		  switch (*c)
   11452 		    {
   11453 		    case 's':
   11454 		      if (val <= 3)
   11455 			func (stream, "%s", mve_vec_sizename[val]);
   11456 		      else
   11457 			func (stream, "<undef size>");
   11458 		      break;
   11459 
   11460 		    case 'd':
   11461 		      func (stream, "%lu", val);
   11462 		      value_in_comment = val;
   11463 		      break;
   11464 
   11465 		    case 'D':
   11466 		      func (stream, "%lu", val + 1);
   11467 		      value_in_comment = val + 1;
   11468 		      break;
   11469 
   11470 		    case 'W':
   11471 		      func (stream, "%lu", val * 4);
   11472 		      value_in_comment = val * 4;
   11473 		      break;
   11474 
   11475 		    case 'S':
   11476 		      if (val == 13)
   11477 			is_unpredictable = TRUE;
   11478 		      /* Fall through.  */
   11479 		    case 'R':
   11480 		      if (val == 15)
   11481 			is_unpredictable = TRUE;
   11482 		      /* Fall through.  */
   11483 		    case 'r':
   11484 		      func (stream, "%s", arm_regnames[val]);
   11485 		      break;
   11486 
   11487 		    case 'c':
   11488 		      func (stream, "%s", arm_conditional[val]);
   11489 		      break;
   11490 
   11491 		    case '\'':
   11492 		      c++;
   11493 		      if (val == ((1ul << width) - 1))
   11494 			func (stream, "%c", *c);
   11495 		      break;
   11496 
   11497 		    case '`':
   11498 		      c++;
   11499 		      if (val == 0)
   11500 			func (stream, "%c", *c);
   11501 		      break;
   11502 
   11503 		    case '?':
   11504 		      func (stream, "%c", c[(1 << width) - (int) val]);
   11505 		      c += 1 << width;
   11506 		      break;
   11507 
   11508 		    case 'x':
   11509 		      func (stream, "0x%lx", val & 0xffffffffUL);
   11510 		      break;
   11511 
   11512 		    default:
   11513 		      abort ();
   11514 		    }
   11515 		}
   11516 		break;
   11517 
   11518 	      case 'L':
   11519 		/* PR binutils/12534
   11520 		   If we have a PC relative offset in an LDRD or STRD
   11521 		   instructions then display the decoded address.  */
   11522 		if (((given >> 16) & 0xf) == 0xf)
   11523 		  {
   11524 		    bfd_vma offset = (given & 0xff) * 4;
   11525 
   11526 		    if ((given & (1 << 23)) == 0)
   11527 		      offset = - offset;
   11528 		    func (stream, "\t; ");
   11529 		    info->print_address_func ((pc & ~3) + 4 + offset, info);
   11530 		  }
   11531 		break;
   11532 
   11533 	      default:
   11534 		abort ();
   11535 	      }
   11536 	  }
   11537 
   11538 	if (value_in_comment > 32 || value_in_comment < -16)
   11539 	  func (stream, "\t; 0x%lx", value_in_comment);
   11540 
   11541 	if (is_unpredictable)
   11542 	  func (stream, UNPREDICTABLE_INSTRUCTION);
   11543 
   11544 	return;
   11545       }
   11546 
   11547   /* No match.  */
   11548   func (stream, UNKNOWN_INSTRUCTION_32BIT, (unsigned)given);
   11549   return;
   11550 }
   11551 
   11552 /* Print data bytes on INFO->STREAM.  */
   11553 
   11554 static void
   11555 print_insn_data (bfd_vma pc ATTRIBUTE_UNUSED,
   11556 		 struct disassemble_info *info,
   11557 		 long given)
   11558 {
   11559   switch (info->bytes_per_chunk)
   11560     {
   11561     case 1:
   11562       info->fprintf_func (info->stream, ".byte\t0x%02lx", given);
   11563       break;
   11564     case 2:
   11565       info->fprintf_func (info->stream, ".short\t0x%04lx", given);
   11566       break;
   11567     case 4:
   11568       info->fprintf_func (info->stream, ".word\t0x%08lx", given);
   11569       break;
   11570     default:
   11571       abort ();
   11572     }
   11573 }
   11574 
   11575 /* Disallow mapping symbols ($a, $b, $d, $t etc) from
   11576    being displayed in symbol relative addresses.
   11577 
   11578    Also disallow private symbol, with __tagsym$$ prefix,
   11579    from ARM RVCT toolchain being displayed.  */
   11580 
   11581 bfd_boolean
   11582 arm_symbol_is_valid (asymbol * sym,
   11583 		     struct disassemble_info * info ATTRIBUTE_UNUSED)
   11584 {
   11585   const char * name;
   11586 
   11587   if (sym == NULL)
   11588     return FALSE;
   11589 
   11590   name = bfd_asymbol_name (sym);
   11591 
   11592   return (name && *name != '$' && strncmp (name, "__tagsym$$", 10));
   11593 }
   11594 
   11595 /* Parse the string of disassembler options.  */
   11596 
   11597 static void
   11598 parse_arm_disassembler_options (const char *options)
   11599 {
   11600   const char *opt;
   11601 
   11602   FOR_EACH_DISASSEMBLER_OPTION (opt, options)
   11603     {
   11604       if (CONST_STRNEQ (opt, "reg-names-"))
   11605 	{
   11606 	  unsigned int i;
   11607 	  for (i = 0; i < NUM_ARM_OPTIONS; i++)
   11608 	    if (disassembler_options_cmp (opt, regnames[i].name) == 0)
   11609 	      {
   11610 		regname_selected = i;
   11611 		break;
   11612 	      }
   11613 
   11614 	  if (i >= NUM_ARM_OPTIONS)
   11615 	    /* xgettext: c-format */
   11616 	    opcodes_error_handler (_("unrecognised register name set: %s"),
   11617 				   opt);
   11618 	}
   11619       else if (CONST_STRNEQ (opt, "force-thumb"))
   11620 	force_thumb = 1;
   11621       else if (CONST_STRNEQ (opt, "no-force-thumb"))
   11622 	force_thumb = 0;
   11623       else if (CONST_STRNEQ (opt, "coproc"))
   11624 	{
   11625 	  const char *procptr = opt + sizeof ("coproc") - 1;
   11626 	  char *endptr;
   11627 	  uint8_t coproc_number = strtol (procptr, &endptr, 10);
   11628 	  if (endptr != procptr + 1 || coproc_number > 7)
   11629 	    {
   11630 	      opcodes_error_handler (_("cde coprocessor not between 0-7: %s"),
   11631 				     opt);
   11632 	      continue;
   11633 	    }
   11634 	  if (*endptr != '=')
   11635 	    {
   11636 	      opcodes_error_handler (_("coproc must have an argument: %s"),
   11637 				     opt);
   11638 	      continue;
   11639 	    }
   11640 	  endptr += 1;
   11641 	  if (CONST_STRNEQ (endptr, "generic"))
   11642 	    cde_coprocs &= ~(1 << coproc_number);
   11643 	  else if (CONST_STRNEQ (endptr, "cde")
   11644 		   || CONST_STRNEQ (endptr, "CDE"))
   11645 	    cde_coprocs |= (1 << coproc_number);
   11646 	  else
   11647 	    {
   11648 	      opcodes_error_handler (
   11649 		  _("coprocN argument takes options \"generic\","
   11650 		    " \"cde\", or \"CDE\": %s"), opt);
   11651 	    }
   11652 	}
   11653       else
   11654 	/* xgettext: c-format */
   11655 	opcodes_error_handler (_("unrecognised disassembler option: %s"), opt);
   11656     }
   11657 
   11658   return;
   11659 }
   11660 
   11661 static bfd_boolean
   11662 mapping_symbol_for_insn (bfd_vma pc, struct disassemble_info *info,
   11663 			 enum map_type *map_symbol);
   11664 
   11665 /* Search back through the insn stream to determine if this instruction is
   11666    conditionally executed.  */
   11667 
   11668 static void
   11669 find_ifthen_state (bfd_vma pc,
   11670 		   struct disassemble_info *info,
   11671 		   bfd_boolean little)
   11672 {
   11673   unsigned char b[2];
   11674   unsigned int insn;
   11675   int status;
   11676   /* COUNT is twice the number of instructions seen.  It will be odd if we
   11677      just crossed an instruction boundary.  */
   11678   int count;
   11679   int it_count;
   11680   unsigned int seen_it;
   11681   bfd_vma addr;
   11682 
   11683   ifthen_address = pc;
   11684   ifthen_state = 0;
   11685 
   11686   addr = pc;
   11687   count = 1;
   11688   it_count = 0;
   11689   seen_it = 0;
   11690   /* Scan backwards looking for IT instructions, keeping track of where
   11691      instruction boundaries are.  We don't know if something is actually an
   11692      IT instruction until we find a definite instruction boundary.  */
   11693   for (;;)
   11694     {
   11695       if (addr == 0 || info->symbol_at_address_func (addr, info))
   11696 	{
   11697 	  /* A symbol must be on an instruction boundary, and will not
   11698 	     be within an IT block.  */
   11699 	  if (seen_it && (count & 1))
   11700 	    break;
   11701 
   11702 	  return;
   11703 	}
   11704       addr -= 2;
   11705       status = info->read_memory_func (addr, (bfd_byte *) b, 2, info);
   11706       if (status)
   11707 	return;
   11708 
   11709       if (little)
   11710 	insn = (b[0]) | (b[1] << 8);
   11711       else
   11712 	insn = (b[1]) | (b[0] << 8);
   11713       if (seen_it)
   11714 	{
   11715 	  if ((insn & 0xf800) < 0xe800)
   11716 	    {
   11717 	      /* Addr + 2 is an instruction boundary.  See if this matches
   11718 	         the expected boundary based on the position of the last
   11719 		 IT candidate.  */
   11720 	      if (count & 1)
   11721 		break;
   11722 	      seen_it = 0;
   11723 	    }
   11724 	}
   11725       if ((insn & 0xff00) == 0xbf00 && (insn & 0xf) != 0)
   11726 	{
   11727 	  enum map_type type = MAP_ARM;
   11728 	  bfd_boolean found = mapping_symbol_for_insn (addr, info, &type);
   11729 
   11730 	  if (!found || (found && type == MAP_THUMB))
   11731 	    {
   11732 	      /* This could be an IT instruction.  */
   11733 	      seen_it = insn;
   11734 	      it_count = count >> 1;
   11735 	    }
   11736 	}
   11737       if ((insn & 0xf800) >= 0xe800)
   11738 	count++;
   11739       else
   11740 	count = (count + 2) | 1;
   11741       /* IT blocks contain at most 4 instructions.  */
   11742       if (count >= 8 && !seen_it)
   11743 	return;
   11744     }
   11745   /* We found an IT instruction.  */
   11746   ifthen_state = (seen_it & 0xe0) | ((seen_it << it_count) & 0x1f);
   11747   if ((ifthen_state & 0xf) == 0)
   11748     ifthen_state = 0;
   11749 }
   11750 
   11751 /* Returns nonzero and sets *MAP_TYPE if the N'th symbol is a
   11752    mapping symbol.  */
   11753 
   11754 static int
   11755 is_mapping_symbol (struct disassemble_info *info, int n,
   11756 		   enum map_type *map_type)
   11757 {
   11758   const char *name;
   11759 
   11760   name = bfd_asymbol_name (info->symtab[n]);
   11761   if (name[0] == '$' && (name[1] == 'a' || name[1] == 't' || name[1] == 'd')
   11762       && (name[2] == 0 || name[2] == '.'))
   11763     {
   11764       *map_type = ((name[1] == 'a') ? MAP_ARM
   11765 		   : (name[1] == 't') ? MAP_THUMB
   11766 		   : MAP_DATA);
   11767       return TRUE;
   11768     }
   11769 
   11770   return FALSE;
   11771 }
   11772 
   11773 /* Try to infer the code type (ARM or Thumb) from a mapping symbol.
   11774    Returns nonzero if *MAP_TYPE was set.  */
   11775 
   11776 static int
   11777 get_map_sym_type (struct disassemble_info *info,
   11778 		  int n,
   11779 		  enum map_type *map_type)
   11780 {
   11781   /* If the symbol is in a different section, ignore it.  */
   11782   if (info->section != NULL && info->section != info->symtab[n]->section)
   11783     return FALSE;
   11784 
   11785   return is_mapping_symbol (info, n, map_type);
   11786 }
   11787 
   11788 /* Try to infer the code type (ARM or Thumb) from a non-mapping symbol.
   11789    Returns nonzero if *MAP_TYPE was set.  */
   11790 
   11791 static int
   11792 get_sym_code_type (struct disassemble_info *info,
   11793 		   int n,
   11794 		   enum map_type *map_type)
   11795 {
   11796   elf_symbol_type *es;
   11797   unsigned int type;
   11798 
   11799   /* If the symbol is in a different section, ignore it.  */
   11800   if (info->section != NULL && info->section != info->symtab[n]->section)
   11801     return FALSE;
   11802 
   11803   es = *(elf_symbol_type **)(info->symtab + n);
   11804   type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
   11805 
   11806   /* If the symbol has function type then use that.  */
   11807   if (type == STT_FUNC || type == STT_GNU_IFUNC)
   11808     {
   11809       if (ARM_GET_SYM_BRANCH_TYPE (es->internal_elf_sym.st_target_internal)
   11810 	  == ST_BRANCH_TO_THUMB)
   11811 	*map_type = MAP_THUMB;
   11812       else
   11813 	*map_type = MAP_ARM;
   11814       return TRUE;
   11815     }
   11816 
   11817   return FALSE;
   11818 }
   11819 
   11820 /* Search the mapping symbol state for instruction at pc.  This is only
   11821    applicable for elf target.
   11822 
   11823    There is an assumption Here, info->private_data contains the correct AND
   11824    up-to-date information about current scan process.  The information will be
   11825    used to speed this search process.
   11826 
   11827    Return TRUE if the mapping state can be determined, and map_symbol
   11828    will be updated accordingly.  Otherwise, return FALSE.  */
   11829 
   11830 static bfd_boolean
   11831 mapping_symbol_for_insn (bfd_vma pc, struct disassemble_info *info,
   11832 			 enum map_type *map_symbol)
   11833 {
   11834   bfd_vma addr, section_vma = 0;
   11835   int n, last_sym = -1;
   11836   bfd_boolean found = FALSE;
   11837   bfd_boolean can_use_search_opt_p = FALSE;
   11838 
   11839   /* Default to DATA.  A text section is required by the ABI to contain an
   11840      INSN mapping symbol at the start.  A data section has no such
   11841      requirement, hence if no mapping symbol is found the section must
   11842      contain only data.  This however isn't very useful if the user has
   11843      fully stripped the binaries.  If this is the case use the section
   11844      attributes to determine the default.  If we have no section default to
   11845      INSN as well, as we may be disassembling some raw bytes on a baremetal
   11846      HEX file or similar.  */
   11847   enum map_type type = MAP_DATA;
   11848   if ((info->section && info->section->flags & SEC_CODE) || !info->section)
   11849     type = MAP_ARM;
   11850   struct arm_private_data *private_data;
   11851 
   11852   if (info->private_data == NULL
   11853       || bfd_asymbol_flavour (*info->symtab) != bfd_target_elf_flavour)
   11854     return FALSE;
   11855 
   11856   private_data = info->private_data;
   11857 
   11858   /* First, look for mapping symbols.  */
   11859   if (info->symtab_size != 0)
   11860   {
   11861     if (pc <= private_data->last_mapping_addr)
   11862       private_data->last_mapping_sym = -1;
   11863 
   11864     /* Start scanning at the start of the function, or wherever
   11865        we finished last time.  */
   11866     n = info->symtab_pos + 1;
   11867 
   11868     /* If the last stop offset is different from the current one it means we
   11869        are disassembling a different glob of bytes.  As such the optimization
   11870        would not be safe and we should start over.  */
   11871     can_use_search_opt_p
   11872       = private_data->last_mapping_sym >= 0
   11873 	&& info->stop_offset == private_data->last_stop_offset;
   11874 
   11875     if (n >= private_data->last_mapping_sym && can_use_search_opt_p)
   11876       n = private_data->last_mapping_sym;
   11877 
   11878     /* Look down while we haven't passed the location being disassembled.
   11879        The reason for this is that there's no defined order between a symbol
   11880        and an mapping symbol that may be at the same address.  We may have to
   11881        look at least one position ahead.  */
   11882     for (; n < info->symtab_size; n++)
   11883       {
   11884 	addr = bfd_asymbol_value (info->symtab[n]);
   11885 	if (addr > pc)
   11886 	  break;
   11887 	if (get_map_sym_type (info, n, &type))
   11888 	  {
   11889 	    last_sym = n;
   11890 	    found = TRUE;
   11891 	  }
   11892       }
   11893 
   11894     if (!found)
   11895       {
   11896 	n = info->symtab_pos;
   11897 	if (n >= private_data->last_mapping_sym && can_use_search_opt_p)
   11898 	  n = private_data->last_mapping_sym;
   11899 
   11900 	/* No mapping symbol found at this address.  Look backwards
   11901 	   for a preceeding one, but don't go pass the section start
   11902 	   otherwise a data section with no mapping symbol can pick up
   11903 	   a text mapping symbol of a preceeding section.  The documentation
   11904 	   says section can be NULL, in which case we will seek up all the
   11905 	   way to the top.  */
   11906 	if (info->section)
   11907 	  section_vma = info->section->vma;
   11908 
   11909 	for (; n >= 0; n--)
   11910 	  {
   11911 	    addr = bfd_asymbol_value (info->symtab[n]);
   11912 	    if (addr < section_vma)
   11913 	      break;
   11914 
   11915 	    if (get_map_sym_type (info, n, &type))
   11916 	      {
   11917 		last_sym = n;
   11918 		found = TRUE;
   11919 		break;
   11920 	      }
   11921 	  }
   11922       }
   11923   }
   11924 
   11925   /* If no mapping symbol was found, try looking up without a mapping
   11926      symbol.  This is done by walking up from the current PC to the nearest
   11927      symbol.  We don't actually have to loop here since symtab_pos will
   11928      contain the nearest symbol already.  */
   11929   if (!found)
   11930     {
   11931       n = info->symtab_pos;
   11932       if (n >= 0 && get_sym_code_type (info, n, &type))
   11933 	{
   11934 	  last_sym = n;
   11935 	  found = TRUE;
   11936 	}
   11937     }
   11938 
   11939   private_data->last_mapping_sym = last_sym;
   11940   private_data->last_type = type;
   11941   private_data->last_stop_offset = info->stop_offset;
   11942 
   11943   *map_symbol = type;
   11944   return found;
   11945 }
   11946 
   11947 /* Given a bfd_mach_arm_XXX value, this function fills in the fields
   11948    of the supplied arm_feature_set structure with bitmasks indicating
   11949    the supported base architectures and coprocessor extensions.
   11950 
   11951    FIXME: This could more efficiently implemented as a constant array,
   11952    although it would also be less robust.  */
   11953 
   11954 static void
   11955 select_arm_features (unsigned long mach,
   11956 		     arm_feature_set * features)
   11957 {
   11958   arm_feature_set arch_fset;
   11959   const arm_feature_set fpu_any = FPU_ANY;
   11960 
   11961 #undef ARM_SET_FEATURES
   11962 #define ARM_SET_FEATURES(FSET) \
   11963   {							\
   11964     const arm_feature_set fset = FSET;			\
   11965     arch_fset = fset;					\
   11966   }
   11967 
   11968   /* When several architecture versions share the same bfd_mach_arm_XXX value
   11969      the most featureful is chosen.  */
   11970   switch (mach)
   11971     {
   11972     case bfd_mach_arm_2:	 ARM_SET_FEATURES (ARM_ARCH_V2); break;
   11973     case bfd_mach_arm_2a:	 ARM_SET_FEATURES (ARM_ARCH_V2S); break;
   11974     case bfd_mach_arm_3:	 ARM_SET_FEATURES (ARM_ARCH_V3); break;
   11975     case bfd_mach_arm_3M:	 ARM_SET_FEATURES (ARM_ARCH_V3M); break;
   11976     case bfd_mach_arm_4:	 ARM_SET_FEATURES (ARM_ARCH_V4); break;
   11977     case bfd_mach_arm_4T:	 ARM_SET_FEATURES (ARM_ARCH_V4T); break;
   11978     case bfd_mach_arm_5:	 ARM_SET_FEATURES (ARM_ARCH_V5); break;
   11979     case bfd_mach_arm_5T:	 ARM_SET_FEATURES (ARM_ARCH_V5T); break;
   11980     case bfd_mach_arm_5TE:	 ARM_SET_FEATURES (ARM_ARCH_V5TE); break;
   11981     case bfd_mach_arm_XScale:	 ARM_SET_FEATURES (ARM_ARCH_XSCALE); break;
   11982     case bfd_mach_arm_ep9312:
   11983 	ARM_SET_FEATURES (ARM_FEATURE_LOW (ARM_AEXT_V4T,
   11984 					   ARM_CEXT_MAVERICK | FPU_MAVERICK));
   11985        break;
   11986     case bfd_mach_arm_iWMMXt:	 ARM_SET_FEATURES (ARM_ARCH_IWMMXT); break;
   11987     case bfd_mach_arm_iWMMXt2:	 ARM_SET_FEATURES (ARM_ARCH_IWMMXT2); break;
   11988     case bfd_mach_arm_5TEJ:	 ARM_SET_FEATURES (ARM_ARCH_V5TEJ); break;
   11989     case bfd_mach_arm_6:	 ARM_SET_FEATURES (ARM_ARCH_V6); break;
   11990     case bfd_mach_arm_6KZ:	 ARM_SET_FEATURES (ARM_ARCH_V6KZ); break;
   11991     case bfd_mach_arm_6T2:	 ARM_SET_FEATURES (ARM_ARCH_V6KZT2); break;
   11992     case bfd_mach_arm_6K:	 ARM_SET_FEATURES (ARM_ARCH_V6K); break;
   11993     case bfd_mach_arm_7:	 ARM_SET_FEATURES (ARM_ARCH_V7VE); break;
   11994     case bfd_mach_arm_6M:	 ARM_SET_FEATURES (ARM_ARCH_V6M); break;
   11995     case bfd_mach_arm_6SM:	 ARM_SET_FEATURES (ARM_ARCH_V6SM); break;
   11996     case bfd_mach_arm_7EM:	 ARM_SET_FEATURES (ARM_ARCH_V7EM); break;
   11997     case bfd_mach_arm_8:
   11998 	{
   11999 	  /* Add bits for extensions that Armv8.6-A recognizes.  */
   12000 	  arm_feature_set armv8_6_ext_fset
   12001 	    = ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST);
   12002 	  ARM_SET_FEATURES (ARM_ARCH_V8_6A);
   12003 	  ARM_MERGE_FEATURE_SETS (arch_fset, arch_fset, armv8_6_ext_fset);
   12004 	  break;
   12005 	}
   12006     case bfd_mach_arm_8R:	 ARM_SET_FEATURES (ARM_ARCH_V8R); break;
   12007     case bfd_mach_arm_8M_BASE:	 ARM_SET_FEATURES (ARM_ARCH_V8M_BASE); break;
   12008     case bfd_mach_arm_8M_MAIN:	 ARM_SET_FEATURES (ARM_ARCH_V8M_MAIN); break;
   12009     case bfd_mach_arm_8_1M_MAIN:
   12010       ARM_SET_FEATURES (ARM_ARCH_V8_1M_MAIN);
   12011       arm_feature_set mve_all
   12012 	= ARM_FEATURE_CORE_HIGH (ARM_EXT2_MVE | ARM_EXT2_MVE_FP);
   12013       ARM_MERGE_FEATURE_SETS (arch_fset, arch_fset, mve_all);
   12014       force_thumb = 1;
   12015       break;
   12016       /* If the machine type is unknown allow all architecture types and all
   12017 	 extensions, with the exception of MVE as that clashes with NEON.  */
   12018     case bfd_mach_arm_unknown:
   12019       ARM_SET_FEATURES (ARM_FEATURE (-1,
   12020 				     -1 & ~(ARM_EXT2_MVE | ARM_EXT2_MVE_FP),
   12021 				     -1));
   12022       break;
   12023     default:
   12024       abort ();
   12025     }
   12026 #undef ARM_SET_FEATURES
   12027 
   12028   /* None of the feature bits related to -mfpu have an impact on Tag_CPU_arch
   12029      and thus on bfd_mach_arm_XXX value.  Therefore for a given
   12030      bfd_mach_arm_XXX value all coprocessor feature bits should be allowed.  */
   12031   ARM_MERGE_FEATURE_SETS (*features, arch_fset, fpu_any);
   12032 }
   12033 
   12034 
   12035 /* NOTE: There are no checks in these routines that
   12036    the relevant number of data bytes exist.  */
   12037 
   12038 static int
   12039 print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
   12040 {
   12041   unsigned char b[4];
   12042   unsigned long given;
   12043   int           status;
   12044   int           is_thumb = FALSE;
   12045   int           is_data = FALSE;
   12046   int           little_code;
   12047   unsigned int	size = 4;
   12048   void	 	(*printer) (bfd_vma, struct disassemble_info *, long);
   12049   bfd_boolean   found = FALSE;
   12050   struct arm_private_data *private_data;
   12051 
   12052   /* Clear instruction information field.  */
   12053   info->insn_info_valid = 0;
   12054   info->branch_delay_insns = 0;
   12055   info->data_size = 0;
   12056   info->insn_type = dis_noninsn;
   12057   info->target = 0;
   12058   info->target2 = 0;
   12059 
   12060   if (info->disassembler_options)
   12061     {
   12062       parse_arm_disassembler_options (info->disassembler_options);
   12063 
   12064       /* To avoid repeated parsing of these options, we remove them here.  */
   12065       info->disassembler_options = NULL;
   12066     }
   12067 
   12068   /* PR 10288: Control which instructions will be disassembled.  */
   12069   if (info->private_data == NULL)
   12070     {
   12071       static struct arm_private_data private;
   12072 
   12073       if ((info->flags & USER_SPECIFIED_MACHINE_TYPE) == 0)
   12074 	/* If the user did not use the -m command line switch then default to
   12075 	   disassembling all types of ARM instruction.
   12076 
   12077 	   The info->mach value has to be ignored as this will be based on
   12078 	   the default archictecture for the target and/or hints in the notes
   12079 	   section, but it will never be greater than the current largest arm
   12080 	   machine value (iWMMXt2), which is only equivalent to the V5TE
   12081 	   architecture.  ARM architectures have advanced beyond the machine
   12082 	   value encoding, and these newer architectures would be ignored if
   12083 	   the machine value was used.
   12084 
   12085 	   Ie the -m switch is used to restrict which instructions will be
   12086 	   disassembled.  If it is necessary to use the -m switch to tell
   12087 	   objdump that an ARM binary is being disassembled, eg because the
   12088 	   input is a raw binary file, but it is also desired to disassemble
   12089 	   all ARM instructions then use "-marm".  This will select the
   12090 	   "unknown" arm architecture which is compatible with any ARM
   12091 	   instruction.  */
   12092 	  info->mach = bfd_mach_arm_unknown;
   12093 
   12094       /* Compute the architecture bitmask from the machine number.
   12095 	 Note: This assumes that the machine number will not change
   12096 	 during disassembly....  */
   12097       select_arm_features (info->mach, & private.features);
   12098 
   12099       private.last_mapping_sym = -1;
   12100       private.last_mapping_addr = 0;
   12101       private.last_stop_offset = 0;
   12102 
   12103       info->private_data = & private;
   12104     }
   12105 
   12106   private_data = info->private_data;
   12107 
   12108   /* Decide if our code is going to be little-endian, despite what the
   12109      function argument might say.  */
   12110   little_code = ((info->endian_code == BFD_ENDIAN_LITTLE) || little);
   12111 
   12112   /* For ELF, consult the symbol table to determine what kind of code
   12113      or data we have.  */
   12114   if (info->symtab_size != 0
   12115       && bfd_asymbol_flavour (*info->symtab) == bfd_target_elf_flavour)
   12116     {
   12117       bfd_vma addr;
   12118       int n;
   12119       int last_sym = -1;
   12120       enum map_type type = MAP_ARM;
   12121 
   12122       found = mapping_symbol_for_insn (pc, info, &type);
   12123       last_sym = private_data->last_mapping_sym;
   12124 
   12125       is_thumb = (private_data->last_type == MAP_THUMB);
   12126       is_data = (private_data->last_type == MAP_DATA);
   12127 
   12128       /* Look a little bit ahead to see if we should print out
   12129 	 two or four bytes of data.  If there's a symbol,
   12130 	 mapping or otherwise, after two bytes then don't
   12131 	 print more.  */
   12132       if (is_data)
   12133 	{
   12134 	  size = 4 - (pc & 3);
   12135 	  for (n = last_sym + 1; n < info->symtab_size; n++)
   12136 	    {
   12137 	      addr = bfd_asymbol_value (info->symtab[n]);
   12138 	      if (addr > pc
   12139 		  && (info->section == NULL
   12140 		      || info->section == info->symtab[n]->section))
   12141 		{
   12142 		  if (addr - pc < size)
   12143 		    size = addr - pc;
   12144 		  break;
   12145 		}
   12146 	    }
   12147 	  /* If the next symbol is after three bytes, we need to
   12148 	     print only part of the data, so that we can use either
   12149 	     .byte or .short.  */
   12150 	  if (size == 3)
   12151 	    size = (pc & 1) ? 1 : 2;
   12152 	}
   12153     }
   12154 
   12155   if (info->symbols != NULL)
   12156     {
   12157       if (bfd_asymbol_flavour (*info->symbols) == bfd_target_coff_flavour)
   12158 	{
   12159 	  coff_symbol_type * cs;
   12160 
   12161 	  cs = coffsymbol (*info->symbols);
   12162 	  is_thumb = (   cs->native->u.syment.n_sclass == C_THUMBEXT
   12163 		      || cs->native->u.syment.n_sclass == C_THUMBSTAT
   12164 		      || cs->native->u.syment.n_sclass == C_THUMBLABEL
   12165 		      || cs->native->u.syment.n_sclass == C_THUMBEXTFUNC
   12166 		      || cs->native->u.syment.n_sclass == C_THUMBSTATFUNC);
   12167 	}
   12168       else if (bfd_asymbol_flavour (*info->symbols) == bfd_target_elf_flavour
   12169 	       && !found)
   12170 	{
   12171 	  /* If no mapping symbol has been found then fall back to the type
   12172 	     of the function symbol.  */
   12173 	  elf_symbol_type *  es;
   12174 	  unsigned int       type;
   12175 
   12176 	  es = *(elf_symbol_type **)(info->symbols);
   12177 	  type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
   12178 
   12179 	  is_thumb =
   12180 	    ((ARM_GET_SYM_BRANCH_TYPE (es->internal_elf_sym.st_target_internal)
   12181 	      == ST_BRANCH_TO_THUMB) || type == STT_ARM_16BIT);
   12182 	}
   12183       else if (bfd_asymbol_flavour (*info->symbols)
   12184 	       == bfd_target_mach_o_flavour)
   12185 	{
   12186 	  bfd_mach_o_asymbol *asym = (bfd_mach_o_asymbol *)*info->symbols;
   12187 
   12188 	  is_thumb = (asym->n_desc & BFD_MACH_O_N_ARM_THUMB_DEF);
   12189 	}
   12190     }
   12191 
   12192   if (force_thumb)
   12193     is_thumb = TRUE;
   12194 
   12195   if (is_data)
   12196     info->display_endian = little ? BFD_ENDIAN_LITTLE : BFD_ENDIAN_BIG;
   12197   else
   12198     info->display_endian = little_code ? BFD_ENDIAN_LITTLE : BFD_ENDIAN_BIG;
   12199 
   12200   info->bytes_per_line = 4;
   12201 
   12202   /* PR 10263: Disassemble data if requested to do so by the user.  */
   12203   if (is_data && ((info->flags & DISASSEMBLE_DATA) == 0))
   12204     {
   12205       int i;
   12206 
   12207       /* Size was already set above.  */
   12208       info->bytes_per_chunk = size;
   12209       printer = print_insn_data;
   12210 
   12211       status = info->read_memory_func (pc, (bfd_byte *) b, size, info);
   12212       given = 0;
   12213       if (little)
   12214 	for (i = size - 1; i >= 0; i--)
   12215 	  given = b[i] | (given << 8);
   12216       else
   12217 	for (i = 0; i < (int) size; i++)
   12218 	  given = b[i] | (given << 8);
   12219     }
   12220   else if (!is_thumb)
   12221     {
   12222       /* In ARM mode endianness is a straightforward issue: the instruction
   12223 	 is four bytes long and is either ordered 0123 or 3210.  */
   12224       printer = print_insn_arm;
   12225       info->bytes_per_chunk = 4;
   12226       size = 4;
   12227 
   12228       status = info->read_memory_func (pc, (bfd_byte *) b, 4, info);
   12229       if (little_code)
   12230 	given = (b[0]) | (b[1] << 8) | (b[2] << 16) | ((unsigned) b[3] << 24);
   12231       else
   12232 	given = (b[3]) | (b[2] << 8) | (b[1] << 16) | ((unsigned) b[0] << 24);
   12233     }
   12234   else
   12235     {
   12236       /* In Thumb mode we have the additional wrinkle of two
   12237 	 instruction lengths.  Fortunately, the bits that determine
   12238 	 the length of the current instruction are always to be found
   12239 	 in the first two bytes.  */
   12240       printer = print_insn_thumb16;
   12241       info->bytes_per_chunk = 2;
   12242       size = 2;
   12243 
   12244       status = info->read_memory_func (pc, (bfd_byte *) b, 2, info);
   12245       if (little_code)
   12246 	given = (b[0]) | (b[1] << 8);
   12247       else
   12248 	given = (b[1]) | (b[0] << 8);
   12249 
   12250       if (!status)
   12251 	{
   12252 	  /* These bit patterns signal a four-byte Thumb
   12253 	     instruction.  */
   12254 	  if ((given & 0xF800) == 0xF800
   12255 	      || (given & 0xF800) == 0xF000
   12256 	      || (given & 0xF800) == 0xE800)
   12257 	    {
   12258 	      status = info->read_memory_func (pc + 2, (bfd_byte *) b, 2, info);
   12259 	      if (little_code)
   12260 		given = (b[0]) | (b[1] << 8) | (given << 16);
   12261 	      else
   12262 		given = (b[1]) | (b[0] << 8) | (given << 16);
   12263 
   12264 	      printer = print_insn_thumb32;
   12265 	      size = 4;
   12266 	    }
   12267 	}
   12268 
   12269       if (ifthen_address != pc)
   12270 	find_ifthen_state (pc, info, little_code);
   12271 
   12272       if (ifthen_state)
   12273 	{
   12274 	  if ((ifthen_state & 0xf) == 0x8)
   12275 	    ifthen_next_state = 0;
   12276 	  else
   12277 	    ifthen_next_state = (ifthen_state & 0xe0)
   12278 				| ((ifthen_state & 0xf) << 1);
   12279 	}
   12280     }
   12281 
   12282   if (status)
   12283     {
   12284       info->memory_error_func (status, pc, info);
   12285       return -1;
   12286     }
   12287   if (info->flags & INSN_HAS_RELOC)
   12288     /* If the instruction has a reloc associated with it, then
   12289        the offset field in the instruction will actually be the
   12290        addend for the reloc.  (We are using REL type relocs).
   12291        In such cases, we can ignore the pc when computing
   12292        addresses, since the addend is not currently pc-relative.  */
   12293     pc = 0;
   12294 
   12295   printer (pc, info, given);
   12296 
   12297   if (is_thumb)
   12298     {
   12299       ifthen_state = ifthen_next_state;
   12300       ifthen_address += size;
   12301     }
   12302   return size;
   12303 }
   12304 
   12305 int
   12306 print_insn_big_arm (bfd_vma pc, struct disassemble_info *info)
   12307 {
   12308   /* Detect BE8-ness and record it in the disassembler info.  */
   12309   if (info->flavour == bfd_target_elf_flavour
   12310       && info->section != NULL
   12311       && (elf_elfheader (info->section->owner)->e_flags & EF_ARM_BE8))
   12312     info->endian_code = BFD_ENDIAN_LITTLE;
   12313 
   12314   return print_insn (pc, info, FALSE);
   12315 }
   12316 
   12317 int
   12318 print_insn_little_arm (bfd_vma pc, struct disassemble_info *info)
   12319 {
   12320   return print_insn (pc, info, TRUE);
   12321 }
   12322 
   12323 const disasm_options_and_args_t *
   12324 disassembler_options_arm (void)
   12325 {
   12326   static disasm_options_and_args_t *opts_and_args;
   12327 
   12328   if (opts_and_args == NULL)
   12329     {
   12330       disasm_options_t *opts;
   12331       unsigned int i;
   12332 
   12333       opts_and_args = XNEW (disasm_options_and_args_t);
   12334       opts_and_args->args = NULL;
   12335 
   12336       opts = &opts_and_args->options;
   12337       opts->name = XNEWVEC (const char *, NUM_ARM_OPTIONS + 1);
   12338       opts->description = XNEWVEC (const char *, NUM_ARM_OPTIONS + 1);
   12339       opts->arg = NULL;
   12340       for (i = 0; i < NUM_ARM_OPTIONS; i++)
   12341 	{
   12342 	  opts->name[i] = regnames[i].name;
   12343 	  if (regnames[i].description != NULL)
   12344 	    opts->description[i] = _(regnames[i].description);
   12345 	  else
   12346 	    opts->description[i] = NULL;
   12347 	}
   12348       /* The array we return must be NULL terminated.  */
   12349       opts->name[i] = NULL;
   12350       opts->description[i] = NULL;
   12351     }
   12352 
   12353   return opts_and_args;
   12354 }
   12355 
   12356 void
   12357 print_arm_disassembler_options (FILE *stream)
   12358 {
   12359   unsigned int i, max_len = 0;
   12360   fprintf (stream, _("\n\
   12361 The following ARM specific disassembler options are supported for use with\n\
   12362 the -M switch:\n"));
   12363 
   12364   for (i = 0; i < NUM_ARM_OPTIONS; i++)
   12365     {
   12366       unsigned int len = strlen (regnames[i].name);
   12367       if (max_len < len)
   12368 	max_len = len;
   12369     }
   12370 
   12371   for (i = 0, max_len++; i < NUM_ARM_OPTIONS; i++)
   12372     fprintf (stream, "  %s%*c %s\n",
   12373 	     regnames[i].name,
   12374 	     (int)(max_len - strlen (regnames[i].name)), ' ',
   12375 	     _(regnames[i].description));
   12376 }
   12377