18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Instruction printing code for the ARM
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   2007, Free Software Foundation, Inc.
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   Modification by James G. Smith (jsmith@cygnus.co.uk)
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   This file is part of libopcodes.
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   This program is free software; you can redistribute it and/or modify it under
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   the terms of the GNU General Public License as published by the Free
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   Software Foundation; either version 2 of the License, or (at your option)
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   any later version.
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   This program is distributed in the hope that it will be useful, but WITHOUT
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   more details.
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   You should have received a copy of the GNU General Public License
20dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Start of qemu specific additions.  Mostly this is stub definitions
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   for things we don't care about.  */
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "dis-asm.h"
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ATTRIBUTE_UNUSED __attribute__((unused))
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ISSPACE(x) ((x) == ' ' || (x) == '\t' || (x) == '\n')
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V1	 0
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V2	 0
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V2S	 0
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V3	 0
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V3M	 0
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V4	 0
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V4T	 0
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V5	 0
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V5T	 0
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V5ExP	 0
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V5E	 0
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V5J	 0
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V6       0
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V6K      0
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V6Z      0
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V6T2	 0
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_V7	 0
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_EXT_DIV	 0
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Co-processor space extensions.  */
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_CEXT_XSCALE   0
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_CEXT_MAVERICK 0
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARM_CEXT_IWMMXT   0
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FPU_FPA_EXT_V1	 0
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FPU_FPA_EXT_V2	 0
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FPU_VFP_EXT_NONE 0
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FPU_VFP_EXT_V1xD 0
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FPU_VFP_EXT_V1	 0
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FPU_VFP_EXT_V2	 0
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FPU_MAVERICK	 0
608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FPU_VFP_EXT_V3	 0
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FPU_NEON_EXT_V1	 0
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Assume host uses ieee float.  */
6475fb4a08de4abce11ee7cf81bcddd5193eb0438dDavid Turnerstatic void floatformat_to_double (unsigned char *data, double *dest)
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    union {
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        uint32_t i;
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        float f;
698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } u;
708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    u.i = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *dest = u.f;
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* End of qemu specific additions.  */
758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* FIXME: Belongs in global header.  */
778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef strneq
788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define strneq(a,b,n)	(strncmp ((a), (b), (n)) == 0)
798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef NUM_ELEM
828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define NUM_ELEM(a)     (sizeof (a) / sizeof (a)[0])
838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct opcode32
868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned long arch;		/* Architecture defining this insn.  */
888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned long value, mask;	/* Recognise insn if (op&mask)==value.  */
898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const char *assembler;	/* How to disassemble this insn.  */
908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct opcode16
938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned long arch;		/* Architecture defining this insn.  */
958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned short value, mask;	/* Recognise insn if (op&mask)==value.  */
968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const char *assembler;	/* How to disassemble this insn.  */
978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* print_insn_coprocessor recognizes the following format control codes:
1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %%			%
1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %c			print condition code (always bits 28-31 in ARM mode)
1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %q			print shifter argument
1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %u			print condition code (unconditional in ARM mode)
1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %A			print address for ldc/stc/ldf/stf instruction
1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %B			print vstm/vldm register list
1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %C			print vstr/vldr address operand
1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %I                   print cirrus signed shift immediate: bits 0..3|4..6
1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %F			print the COUNT field of a LFM/SFM instruction.
1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %P			print floating point precision in arithmetic insn
1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %Q			print floating point precision in ldf/stf insn
1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %R			print floating point rounding mode
1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>r		print as an ARM register
1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>d		print the bitfield in decimal
1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>k		print immediate for VFPv3 conversion instruction
1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>x		print the bitfield in hex
1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>X		print the bitfield as 1 hex digit without leading "0x"
1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>f		print a floating point constant if >7 else a
1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			floating point register
1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>w         print as an iWMMXt width field - [bhwd]ss/us
1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>g         print as an iWMMXt 64-bit register
1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>G         print as an iWMMXt general purpose or control register
1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>D		print as a NEON D register
1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>Q		print as a NEON Q register
1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %y<code>		print a single precision VFP reg.
1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  Codes: 0=>Sm, 1=>Sd, 2=>Sn, 3=>multi-list, 4=>Sm pair
1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %z<code>		print a double precision VFP reg
1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  Codes: 0=>Dm, 1=>Dd, 2=>Dn, 3=>multi-list
1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>'c	print specified char iff bitfield is all ones
1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>`c	print specified char iff bitfield is all zeroes
1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>?ab...    select from array of values in big endian order
1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %L			print as an iWMMXt N/M width field.
1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %Z			print the Immediate of a WSHUFH instruction.
1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %l			like 'A' except use byte offsets for 'B' & 'H'
1408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			versions.
1418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %i			print 5-bit immediate in bits 8,3..0
1428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			(print "32" when 0)
1438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %r			print register offset address for wldt/wstr instruction
1448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project*/
1458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Common coprocessor opcodes shared between Arm and Thumb-2.  */
1478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const struct opcode32 coprocessor_opcodes[] =
1498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
1508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* XScale instructions.  */
1518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e200010, 0x0fff0ff0, "mia%c\tacc0, %0-3r, %12-15r"},
1528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e280010, 0x0fff0ff0, "miaph%c\tacc0, %0-3r, %12-15r"},
1538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e2c0010, 0x0ffc0ff0, "mia%17'T%17`B%16'T%16`B%c\tacc0, %0-3r, %12-15r"},
1548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0c400000, 0x0ff00fff, "mar%c\tacc0, %12-15r, %16-19r"},
1558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0c500000, 0x0ff00fff, "mra%c\t%12-15r, %16-19r, acc0"},
1568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Intel Wireless MMX technology instructions.  */
1588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define FIRST_IWMMXT_INSN 0x0e130130
1598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IWMMXT_INSN_COUNT 73
1608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_IWMMXT, 0x0e130130, 0x0f3f0fff, "tandc%22-23w%c\t%12-15r"},
1618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e400010, 0x0ff00f3f, "tbcst%6-7w%c\t%16-19g, %12-15r"},
1628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e130170, 0x0f3f0ff8, "textrc%22-23w%c\t%12-15r, #%0-2d"},
1638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e100070, 0x0f300ff0, "textrm%3?su%22-23w%c\t%12-15r, %16-19g, #%0-2d"},
1648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e600010, 0x0ff00f38, "tinsr%6-7w%c\t%16-19g, %12-15r, #%0-2d"},
1658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000110, 0x0ff00fff, "tmcr%c\t%16-19G, %12-15r"},
1668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0c400000, 0x0ff00ff0, "tmcrr%c\t%0-3g, %12-15r, %16-19r"},
1678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e2c0010, 0x0ffc0e10, "tmia%17?tb%16?tb%c\t%5-8g, %0-3r, %12-15r"},
1688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e200010, 0x0fff0e10, "tmia%c\t%5-8g, %0-3r, %12-15r"},
1698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e280010, 0x0fff0e10, "tmiaph%c\t%5-8g, %0-3r, %12-15r"},
1708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e100030, 0x0f300fff, "tmovmsk%22-23w%c\t%12-15r, %16-19g"},
1718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e100110, 0x0ff00ff0, "tmrc%c\t%12-15r, %16-19G"},
1728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0c500000, 0x0ff00ff0, "tmrrc%c\t%12-15r, %16-19r, %0-3g"},
1738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e130150, 0x0f3f0fff, "torc%22-23w%c\t%12-15r"},
1748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e130190, 0x0f3f0fff, "torvsc%22-23w%c\t%12-15r"},
1758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e2001c0, 0x0f300fff, "wabs%22-23w%c\t%12-15g, %16-19g"},
1768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e0001c0, 0x0f300fff, "wacc%22-23w%c\t%12-15g, %16-19g"},
1778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000180, 0x0f000ff0, "wadd%20-23w%c\t%12-15g, %16-19g, %0-3g"},
1788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e2001a0, 0x0f300ff0, "waddbhus%22?ml%c\t%12-15g, %16-19g, %0-3g"},
1798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0ea001a0, 0x0ff00ff0, "waddsubhx%c\t%12-15g, %16-19g, %0-3g"},
1808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000020, 0x0f800ff0, "waligni%c\t%12-15g, %16-19g, %0-3g, #%20-22d"},
1818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e800020, 0x0fc00ff0, "walignr%20-21d%c\t%12-15g, %16-19g, %0-3g"},
1828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e200000, 0x0fe00ff0, "wand%20'n%c\t%12-15g, %16-19g, %0-3g"},
1838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e800000, 0x0fa00ff0, "wavg2%22?hb%20'r%c\t%12-15g, %16-19g, %0-3g"},
1848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e400000, 0x0fe00ff0, "wavg4%20'r%c\t%12-15g, %16-19g, %0-3g"},
1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000060, 0x0f300ff0, "wcmpeq%22-23w%c\t%12-15g, %16-19g, %0-3g"},
1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e100060, 0x0f100ff0, "wcmpgt%21?su%22-23w%c\t%12-15g, %16-19g, %0-3g"},
1878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0xfc500100, 0xfe500f00, "wldrd\t%12-15g, %r"},
1888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0xfc100100, 0xfe500f00, "wldrw\t%12-15G, %A"},
1898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0c100000, 0x0e100e00, "wldr%L%c\t%12-15g, %l"},
1908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e400100, 0x0fc00ff0, "wmac%21?su%20'z%c\t%12-15g, %16-19g, %0-3g"},
1918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e800100, 0x0fc00ff0, "wmadd%21?su%20'x%c\t%12-15g, %16-19g, %0-3g"},
1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0ec00100, 0x0fd00ff0, "wmadd%21?sun%c\t%12-15g, %16-19g, %0-3g"},
1938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000160, 0x0f100ff0, "wmax%21?su%22-23w%c\t%12-15g, %16-19g, %0-3g"},
1948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000080, 0x0f100fe0, "wmerge%c\t%12-15g, %16-19g, %0-3g, #%21-23d"},
1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e0000a0, 0x0f800ff0, "wmia%21?tb%20?tb%22'n%c\t%12-15g, %16-19g, %0-3g"},
1968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e800120, 0x0f800ff0, "wmiaw%21?tb%20?tb%22'n%c\t%12-15g, %16-19g, %0-3g"},
1978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e100160, 0x0f100ff0, "wmin%21?su%22-23w%c\t%12-15g, %16-19g, %0-3g"},
1988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000100, 0x0fc00ff0, "wmul%21?su%20?ml%23'r%c\t%12-15g, %16-19g, %0-3g"},
1998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0ed00100, 0x0fd00ff0, "wmul%21?sumr%c\t%12-15g, %16-19g, %0-3g"},
2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0ee000c0, 0x0fe00ff0, "wmulwsm%20`r%c\t%12-15g, %16-19g, %0-3g"},
2018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0ec000c0, 0x0fe00ff0, "wmulwum%20`r%c\t%12-15g, %16-19g, %0-3g"},
2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0eb000c0, 0x0ff00ff0, "wmulwl%c\t%12-15g, %16-19g, %0-3g"},
2038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e8000a0, 0x0f800ff0, "wqmia%21?tb%20?tb%22'n%c\t%12-15g, %16-19g, %0-3g"},
2048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e100080, 0x0fd00ff0, "wqmulm%21'r%c\t%12-15g, %16-19g, %0-3g"},
2058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0ec000e0, 0x0fd00ff0, "wqmulwm%21'r%c\t%12-15g, %16-19g, %0-3g"},
2068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000000, 0x0ff00ff0, "wor%c\t%12-15g, %16-19g, %0-3g"},
2078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000080, 0x0f000ff0, "wpack%20-23w%c\t%12-15g, %16-19g, %0-3g"},
2088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0xfe300040, 0xff300ef0, "wror%22-23w\t%12-15g, %16-19g, #%i"},
2098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e300040, 0x0f300ff0, "wror%22-23w%c\t%12-15g, %16-19g, %0-3g"},
2108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e300140, 0x0f300ff0, "wror%22-23wg%c\t%12-15g, %16-19g, %0-3G"},
2118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000120, 0x0fa00ff0, "wsad%22?hb%20'z%c\t%12-15g, %16-19g, %0-3g"},
2128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e0001e0, 0x0f000ff0, "wshufh%c\t%12-15g, %16-19g, #%Z"},
2138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0xfe100040, 0xff300ef0, "wsll%22-23w\t%12-15g, %16-19g, #%i"},
2148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e100040, 0x0f300ff0, "wsll%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
2158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e100148, 0x0f300ffc, "wsll%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
2168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0xfe000040, 0xff300ef0, "wsra%22-23w\t%12-15g, %16-19g, #%i"},
2178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000040, 0x0f300ff0, "wsra%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
2188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e000148, 0x0f300ffc, "wsra%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
2198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0xfe200040, 0xff300ef0, "wsrl%22-23w\t%12-15g, %16-19g, #%i"},
2208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e200040, 0x0f300ff0, "wsrl%22-23w%8'g%c\t%12-15g, %16-19g, %0-3g"},
2218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e200148, 0x0f300ffc, "wsrl%22-23w%8'g%c\t%12-15g, %16-19g, %0-3G"},
2228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0xfc400100, 0xfe500f00, "wstrd\t%12-15g, %r"},
2238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0xfc000100, 0xfe500f00, "wstrw\t%12-15G, %A"},
2248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0c000000, 0x0e100e00, "wstr%L%c\t%12-15g, %l"},
2258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e0001a0, 0x0f000ff0, "wsub%20-23w%c\t%12-15g, %16-19g, %0-3g"},
2268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0ed001c0, 0x0ff00ff0, "wsubaddhx%c\t%12-15g, %16-19g, %0-3g"},
2278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e1001c0, 0x0f300ff0, "wabsdiff%22-23w%c\t%12-15g, %16-19g, %0-3g"},
2288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e0000c0, 0x0fd00fff, "wunpckeh%21?sub%c\t%12-15g, %16-19g"},
2298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e4000c0, 0x0fd00fff, "wunpckeh%21?suh%c\t%12-15g, %16-19g"},
2308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e8000c0, 0x0fd00fff, "wunpckeh%21?suw%c\t%12-15g, %16-19g"},
2318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e0000e0, 0x0f100fff, "wunpckel%21?su%22-23w%c\t%12-15g, %16-19g"},
2328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e1000c0, 0x0f300ff0, "wunpckih%22-23w%c\t%12-15g, %16-19g, %0-3g"},
2338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e1000e0, 0x0f300ff0, "wunpckil%22-23w%c\t%12-15g, %16-19g, %0-3g"},
2348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_XSCALE, 0x0e100000, 0x0ff00ff0, "wxor%c\t%12-15g, %16-19g, %0-3g"},
2358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Floating point coprocessor (FPA) instructions */
2378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e000100, 0x0ff08f10, "adf%c%P%R\t%12-14f, %16-18f, %0-3f"},
2388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e100100, 0x0ff08f10, "muf%c%P%R\t%12-14f, %16-18f, %0-3f"},
2398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e200100, 0x0ff08f10, "suf%c%P%R\t%12-14f, %16-18f, %0-3f"},
2408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e300100, 0x0ff08f10, "rsf%c%P%R\t%12-14f, %16-18f, %0-3f"},
2418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e400100, 0x0ff08f10, "dvf%c%P%R\t%12-14f, %16-18f, %0-3f"},
2428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e500100, 0x0ff08f10, "rdf%c%P%R\t%12-14f, %16-18f, %0-3f"},
2438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e600100, 0x0ff08f10, "pow%c%P%R\t%12-14f, %16-18f, %0-3f"},
2448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e700100, 0x0ff08f10, "rpw%c%P%R\t%12-14f, %16-18f, %0-3f"},
2458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e800100, 0x0ff08f10, "rmf%c%P%R\t%12-14f, %16-18f, %0-3f"},
2468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e900100, 0x0ff08f10, "fml%c%P%R\t%12-14f, %16-18f, %0-3f"},
2478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0ea00100, 0x0ff08f10, "fdv%c%P%R\t%12-14f, %16-18f, %0-3f"},
2488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0eb00100, 0x0ff08f10, "frd%c%P%R\t%12-14f, %16-18f, %0-3f"},
2498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0ec00100, 0x0ff08f10, "pol%c%P%R\t%12-14f, %16-18f, %0-3f"},
2508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e008100, 0x0ff08f10, "mvf%c%P%R\t%12-14f, %0-3f"},
2518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e108100, 0x0ff08f10, "mnf%c%P%R\t%12-14f, %0-3f"},
2528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e208100, 0x0ff08f10, "abs%c%P%R\t%12-14f, %0-3f"},
2538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e308100, 0x0ff08f10, "rnd%c%P%R\t%12-14f, %0-3f"},
2548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e408100, 0x0ff08f10, "sqt%c%P%R\t%12-14f, %0-3f"},
2558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e508100, 0x0ff08f10, "log%c%P%R\t%12-14f, %0-3f"},
2568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e608100, 0x0ff08f10, "lgn%c%P%R\t%12-14f, %0-3f"},
2578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e708100, 0x0ff08f10, "exp%c%P%R\t%12-14f, %0-3f"},
2588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e808100, 0x0ff08f10, "sin%c%P%R\t%12-14f, %0-3f"},
2598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e908100, 0x0ff08f10, "cos%c%P%R\t%12-14f, %0-3f"},
2608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0ea08100, 0x0ff08f10, "tan%c%P%R\t%12-14f, %0-3f"},
2618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0eb08100, 0x0ff08f10, "asn%c%P%R\t%12-14f, %0-3f"},
2628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0ec08100, 0x0ff08f10, "acs%c%P%R\t%12-14f, %0-3f"},
2638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0ed08100, 0x0ff08f10, "atn%c%P%R\t%12-14f, %0-3f"},
2648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0ee08100, 0x0ff08f10, "urd%c%P%R\t%12-14f, %0-3f"},
2658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0ef08100, 0x0ff08f10, "nrm%c%P%R\t%12-14f, %0-3f"},
2668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e000110, 0x0ff00f1f, "flt%c%P%R\t%16-18f, %12-15r"},
2678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e100110, 0x0fff0f98, "fix%c%R\t%12-15r, %0-2f"},
2688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e200110, 0x0fff0fff, "wfs%c\t%12-15r"},
2698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e300110, 0x0fff0fff, "rfs%c\t%12-15r"},
2708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e400110, 0x0fff0fff, "wfc%c\t%12-15r"},
2718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e500110, 0x0fff0fff, "rfc%c\t%12-15r"},
2728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0e90f110, 0x0ff8fff0, "cmf%c\t%16-18f, %0-3f"},
2738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0eb0f110, 0x0ff8fff0, "cnf%c\t%16-18f, %0-3f"},
2748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0ed0f110, 0x0ff8fff0, "cmfe%c\t%16-18f, %0-3f"},
2758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0ef0f110, 0x0ff8fff0, "cnfe%c\t%16-18f, %0-3f"},
2768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0c000100, 0x0e100f00, "stf%c%Q\t%12-14f, %A"},
2778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V1, 0x0c100100, 0x0e100f00, "ldf%c%Q\t%12-14f, %A"},
2788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V2, 0x0c000200, 0x0e100f00, "sfm%c\t%12-14f, %F, %A"},
2798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_FPA_EXT_V2, 0x0c100200, 0x0e100f00, "lfm%c\t%12-14f, %F, %A"},
2808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Register load/store */
2828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0d200b00, 0x0fb00f01, "vstmdb%c\t%16-19r%21'!, %B"},
2838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0d300b00, 0x0fb00f01, "vldmdb%c\t%16-19r%21'!, %B"},
2848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0c800b00, 0x0f900f01, "vstmia%c\t%16-19r%21'!, %B"},
2858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0c900b00, 0x0f900f01, "vldmia%c\t%16-19r%21'!, %B"},
2868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0d000b00, 0x0f300f00, "vstr%c\t%12-15,22D, %C"},
2878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0d100b00, 0x0f300f00, "vldr%c\t%12-15,22D, %C"},
2888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Data transfer between ARM and NEON registers */
2908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0e800b10, 0x0ff00f70, "vdup%c.32\t%16-19,7D, %12-15r"},
2918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0e800b30, 0x0ff00f70, "vdup%c.16\t%16-19,7D, %12-15r"},
2928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0ea00b10, 0x0ff00f70, "vdup%c.32\t%16-19,7Q, %12-15r"},
2938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0ea00b30, 0x0ff00f70, "vdup%c.16\t%16-19,7Q, %12-15r"},
2948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0ec00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7D, %12-15r"},
2958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0ee00b10, 0x0ff00f70, "vdup%c.8\t%16-19,7Q, %12-15r"},
2968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0c400b10, 0x0ff00fd0, "vmov%c\t%0-3,5D, %12-15r, %16-19r"},
2978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0c500b10, 0x0ff00fd0, "vmov%c\t%12-15r, %16-19r, %0-3,5D"},
2988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0e000b10, 0x0fd00f70, "vmov%c.32\t%16-19,7D[%21d], %12-15r"},
2998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0e100b10, 0x0f500f70, "vmov%c.32\t%12-15r, %16-19,7D[%21d]"},
3008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0e000b30, 0x0fd00f30, "vmov%c.16\t%16-19,7D[%6,21d], %12-15r"},
3018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0e100b30, 0x0f500f30, "vmov%c.%23?us16\t%12-15r, %16-19,7D[%6,21d]"},
3028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0e400b10, 0x0fd00f10, "vmov%c.8\t%16-19,7D[%5,6,21d], %12-15r"},
3038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0x0e500b10, 0x0f500f10, "vmov%c.%23?us8\t%12-15r, %16-19,7D[%5,6,21d]"},
3048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Floating point coprocessor (VFP) instructions */
3068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ef1fa10, 0x0fffffff, "fmstat%c"},
3078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ee00a10, 0x0fff0fff, "fmxr%c\tfpsid, %12-15r"},
3088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ee10a10, 0x0fff0fff, "fmxr%c\tfpscr, %12-15r"},
3098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ee60a10, 0x0fff0fff, "fmxr%c\tmvfr1, %12-15r"},
3108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ee70a10, 0x0fff0fff, "fmxr%c\tmvfr0, %12-15r"},
3118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ee80a10, 0x0fff0fff, "fmxr%c\tfpexc, %12-15r"},
3128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ee90a10, 0x0fff0fff, "fmxr%c\tfpinst, %12-15r\t@ Impl def"},
3138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0eea0a10, 0x0fff0fff, "fmxr%c\tfpinst2, %12-15r\t@ Impl def"},
3148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpsid"},
3158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ef10a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpscr"},
3168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ef60a10, 0x0fff0fff, "fmrx%c\t%12-15r, mvfr1"},
3178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ef70a10, 0x0fff0fff, "fmrx%c\t%12-15r, mvfr0"},
3188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ef80a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpexc"},
3198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ef90a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst\t@ Impl def"},
3208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0efa0a10, 0x0fff0fff, "fmrx%c\t%12-15r, fpinst2\t@ Impl def"},
3218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e000b10, 0x0ff00fff, "fmdlr%c\t%z2, %12-15r"},
3228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e100b10, 0x0ff00fff, "fmrdl%c\t%12-15r, %z2"},
3238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e200b10, 0x0ff00fff, "fmdhr%c\t%z2, %12-15r"},
3248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e300b10, 0x0ff00fff, "fmrdh%c\t%12-15r, %z2"},
3258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ee00a10, 0x0ff00fff, "fmxr%c\t<impl def %16-19x>, %12-15r"},
3268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ef00a10, 0x0ff00fff, "fmrx%c\t%12-15r, <impl def %16-19x>"},
3278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e000a10, 0x0ff00f7f, "fmsr%c\t%y2, %12-15r"},
3288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e100a10, 0x0ff00f7f, "fmrs%c\t%12-15r, %y2"},
3298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0eb50a40, 0x0fbf0f70, "fcmp%7'ezs%c\t%y1"},
3308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb50b40, 0x0fbf0f70, "fcmp%7'ezd%c\t%z1"},
3318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0eb00a40, 0x0fbf0fd0, "fcpys%c\t%y1, %y0"},
3328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0eb00ac0, 0x0fbf0fd0, "fabss%c\t%y1, %y0"},
3338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb00b40, 0x0fbf0fd0, "fcpyd%c\t%z1, %z0"},
3348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb00bc0, 0x0fbf0fd0, "fabsd%c\t%z1, %z0"},
3358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0eb10a40, 0x0fbf0fd0, "fnegs%c\t%y1, %y0"},
3368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0eb10ac0, 0x0fbf0fd0, "fsqrts%c\t%y1, %y0"},
3378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb10b40, 0x0fbf0fd0, "fnegd%c\t%z1, %z0"},
3388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb10bc0, 0x0fbf0fd0, "fsqrtd%c\t%z1, %z0"},
3398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb70ac0, 0x0fbf0fd0, "fcvtds%c\t%z1, %y0"},
3408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb70bc0, 0x0fbf0fd0, "fcvtsd%c\t%y1, %z0"},
3418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0eb80a40, 0x0fbf0fd0, "fuitos%c\t%y1, %y0"},
3428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0eb80ac0, 0x0fbf0fd0, "fsitos%c\t%y1, %y0"},
3438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb80b40, 0x0fbf0fd0, "fuitod%c\t%z1, %y0"},
3448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb80bc0, 0x0fbf0fd0, "fsitod%c\t%z1, %y0"},
3458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0eb40a40, 0x0fbf0f50, "fcmp%7'es%c\t%y1, %y0"},
3468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0eb40b40, 0x0fbf0f50, "fcmp%7'ed%c\t%z1, %z0"},
3478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V3, 0x0eba0a40, 0x0fbe0f50, "f%16?us%7?lhtos%c\t%y1, #%5,0-3k"},
3488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V3, 0x0eba0b40, 0x0fbe0f50, "f%16?us%7?lhtod%c\t%z1, #%5,0-3k"},
3498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0ebc0a40, 0x0fbe0f50, "fto%16?sui%7'zs%c\t%y1, %y0"},
3508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0ebc0b40, 0x0fbe0f50, "fto%16?sui%7'zd%c\t%y1, %z0"},
3518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V3, 0x0ebe0a40, 0x0fbe0f50, "fto%16?us%7?lhs%c\t%y1, #%5,0-3k"},
3528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V3, 0x0ebe0b40, 0x0fbe0f50, "fto%16?us%7?lhd%c\t%z1, #%5,0-3k"},
3538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0c500b10, 0x0fb00ff0, "fmrrd%c\t%12-15r, %16-19r, %z0"},
3548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V3, 0x0eb00a00, 0x0fb00ff0, "fconsts%c\t%y1, #%0-3,16-19d"},
3558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V3, 0x0eb00b00, 0x0fb00ff0, "fconstd%c\t%z1, #%0-3,16-19d"},
3568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V2, 0x0c400a10, 0x0ff00fd0, "fmsrr%c\t%y4, %12-15r, %16-19r"},
3578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V2, 0x0c400b10, 0x0ff00fd0, "fmdrr%c\t%z0, %12-15r, %16-19r"},
3588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V2, 0x0c500a10, 0x0ff00fd0, "fmrrs%c\t%12-15r, %16-19r, %y4"},
3598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e000a00, 0x0fb00f50, "fmacs%c\t%y1, %y2, %y0"},
3608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e000a40, 0x0fb00f50, "fnmacs%c\t%y1, %y2, %y0"},
3618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e000b00, 0x0fb00f50, "fmacd%c\t%z1, %z2, %z0"},
3628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e000b40, 0x0fb00f50, "fnmacd%c\t%z1, %z2, %z0"},
3638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e100a00, 0x0fb00f50, "fmscs%c\t%y1, %y2, %y0"},
3648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e100a40, 0x0fb00f50, "fnmscs%c\t%y1, %y2, %y0"},
3658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e100b00, 0x0fb00f50, "fmscd%c\t%z1, %z2, %z0"},
3668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e100b40, 0x0fb00f50, "fnmscd%c\t%z1, %z2, %z0"},
3678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e200a00, 0x0fb00f50, "fmuls%c\t%y1, %y2, %y0"},
3688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e200a40, 0x0fb00f50, "fnmuls%c\t%y1, %y2, %y0"},
3698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e200b00, 0x0fb00f50, "fmuld%c\t%z1, %z2, %z0"},
3708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e200b40, 0x0fb00f50, "fnmuld%c\t%z1, %z2, %z0"},
3718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e300a00, 0x0fb00f50, "fadds%c\t%y1, %y2, %y0"},
3728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e300a40, 0x0fb00f50, "fsubs%c\t%y1, %y2, %y0"},
3738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e300b00, 0x0fb00f50, "faddd%c\t%z1, %z2, %z0"},
3748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e300b40, 0x0fb00f50, "fsubd%c\t%z1, %z2, %z0"},
3758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0e800a00, 0x0fb00f50, "fdivs%c\t%y1, %y2, %y0"},
3768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0e800b00, 0x0fb00f50, "fdivd%c\t%z1, %z2, %z0"},
3778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0d200a00, 0x0fb00f00, "fstmdbs%c\t%16-19r!, %y3"},
3788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0d200b00, 0x0fb00f00, "fstmdb%0?xd%c\t%16-19r!, %z3"},
3798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0d300a00, 0x0fb00f00, "fldmdbs%c\t%16-19r!, %y3"},
3808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0d300b00, 0x0fb00f00, "fldmdb%0?xd%c\t%16-19r!, %z3"},
3818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0d000a00, 0x0f300f00, "fsts%c\t%y1, %A"},
3828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0d000b00, 0x0f300f00, "fstd%c\t%z1, %A"},
3838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0d100a00, 0x0f300f00, "flds%c\t%y1, %A"},
3848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1, 0x0d100b00, 0x0f300f00, "fldd%c\t%z1, %A"},
3858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0c800a00, 0x0f900f00, "fstmias%c\t%16-19r%21'!, %y3"},
3868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0c800b00, 0x0f900f00, "fstmia%0?xd%c\t%16-19r%21'!, %z3"},
3878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0c900a00, 0x0f900f00, "fldmias%c\t%16-19r%21'!, %y3"},
3888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_VFP_EXT_V1xD, 0x0c900b00, 0x0f900f00, "fldmia%0?xd%c\t%16-19r%21'!, %z3"},
3898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Cirrus coprocessor instructions.  */
3918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0d100400, 0x0f500f00, "cfldrs%c\tmvf%12-15d, %A"},
3928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0c100400, 0x0f500f00, "cfldrs%c\tmvf%12-15d, %A"},
3938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0d500400, 0x0f500f00, "cfldrd%c\tmvd%12-15d, %A"},
3948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0c500400, 0x0f500f00, "cfldrd%c\tmvd%12-15d, %A"},
3958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0d100500, 0x0f500f00, "cfldr32%c\tmvfx%12-15d, %A"},
3968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0c100500, 0x0f500f00, "cfldr32%c\tmvfx%12-15d, %A"},
3978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0d500500, 0x0f500f00, "cfldr64%c\tmvdx%12-15d, %A"},
3988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0c500500, 0x0f500f00, "cfldr64%c\tmvdx%12-15d, %A"},
3998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0d000400, 0x0f500f00, "cfstrs%c\tmvf%12-15d, %A"},
4008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0c000400, 0x0f500f00, "cfstrs%c\tmvf%12-15d, %A"},
4018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0d400400, 0x0f500f00, "cfstrd%c\tmvd%12-15d, %A"},
4028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0c400400, 0x0f500f00, "cfstrd%c\tmvd%12-15d, %A"},
4038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0d000500, 0x0f500f00, "cfstr32%c\tmvfx%12-15d, %A"},
4048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0c000500, 0x0f500f00, "cfstr32%c\tmvfx%12-15d, %A"},
4058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0d400500, 0x0f500f00, "cfstr64%c\tmvdx%12-15d, %A"},
4068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0c400500, 0x0f500f00, "cfstr64%c\tmvdx%12-15d, %A"},
4078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000450, 0x0ff00ff0, "cfmvsr%c\tmvf%16-19d, %12-15r"},
4088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100450, 0x0ff00ff0, "cfmvrs%c\t%12-15r, mvf%16-19d"},
4098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000410, 0x0ff00ff0, "cfmvdlr%c\tmvd%16-19d, %12-15r"},
4108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100410, 0x0ff00ff0, "cfmvrdl%c\t%12-15r, mvd%16-19d"},
4118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000430, 0x0ff00ff0, "cfmvdhr%c\tmvd%16-19d, %12-15r"},
4128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100430, 0x0ff00fff, "cfmvrdh%c\t%12-15r, mvd%16-19d"},
4138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000510, 0x0ff00fff, "cfmv64lr%c\tmvdx%16-19d, %12-15r"},
4148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100510, 0x0ff00fff, "cfmvr64l%c\t%12-15r, mvdx%16-19d"},
4158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000530, 0x0ff00fff, "cfmv64hr%c\tmvdx%16-19d, %12-15r"},
4168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100530, 0x0ff00fff, "cfmvr64h%c\t%12-15r, mvdx%16-19d"},
4178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e200440, 0x0ff00fff, "cfmval32%c\tmvax%12-15d, mvfx%16-19d"},
4188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100440, 0x0ff00fff, "cfmv32al%c\tmvfx%12-15d, mvax%16-19d"},
4198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e200460, 0x0ff00fff, "cfmvam32%c\tmvax%12-15d, mvfx%16-19d"},
4208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100460, 0x0ff00fff, "cfmv32am%c\tmvfx%12-15d, mvax%16-19d"},
4218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e200480, 0x0ff00fff, "cfmvah32%c\tmvax%12-15d, mvfx%16-19d"},
4228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100480, 0x0ff00fff, "cfmv32ah%c\tmvfx%12-15d, mvax%16-19d"},
4238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e2004a0, 0x0ff00fff, "cfmva32%c\tmvax%12-15d, mvfx%16-19d"},
4248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e1004a0, 0x0ff00fff, "cfmv32a%c\tmvfx%12-15d, mvax%16-19d"},
4258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e2004c0, 0x0ff00fff, "cfmva64%c\tmvax%12-15d, mvdx%16-19d"},
4268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e1004c0, 0x0ff00fff, "cfmv64a%c\tmvdx%12-15d, mvax%16-19d"},
4278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e2004e0, 0x0fff0fff, "cfmvsc32%c\tdspsc, mvdx%12-15d"},
4288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e1004e0, 0x0fff0fff, "cfmv32sc%c\tmvdx%12-15d, dspsc"},
4298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000400, 0x0ff00fff, "cfcpys%c\tmvf%12-15d, mvf%16-19d"},
4308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000420, 0x0ff00fff, "cfcpyd%c\tmvd%12-15d, mvd%16-19d"},
4318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000460, 0x0ff00fff, "cfcvtsd%c\tmvd%12-15d, mvf%16-19d"},
4328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000440, 0x0ff00fff, "cfcvtds%c\tmvf%12-15d, mvd%16-19d"},
4338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000480, 0x0ff00fff, "cfcvt32s%c\tmvf%12-15d, mvfx%16-19d"},
4348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e0004a0, 0x0ff00fff, "cfcvt32d%c\tmvd%12-15d, mvfx%16-19d"},
4358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e0004c0, 0x0ff00fff, "cfcvt64s%c\tmvf%12-15d, mvdx%16-19d"},
4368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e0004e0, 0x0ff00fff, "cfcvt64d%c\tmvd%12-15d, mvdx%16-19d"},
4378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100580, 0x0ff00fff, "cfcvts32%c\tmvfx%12-15d, mvf%16-19d"},
4388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e1005a0, 0x0ff00fff, "cfcvtd32%c\tmvfx%12-15d, mvd%16-19d"},
4398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e1005c0, 0x0ff00fff, "cftruncs32%c\tmvfx%12-15d, mvf%16-19d"},
4408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e1005e0, 0x0ff00fff, "cftruncd32%c\tmvfx%12-15d, mvd%16-19d"},
4418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000550, 0x0ff00ff0, "cfrshl32%c\tmvfx%16-19d, mvfx%0-3d, %12-15r"},
4428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000570, 0x0ff00ff0, "cfrshl64%c\tmvdx%16-19d, mvdx%0-3d, %12-15r"},
4438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000500, 0x0ff00f10, "cfsh32%c\tmvfx%12-15d, mvfx%16-19d, #%I"},
4448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e200500, 0x0ff00f10, "cfsh64%c\tmvdx%12-15d, mvdx%16-19d, #%I"},
4458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100490, 0x0ff00ff0, "cfcmps%c\t%12-15r, mvf%16-19d, mvf%0-3d"},
4468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e1004b0, 0x0ff00ff0, "cfcmpd%c\t%12-15r, mvd%16-19d, mvd%0-3d"},
4478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100590, 0x0ff00ff0, "cfcmp32%c\t%12-15r, mvfx%16-19d, mvfx%0-3d"},
4488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e1005b0, 0x0ff00ff0, "cfcmp64%c\t%12-15r, mvdx%16-19d, mvdx%0-3d"},
4498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300400, 0x0ff00fff, "cfabss%c\tmvf%12-15d, mvf%16-19d"},
4508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300420, 0x0ff00fff, "cfabsd%c\tmvd%12-15d, mvd%16-19d"},
4518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300440, 0x0ff00fff, "cfnegs%c\tmvf%12-15d, mvf%16-19d"},
4528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300460, 0x0ff00fff, "cfnegd%c\tmvd%12-15d, mvd%16-19d"},
4538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300480, 0x0ff00ff0, "cfadds%c\tmvf%12-15d, mvf%16-19d, mvf%0-3d"},
4548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e3004a0, 0x0ff00ff0, "cfaddd%c\tmvd%12-15d, mvd%16-19d, mvd%0-3d"},
4558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e3004c0, 0x0ff00ff0, "cfsubs%c\tmvf%12-15d, mvf%16-19d, mvf%0-3d"},
4568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e3004e0, 0x0ff00ff0, "cfsubd%c\tmvd%12-15d, mvd%16-19d, mvd%0-3d"},
4578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100400, 0x0ff00ff0, "cfmuls%c\tmvf%12-15d, mvf%16-19d, mvf%0-3d"},
4588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100420, 0x0ff00ff0, "cfmuld%c\tmvd%12-15d, mvd%16-19d, mvd%0-3d"},
4598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300500, 0x0ff00fff, "cfabs32%c\tmvfx%12-15d, mvfx%16-19d"},
4608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300520, 0x0ff00fff, "cfabs64%c\tmvdx%12-15d, mvdx%16-19d"},
4618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300540, 0x0ff00fff, "cfneg32%c\tmvfx%12-15d, mvfx%16-19d"},
4628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300560, 0x0ff00fff, "cfneg64%c\tmvdx%12-15d, mvdx%16-19d"},
4638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300580, 0x0ff00ff0, "cfadd32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
4648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e3005a0, 0x0ff00ff0, "cfadd64%c\tmvdx%12-15d, mvdx%16-19d, mvdx%0-3d"},
4658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e3005c0, 0x0ff00ff0, "cfsub32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
4668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e3005e0, 0x0ff00ff0, "cfsub64%c\tmvdx%12-15d, mvdx%16-19d, mvdx%0-3d"},
4678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100500, 0x0ff00ff0, "cfmul32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
4688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100520, 0x0ff00ff0, "cfmul64%c\tmvdx%12-15d, mvdx%16-19d, mvdx%0-3d"},
4698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100540, 0x0ff00ff0, "cfmac32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
4708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100560, 0x0ff00ff0, "cfmsc32%c\tmvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
4718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e000600, 0x0ff00f10, "cfmadd32%c\tmvax%5-7d, mvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
4728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e100600, 0x0ff00f10, "cfmsub32%c\tmvax%5-7d, mvfx%12-15d, mvfx%16-19d, mvfx%0-3d"},
4738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e200600, 0x0ff00f10, "cfmadda32%c\tmvax%5-7d, mvax%12-15d, mvfx%16-19d, mvfx%0-3d"},
4748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_CEXT_MAVERICK, 0x0e300600, 0x0ff00f10, "cfmsuba32%c\tmvax%5-7d, mvax%12-15d, mvfx%16-19d, mvfx%0-3d"},
4758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Generic coprocessor instructions */
4778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2, 0x0c400000, 0x0ff00000, "mcrr%c\t%8-11d, %4-7d, %12-15r, %16-19r, cr%0-3d"},
4788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2, 0x0c500000, 0x0ff00000, "mrrc%c\t%8-11d, %4-7d, %12-15r, %16-19r, cr%0-3d"},
4798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2, 0x0e000000, 0x0f000010, "cdp%c\t%8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}"},
4808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2, 0x0e100010, 0x0f100010, "mrc%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
4818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2, 0x0e000010, 0x0f100010, "mcr%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
4828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2, 0x0c000000, 0x0e100000, "stc%22'l%c\t%8-11d, cr%12-15d, %A"},
4838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2, 0x0c100000, 0x0e100000, "ldc%22'l%c\t%8-11d, cr%12-15d, %A"},
4848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* V6 coprocessor instructions */
4868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xfc500000, 0xfff00000, "mrrc2%c\t%8-11d, %4-7d, %12-15r, %16-19r, cr%0-3d"},
4878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xfc400000, 0xfff00000, "mcrr2%c\t%8-11d, %4-7d, %12-15r, %16-19r, cr%0-3d"},
4888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* V5 coprocessor instructions */
4908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5, 0xfc100000, 0xfe100000, "ldc2%22'l%c\t%8-11d, cr%12-15d, %A"},
4918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5, 0xfc000000, 0xfe100000, "stc2%22'l%c\t%8-11d, cr%12-15d, %A"},
4928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5, 0xfe000000, 0xff000010, "cdp2%c\t%8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}"},
4938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5, 0xfe000010, 0xff100010, "mcr2%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
4948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5, 0xfe100010, 0xff100010, "mrc2%c\t%8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}"},
4958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {0, 0, 0, 0}
4978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
4988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Neon opcode table:  This does not encode the top byte -- that is
5008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   checked by the print_insn_neon routine, as it depends on whether we are
5018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   doing thumb32 or arm32 disassembly.  */
5028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* print_insn_neon recognizes the following format control codes:
5048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %%			%
5068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %c			print condition code
5088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %A			print v{st,ld}[1234] operands
5098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %B			print v{st,ld}[1234] any one operands
5108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %C			print v{st,ld}[1234] single->all operands
5118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %D			print scalar
5128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %E			print vmov, vmvn, vorr, vbic encoded constant
5138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %F			print vtbl,vtbx register list
5148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>r		print as an ARM register
5168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>d		print the bitfield in decimal
5178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>e         print the 2^N - bitfield in decimal
5188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>D		print as a NEON D register
5198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>Q		print as a NEON Q register
5208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>R		print as a NEON D or Q register
5218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>Sn	print byte scaled width limited by n
5228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>Tn	print short scaled width limited by n
5238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>Un	print long scaled width limited by n
5248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>'c	print specified char iff bitfield is all ones
5268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>`c	print specified char iff bitfield is all zeroes
5278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>?ab...    select from array of values in big endian order  */
5288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const struct opcode32 neon_opcodes[] =
5308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
5318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Extract */
5328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2b00840, 0xffb00850, "vext%c.8\t%12-15,22R, %16-19,7R, %0-3,5R, #%8-11d"},
5338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2b00000, 0xffb00810, "vext%c.8\t%12-15,22R, %16-19,7R, %0-3,5R, #%8-11d"},
5348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Move data element to all lanes */
5368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b40c00, 0xffb70f90, "vdup%c.32\t%12-15,22R, %0-3,5D[%19d]"},
5378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b20c00, 0xffb30f90, "vdup%c.16\t%12-15,22R, %0-3,5D[%18-19d]"},
5388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b10c00, 0xffb10f90, "vdup%c.8\t%12-15,22R, %0-3,5D[%17-19d]"},
5398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Table lookup */
5418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00800, 0xffb00c50, "vtbl%c.8\t%12-15,22D, %F, %0-3,5D"},
5428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00840, 0xffb00c50, "vtbx%c.8\t%12-15,22D, %F, %0-3,5D"},
5438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Two registers, miscellaneous */
5458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880a10, 0xfebf0fd0, "vmovl%c.%24?us8\t%12-15,22Q, %0-3,5D"},
5468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900a10, 0xfebf0fd0, "vmovl%c.%24?us16\t%12-15,22Q, %0-3,5D"},
5478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00a10, 0xfebf0fd0, "vmovl%c.%24?us32\t%12-15,22Q, %0-3,5D"},
5488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00500, 0xffbf0f90, "vcnt%c.8\t%12-15,22R, %0-3,5R"},
5498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00580, 0xffbf0f90, "vmvn%c\t%12-15,22R, %0-3,5R"},
5508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b20000, 0xffbf0f90, "vswp%c\t%12-15,22R, %0-3,5R"},
5518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b20200, 0xffb30fd0, "vmovn%c.i%18-19T2\t%12-15,22D, %0-3,5Q"},
5528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b20240, 0xffb30fd0, "vqmovun%c.s%18-19T2\t%12-15,22D, %0-3,5Q"},
5538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b20280, 0xffb30fd0, "vqmovn%c.s%18-19T2\t%12-15,22D, %0-3,5Q"},
5548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b202c0, 0xffb30fd0, "vqmovn%c.u%18-19T2\t%12-15,22D, %0-3,5Q"},
5558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b20300, 0xffb30fd0, "vshll%c.i%18-19S2\t%12-15,22Q, %0-3,5D, #%18-19S2"},
5568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3bb0400, 0xffbf0e90, "vrecpe%c.%8?fu%18-19S2\t%12-15,22R, %0-3,5R"},
5578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3bb0480, 0xffbf0e90, "vrsqrte%c.%8?fu%18-19S2\t%12-15,22R, %0-3,5R"},
5588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00000, 0xffb30f90, "vrev64%c.%18-19S2\t%12-15,22R, %0-3,5R"},
5598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00080, 0xffb30f90, "vrev32%c.%18-19S2\t%12-15,22R, %0-3,5R"},
5608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00100, 0xffb30f90, "vrev16%c.%18-19S2\t%12-15,22R, %0-3,5R"},
5618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00400, 0xffb30f90, "vcls%c.s%18-19S2\t%12-15,22R, %0-3,5R"},
5628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00480, 0xffb30f90, "vclz%c.i%18-19S2\t%12-15,22R, %0-3,5R"},
5638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00700, 0xffb30f90, "vqabs%c.s%18-19S2\t%12-15,22R, %0-3,5R"},
5648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00780, 0xffb30f90, "vqneg%c.s%18-19S2\t%12-15,22R, %0-3,5R"},
5658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b20080, 0xffb30f90, "vtrn%c.%18-19S2\t%12-15,22R, %0-3,5R"},
5668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b20100, 0xffb30f90, "vuzp%c.%18-19S2\t%12-15,22R, %0-3,5R"},
5678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b20180, 0xffb30f90, "vzip%c.%18-19S2\t%12-15,22R, %0-3,5R"},
5688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b10000, 0xffb30b90, "vcgt%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
5698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b10080, 0xffb30b90, "vcge%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
5708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b10100, 0xffb30b90, "vceq%c.%10?fi%18-19S2\t%12-15,22R, %0-3,5R, #0"},
5718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b10180, 0xffb30b90, "vcle%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
5728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b10200, 0xffb30b90, "vclt%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R, #0"},
5738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b10300, 0xffb30b90, "vabs%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R"},
5748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b10380, 0xffb30b90, "vneg%c.%10?fs%18-19S2\t%12-15,22R, %0-3,5R"},
5758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00200, 0xffb30f10, "vpaddl%c.%7?us%18-19S2\t%12-15,22R, %0-3,5R"},
5768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b00600, 0xffb30f10, "vpadal%c.%7?us%18-19S2\t%12-15,22R, %0-3,5R"},
5778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3b30600, 0xffb30e10, "vcvt%c.%7-8?usff%18-19Sa.%7-8?ffus%18-19Sa\t%12-15,22R, %0-3,5R"},
5788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
5798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Three registers of the same length */
5808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000110, 0xffb00f10, "vand%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
5818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2100110, 0xffb00f10, "vbic%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
5828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2200110, 0xffb00f10, "vorr%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
5838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2300110, 0xffb00f10, "vorn%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
5848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000110, 0xffb00f10, "veor%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
5858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3100110, 0xffb00f10, "vbsl%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
5868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3200110, 0xffb00f10, "vbit%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
5878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3300110, 0xffb00f10, "vbif%c\t%12-15,22R, %16-19,7R, %0-3,5R"},
5888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000d00, 0xffa00f10, "vadd%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000d10, 0xffa00f10, "vmla%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000e00, 0xffa00f10, "vceq%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000f00, 0xffa00f10, "vmax%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000f10, 0xffa00f10, "vrecps%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2200d00, 0xffa00f10, "vsub%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2200d10, 0xffa00f10, "vmls%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2200f00, 0xffa00f10, "vmin%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2200f10, 0xffa00f10, "vrsqrts%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000d00, 0xffa00f10, "vpadd%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000d10, 0xffa00f10, "vmul%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
5998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000e00, 0xffa00f10, "vcge%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
6008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000e10, 0xffa00f10, "vacge%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
6018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000f00, 0xffa00f10, "vpmax%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
6028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3200d00, 0xffa00f10, "vabd%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
6038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3200e00, 0xffa00f10, "vcgt%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
6048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3200e10, 0xffa00f10, "vacgt%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
6058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3200f00, 0xffa00f10, "vpmin%c.f%20U0\t%12-15,22R, %16-19,7R, %0-3,5R"},
6068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000800, 0xff800f10, "vadd%c.i%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
6078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000810, 0xff800f10, "vtst%c.%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000900, 0xff800f10, "vmla%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000b00, 0xff800f10, "vqdmulh%c.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
6108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000b10, 0xff800f10, "vpadd%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000800, 0xff800f10, "vsub%c.i%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
6128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000810, 0xff800f10, "vceq%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000900, 0xff800f10, "vmls%c.i%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3000b00, 0xff800f10, "vqrdmulh%c.s%20-21S6\t%12-15,22R, %16-19,7R, %0-3,5R"},
6158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000000, 0xfe800f10, "vhadd%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000010, 0xfe800f10, "vqadd%c.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
6178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000100, 0xfe800f10, "vrhadd%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000200, 0xfe800f10, "vhsub%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000210, 0xfe800f10, "vqsub%c.%24?us%20-21S3\t%12-15,22R, %16-19,7R, %0-3,5R"},
6208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000300, 0xfe800f10, "vcgt%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000310, 0xfe800f10, "vcge%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000400, 0xfe800f10, "vshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
6238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000410, 0xfe800f10, "vqshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
6248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000500, 0xfe800f10, "vrshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
6258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000510, 0xfe800f10, "vqrshl%c.%24?us%20-21S3\t%12-15,22R, %0-3,5R, %16-19,7R"},
6268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000600, 0xfe800f10, "vmax%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000610, 0xfe800f10, "vmin%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000700, 0xfe800f10, "vabd%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000710, 0xfe800f10, "vaba%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000910, 0xfe800f10, "vmul%c.%24?pi%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000a00, 0xfe800f10, "vpmax%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2000a10, 0xfe800f10, "vpmin%c.%24?us%20-21S2\t%12-15,22R, %16-19,7R, %0-3,5R"},
6338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* One register and an immediate value */
6358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800e10, 0xfeb80fb0, "vmov%c.i8\t%12-15,22R, %E"},
6368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800e30, 0xfeb80fb0, "vmov%c.i64\t%12-15,22R, %E"},
6378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800f10, 0xfeb80fb0, "vmov%c.f32\t%12-15,22R, %E"},
6388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800810, 0xfeb80db0, "vmov%c.i16\t%12-15,22R, %E"},
6398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800830, 0xfeb80db0, "vmvn%c.i16\t%12-15,22R, %E"},
6408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800910, 0xfeb80db0, "vorr%c.i16\t%12-15,22R, %E"},
6418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800930, 0xfeb80db0, "vbic%c.i16\t%12-15,22R, %E"},
6428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800c10, 0xfeb80eb0, "vmov%c.i32\t%12-15,22R, %E"},
6438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800c30, 0xfeb80eb0, "vmvn%c.i32\t%12-15,22R, %E"},
6448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800110, 0xfeb809b0, "vorr%c.i32\t%12-15,22R, %E"},
6458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800130, 0xfeb809b0, "vbic%c.i32\t%12-15,22R, %E"},
6468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800010, 0xfeb808b0, "vmov%c.i32\t%12-15,22R, %E"},
6478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800030, 0xfeb808b0, "vmvn%c.i32\t%12-15,22R, %E"},
6488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
6498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Two registers and a shift amount */
6508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880810, 0xffb80fd0, "vshrn%c.i16\t%12-15,22D, %0-3,5Q, #%16-18e"},
6518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880850, 0xffb80fd0, "vrshrn%c.i16\t%12-15,22D, %0-3,5Q, #%16-18e"},
6528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880810, 0xfeb80fd0, "vqshrun%c.s16\t%12-15,22D, %0-3,5Q, #%16-18e"},
6538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880850, 0xfeb80fd0, "vqrshrun%c.s16\t%12-15,22D, %0-3,5Q, #%16-18e"},
6548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880910, 0xfeb80fd0, "vqshrn%c.%24?us16\t%12-15,22D, %0-3,5Q, #%16-18e"},
6558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880950, 0xfeb80fd0, "vqrshrn%c.%24?us16\t%12-15,22D, %0-3,5Q, #%16-18e"},
6568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880a10, 0xfeb80fd0, "vshll%c.%24?us8\t%12-15,22D, %0-3,5Q, #%16-18d"},
6578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900810, 0xffb00fd0, "vshrn%c.i32\t%12-15,22D, %0-3,5Q, #%16-19e"},
6588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900850, 0xffb00fd0, "vrshrn%c.i32\t%12-15,22D, %0-3,5Q, #%16-19e"},
6598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880510, 0xffb80f90, "vshl%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18d"},
6608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3880410, 0xffb80f90, "vsri%c.8\t%12-15,22R, %0-3,5R, #%16-18e"},
6618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3880510, 0xffb80f90, "vsli%c.8\t%12-15,22R, %0-3,5R, #%16-18d"},
6628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3880610, 0xffb80f90, "vqshlu%c.s8\t%12-15,22R, %0-3,5R, #%16-18d"},
6638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900810, 0xfeb00fd0, "vqshrun%c.s32\t%12-15,22D, %0-3,5Q, #%16-19e"},
6648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900850, 0xfeb00fd0, "vqrshrun%c.s32\t%12-15,22D, %0-3,5Q, #%16-19e"},
6658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900910, 0xfeb00fd0, "vqshrn%c.%24?us32\t%12-15,22D, %0-3,5Q, #%16-19e"},
6668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900950, 0xfeb00fd0, "vqrshrn%c.%24?us32\t%12-15,22D, %0-3,5Q, #%16-19e"},
6678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900a10, 0xfeb00fd0, "vshll%c.%24?us16\t%12-15,22D, %0-3,5Q, #%16-19d"},
6688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880010, 0xfeb80f90, "vshr%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
6698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880110, 0xfeb80f90, "vsra%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
6708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880210, 0xfeb80f90, "vrshr%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
6718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880310, 0xfeb80f90, "vrsra%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18e"},
6728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2880710, 0xfeb80f90, "vqshl%c.%24?us8\t%12-15,22R, %0-3,5R, #%16-18d"},
6738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00810, 0xffa00fd0, "vshrn%c.i64\t%12-15,22D, %0-3,5Q, #%16-20e"},
6748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00850, 0xffa00fd0, "vrshrn%c.i64\t%12-15,22D, %0-3,5Q, #%16-20e"},
6758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900510, 0xffb00f90, "vshl%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19d"},
6768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3900410, 0xffb00f90, "vsri%c.16\t%12-15,22R, %0-3,5R, #%16-19e"},
6778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3900510, 0xffb00f90, "vsli%c.16\t%12-15,22R, %0-3,5R, #%16-19d"},
6788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3900610, 0xffb00f90, "vqshlu%c.s16\t%12-15,22R, %0-3,5R, #%16-19d"},
6798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00a10, 0xfea00fd0, "vshll%c.%24?us32\t%12-15,22D, %0-3,5Q, #%16-20d"},
6808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900010, 0xfeb00f90, "vshr%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
6818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900110, 0xfeb00f90, "vsra%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
6828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900210, 0xfeb00f90, "vrshr%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
6838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900310, 0xfeb00f90, "vrsra%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19e"},
6848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2900710, 0xfeb00f90, "vqshl%c.%24?us16\t%12-15,22R, %0-3,5R, #%16-19d"},
6858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800810, 0xfec00fd0, "vqshrun%c.s64\t%12-15,22D, %0-3,5Q, #%16-20e"},
6868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800850, 0xfec00fd0, "vqrshrun%c.s64\t%12-15,22D, %0-3,5Q, #%16-20e"},
6878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800910, 0xfec00fd0, "vqshrn%c.%24?us64\t%12-15,22D, %0-3,5Q, #%16-20e"},
6888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800950, 0xfec00fd0, "vqrshrn%c.%24?us64\t%12-15,22D, %0-3,5Q, #%16-20e"},
6898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00510, 0xffa00f90, "vshl%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20d"},
6908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3a00410, 0xffa00f90, "vsri%c.32\t%12-15,22R, %0-3,5R, #%16-20e"},
6918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3a00510, 0xffa00f90, "vsli%c.32\t%12-15,22R, %0-3,5R, #%16-20d"},
6928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3a00610, 0xffa00f90, "vqshlu%c.s32\t%12-15,22R, %0-3,5R, #%16-20d"},
6938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00010, 0xfea00f90, "vshr%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
6948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00110, 0xfea00f90, "vsra%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
6958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00210, 0xfea00f90, "vrshr%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
6968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00310, 0xfea00f90, "vrsra%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20e"},
6978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00710, 0xfea00f90, "vqshl%c.%24?us32\t%12-15,22R, %0-3,5R, #%16-20d"},
6988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800590, 0xff800f90, "vshl%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21d"},
6998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800490, 0xff800f90, "vsri%c.64\t%12-15,22R, %0-3,5R, #%16-21e"},
7008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800590, 0xff800f90, "vsli%c.64\t%12-15,22R, %0-3,5R, #%16-21d"},
7018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800690, 0xff800f90, "vqshlu%c.s64\t%12-15,22R, %0-3,5R, #%16-21d"},
7028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800090, 0xfe800f90, "vshr%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
7038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800190, 0xfe800f90, "vsra%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
7048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800290, 0xfe800f90, "vrshr%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
7058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800390, 0xfe800f90, "vrsra%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21e"},
7068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800790, 0xfe800f90, "vqshl%c.%24?us64\t%12-15,22R, %0-3,5R, #%16-21d"},
7078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2a00e10, 0xfea00e90, "vcvt%c.%24,8?usff32.%24,8?ffus32\t%12-15,22R, %0-3,5R, #%16-20e"},
7088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Three registers of different lengths */
7108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800e00, 0xfea00f50, "vmull%c.p%20S0\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800400, 0xff800f50, "vaddhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
7128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800600, 0xff800f50, "vsubhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
7138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800900, 0xff800f50, "vqdmlal%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800b00, 0xff800f50, "vqdmlsl%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800d00, 0xff800f50, "vqdmull%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800400, 0xff800f50, "vraddhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
7178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800600, 0xff800f50, "vrsubhn%c.i%20-21T2\t%12-15,22D, %16-19,7Q, %0-3,5Q"},
7188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800000, 0xfe800f50, "vaddl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800100, 0xfe800f50, "vaddw%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7Q, %0-3,5D"},
7208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800200, 0xfe800f50, "vsubl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800300, 0xfe800f50, "vsubw%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7Q, %0-3,5D"},
7228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800500, 0xfe800f50, "vabal%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800700, 0xfe800f50, "vabdl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800800, 0xfe800f50, "vmlal%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800a00, 0xfe800f50, "vmlsl%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800c00, 0xfe800f50, "vmull%c.%24?us%20-21S2\t%12-15,22Q, %16-19,7D, %0-3,5D"},
7278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Two registers and a scalar */
7298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800040, 0xff800f50, "vmla%c.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
7308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800140, 0xff800f50, "vmla%c.f%20-21Sa\t%12-15,22D, %16-19,7D, %D"},
7318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800340, 0xff800f50, "vqdmlal%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
7328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800440, 0xff800f50, "vmls%c.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
7338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800540, 0xff800f50, "vmls%c.f%20-21S6\t%12-15,22D, %16-19,7D, %D"},
7348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800740, 0xff800f50, "vqdmlsl%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
7358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800840, 0xff800f50, "vmul%c.i%20-21S6\t%12-15,22D, %16-19,7D, %D"},
7368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800940, 0xff800f50, "vmul%c.f%20-21Sa\t%12-15,22D, %16-19,7D, %D"},
7378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800b40, 0xff800f50, "vqdmull%c.s%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
7388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800c40, 0xff800f50, "vqdmulh%c.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
7398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800d40, 0xff800f50, "vqrdmulh%c.s%20-21S6\t%12-15,22D, %16-19,7D, %D"},
7408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800040, 0xff800f50, "vmla%c.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
7418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800140, 0xff800f50, "vmla%c.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
7428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800440, 0xff800f50, "vmls%c.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
7438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800540, 0xff800f50, "vmls%c.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
7448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800840, 0xff800f50, "vmul%c.i%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
7458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800940, 0xff800f50, "vmul%c.f%20-21Sa\t%12-15,22Q, %16-19,7Q, %D"},
7468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800c40, 0xff800f50, "vqdmulh%c.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
7478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf3800d40, 0xff800f50, "vqrdmulh%c.s%20-21S6\t%12-15,22Q, %16-19,7Q, %D"},
7488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800240, 0xfe800f50, "vmlal%c.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
7498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800640, 0xfe800f50, "vmlsl%c.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
7508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf2800a40, 0xfe800f50, "vmull%c.%24?us%20-21S6\t%12-15,22Q, %16-19,7D, %D"},
7518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Element and structure load/store */
7538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4a00fc0, 0xffb00fc0, "vld4%c.32\t%C"},
7548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4a00c00, 0xffb00f00, "vld1%c.%6-7S2\t%C"},
7558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4a00d00, 0xffb00f00, "vld2%c.%6-7S2\t%C"},
7568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4a00e00, 0xffb00f00, "vld3%c.%6-7S2\t%C"},
7578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4a00f00, 0xffb00f00, "vld4%c.%6-7S2\t%C"},
7588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000200, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
7598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000300, 0xff900f00, "v%21?ls%21?dt2%c.%6-7S2\t%A"},
7608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000400, 0xff900f00, "v%21?ls%21?dt3%c.%6-7S2\t%A"},
7618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000500, 0xff900f00, "v%21?ls%21?dt3%c.%6-7S2\t%A"},
7628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000600, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
7638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000700, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
7648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000800, 0xff900f00, "v%21?ls%21?dt2%c.%6-7S2\t%A"},
7658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000900, 0xff900f00, "v%21?ls%21?dt2%c.%6-7S2\t%A"},
7668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000a00, 0xff900f00, "v%21?ls%21?dt1%c.%6-7S3\t%A"},
7678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4000000, 0xff900e00, "v%21?ls%21?dt4%c.%6-7S2\t%A"},
7688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4800000, 0xff900300, "v%21?ls%21?dt1%c.%10-11S2\t%B"},
7698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4800100, 0xff900300, "v%21?ls%21?dt2%c.%10-11S2\t%B"},
7708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4800200, 0xff900300, "v%21?ls%21?dt3%c.%10-11S2\t%B"},
7718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {FPU_NEON_EXT_V1, 0xf4800300, 0xff900300, "v%21?ls%21?dt4%c.%10-11S2\t%B"},
7728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {0,0 ,0, 0}
7748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
7758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Opcode tables: ARM, 16-bit Thumb, 32-bit Thumb.  All three are partially
7778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   ordered: they must be searched linearly from the top to obtain a correct
7788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   match.  */
7798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* print_insn_arm recognizes the following format control codes:
7818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %%			%
7838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %a			print address for ldr/str instruction
7858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %s                   print address for ldr/str halfword/signextend instruction
7868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %b			print branch destination
7878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %c			print condition code (always bits 28-31)
7888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %m			print register mask for ldm/stm instruction
7898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %o			print operand2 (immediate or register + shift)
7908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %p			print 'p' iff bits 12-15 are 15
7918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %t			print 't' iff bit 21 set and bit 24 clear
7928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %B			print arm BLX(1) destination
7938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %C			print the PSR sub type.
7948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %U			print barrier type.
7958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %P			print address for pli instruction.
7968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
7978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>r		print as an ARM register
7988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>d		print the bitfield in decimal
7998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>W         print the bitfield plus one in decimal
8008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>x		print the bitfield in hex
8018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>X		print the bitfield as 1 hex digit without leading "0x"
8028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>'c	print specified char iff bitfield is all ones
8048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>`c	print specified char iff bitfield is all zeroes
8058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>?ab...    select from array of values in big endian order
8068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %e                   print arm SMI operand (bits 0..7,8..19).
8088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %E			print the LSB and WIDTH fields of a BFI or BFC instruction.
8098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %V                   print the 16-bit immediate field of a MOVT or MOVW instruction.  */
8108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const struct opcode32 arm_opcodes[] =
8128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
8138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM instructions.  */
8148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0xe1a00000, 0xffffffff, "nop\t\t\t(mov r0,r0)"},
8158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T | ARM_EXT_V5, 0x012FFF10, 0x0ffffff0, "bx%c\t%0-3r"},
8168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2, 0x00000090, 0x0fe000f0, "mul%20's%c\t%16-19r, %0-3r, %8-11r"},
8178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2, 0x00200090, 0x0fe000f0, "mla%20's%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
8188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V2S, 0x01000090, 0x0fb00ff0, "swp%22'b%c\t%12-15r, %0-3r, [%16-19r]"},
8198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V3M, 0x00800090, 0x0fa000f0, "%22?sumull%20's%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
8208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V3M, 0x00a00090, 0x0fa000f0, "%22?sumlal%20's%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
8218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* V7 instructions.  */
8238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0xf450f000, 0xfd70f000, "pli\t%P"},
8248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0x0320f0f0, 0x0ffffff0, "dbg%c\t#%0-3d"},
8258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0xf57ff050, 0xfffffff0, "dmb\t%U"},
8268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0xf57ff040, 0xfffffff0, "dsb\t%U"},
8278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0xf57ff060, 0xfffffff0, "isb\t%U"},
8288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V6T2 instructions.  */
8308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0x07c0001f, 0x0fe0007f, "bfc%c\t%12-15r, %E"},
8318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0x07c00010, 0x0fe00070, "bfi%c\t%12-15r, %0-3r, %E"},
8328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0x00600090, 0x0ff000f0, "mls%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
8338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0x006000b0, 0x0f7000f0, "strht%c\t%12-15r, %s"},
8348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0x00300090, 0x0f300090, "ldr%6's%5?hbt%c\t%12-15r, %s"},
8358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0x03000000, 0x0ff00000, "movw%c\t%12-15r, %V"},
8368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0x03400000, 0x0ff00000, "movt%c\t%12-15r, %V"},
8378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0x06ff0f30, 0x0fff0ff0, "rbit%c\t%12-15r, %0-3r"},
8388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0x07a00050, 0x0fa00070, "%22?usbfx%c\t%12-15r, %0-3r, #%7-11d, #%16-20W"},
8398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V6Z instructions.  */
8418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6Z, 0x01600070, 0x0ff000f0, "smc%c\t%e"},
8428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V6K instructions.  */
8448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0xf57ff01f, 0xffffffff, "clrex"},
8458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x01d00f9f, 0x0ff00fff, "ldrexb%c\t%12-15r, [%16-19r]"},
8468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x01b00f9f, 0x0ff00fff, "ldrexd%c\t%12-15r, [%16-19r]"},
8478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x01f00f9f, 0x0ff00fff, "ldrexh%c\t%12-15r, [%16-19r]"},
8488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x01c00f90, 0x0ff00ff0, "strexb%c\t%12-15r, %0-3r, [%16-19r]"},
8498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x01a00f90, 0x0ff00ff0, "strexd%c\t%12-15r, %0-3r, [%16-19r]"},
8508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x01e00f90, 0x0ff00ff0, "strexh%c\t%12-15r, %0-3r, [%16-19r]"},
8518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V6K NOP hints.  */
8538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x0320f001, 0x0fffffff, "yield%c"},
8548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x0320f002, 0x0fffffff, "wfe%c"},
8558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x0320f003, 0x0fffffff, "wfi%c"},
8568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x0320f004, 0x0fffffff, "sev%c"},
8578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0x0320f000, 0x0fffff00, "nop%c\t{%0-7d}"},
8588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
8598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V6 instructions. */
8608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xf1080000, 0xfffffe3f, "cpsie\t%8'a%7'i%6'f"},
8618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xf10a0000, 0xfffffe20, "cpsie\t%8'a%7'i%6'f,#%0-4d"},
8628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xf10C0000, 0xfffffe3f, "cpsid\t%8'a%7'i%6'f"},
8638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xf10e0000, 0xfffffe20, "cpsid\t%8'a%7'i%6'f,#%0-4d"},
8648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xf1000000, 0xfff1fe20, "cps\t#%0-4d"},
8658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06800010, 0x0ff00ff0, "pkhbt%c\t%12-15r, %16-19r, %0-3r"},
8668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06800010, 0x0ff00070, "pkhbt%c\t%12-15r, %16-19r, %0-3r, lsl #%7-11d"},
8678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06800050, 0x0ff00ff0, "pkhtb%c\t%12-15r, %16-19r, %0-3r, asr #32"},
8688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06800050, 0x0ff00070, "pkhtb%c\t%12-15r, %16-19r, %0-3r, asr #%7-11d"},
8698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x01900f9f, 0x0ff00fff, "ldrex%c\tr%12-15d, [%16-19r]"},
8708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06200f10, 0x0ff00ff0, "qadd16%c\t%12-15r, %16-19r, %0-3r"},
8718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06200f90, 0x0ff00ff0, "qadd8%c\t%12-15r, %16-19r, %0-3r"},
8728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06200f30, 0x0ff00ff0, "qaddsubx%c\t%12-15r, %16-19r, %0-3r"},
8738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06200f70, 0x0ff00ff0, "qsub16%c\t%12-15r, %16-19r, %0-3r"},
8748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06200ff0, 0x0ff00ff0, "qsub8%c\t%12-15r, %16-19r, %0-3r"},
8758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06200f50, 0x0ff00ff0, "qsubaddx%c\t%12-15r, %16-19r, %0-3r"},
8768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06100f10, 0x0ff00ff0, "sadd16%c\t%12-15r, %16-19r, %0-3r"},
8778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06100f90, 0x0ff00ff0, "sadd8%c\t%12-15r, %16-19r, %0-3r"},
8788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06100f30, 0x0ff00ff0, "saddaddx%c\t%12-15r, %16-19r, %0-3r"},
8798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06300f10, 0x0ff00ff0, "shadd16%c\t%12-15r, %16-19r, %0-3r"},
8808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06300f90, 0x0ff00ff0, "shadd8%c\t%12-15r, %16-19r, %0-3r"},
8818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06300f30, 0x0ff00ff0, "shaddsubx%c\t%12-15r, %16-19r, %0-3r"},
8828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06300f70, 0x0ff00ff0, "shsub16%c\t%12-15r, %16-19r, %0-3r"},
8838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06300ff0, 0x0ff00ff0, "shsub8%c\t%12-15r, %16-19r, %0-3r"},
8848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06300f50, 0x0ff00ff0, "shsubaddx%c\t%12-15r, %16-19r, %0-3r"},
8858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06100f70, 0x0ff00ff0, "ssub16%c\t%12-15r, %16-19r, %0-3r"},
8868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06100ff0, 0x0ff00ff0, "ssub8%c\t%12-15r, %16-19r, %0-3r"},
8878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06100f50, 0x0ff00ff0, "ssubaddx%c\t%12-15r, %16-19r, %0-3r"},
8888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06500f10, 0x0ff00ff0, "uadd16%c\t%12-15r, %16-19r, %0-3r"},
8898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06500f90, 0x0ff00ff0, "uadd8%c\t%12-15r, %16-19r, %0-3r"},
8908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06500f30, 0x0ff00ff0, "uaddsubx%c\t%12-15r, %16-19r, %0-3r"},
8918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06700f10, 0x0ff00ff0, "uhadd16%c\t%12-15r, %16-19r, %0-3r"},
8928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06700f90, 0x0ff00ff0, "uhadd8%c\t%12-15r, %16-19r, %0-3r"},
8938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06700f30, 0x0ff00ff0, "uhaddsubx%c\t%12-15r, %16-19r, %0-3r"},
8948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06700f70, 0x0ff00ff0, "uhsub16%c\t%12-15r, %16-19r, %0-3r"},
8958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06700ff0, 0x0ff00ff0, "uhsub8%c\t%12-15r, %16-19r, %0-3r"},
8968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06700f50, 0x0ff00ff0, "uhsubaddx%c\t%12-15r, %16-19r, %0-3r"},
8978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06600f10, 0x0ff00ff0, "uqadd16%c\t%12-15r, %16-19r, %0-3r"},
8988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06600f90, 0x0ff00ff0, "uqadd8%c\t%12-15r, %16-19r, %0-3r"},
8998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06600f30, 0x0ff00ff0, "uqaddsubx%c\t%12-15r, %16-19r, %0-3r"},
9008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06600f70, 0x0ff00ff0, "uqsub16%c\t%12-15r, %16-19r, %0-3r"},
9018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06600ff0, 0x0ff00ff0, "uqsub8%c\t%12-15r, %16-19r, %0-3r"},
9028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06600f50, 0x0ff00ff0, "uqsubaddx%c\t%12-15r, %16-19r, %0-3r"},
9038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06500f70, 0x0ff00ff0, "usub16%c\t%12-15r, %16-19r, %0-3r"},
9048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06500ff0, 0x0ff00ff0, "usub8%c\t%12-15r, %16-19r, %0-3r"},
9058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06500f50, 0x0ff00ff0, "usubaddx%c\t%12-15r, %16-19r, %0-3r"},
9068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06bf0f30, 0x0fff0ff0, "rev%c\t\%12-15r, %0-3r"},
9078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06bf0fb0, 0x0fff0ff0, "rev16%c\t\%12-15r, %0-3r"},
9088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06ff0fb0, 0x0fff0ff0, "revsh%c\t\%12-15r, %0-3r"},
9098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xf8100a00, 0xfe50ffff, "rfe%23?id%24?ba\t\%16-19r%21'!"},
9108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06bf0070, 0x0fff0ff0, "sxth%c\t%12-15r, %0-3r"},
9118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06bf0470, 0x0fff0ff0, "sxth%c\t%12-15r, %0-3r, ror #8"},
9128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06bf0870, 0x0fff0ff0, "sxth%c\t%12-15r, %0-3r, ror #16"},
9138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06bf0c70, 0x0fff0ff0, "sxth%c\t%12-15r, %0-3r, ror #24"},
9148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x068f0070, 0x0fff0ff0, "sxtb16%c\t%12-15r, %0-3r"},
9158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x068f0470, 0x0fff0ff0, "sxtb16%c\t%12-15r, %0-3r, ror #8"},
9168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x068f0870, 0x0fff0ff0, "sxtb16%c\t%12-15r, %0-3r, ror #16"},
9178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x068f0c70, 0x0fff0ff0, "sxtb16%c\t%12-15r, %0-3r, ror #24"},
9188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06af0070, 0x0fff0ff0, "sxtb%c\t%12-15r, %0-3r"},
9198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06af0470, 0x0fff0ff0, "sxtb%c\t%12-15r, %0-3r, ror #8"},
9208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06af0870, 0x0fff0ff0, "sxtb%c\t%12-15r, %0-3r, ror #16"},
9218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06af0c70, 0x0fff0ff0, "sxtb%c\t%12-15r, %0-3r, ror #24"},
9228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06ff0070, 0x0fff0ff0, "uxth%c\t%12-15r, %0-3r"},
9238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06ff0470, 0x0fff0ff0, "uxth%c\t%12-15r, %0-3r, ror #8"},
9248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06ff0870, 0x0fff0ff0, "uxth%c\t%12-15r, %0-3r, ror #16"},
9258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06ff0c70, 0x0fff0ff0, "uxth%c\t%12-15r, %0-3r, ror #24"},
9268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06cf0070, 0x0fff0ff0, "uxtb16%c\t%12-15r, %0-3r"},
9278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06cf0470, 0x0fff0ff0, "uxtb16%c\t%12-15r, %0-3r, ror #8"},
9288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06cf0870, 0x0fff0ff0, "uxtb16%c\t%12-15r, %0-3r, ror #16"},
9298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06cf0c70, 0x0fff0ff0, "uxtb16%c\t%12-15r, %0-3r, ror #24"},
9308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06ef0070, 0x0fff0ff0, "uxtb%c\t%12-15r, %0-3r"},
9318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06ef0470, 0x0fff0ff0, "uxtb%c\t%12-15r, %0-3r, ror #8"},
9328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06ef0870, 0x0fff0ff0, "uxtb%c\t%12-15r, %0-3r, ror #16"},
9338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06ef0c70, 0x0fff0ff0, "uxtb%c\t%12-15r, %0-3r, ror #24"},
9348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06b00070, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r"},
9358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06b00470, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r, ror #8"},
9368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06b00870, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r, ror #16"},
9378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06b00c70, 0x0ff00ff0, "sxtah%c\t%12-15r, %16-19r, %0-3r, ror #24"},
9388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06800070, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r"},
9398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06800470, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r, ror #8"},
9408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06800870, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r, ror #16"},
9418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06800c70, 0x0ff00ff0, "sxtab16%c\t%12-15r, %16-19r, %0-3r, ror #24"},
9428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06a00070, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r"},
9438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06a00470, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r, ror #8"},
9448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06a00870, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r, ror #16"},
9458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06a00c70, 0x0ff00ff0, "sxtab%c\t%12-15r, %16-19r, %0-3r, ror #24"},
9468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06f00070, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r"},
9478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06f00470, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r, ror #8"},
9488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06f00870, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r, ror #16"},
9498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06f00c70, 0x0ff00ff0, "uxtah%c\t%12-15r, %16-19r, %0-3r, ror #24"},
9508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06c00070, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r"},
9518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06c00470, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r, ror #8"},
9528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06c00870, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r, ror #16"},
9538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06c00c70, 0x0ff00ff0, "uxtab16%c\t%12-15r, %16-19r, %0-3r, ROR #24"},
9548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06e00070, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r"},
9558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06e00470, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r, ror #8"},
9568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06e00870, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r, ror #16"},
9578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06e00c70, 0x0ff00ff0, "uxtab%c\t%12-15r, %16-19r, %0-3r, ror #24"},
9588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06800fb0, 0x0ff00ff0, "sel%c\t%12-15r, %16-19r, %0-3r"},
9598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xf1010000, 0xfffffc00, "setend\t%9?ble"},
9608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x0700f010, 0x0ff0f0d0, "smuad%5'x%c\t%16-19r, %0-3r, %8-11r"},
9618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x0700f050, 0x0ff0f0d0, "smusd%5'x%c\t%16-19r, %0-3r, %8-11r"},
9628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x07000010, 0x0ff000d0, "smlad%5'x%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
9638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x07400010, 0x0ff000d0, "smlald%5'x%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
9648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x07000050, 0x0ff000d0, "smlsd%5'x%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
9658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x07400050, 0x0ff000d0, "smlsld%5'x%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
9668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x0750f010, 0x0ff0f0d0, "smmul%5'r%c\t%16-19r, %0-3r, %8-11r"},
9678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x07500010, 0x0ff000d0, "smmla%5'r%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
9688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x075000d0, 0x0ff000d0, "smmls%5'r%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
9698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xf84d0500, 0xfe5fffe0, "srs%23?id%24?ba\t%16-19r%21'!, #%0-4d"},
9708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06a00010, 0x0fe00ff0, "ssat%c\t%12-15r, #%16-20W, %0-3r"},
9718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06a00010, 0x0fe00070, "ssat%c\t%12-15r, #%16-20W, %0-3r, lsl #%7-11d"},
9728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06a00050, 0x0fe00070, "ssat%c\t%12-15r, #%16-20W, %0-3r, asr #%7-11d"},
9738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06a00f30, 0x0ff00ff0, "ssat16%c\t%12-15r, #%16-19W, %0-3r"},
9748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x01800f90, 0x0ff00ff0, "strex%c\t%12-15r, %0-3r, [%16-19r]"},
9758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x00400090, 0x0ff000f0, "umaal%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
9768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x0780f010, 0x0ff0f0f0, "usad8%c\t%16-19r, %0-3r, %8-11r"},
9778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x07800010, 0x0ff000f0, "usada8%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
9788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06e00010, 0x0fe00ff0, "usat%c\t%12-15r, #%16-20d, %0-3r"},
9798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06e00010, 0x0fe00070, "usat%c\t%12-15r, #%16-20d, %0-3r, lsl #%7-11d"},
9808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06e00050, 0x0fe00070, "usat%c\t%12-15r, #%16-20d, %0-3r, asr #%7-11d"},
9818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x06e00f30, 0x0ff00ff0, "usat16%c\t%12-15r, #%16-19d, %0-3r"},
9828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* V5J instruction.  */
9848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5J, 0x012fff20, 0x0ffffff0, "bxj%c\t%0-3r"},
9858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* V5 Instructions.  */
9878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5, 0xe1200070, 0xfff000f0, "bkpt\t0x%16-19X%12-15X%8-11X%0-3X"},
9888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5, 0xfa000000, 0xfe000000, "blx\t%B"},
9898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5, 0x012fff30, 0x0ffffff0, "blx%c\t%0-3r"},
9908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5, 0x016f0f10, 0x0fff0ff0, "clz%c\t%12-15r, %0-3r"},
9918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
9928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* V5E "El Segundo" Instructions.  */
9938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5E, 0x000000d0, 0x0e1000f0, "ldrd%c\t%12-15r, %s"},
9948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5E, 0x000000f0, 0x0e1000f0, "strd%c\t%12-15r, %s"},
9958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5E, 0xf450f000, 0xfc70f000, "pld\t%a"},
9968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x01000080, 0x0ff000f0, "smlabb%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
9978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x010000a0, 0x0ff000f0, "smlatb%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
9988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x010000c0, 0x0ff000f0, "smlabt%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
9998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x010000e0, 0x0ff000f0, "smlatt%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
10008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x01200080, 0x0ff000f0, "smlawb%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
10028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x012000c0, 0x0ff000f0, "smlawt%c\t%16-19r, %0-3r, %8-11r, %12-15r"},
10038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x01400080, 0x0ff000f0, "smlalbb%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
10058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x014000a0, 0x0ff000f0, "smlaltb%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
10068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x014000c0, 0x0ff000f0, "smlalbt%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
10078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x014000e0, 0x0ff000f0, "smlaltt%c\t%12-15r, %16-19r, %0-3r, %8-11r"},
10088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x01600080, 0x0ff0f0f0, "smulbb%c\t%16-19r, %0-3r, %8-11r"},
10108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x016000a0, 0x0ff0f0f0, "smultb%c\t%16-19r, %0-3r, %8-11r"},
10118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x016000c0, 0x0ff0f0f0, "smulbt%c\t%16-19r, %0-3r, %8-11r"},
10128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x016000e0, 0x0ff0f0f0, "smultt%c\t%16-19r, %0-3r, %8-11r"},
10138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x012000a0, 0x0ff0f0f0, "smulwb%c\t%16-19r, %0-3r, %8-11r"},
10158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x012000e0, 0x0ff0f0f0, "smulwt%c\t%16-19r, %0-3r, %8-11r"},
10168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x01000050, 0x0ff00ff0,  "qadd%c\t%12-15r, %0-3r, %16-19r"},
10188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x01400050, 0x0ff00ff0, "qdadd%c\t%12-15r, %0-3r, %16-19r"},
10198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x01200050, 0x0ff00ff0,  "qsub%c\t%12-15r, %0-3r, %16-19r"},
10208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5ExP, 0x01600050, 0x0ff00ff0, "qdsub%c\t%12-15r, %0-3r, %16-19r"},
10218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM Instructions.  */
10238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00000090, 0x0e100090, "str%6's%5?hb%c\t%12-15r, %s"},
10248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00100090, 0x0e100090, "ldr%6's%5?hb%c\t%12-15r, %s"},
10258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00000000, 0x0de00000, "and%20's%c\t%12-15r, %16-19r, %o"},
10268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00200000, 0x0de00000, "eor%20's%c\t%12-15r, %16-19r, %o"},
10278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00400000, 0x0de00000, "sub%20's%c\t%12-15r, %16-19r, %o"},
10288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00600000, 0x0de00000, "rsb%20's%c\t%12-15r, %16-19r, %o"},
10298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00800000, 0x0de00000, "add%20's%c\t%12-15r, %16-19r, %o"},
10308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00a00000, 0x0de00000, "adc%20's%c\t%12-15r, %16-19r, %o"},
10318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00c00000, 0x0de00000, "sbc%20's%c\t%12-15r, %16-19r, %o"},
10328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00e00000, 0x0de00000, "rsc%20's%c\t%12-15r, %16-19r, %o"},
10338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V3, 0x0120f000, 0x0db0f000, "msr%c\t%22?SCPSR%C, %o"},
10348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V3, 0x010f0000, 0x0fbf0fff, "mrs%c\t%12-15r, %22?SCPSR"},
10358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01000000, 0x0de00000, "tst%p%c\t%16-19r, %o"},
10368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01200000, 0x0de00000, "teq%p%c\t%16-19r, %o"},
10378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01400000, 0x0de00000, "cmp%p%c\t%16-19r, %o"},
10388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01600000, 0x0de00000, "cmn%p%c\t%16-19r, %o"},
10398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01800000, 0x0de00000, "orr%20's%c\t%12-15r, %16-19r, %o"},
10408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x03a00000, 0x0fef0000, "mov%20's%c\t%12-15r, %o"},
10418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01a00000, 0x0def0ff0, "mov%20's%c\t%12-15r, %0-3r"},
10428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01a00000, 0x0def0060, "lsl%20's%c\t%12-15r, %q"},
10438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01a00020, 0x0def0060, "lsr%20's%c\t%12-15r, %q"},
10448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01a00040, 0x0def0060, "asr%20's%c\t%12-15r, %q"},
10458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01a00060, 0x0def0ff0, "rrx%20's%c\t%12-15r, %0-3r"},
10468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01a00060, 0x0def0060, "ror%20's%c\t%12-15r, %q"},
10478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01c00000, 0x0de00000, "bic%20's%c\t%12-15r, %16-19r, %o"},
10488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x01e00000, 0x0de00000, "mvn%20's%c\t%12-15r, %o"},
10498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x052d0004, 0x0fff0fff, "push%c\t{%12-15r}\t\t; (str%c %12-15r, %a)"},
10508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x04000000, 0x0e100000, "str%22'b%t%c\t%12-15r, %a"},
10518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x06000000, 0x0e100ff0, "str%22'b%t%c\t%12-15r, %a"},
10528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x04000000, 0x0c100010, "str%22'b%t%c\t%12-15r, %a"},
10538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x06000010, 0x0e000010, "undefined"},
10548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x049d0004, 0x0fff0fff, "pop%c\t{%12-15r}\t\t; (ldr%c %12-15r, %a)"},
10558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x04100000, 0x0c100000, "ldr%22'b%t%c\t%12-15r, %a"},
10568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x092d0000, 0x0fff0000, "push%c\t%m"},
10578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x08800000, 0x0ff00000, "stm%c\t%16-19r%21'!, %m%22'^"},
10588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x08000000, 0x0e100000, "stm%23?id%24?ba%c\t%16-19r%21'!, %m%22'^"},
10598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x08bd0000, 0x0fff0000, "pop%c\t%m"},
10608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x08900000, 0x0f900000, "ldm%c\t%16-19r%21'!, %m%22'^"},
10618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x08100000, 0x0e100000, "ldm%23?id%24?ba%c\t%16-19r%21'!, %m%22'^"},
10628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x0a000000, 0x0e000000, "b%24'l%c\t%b"},
10638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x0f000000, 0x0f000000, "svc%c\t%0-23x"},
10648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* The rest.  */
10668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1, 0x00000000, 0x00000000, "undefined instruction %0-31x"},
10678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {0, 0x00000000, 0x00000000, 0}
10688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
10698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* print_insn_thumb16 recognizes the following format control codes:
10718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %S                   print Thumb register (bits 3..5 as high number if bit 6 set)
10738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %D                   print Thumb register (bits 0..2 as high number if bit 7 set)
10748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>I         print bitfield as a signed decimal
10758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   				(top bit of range being the sign bit)
10768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %N                   print Thumb register mask (with LR)
10778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %O                   print Thumb register mask (with PC)
10788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %M                   print Thumb register mask
10798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %b			print CZB's 6-bit unsigned branch destination
10808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %s			print Thumb right-shift immediate (6..10; 0 == 32).
10818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %c			print the condition code
10828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %C			print the condition code, or "s" if not conditional
10838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %x			print warning if conditional an not at end of IT block"
10848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %X			print "\t; unpredictable <IT:code>" if conditional
10858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %I			print IT instruction suffix and operands
10868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>r		print bitfield as an ARM register
10878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>d		print bitfield as a decimal
10888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>H         print (bitfield * 2) as a decimal
10898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>W         print (bitfield * 4) as a decimal
10908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>a         print (bitfield * 4) as a pc-rel offset + decoded symbol
10918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>B         print Thumb branch destination (signed displacement)
10928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitfield>c         print bitfield as a condition code
10938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitnum>'c		print specified char iff bit is one
10948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   %<bitnum>?ab		print a if bit is one else print b.  */
10958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
10968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const struct opcode16 thumb_opcodes[] =
10978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
10988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Thumb instructions.  */
10998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V6K no-argument instructions.  */
11018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0xbf00, 0xffff, "nop%c"},
11028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0xbf10, 0xffff, "yield%c"},
11038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0xbf20, 0xffff, "wfe%c"},
11048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0xbf30, 0xffff, "wfi%c"},
11058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0xbf40, 0xffff, "sev%c"},
11068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6K, 0xbf00, 0xff0f, "nop%c\t{%4-7d}"},
11078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V6T2 instructions.  */
11098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xb900, 0xfd00, "cbnz\t%0-2r, %b%X"},
11108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xb100, 0xfd00, "cbz\t%0-2r, %b%X"},
11118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xbf00, 0xff00, "it%I%X"},
11128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V6.  */
11148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xb660, 0xfff8, "cpsie\t%2'a%1'i%0'f%X"},
11158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xb670, 0xfff8, "cpsid\t%2'a%1'i%0'f%X"},
11168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0x4600, 0xffc0, "mov%c\t%0-2r, %3-5r"},
11178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xba00, 0xffc0, "rev%c\t%0-2r, %3-5r"},
11188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xba40, 0xffc0, "rev16%c\t%0-2r, %3-5r"},
11198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xbac0, 0xffc0, "revsh%c\t%0-2r, %3-5r"},
11208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xb650, 0xfff7, "setend\t%3?ble%X"},
11218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xb200, 0xffc0, "sxth%c\t%0-2r, %3-5r"},
11228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xb240, 0xffc0, "sxtb%c\t%0-2r, %3-5r"},
11238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xb280, 0xffc0, "uxth%c\t%0-2r, %3-5r"},
11248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6, 0xb2c0, 0xffc0, "uxtb%c\t%0-2r, %3-5r"},
11258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
11268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V5 ISA extends Thumb.  */
11278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5T, 0xbe00, 0xff00, "bkpt\t%0-7x"}, /* Is always unconditional.  */
11288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* This is BLX(2).  BLX(1) is a 32-bit instruction.  */
11298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V5T, 0x4780, 0xff87, "blx%c\t%3-6r%x"},	/* note: 4 bit register number.  */
11308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* ARM V4T ISA (Thumb v1).  */
11318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x46C0, 0xFFFF, "nop%c\t\t\t(mov r8, r8)"},
11328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Format 4.  */
11338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4000, 0xFFC0, "and%C\t%0-2r, %3-5r"},
11348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4040, 0xFFC0, "eor%C\t%0-2r, %3-5r"},
11358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4080, 0xFFC0, "lsl%C\t%0-2r, %3-5r"},
11368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x40C0, 0xFFC0, "lsr%C\t%0-2r, %3-5r"},
11378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4100, 0xFFC0, "asr%C\t%0-2r, %3-5r"},
11388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4140, 0xFFC0, "adc%C\t%0-2r, %3-5r"},
11398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4180, 0xFFC0, "sbc%C\t%0-2r, %3-5r"},
11408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x41C0, 0xFFC0, "ror%C\t%0-2r, %3-5r"},
11418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4200, 0xFFC0, "tst%c\t%0-2r, %3-5r"},
11428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4240, 0xFFC0, "neg%C\t%0-2r, %3-5r"},
11438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4280, 0xFFC0, "cmp%c\t%0-2r, %3-5r"},
11448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x42C0, 0xFFC0, "cmn%c\t%0-2r, %3-5r"},
11458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4300, 0xFFC0, "orr%C\t%0-2r, %3-5r"},
11468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4340, 0xFFC0, "mul%C\t%0-2r, %3-5r"},
11478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4380, 0xFFC0, "bic%C\t%0-2r, %3-5r"},
11488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x43C0, 0xFFC0, "mvn%C\t%0-2r, %3-5r"},
11498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 13 */
11508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xB000, 0xFF80, "add%c\tsp, #%0-6W"},
11518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xB080, 0xFF80, "sub%c\tsp, #%0-6W"},
11528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 5 */
11538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4700, 0xFF80, "bx%c\t%S%x"},
11548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4400, 0xFF00, "add%c\t%D, %S"},
11558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4500, 0xFF00, "cmp%c\t%D, %S"},
11568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4600, 0xFF00, "mov%c\t%D, %S"},
11578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 14 */
11588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xB400, 0xFE00, "push%c\t%N"},
11598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xBC00, 0xFE00, "pop%c\t%O"},
11608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 2 */
11618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x1800, 0xFE00, "add%C\t%0-2r, %3-5r, %6-8r"},
11628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x1A00, 0xFE00, "sub%C\t%0-2r, %3-5r, %6-8r"},
11638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x1C00, 0xFE00, "add%C\t%0-2r, %3-5r, #%6-8d"},
11648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x1E00, 0xFE00, "sub%C\t%0-2r, %3-5r, #%6-8d"},
11658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 8 */
11668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x5200, 0xFE00, "strh%c\t%0-2r, [%3-5r, %6-8r]"},
11678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x5A00, 0xFE00, "ldrh%c\t%0-2r, [%3-5r, %6-8r]"},
11688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x5600, 0xF600, "ldrs%11?hb%c\t%0-2r, [%3-5r, %6-8r]"},
11698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 7 */
11708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x5000, 0xFA00, "str%10'b%c\t%0-2r, [%3-5r, %6-8r]"},
11718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x5800, 0xFA00, "ldr%10'b%c\t%0-2r, [%3-5r, %6-8r]"},
11728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 1 */
11738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x0000, 0xF800, "lsl%C\t%0-2r, %3-5r, #%6-10d"},
11748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x0800, 0xF800, "lsr%C\t%0-2r, %3-5r, %s"},
11758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x1000, 0xF800, "asr%C\t%0-2r, %3-5r, %s"},
11768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 3 */
11778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x2000, 0xF800, "mov%C\t%8-10r, #%0-7d"},
11788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x2800, 0xF800, "cmp%c\t%8-10r, #%0-7d"},
11798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x3000, 0xF800, "add%C\t%8-10r, #%0-7d"},
11808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x3800, 0xF800, "sub%C\t%8-10r, #%0-7d"},
11818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 6 */
11828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x4800, 0xF800, "ldr%c\t%8-10r, [pc, #%0-7W]\t(%0-7a)"},  /* TODO: Disassemble PC relative "LDR rD,=<symbolic>" */
11838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 9 */
11848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x6000, 0xF800, "str%c\t%0-2r, [%3-5r, #%6-10W]"},
11858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x6800, 0xF800, "ldr%c\t%0-2r, [%3-5r, #%6-10W]"},
11868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x7000, 0xF800, "strb%c\t%0-2r, [%3-5r, #%6-10d]"},
11878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x7800, 0xF800, "ldrb%c\t%0-2r, [%3-5r, #%6-10d]"},
11888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 10 */
11898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x8000, 0xF800, "strh%c\t%0-2r, [%3-5r, #%6-10H]"},
11908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x8800, 0xF800, "ldrh%c\t%0-2r, [%3-5r, #%6-10H]"},
11918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 11 */
11928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x9000, 0xF800, "str%c\t%8-10r, [sp, #%0-7W]"},
11938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0x9800, 0xF800, "ldr%c\t%8-10r, [sp, #%0-7W]"},
11948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 12 */
11958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xA000, 0xF800, "add%c\t%8-10r, pc, #%0-7W\t(adr %8-10r, %0-7a)"},
11968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xA800, 0xF800, "add%c\t%8-10r, sp, #%0-7W"},
11978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 15 */
11988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xC000, 0xF800, "stmia%c\t%8-10r!, %M"},
11998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xC800, 0xF800, "ldmia%c\t%8-10r!, %M"},
12008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 17 */
12018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xDF00, 0xFF00, "svc%c\t%0-7d"},
12028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 16 */
12038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xDE00, 0xFE00, "undefined"},
12048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xD000, 0xF000, "b%8-11c.n\t%0-7B%X"},
12058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* format 18 */
12068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T, 0xE000, 0xF800, "b%c.n\t%0-10B%x"},
12078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* The E800 .. FFFF range is unconditionally redirected to the
12098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project     32-bit table, because even in pre-V6T2 ISAs, BL and BLX(1) pairs
12108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project     are processed via that table.  Thus, we can never encounter a
12118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project     bare "second half of BL/BLX(1)" instruction here.  */
12128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1,  0x0000, 0x0000, "undefined"},
12138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {0, 0, 0, 0}
12148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
12158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Thumb32 opcodes use the same table structure as the ARM opcodes.
12178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   We adopt the convention that hw1 is the high 16 bits of .value and
12188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   .mask, hw2 the low 16 bits.
12198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   print_insn_thumb32 recognizes the following format control codes:
12218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %%		%
12238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %I		print a 12-bit immediate from hw1[10],hw2[14:12,7:0]
12258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %M		print a modified 12-bit immediate (same location)
12268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %J		print a 16-bit immediate from hw1[3:0,10],hw2[14:12,7:0]
12278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %K		print a 16-bit immediate from hw2[3:0],hw1[3:0],hw2[11:4]
12288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %S		print a possibly-shifted Rm
12298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %a		print the address of a plain load/store
12318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %w		print the width and signedness of a core load/store
12328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %m		print register mask for ldm/stm
12338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %E		print the lsb and width fields of a bfc/bfi instruction
12358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %F		print the lsb and width fields of a sbfx/ubfx instruction
12368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %b		print a conditional branch offset
12378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %B		print an unconditional branch offset
12388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %s		print the shift field of an SSAT instruction
12398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %R		print the rotation field of an SXT instruction
12408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %U		print barrier type.
12418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %P		print address for pli instruction.
12428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %c		print the condition code
12438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %x		print warning if conditional an not at end of IT block"
12448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %X		print "\t; unpredictable <IT:code>" if conditional
12458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %<bitfield>d	print bitfield in decimal
12478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %<bitfield>W	print bitfield*4 in decimal
12488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %<bitfield>r	print bitfield as an ARM register
12498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %<bitfield>c	print bitfield as a condition code
12508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %<bitfield>'c	print specified char iff bitfield is all ones
12528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %<bitfield>`c	print specified char iff bitfield is all zeroes
12538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       %<bitfield>?ab... select from array of values in big endian order
12548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   With one exception at the bottom (done because BL and BLX(1) need
12568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   to come dead last), this table was machine-sorted first in
12578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   decreasing order of number of bits set in the mask, then in
12588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   increasing numeric order of mask, then in increasing numeric order
12598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   of opcode.  This order is not the clearest for a human reader, but
12608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   is guaranteed never to catch a special-case bit pattern with a more
12618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   general mask, which is important, because this instruction encoding
12628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   makes heavy use of special-case bit patterns.  */
12638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const struct opcode32 thumb32_opcodes[] =
12648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
12658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* V7 instructions.  */
12668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0xf910f000, 0xff70f000, "pli%c\t%a"},
12678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0xf3af80f0, 0xfffffff0, "dbg%c\t#%0-3d"},
12688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0xf3bf8f50, 0xfffffff0, "dmb%c\t%U"},
12698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0xf3bf8f40, 0xfffffff0, "dsb%c\t%U"},
12708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V7, 0xf3bf8f60, 0xfffffff0, "isb%c\t%U"},
12718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_DIV, 0xfb90f0f0, 0xfff0f0f0, "sdiv%c\t%8-11r, %16-19r, %0-3r"},
12728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_DIV, 0xfbb0f0f0, 0xfff0f0f0, "udiv%c\t%8-11r, %16-19r, %0-3r"},
12738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Instructions defined in the basic V6T2 set.  */
12758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8000, 0xffffffff, "nop%c.w"},
12768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8001, 0xffffffff, "yield%c.w"},
12778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8002, 0xffffffff, "wfe%c.w"},
12788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8003, 0xffffffff, "wfi%c.w"},
12798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af9004, 0xffffffff, "sev%c.w"},
12808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8000, 0xffffff00, "nop%c.w\t{%0-7d}"},
12818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
12828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3bf8f2f, 0xffffffff, "clrex%c"},
12838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8400, 0xffffff1f, "cpsie.w\t%7'a%6'i%5'f%X"},
12848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8600, 0xffffff1f, "cpsid.w\t%7'a%6'i%5'f%X"},
12858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3c08f00, 0xfff0ffff, "bxj%c\t%16-19r%x"},
12868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe810c000, 0xffd0ffff, "rfedb%c\t%16-19r%21'!"},
12878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe990c000, 0xffd0ffff, "rfeia%c\t%16-19r%21'!"},
12888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3ef8000, 0xffeff000, "mrs%c\t%8-11r, %D"},
12898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8100, 0xffffffe0, "cps\t#%0-4d%X"},
12908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8d0f000, 0xfff0fff0, "tbb%c\t[%16-19r, %0-3r]%x"},
12918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8d0f010, 0xfff0fff0, "tbh%c\t[%16-19r, %0-3r, lsl #1]%x"},
12928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8500, 0xffffff00, "cpsie\t%7'a%6'i%5'f, #%0-4d%X"},
12938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3af8700, 0xffffff00, "cpsid\t%7'a%6'i%5'f, #%0-4d%X"},
12948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3de8f00, 0xffffff00, "subs%c\tpc, lr, #%0-7d"},
12958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3808000, 0xffe0f000, "msr%c\t%C, %16-19r"},
12968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8500f00, 0xfff00fff, "ldrex%c\t%12-15r, [%16-19r]"},
12978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8d00f4f, 0xfff00fef, "ldrex%4?hb%c\t%12-15r, [%16-19r]"},
12988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe800c000, 0xffd0ffe0, "srsdb%c\t%16-19r%21'!, #%0-4d"},
12998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe980c000, 0xffd0ffe0, "srsia%c\t%16-19r%21'!, #%0-4d"},
13008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa0ff080, 0xfffff0c0, "sxth%c.w\t%8-11r, %0-3r%R"},
13018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa1ff080, 0xfffff0c0, "uxth%c.w\t%8-11r, %0-3r%R"},
13028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa2ff080, 0xfffff0c0, "sxtb16%c\t%8-11r, %0-3r%R"},
13038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa3ff080, 0xfffff0c0, "uxtb16%c\t%8-11r, %0-3r%R"},
13048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa4ff080, 0xfffff0c0, "sxtb%c.w\t%8-11r, %0-3r%R"},
13058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa5ff080, 0xfffff0c0, "uxtb%c.w\t%8-11r, %0-3r%R"},
13068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8400000, 0xfff000ff, "strex%c\t%8-11r, %12-15r, [%16-19r]"},
13078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8d0007f, 0xfff000ff, "ldrexd%c\t%12-15r, %8-11r, [%16-19r]"},
13088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f000, 0xfff0f0f0, "sadd8%c\t%8-11r, %16-19r, %0-3r"},
13098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f010, 0xfff0f0f0, "qadd8%c\t%8-11r, %16-19r, %0-3r"},
13108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f020, 0xfff0f0f0, "shadd8%c\t%8-11r, %16-19r, %0-3r"},
13118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f040, 0xfff0f0f0, "uadd8%c\t%8-11r, %16-19r, %0-3r"},
13128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f050, 0xfff0f0f0, "uqadd8%c\t%8-11r, %16-19r, %0-3r"},
13138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f060, 0xfff0f0f0, "uhadd8%c\t%8-11r, %16-19r, %0-3r"},
13148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f080, 0xfff0f0f0, "qadd%c\t%8-11r, %0-3r, %16-19r"},
13158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f090, 0xfff0f0f0, "qdadd%c\t%8-11r, %0-3r, %16-19r"},
13168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f0a0, 0xfff0f0f0, "qsub%c\t%8-11r, %0-3r, %16-19r"},
13178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa80f0b0, 0xfff0f0f0, "qdsub%c\t%8-11r, %0-3r, %16-19r"},
13188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f000, 0xfff0f0f0, "sadd16%c\t%8-11r, %16-19r, %0-3r"},
13198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f010, 0xfff0f0f0, "qadd16%c\t%8-11r, %16-19r, %0-3r"},
13208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f020, 0xfff0f0f0, "shadd16%c\t%8-11r, %16-19r, %0-3r"},
13218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f040, 0xfff0f0f0, "uadd16%c\t%8-11r, %16-19r, %0-3r"},
13228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f050, 0xfff0f0f0, "uqadd16%c\t%8-11r, %16-19r, %0-3r"},
13238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f060, 0xfff0f0f0, "uhadd16%c\t%8-11r, %16-19r, %0-3r"},
13248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f080, 0xfff0f0f0, "rev%c.w\t%8-11r, %16-19r"},
13258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f090, 0xfff0f0f0, "rev16%c.w\t%8-11r, %16-19r"},
13268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f0a0, 0xfff0f0f0, "rbit%c\t%8-11r, %16-19r"},
13278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa90f0b0, 0xfff0f0f0, "revsh%c.w\t%8-11r, %16-19r"},
13288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfaa0f000, 0xfff0f0f0, "saddsubx%c\t%8-11r, %16-19r, %0-3r"},
13298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfaa0f010, 0xfff0f0f0, "qaddsubx%c\t%8-11r, %16-19r, %0-3r"},
13308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfaa0f020, 0xfff0f0f0, "shaddsubx%c\t%8-11r, %16-19r, %0-3r"},
13318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfaa0f040, 0xfff0f0f0, "uaddsubx%c\t%8-11r, %16-19r, %0-3r"},
13328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfaa0f050, 0xfff0f0f0, "uqaddsubx%c\t%8-11r, %16-19r, %0-3r"},
13338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfaa0f060, 0xfff0f0f0, "uhaddsubx%c\t%8-11r, %16-19r, %0-3r"},
13348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfaa0f080, 0xfff0f0f0, "sel%c\t%8-11r, %16-19r, %0-3r"},
13358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfab0f080, 0xfff0f0f0, "clz%c\t%8-11r, %16-19r"},
13368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfac0f000, 0xfff0f0f0, "ssub8%c\t%8-11r, %16-19r, %0-3r"},
13378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfac0f010, 0xfff0f0f0, "qsub8%c\t%8-11r, %16-19r, %0-3r"},
13388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfac0f020, 0xfff0f0f0, "shsub8%c\t%8-11r, %16-19r, %0-3r"},
13398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfac0f040, 0xfff0f0f0, "usub8%c\t%8-11r, %16-19r, %0-3r"},
13408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfac0f050, 0xfff0f0f0, "uqsub8%c\t%8-11r, %16-19r, %0-3r"},
13418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfac0f060, 0xfff0f0f0, "uhsub8%c\t%8-11r, %16-19r, %0-3r"},
13428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfad0f000, 0xfff0f0f0, "ssub16%c\t%8-11r, %16-19r, %0-3r"},
13438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfad0f010, 0xfff0f0f0, "qsub16%c\t%8-11r, %16-19r, %0-3r"},
13448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfad0f020, 0xfff0f0f0, "shsub16%c\t%8-11r, %16-19r, %0-3r"},
13458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfad0f040, 0xfff0f0f0, "usub16%c\t%8-11r, %16-19r, %0-3r"},
13468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfad0f050, 0xfff0f0f0, "uqsub16%c\t%8-11r, %16-19r, %0-3r"},
13478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfad0f060, 0xfff0f0f0, "uhsub16%c\t%8-11r, %16-19r, %0-3r"},
13488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfae0f000, 0xfff0f0f0, "ssubaddx%c\t%8-11r, %16-19r, %0-3r"},
13498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfae0f010, 0xfff0f0f0, "qsubaddx%c\t%8-11r, %16-19r, %0-3r"},
13508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfae0f020, 0xfff0f0f0, "shsubaddx%c\t%8-11r, %16-19r, %0-3r"},
13518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfae0f040, 0xfff0f0f0, "usubaddx%c\t%8-11r, %16-19r, %0-3r"},
13528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfae0f050, 0xfff0f0f0, "uqsubaddx%c\t%8-11r, %16-19r, %0-3r"},
13538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfae0f060, 0xfff0f0f0, "uhsubaddx%c\t%8-11r, %16-19r, %0-3r"},
13548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb00f000, 0xfff0f0f0, "mul%c.w\t%8-11r, %16-19r, %0-3r"},
13558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb70f000, 0xfff0f0f0, "usad8%c\t%8-11r, %16-19r, %0-3r"},
13568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa00f000, 0xffe0f0f0, "lsl%20's%c.w\t%8-11r, %16-19r, %0-3r"},
13578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa20f000, 0xffe0f0f0, "lsr%20's%c.w\t%8-11r, %16-19r, %0-3r"},
13588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa40f000, 0xffe0f0f0, "asr%20's%c.w\t%8-11r, %16-19r, %0-3r"},
13598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa60f000, 0xffe0f0f0, "ror%20's%c.w\t%8-11r, %16-19r, %0-3r"},
13608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8c00f40, 0xfff00fe0, "strex%4?hb%c\t%0-3r, %12-15r, [%16-19r]"},
13618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3200000, 0xfff0f0e0, "ssat16%c\t%8-11r, #%0-4d, %16-19r"},
13628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3a00000, 0xfff0f0e0, "usat16%c\t%8-11r, #%0-4d, %16-19r"},
13638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb20f000, 0xfff0f0e0, "smuad%4'x%c\t%8-11r, %16-19r, %0-3r"},
13648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb30f000, 0xfff0f0e0, "smulw%4?tb%c\t%8-11r, %16-19r, %0-3r"},
13658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb40f000, 0xfff0f0e0, "smusd%4'x%c\t%8-11r, %16-19r, %0-3r"},
13668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb50f000, 0xfff0f0e0, "smmul%4'r%c\t%8-11r, %16-19r, %0-3r"},
13678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa00f080, 0xfff0f0c0, "sxtah%c\t%8-11r, %16-19r, %0-3r%R"},
13688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa10f080, 0xfff0f0c0, "uxtah%c\t%8-11r, %16-19r, %0-3r%R"},
13698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa20f080, 0xfff0f0c0, "sxtab16%c\t%8-11r, %16-19r, %0-3r%R"},
13708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa30f080, 0xfff0f0c0, "uxtab16%c\t%8-11r, %16-19r, %0-3r%R"},
13718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa40f080, 0xfff0f0c0, "sxtab%c\t%8-11r, %16-19r, %0-3r%R"},
13728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfa50f080, 0xfff0f0c0, "uxtab%c\t%8-11r, %16-19r, %0-3r%R"},
13738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb10f000, 0xfff0f0c0, "smul%5?tb%4?tb%c\t%8-11r, %16-19r, %0-3r"},
13748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf36f0000, 0xffff8020, "bfc%c\t%8-11r, %E"},
13758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xea100f00, 0xfff08f00, "tst%c.w\t%16-19r, %S"},
13768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xea900f00, 0xfff08f00, "teq%c\t%16-19r, %S"},
13778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xeb100f00, 0xfff08f00, "cmn%c.w\t%16-19r, %S"},
13788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xebb00f00, 0xfff08f00, "cmp%c.w\t%16-19r, %S"},
13798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf0100f00, 0xfbf08f00, "tst%c.w\t%16-19r, %M"},
13808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf0900f00, 0xfbf08f00, "teq%c\t%16-19r, %M"},
13818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf1100f00, 0xfbf08f00, "cmn%c.w\t%16-19r, %M"},
13828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf1b00f00, 0xfbf08f00, "cmp%c.w\t%16-19r, %M"},
13838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xea4f0000, 0xffef8000, "mov%20's%c.w\t%8-11r, %S"},
13848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xea6f0000, 0xffef8000, "mvn%20's%c.w\t%8-11r, %S"},
13858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8c00070, 0xfff000f0, "strexd%c\t%0-3r, %12-15r, %8-11r, [%16-19r]"},
13868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb000000, 0xfff000f0, "mla%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
13878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb000010, 0xfff000f0, "mls%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
13888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb700000, 0xfff000f0, "usada8%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
13898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb800000, 0xfff000f0, "smull%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
13908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfba00000, 0xfff000f0, "umull%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
13918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfbc00000, 0xfff000f0, "smlal%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
13928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfbe00000, 0xfff000f0, "umlal%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
13938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfbe00060, 0xfff000f0, "umaal%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
13948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8500f00, 0xfff00f00, "ldrex%c\t%12-15r, [%16-19r, #%0-7W]"},
13958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf7f08000, 0xfff0f000, "smc%c\t%K"},
13968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf04f0000, 0xfbef8000, "mov%20's%c.w\t%8-11r, %M"},
13978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf06f0000, 0xfbef8000, "mvn%20's%c.w\t%8-11r, %M"},
13988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf810f000, 0xff70f000, "pld%c\t%a"},
13998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb200000, 0xfff000e0, "smlad%4'x%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
14008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb300000, 0xfff000e0, "smlaw%4?tb%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
14018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb400000, 0xfff000e0, "smlsd%4'x%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
14028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb500000, 0xfff000e0, "smmla%4'r%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
14038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb600000, 0xfff000e0, "smmls%4'r%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
14048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfbc000c0, 0xfff000e0, "smlald%4'x%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
14058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfbd000c0, 0xfff000e0, "smlsld%4'x%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
14068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xeac00000, 0xfff08030, "pkhbt%c\t%8-11r, %16-19r, %S"},
14078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xeac00020, 0xfff08030, "pkhtb%c\t%8-11r, %16-19r, %S"},
14088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3400000, 0xfff08020, "sbfx%c\t%8-11r, %16-19r, %F"},
14098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3c00000, 0xfff08020, "ubfx%c\t%8-11r, %16-19r, %F"},
14108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf8000e00, 0xff900f00, "str%wt%c\t%12-15r, %a"},
14118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfb100000, 0xfff000c0, "smla%5?tb%4?tb%c\t%8-11r, %16-19r, %0-3r, %12-15r"},
14128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xfbc00080, 0xfff000c0, "smlal%5?tb%4?tb%c\t%12-15r, %8-11r, %16-19r, %0-3r"},
14138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3600000, 0xfff08020, "bfi%c\t%8-11r, %16-19r, %E"},
14148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf8100e00, 0xfe900f00, "ldr%wt%c\t%12-15r, %a"},
14158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3000000, 0xffd08020, "ssat%c\t%8-11r, #%0-4d, %16-19r%s"},
14168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3800000, 0xffd08020, "usat%c\t%8-11r, #%0-4d, %16-19r%s"},
14178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf2000000, 0xfbf08000, "addw%c\t%8-11r, %16-19r, %I"},
14188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf2400000, 0xfbf08000, "movw%c\t%8-11r, %J"},
14198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf2a00000, 0xfbf08000, "subw%c\t%8-11r, %16-19r, %I"},
14208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf2c00000, 0xfbf08000, "movt%c\t%8-11r, %J"},
14218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xea000000, 0xffe08000, "and%20's%c.w\t%8-11r, %16-19r, %S"},
14228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xea200000, 0xffe08000, "bic%20's%c.w\t%8-11r, %16-19r, %S"},
14238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xea400000, 0xffe08000, "orr%20's%c.w\t%8-11r, %16-19r, %S"},
14248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xea600000, 0xffe08000, "orn%20's%c\t%8-11r, %16-19r, %S"},
14258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xea800000, 0xffe08000, "eor%20's%c.w\t%8-11r, %16-19r, %S"},
14268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xeb000000, 0xffe08000, "add%20's%c.w\t%8-11r, %16-19r, %S"},
14278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xeb400000, 0xffe08000, "adc%20's%c.w\t%8-11r, %16-19r, %S"},
14288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xeb600000, 0xffe08000, "sbc%20's%c.w\t%8-11r, %16-19r, %S"},
14298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xeba00000, 0xffe08000, "sub%20's%c.w\t%8-11r, %16-19r, %S"},
14308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xebc00000, 0xffe08000, "rsb%20's%c\t%8-11r, %16-19r, %S"},
14318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8400000, 0xfff00000, "strex%c\t%8-11r, %12-15r, [%16-19r, #%0-7W]"},
14328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf0000000, 0xfbe08000, "and%20's%c.w\t%8-11r, %16-19r, %M"},
14338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf0200000, 0xfbe08000, "bic%20's%c.w\t%8-11r, %16-19r, %M"},
14348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf0400000, 0xfbe08000, "orr%20's%c.w\t%8-11r, %16-19r, %M"},
14358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf0600000, 0xfbe08000, "orn%20's%c\t%8-11r, %16-19r, %M"},
14368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf0800000, 0xfbe08000, "eor%20's%c.w\t%8-11r, %16-19r, %M"},
14378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf1000000, 0xfbe08000, "add%20's%c.w\t%8-11r, %16-19r, %M"},
14388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf1400000, 0xfbe08000, "adc%20's%c.w\t%8-11r, %16-19r, %M"},
14398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf1600000, 0xfbe08000, "sbc%20's%c.w\t%8-11r, %16-19r, %M"},
14408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf1a00000, 0xfbe08000, "sub%20's%c.w\t%8-11r, %16-19r, %M"},
14418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf1c00000, 0xfbe08000, "rsb%20's%c\t%8-11r, %16-19r, %M"},
14428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8800000, 0xffd00000, "stmia%c.w\t%16-19r%21'!, %m"},
14438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8900000, 0xffd00000, "ldmia%c.w\t%16-19r%21'!, %m"},
14448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe9000000, 0xffd00000, "stmdb%c\t%16-19r%21'!, %m"},
14458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe9100000, 0xffd00000, "ldmdb%c\t%16-19r%21'!, %m"},
14468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe9c00000, 0xffd000ff, "strd%c\t%12-15r, %8-11r, [%16-19r]"},
14478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe9d00000, 0xffd000ff, "ldrd%c\t%12-15r, %8-11r, [%16-19r]"},
14488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe9400000, 0xff500000, "strd%c\t%12-15r, %8-11r, [%16-19r, #%23`-%0-7W]%21'!"},
14498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe9500000, 0xff500000, "ldrd%c\t%12-15r, %8-11r, [%16-19r, #%23`-%0-7W]%21'!"},
14508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8600000, 0xff700000, "strd%c\t%12-15r, %8-11r, [%16-19r], #%23`-%0-7W"},
14518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xe8700000, 0xff700000, "ldrd%c\t%12-15r, %8-11r, [%16-19r], #%23`-%0-7W"},
14528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf8000000, 0xff100000, "str%w%c.w\t%12-15r, %a"},
14538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf8100000, 0xfe100000, "ldr%w%c.w\t%12-15r, %a"},
14548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Filter out Bcc with cond=E or F, which are used for other instructions.  */
14568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3c08000, 0xfbc0d000, "undefined (bcc, cond=0xF)"},
14578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf3808000, 0xfbc0d000, "undefined (bcc, cond=0xE)"},
14588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf0008000, 0xf800d000, "b%22-25c.w\t%b%X"},
14598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V6T2, 0xf0009000, 0xf800d000, "b%c.w\t%B%x"},
14608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* These have been 32-bit since the invention of Thumb.  */
14628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T,  0xf000c000, 0xf800d000, "blx%c\t%B%x"},
14638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V4T,  0xf000d000, 0xf800d000, "bl%c\t%B%x"},
14648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Fallback.  */
14668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {ARM_EXT_V1,   0x00000000, 0x00000000, "undefined"},
14678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  {0, 0, 0, 0}
14688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
14698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const char *const arm_conditional[] =
14718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{"eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc",
14728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project "hi", "ls", "ge", "lt", "gt", "le", "al", "<und>", ""};
14738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const char *const arm_fp_const[] =
14758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{"0.0", "1.0", "2.0", "3.0", "4.0", "5.0", "0.5", "10.0"};
14768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const char *const arm_shift[] =
14788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{"lsl", "lsr", "asr", "ror"};
14798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct
14818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const char *name;
14838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const char *description;
14848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const char *reg_names[16];
14858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
14868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectarm_regname;
14878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
14888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const arm_regname regnames[] =
14898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
14908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  { "raw" , "Select raw register names",
14918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"}},
14928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  { "gcc",  "Select register names used by GCC",
14938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "sl",  "fp",  "ip",  "sp",  "lr",  "pc" }},
14948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  { "std",  "Select register names used in ARM's ISA documentation",
14958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "sp",  "lr",  "pc" }},
14968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  { "apcs", "Select register names used in the APCS",
14978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "sl",  "fp",  "ip",  "sp",  "lr",  "pc" }},
14988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  { "atpcs", "Select register names used in the ATPCS",
14998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "v4", "v5", "v6", "v7",  "v8",  "IP",  "SP",  "LR",  "PC" }},
15008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  { "special-atpcs", "Select special register names used in the ATPCS",
15018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    { "a1", "a2", "a3", "a4", "v1", "v2", "v3", "WR", "v5", "SB", "SL",  "FP",  "IP",  "SP",  "LR",  "PC" }},
15028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
15038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const char *const iwmmxt_wwnames[] =
15058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{"b", "h", "w", "d"};
15068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const char *const iwmmxt_wwssnames[] =
15088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{"b", "bus", "bc", "bss",
15098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project "h", "hus", "hc", "hss",
15108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project "w", "wus", "wc", "wss",
15118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project "d", "dus", "dc", "dss"
15128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
15138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const char *const iwmmxt_regnames[] =
15158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ "wr0", "wr1", "wr2", "wr3", "wr4", "wr5", "wr6", "wr7",
15168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  "wr8", "wr9", "wr10", "wr11", "wr12", "wr13", "wr14", "wr15"
15178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
15188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const char *const iwmmxt_cregnames[] =
15208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ "wcid", "wcon", "wcssf", "wcasf", "reserved", "reserved", "reserved", "reserved",
15218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  "wcgr0", "wcgr1", "wcgr2", "wcgr3", "reserved", "reserved", "reserved", "reserved"
15228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
15238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Default to GCC register name set.  */
15258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic unsigned int regname_selected = 1;
15268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define NUM_ARM_REGNAMES  NUM_ELEM (regnames)
15288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define arm_regnames      regnames[regname_selected].reg_names
15298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1530dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turnerstatic bfd_boolean force_thumb = false;
15318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Current IT instruction state.  This contains the same state as the IT
15338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   bits in the CPSR.  */
15348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic unsigned int ifthen_state;
15358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* IT state for the next instruction.  */
15368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic unsigned int ifthen_next_state;
15378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* The address of the insn for which the IT state is valid.  */
15388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic bfd_vma ifthen_address;
15398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define IFTHEN_COND ((ifthen_state >> 4) & 0xf)
15408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Cached mapping symbol state.  */
15428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectenum map_type {
15438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  MAP_ARM,
15448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  MAP_THUMB,
15458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  MAP_DATA
15468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
15478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectenum map_type last_type;
15498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint last_mapping_sym = -1;
15508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectbfd_vma last_mapping_addr = 0;
15518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Decode a bitfield of the form matching regexp (N(-N)?,)*N(-N)?.
15538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   Returns pointer to following character of the format string and
15548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   fills in *VALUEP and *WIDTHP with the extracted value and number of
15558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   bits extracted.  WIDTHP can be NULL. */
15568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const char *
15588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectarm_decode_bitfield (const char *ptr, unsigned long insn,
15598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		     unsigned long *valuep, int *widthp)
15608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned long value = 0;
15628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  int width = 0;
15638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  do
15658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
15668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      int start, end;
15678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      int bits;
15688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      for (start = 0; *ptr >= '0' && *ptr <= '9'; ptr++)
15708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	start = start * 10 + *ptr - '0';
15718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (*ptr == '-')
15728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	for (end = 0, ptr++; *ptr >= '0' && *ptr <= '9'; ptr++)
15738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  end = end * 10 + *ptr - '0';
15748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
15758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	end = start;
15768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      bits = end - start;
15778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (bits < 0)
15788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	abort ();
15798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      value |= ((insn >> start) & ((2ul << bits) - 1)) << width;
15808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      width += bits + 1;
15818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
15828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  while (*ptr++ == ',');
15838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  *valuep = value;
15848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (widthp)
15858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    *widthp = width;
15868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  return ptr - 1;
15878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
15888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void
1590c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turnerarm_decode_shift (long given, fprintf_function func, void *stream,
15918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int print_shift)
15928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
15938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  func (stream, "%s", arm_regnames[given & 0xf]);
15948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if ((given & 0xff0) != 0)
15968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
15978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if ((given & 0x10) == 0)
15988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
15998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  int amount = (given & 0xf80) >> 7;
16008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  int shift = (given & 0x60) >> 5;
16018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if (amount == 0)
16038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
16048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (shift == 3)
16058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
16068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, ", rrx");
16078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  return;
16088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
16098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      amount = 32;
16118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
16128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if (print_shift)
16148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    func (stream, ", %s #%d", arm_shift[shift], amount);
16158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  else
16168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    func (stream, ", #%d", amount);
16178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
16188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else if (print_shift)
16198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	func (stream, ", %s %s", arm_shift[(given & 0x60) >> 5],
16208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      arm_regnames[(given & 0xf00) >> 8]);
16218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
16228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	func (stream, ", %s", arm_regnames[(given & 0xf00) >> 8]);
16238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
16248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
16258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Print one coprocessor instruction on INFO->STREAM.
1627dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner   Return true if the instuction matched, false if this is not a
16288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   recognised coprocessor instruction.  */
16298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic bfd_boolean
16318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectprint_insn_coprocessor (bfd_vma pc, struct disassemble_info *info, long given,
16328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			bfd_boolean thumb)
16338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
16348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const struct opcode32 *insn;
16358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  void *stream = info->stream;
1636c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner  fprintf_function func = info->fprintf_func;
16378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned long mask;
16388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned long value;
16398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  int cond;
16408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (insn = coprocessor_opcodes; insn->assembler; insn++)
16428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
16438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (insn->value == FIRST_IWMMXT_INSN
16448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  && info->mach != bfd_mach_arm_XScale
16458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  && info->mach != bfd_mach_arm_iWMMXt
16468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  && info->mach != bfd_mach_arm_iWMMXt2)
16478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	insn = insn + IWMMXT_INSN_COUNT;
16488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      mask = insn->mask;
16508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      value = insn->value;
16518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (thumb)
16528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
16538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* The high 4 bits are 0xe for Arm conditional instructions, and
16548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     0xe for arm unconditional instructions.  The rest of the
16558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     encoding is the same.  */
16568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  mask |= 0xf0000000;
16578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  value |= 0xe0000000;
16588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if (ifthen_state)
16598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    cond = IFTHEN_COND;
16608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  else
16618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    cond = 16;
16628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
16638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
16648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
16658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* Only match unconditional instuctions against unconditional
16668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     patterns.  */
16678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if ((given & 0xf0000000) == 0xf0000000)
16688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
16698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      mask |= 0xf0000000;
16708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      cond = 16;
16718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
16728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  else
16738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
16748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      cond = (given >> 28) & 0xf;
16758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (cond == 0xe)
16768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		cond = 16;
16778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
16788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
16798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if ((given & mask) == value)
16808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
16818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  const char *c;
16828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  for (c = insn->assembler; *c; c++)
16848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
16858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (*c == '%')
16868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
16878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  switch (*++c)
16888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
16898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '%':
16908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "%%");
16918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
16928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'A':
16948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "[%s", arm_regnames [(given >> 16) & 0xf]);
16958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
16968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if ((given & (1 << 24)) != 0)
16978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
16988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int offset = given & 0xff;
16998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if (offset)
17018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, ", #%s%d]%s",
17028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  ((given & 0x00800000) == 0 ? "-" : ""),
17038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  offset * 4,
17048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  ((given & 0x00200000) != 0 ? "!" : ""));
17058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  else
17068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "]");
17078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
17088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      else
17098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
17108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int offset = given & 0xff;
17118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "]");
17138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if (given & (1 << 21))
17158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
17168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (offset)
17178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, ", #%s%d",
17188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      ((given & 0x00800000) == 0 ? "-" : ""),
17198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      offset * 4);
17208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
17218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  else
17228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, ", {%d}", offset);
17238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
17248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
17258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'B':
17278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
17288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int regno = ((given >> 12) & 0xf) | ((given >> (22 - 4)) & 0x10);
17298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int offset = (given >> 1) & 0x3f;
17308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (offset == 1)
17328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "{d%d}", regno);
17338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (regno + offset > 32)
17348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "{d%d-<overflow reg d%d>}", regno, regno + offset - 1);
17358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else
17368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "{d%d-d%d}", regno, regno + offset - 1);
17378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
17388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
17398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'C':
17418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
17428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rn = (given >> 16) & 0xf;
17438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int offset = (given & 0xff) * 4;
17448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int add = (given >> 23) & 1;
17458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "[%s", arm_regnames[rn]);
17478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (offset)
17498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
17508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (!add)
17518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      offset = -offset;
17528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, ", #%d", offset);
17538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
17548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "]");
17558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (rn == 15)
17568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
17578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "\t; ");
17588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            /* FIXME: Unsure if info->bytes_per_chunk is the
17598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                               right thing to use here.  */
17608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    info->print_address_func (offset + pc
17618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              + info->bytes_per_chunk * 2, info);
17628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
17638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
17648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
17658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'c':
17678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "%s", arm_conditional[cond]);
17688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
17698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'I':
17718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      /* Print a Cirrus/DSP shift immediate.  */
17728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      /* Immediates are 7bit signed ints with bits 0..3 in
17738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			 bits 0..3 of opcode and bits 4..6 in bits 5..7
17748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			 of opcode.  */
17758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
17768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int imm;
17778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			imm = (given & 0xf) | ((given & 0xe0) >> 1);
17798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			/* Is ``imm'' a negative number?  */
17818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (imm & 0x40)
17828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  imm |= (-1 << 7);
17838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%d", imm);
17858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
17868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
17888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
17898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'F':
17908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      switch (given & 0x00408000)
17918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
17928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0:
17938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "4");
17948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
17958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x8000:
17968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "1");
17978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
17988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x00400000:
17998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "2");
18008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			default:
18028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "3");
18038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
18048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
18058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'P':
18078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      switch (given & 0x00080080)
18088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
18098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0:
18108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "s");
18118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x80:
18138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "d");
18148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x00080000:
18168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "e");
18178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			default:
18198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, _("<illegal precision>"));
18208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
18228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
18238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'Q':
18248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      switch (given & 0x00408000)
18258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
18268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0:
18278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "s");
18288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x8000:
18308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "d");
18318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x00400000:
18338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "e");
18348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			default:
18368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "p");
18378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
18398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
18408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'R':
18418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      switch (given & 0x60)
18428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
18438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0:
18448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x20:
18468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "p");
18478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x40:
18498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "m");
18508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			default:
18528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "z");
18538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
18548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
18558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
18568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '0': case '1': case '2': case '3': case '4':
18588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '5': case '6': case '7': case '8': case '9':
18598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
18608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int width;
18618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			unsigned long value;
18628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			c = arm_decode_bitfield (c, given, &value, &width);
18648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			switch (*c)
18668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
18678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'r':
18688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%s", arm_regnames[value]);
18698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
18708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'D':
18718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "d%ld", value);
18728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
18738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'Q':
18748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (value & 1)
18758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "<illegal reg q%ld.5>", value >> 1);
18768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    else
18778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "q%ld", value >> 1);
18788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
18798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'd':
18808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%ld", value);
18818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
18828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          case 'k':
18838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            {
18848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              int from = (given & (1 << 7)) ? 32 : 16;
18858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              func (stream, "%ld", from - value);
18868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            }
18878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            break;
18888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'f':
18908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (value > 7)
18918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "#%s", arm_fp_const[value & 7]);
18928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    else
18938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "f%ld", value);
18948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
18958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
18968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'w':
18978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (width == 2)
18988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "%s", iwmmxt_wwnames[value]);
18998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    else
19008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "%s", iwmmxt_wwssnames[value]);
19018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
19028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'g':
19048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%s", iwmmxt_regnames[value]);
19058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
19068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'G':
19078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%s", iwmmxt_cregnames[value]);
19088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
19098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'x':
19118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "0x%lx", value);
19128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
19138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case '`':
19158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    c++;
19168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (value == 0)
19178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "%c", *c);
19188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
19198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case '\'':
19208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    c++;
19218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (value == ((1ul << width) - 1))
19228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "%c", *c);
19238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
19248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case '?':
19258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%c", c[(1 << width) - (int)value]);
19268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    c += 1 << width;
19278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
19288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  default:
19298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    abort ();
19308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
19318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
19328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'y':
19348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'z':
19358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
19368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int single = *c++ == 'y';
19378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int regno;
19388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  switch (*c)
19408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
19418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case '4': /* Sm pair */
19428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "{");
19438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      /* Fall through.  */
19448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case '0': /* Sm, Dm */
19458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      regno = given & 0x0000000f;
19468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (single)
19478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				{
19488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  regno <<= 1;
19498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  regno += (given >> 5) & 1;
19508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				}
19518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              else
19528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                regno += ((given >> 5) & 1) << 4;
19538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      break;
19548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case '1': /* Sd, Dd */
19568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      regno = (given >> 12) & 0x0000000f;
19578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (single)
19588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				{
19598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  regno <<= 1;
19608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  regno += (given >> 22) & 1;
19618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				}
19628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              else
19638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                regno += ((given >> 22) & 1) << 4;
19648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      break;
19658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case '2': /* Sn, Dn */
19678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      regno = (given >> 16) & 0x0000000f;
19688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (single)
19698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				{
19708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  regno <<= 1;
19718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  regno += (given >> 7) & 1;
19728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				}
19738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              else
19748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                regno += ((given >> 7) & 1) << 4;
19758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      break;
19768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case '3': /* List */
19788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "{");
19798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      regno = (given >> 12) & 0x0000000f;
19808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (single)
19818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				{
19828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  regno <<= 1;
19838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  regno += (given >> 22) & 1;
19848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				}
19858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              else
19868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                regno += ((given >> 22) & 1) << 4;
19878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      break;
19888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    default:
19908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      abort ();
19918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
19928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "%c%d", single ? 's' : 'd', regno);
19948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if (*c == '3')
19968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
19978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      int count = given & 0xff;
19988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
19998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (single == 0)
20008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				count >>= 1;
20018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (--count)
20038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				{
20048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  func (stream, "-%c%d",
20058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					single ? 's' : 'd',
20068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					regno + count);
20078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				}
20088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "}");
20108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
20118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  else if (*c == '4')
20128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, ", %c%d}", single ? 's' : 'd',
20138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  regno + 1);
20148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
20158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
20168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'L':
20188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			switch (given & 0x00400100)
20198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
20208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 0x00000000: func (stream, "b"); break;
20218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 0x00400000: func (stream, "h"); break;
20228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 0x00000100: func (stream, "w"); break;
20238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 0x00400100: func (stream, "d"); break;
20248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  default:
20258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
20268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
20278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
20288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'Z':
20308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
20318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int value;
20328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  /* given (20, 23) | given (0, 3) */
20338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  value = ((given >> 16) & 0xf0) | (given & 0xf);
20348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "%d", value);
20358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
20368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
20378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'l':
20398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			/* This is like the 'A' operator, except that if
20408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			   the width field "M" is zero, then the offset is
20418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			   *not* multiplied by four.  */
20428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
20438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int offset = given & 0xff;
20448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int multiplier = (given & 0x00000100) ? 4 : 1;
20458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "[%s", arm_regnames [(given >> 16) & 0xf]);
20478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if (offset)
20498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
20508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if ((given & 0x01000000) != 0)
20518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, ", #%s%d]%s",
20528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      ((given & 0x00800000) == 0 ? "-" : ""),
20538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      offset * multiplier,
20548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      ((given & 0x00200000) != 0 ? "!" : ""));
20558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      else
20568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, "], #%s%d",
20578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      ((given & 0x00800000) == 0 ? "-" : ""),
20588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      offset * multiplier);
20598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
20608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  else
20618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "]");
20628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
20638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
20648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'r':
20668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
20678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int imm4 = (given >> 4) & 0xf;
20688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int puw_bits = ((given >> 22) & 6) | ((given >> 21) & 1);
20698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int ubit = (given >> 23) & 1;
20708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  const char *rm = arm_regnames [given & 0xf];
20718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  const char *rn = arm_regnames [(given >> 16) & 0xf];
20728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  switch (puw_bits)
20748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
20758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case 1:
20768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      /* fall through */
20778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case 3:
20788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "[%s], %c%s", rn, ubit ? '+' : '-', rm);
20798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (imm4)
20808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, ", lsl #%d", imm4);
20818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      break;
20828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case 4:
20848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      /* fall through */
20858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case 5:
20868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      /* fall through */
20878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case 6:
20888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      /* fall through */
20898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    case 7:
20908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "[%s, %c%s", rn, ubit ? '+' : '-', rm);
20918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (imm4 > 0)
20928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, ", lsl #%d", imm4);
20938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "]");
20948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (puw_bits == 5 || puw_bits == 7)
20958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, "!");
20968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      break;
20978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
20988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    default:
20998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "INVALID");
21008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
21018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
21028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
21038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'i':
21058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
21068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  long imm5;
21078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  imm5 = ((given & 0x100) >> 4) | (given & 0xf);
21088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "%ld", (imm5 == 0) ? 32 : imm5);
21098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
21108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
21118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      default:
21138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			abort ();
21148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
21158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
21168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
21178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      else
21188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, "%c", *c);
21198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
2120dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner	  return true;
21218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
21228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
2123dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner  return false;
21248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
21258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void
21278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectprint_arm_address (bfd_vma pc, struct disassemble_info *info, long given)
21288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
21298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  void *stream = info->stream;
2130c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner  fprintf_function func = info->fprintf_func;
21318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (((given & 0x000f0000) == 0x000f0000)
21338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      && ((given & 0x02000000) == 0))
21348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
21358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      int offset = given & 0xfff;
21368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      func (stream, "[pc");
21388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (given & 0x01000000)
21408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
21418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if ((given & 0x00800000) == 0)
21428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    offset = - offset;
21438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* Pre-indexed.  */
21458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  func (stream, ", #%d]", offset);
21468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  offset += pc + 8;
21488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* Cope with the possibility of write-back
21508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     being used.  Probably a very dangerous thing
21518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     for the programmer to do, but who are we to
21528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     argue ?  */
21538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if (given & 0x00200000)
21548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    func (stream, "!");
21558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
21568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
21578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
21588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* Post indexed.  */
21598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  func (stream, "], #%d", offset);
21608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* ie ignore the offset.  */
21628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  offset = pc + 8;
21638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
21648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      func (stream, "\t; ");
21668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      info->print_address_func (offset, info);
21678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
21688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  else
21698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
21708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      func (stream, "[%s",
21718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    arm_regnames[(given >> 16) & 0xf]);
21728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if ((given & 0x01000000) != 0)
21738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
21748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if ((given & 0x02000000) == 0)
21758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
21768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      int offset = given & 0xfff;
21778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (offset)
21788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, ", #%s%d",
21798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      (((given & 0x00800000) == 0)
21808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		       ? "-" : ""), offset);
21818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
21828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  else
21838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
21848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      func (stream, ", %s",
21858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    (((given & 0x00800000) == 0)
21868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		     ? "-" : ""));
21878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      arm_decode_shift (given, func, stream, 1);
21888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
21898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
21908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  func (stream, "]%s",
21918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		((given & 0x00200000) != 0) ? "!" : "");
21928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
21938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
21948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
21958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if ((given & 0x02000000) == 0)
21968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
21978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      int offset = given & 0xfff;
21988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (offset)
21998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, "], #%s%d",
22008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      (((given & 0x00800000) == 0)
22018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		       ? "-" : ""), offset);
22028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      else
22038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, "]");
22048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
22058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  else
22068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
22078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      func (stream, "], %s",
22088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    (((given & 0x00800000) == 0)
22098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		     ? "-" : ""));
22108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      arm_decode_shift (given, func, stream, 1);
22118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
22128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
22138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
22148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
22158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Print one neon instruction on INFO->STREAM.
2217dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner   Return true if the instuction matched, false if this is not a
22188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   recognised neon instruction.  */
22198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic bfd_boolean
22218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectprint_insn_neon (struct disassemble_info *info, long given, bfd_boolean thumb)
22228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
22238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const struct opcode32 *insn;
22248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  void *stream = info->stream;
2225c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner  fprintf_function func = info->fprintf_func;
22268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (thumb)
22288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
22298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if ((given & 0xef000000) == 0xef000000)
22308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
22318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* move bit 28 to bit 24 to translate Thumb2 to ARM encoding.  */
22328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  unsigned long bit28 = given & (1 << 28);
22338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  given &= 0x00ffffff;
22358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if (bit28)
22368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            given |= 0xf3000000;
22378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project          else
22388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    given |= 0xf2000000;
22398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
22408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else if ((given & 0xff000000) == 0xf9000000)
22418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	given ^= 0xf9000000 ^ 0xf4000000;
22428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
2243dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner	return false;
22448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
22458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (insn = neon_opcodes; insn->assembler; insn++)
22478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
22488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if ((given & insn->mask) == insn->value)
22498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
22508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  const char *c;
22518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  for (c = insn->assembler; *c; c++)
22538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
22548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (*c == '%')
22558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
22568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  switch (*++c)
22578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
22588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '%':
22598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "%%");
22608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
22618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'c':
22638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (thumb && ifthen_state)
22648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%s", arm_conditional[IFTHEN_COND]);
22658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
22668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'A':
22688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
22698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			static const unsigned char enc[16] =
22708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
22718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x4, 0x14, /* st4 0,1 */
22728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x4, /* st1 2 */
22738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x4, /* st2 3 */
22748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x3, /* st3 4 */
22758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x13, /* st3 5 */
22768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x3, /* st1 6 */
22778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x1, /* st1 7 */
22788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x2, /* st2 8 */
22798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x12, /* st2 9 */
22808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0x2, /* st1 10 */
22818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  0, 0, 0, 0, 0
22828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			};
22838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
22848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rn = ((given >> 16) & 0xf);
22858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rm = ((given >> 0) & 0xf);
22868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int align = ((given >> 4) & 0x3);
22878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int type = ((given >> 8) & 0xf);
22888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int n = enc[type] & 0xf;
22898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int stride = (enc[type] >> 4) + 1;
22908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int ix;
22918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
22928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "{");
22938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (stride > 1)
22948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  for (ix = 0; ix != n; ix++)
22958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%sd%d", ix ? "," : "", rd + ix * stride);
22968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (n == 1)
22978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "d%d", rd);
22988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else
22998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "d%d-d%d", rd, rd + n - 1);
23008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "}, [%s", arm_regnames[rn]);
23018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (align)
23028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, ", :%d", 32 << align);
23038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "]");
23048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (rm == 0xd)
23058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "!");
23068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (rm != 0xf)
23078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, ", %s", arm_regnames[rm]);
23088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
23098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
23108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'B':
23128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
23138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
23148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rn = ((given >> 16) & 0xf);
23158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rm = ((given >> 0) & 0xf);
23168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int idx_align = ((given >> 4) & 0xf);
23178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        int align = 0;
23188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int size = ((given >> 10) & 0x3);
23198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int idx = idx_align >> (size + 1);
23208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        int length = ((given >> 8) & 3) + 1;
23218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        int stride = 1;
23228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        int i;
23238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        if (length > 1 && size > 0)
23258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          stride = (idx_align & (1 << size)) ? 2 : 1;
23268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        switch (length)
23288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          {
23298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          case 1:
23308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            {
23318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              int amask = (1 << size) - 1;
23328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              if ((idx_align & (1 << size)) != 0)
2333dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner                                return false;
23348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              if (size > 0)
23358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                {
23368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                  if ((idx_align & amask) == amask)
23378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    align = 8 << size;
23388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                  else if ((idx_align & amask) != 0)
2339dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner                                    return false;
23408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                }
23418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              }
23428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            break;
23438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          case 2:
23458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            if (size == 2 && (idx_align & 2) != 0)
2346dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner                              return false;
23478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            align = (idx_align & 1) ? 16 << size : 0;
23488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            break;
23498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          case 3:
23518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            if ((size == 2 && (idx_align & 3) != 0)
23528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                || (idx_align & 1) != 0)
2353dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner                              return false;
23548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            break;
23558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          case 4:
23578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            if (size == 2)
23588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              {
23598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                if ((idx_align & 3) == 3)
2360dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner                                  return false;
23618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                align = (idx_align & 3) * 64;
23628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              }
23638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            else
23648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              align = (idx_align & 1) ? 32 << size : 0;
23658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            break;
23668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          default:
23688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            abort ();
23698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          }
23708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "{");
23728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        for (i = 0; i < length; i++)
23738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          func (stream, "%sd%d[%d]", (i == 0) ? "" : ",",
23748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            rd + i * stride, idx);
23758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        func (stream, "}, [%s", arm_regnames[rn]);
23768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (align)
23778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, ", :%d", align);
23788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "]");
23798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (rm == 0xd)
23808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "!");
23818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (rm != 0xf)
23828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, ", %s", arm_regnames[rm]);
23838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
23848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
23858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'C':
23878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
23888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rd = ((given >> 12) & 0xf) | (((given >> 22) & 1) << 4);
23898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rn = ((given >> 16) & 0xf);
23908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int rm = ((given >> 0) & 0xf);
23918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int align = ((given >> 4) & 0x1);
23928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int size = ((given >> 6) & 0x3);
23938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int type = ((given >> 8) & 0x3);
23948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int n = type + 1;
23958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int stride = ((given >> 5) & 0x1);
23968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int ix;
23978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
23988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (stride && (n == 1))
23998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  n++;
24008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else
24018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  stride++;
24028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
24038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "{");
24048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (stride > 1)
24058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  for (ix = 0; ix != n; ix++)
24068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%sd%d[]", ix ? "," : "", rd + ix * stride);
24078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (n == 1)
24088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "d%d[]", rd);
24098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else
24108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "d%d[]-d%d[]", rd, rd + n - 1);
24118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "}, [%s", arm_regnames[rn]);
24128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (align)
24138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
24148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            int align = (8 * (type + 1)) << size;
24158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            if (type == 3)
24168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              align = (size > 1) ? align >> 1 : align;
24178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (type == 2 || (type == 0 && !size))
24188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, ", :<bad align %d>", align);
24198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    else
24208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, ", :%d", align);
24218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
24228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "]");
24238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (rm == 0xd)
24248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "!");
24258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (rm != 0xf)
24268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, ", %s", arm_regnames[rm]);
24278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
24288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
24298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
24308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'D':
24318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
24328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int raw_reg = (given & 0xf) | ((given >> 1) & 0x10);
24338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int size = (given >> 20) & 3;
24348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int reg = raw_reg & ((4 << size) - 1);
24358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int ix = raw_reg >> size >> 2;
24368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
24378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "d%d[%d]", reg, ix);
24388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
24398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
24408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
24418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'E':
24428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      /* Neon encoded constant for mov, mvn, vorr, vbic */
24438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
24448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int bits = 0;
24458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int cmode = (given >> 8) & 0xf;
24468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int op = (given >> 5) & 0x1;
24478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			unsigned long value = 0, hival = 0;
24488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			unsigned shift;
24498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        int size = 0;
24508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        int isfloat = 0;
24518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
24528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			bits |= ((given >> 24) & 1) << 7;
24538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			bits |= ((given >> 16) & 7) << 4;
24548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			bits |= ((given >> 0) & 15) << 0;
24558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
24568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (cmode < 8)
24578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
24588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    shift = (cmode >> 1) & 3;
24598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    value = (unsigned long)bits << (8 * shift);
24608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            size = 32;
24618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
24628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (cmode < 12)
24638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
24648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    shift = (cmode >> 1) & 1;
24658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    value = (unsigned long)bits << (8 * shift);
24668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            size = 16;
24678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
24688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (cmode < 14)
24698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
24708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    shift = (cmode & 1) + 1;
24718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    value = (unsigned long)bits << (8 * shift);
24728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    value |= (1ul << (8 * shift)) - 1;
24738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            size = 32;
24748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
24758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (cmode == 14)
24768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
24778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (op)
24788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      {
24798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				/* bit replication into bytes */
24808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				int ix;
24818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				unsigned long mask;
24828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
24838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				value = 0;
24848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                hival = 0;
24858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				for (ix = 7; ix >= 0; ix--)
24868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  {
24878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				    mask = ((bits >> ix) & 1) ? 0xff : 0;
24888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    if (ix <= 3)
24898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      value = (value << 8) | mask;
24908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    else
24918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      hival = (hival << 8) | mask;
24928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  }
24938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                size = 64;
24948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      }
24958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            else
24968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              {
24978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                /* byte replication */
24988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                value = (unsigned long)bits;
24998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                size = 8;
25008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              }
25018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
25028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (!op)
25038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
25048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    /* floating point encoding */
25058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    int tmp;
25068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    value = (unsigned long)(bits & 0x7f) << 19;
25088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    value |= (unsigned long)(bits & 0x80) << 24;
25098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    tmp = bits & 0x40 ? 0x3c : 0x40;
25108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    value |= (unsigned long)tmp << 24;
25118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            size = 32;
25128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            isfloat = 1;
25138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
25148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else
25158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
25168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "<illegal constant %.8x:%x:%x>",
25178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                  bits, cmode, op);
25188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
25198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
25208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                        switch (size)
25218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          {
25228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          case 8:
25238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "#%ld\t; 0x%.2lx", value, value);
25248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            break;
25258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          case 16:
25278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            func (stream, "#%ld\t; 0x%.4lx", value, value);
25288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            break;
25298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          case 32:
25318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            if (isfloat)
25328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              {
25338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                unsigned char valbytes[4];
25348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                double fvalue;
25358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                /* Do this a byte at a time so we don't have to
25378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                   worry about the host's endianness.  */
25388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                valbytes[0] = value & 0xff;
25398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                valbytes[1] = (value >> 8) & 0xff;
25408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                valbytes[2] = (value >> 16) & 0xff;
25418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                valbytes[3] = (value >> 24) & 0xff;
25428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
254375fb4a08de4abce11ee7cf81bcddd5193eb0438dDavid Turner                                floatformat_to_double (valbytes, &fvalue);
25448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                func (stream, "#%.7g\t; 0x%.8lx", fvalue,
25468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                      value);
25478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              }
25488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            else
25498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              func (stream, "#%ld\t; 0x%.8lx",
25508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				(long) ((value & 0x80000000)
25518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					? value | ~0xffffffffl : value), value);
25528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            break;
25538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          case 64:
25558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            func (stream, "#0x%.8lx%.8lx", hival, value);
25568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            break;
25578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          default:
25598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                            abort ();
25608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          }
25618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
25628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
25638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'F':
25658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
25668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int regno = ((given >> 16) & 0xf) | ((given >> (7 - 4)) & 0x10);
25678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int num = (given >> 8) & 0x3;
25688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (!num)
25708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "{d%d}", regno);
25718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else if (num + regno >= 32)
25728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "{d%d-<overflow reg d%d}", regno, regno + num);
25738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			else
25748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "{d%d-d%d}", regno, regno + num);
25758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
25768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
25778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '0': case '1': case '2': case '3': case '4':
25808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '5': case '6': case '7': case '8': case '9':
25818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
25828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int width;
25838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			unsigned long value;
25848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			c = arm_decode_bitfield (c, given, &value, &width);
25868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			switch (*c)
25888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
25898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'r':
25908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%s", arm_regnames[value]);
25918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
25928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'd':
25938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%ld", value);
25948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
25958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'e':
25968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%ld", (1ul << width) - value);
25978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
25988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
25998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'S':
26008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'T':
26018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'U':
26028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    /* various width encodings */
26038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
26048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      int base = 8 << (*c - 'S'); /* 8,16 or 32 */
26058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      int limit;
26068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      unsigned low, high;
26078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
26088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      c++;
26098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (*c >= '0' && *c <= '9')
26108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				limit = *c - '0';
26118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      else if (*c >= 'a' && *c <= 'f')
26128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				limit = *c - 'a' + 10;
26138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      else
26148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				abort ();
26158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      low = limit >> 2;
26168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      high = limit & 3;
26178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
26188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (value < low || value > high)
26198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, "<illegal width %d>", base << value);
26208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      else
26218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, "%d", base << value);
26228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
26238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
26248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'R':
26258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (given & (1 << 6))
26268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      goto Q;
26278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    /* FALLTHROUGH */
26288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'D':
26298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "d%ld", value);
26308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
26318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'Q':
26328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  Q:
26338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (value & 1)
26348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "<illegal reg q%ld.5>", value >> 1);
26358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    else
26368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "q%ld", value >> 1);
26378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
26388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
26398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case '`':
26408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    c++;
26418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (value == 0)
26428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "%c", *c);
26438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
26448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case '\'':
26458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    c++;
26468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (value == ((1ul << width) - 1))
26478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "%c", *c);
26488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
26498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case '?':
26508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%c", c[(1 << width) - (int)value]);
26518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    c += 1 << width;
26528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
26538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  default:
26548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    abort ();
26558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
26568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
26578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
26588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      default:
26598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			abort ();
26608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
26618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
26628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
26638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      else
26648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, "%c", *c);
26658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
2666dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner	  return true;
26678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
26688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
2669dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner  return false;
26708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
26718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
26728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Print one ARM instruction from PC on INFO->STREAM.  */
26738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
26748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void
26758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectprint_insn_arm_internal (bfd_vma pc, struct disassemble_info *info, long given)
26768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
26778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const struct opcode32 *insn;
26788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  void *stream = info->stream;
2679c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner  fprintf_function func = info->fprintf_func;
26808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2681dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner  if (print_insn_coprocessor (pc, info, given, false))
26828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    return;
26838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2684dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner  if (print_insn_neon (info, given, false))
26858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    return;
26868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
26878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (insn = arm_opcodes; insn->assembler; insn++)
26888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
26898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (insn->value == FIRST_IWMMXT_INSN
26908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  && info->mach != bfd_mach_arm_XScale
26918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  && info->mach != bfd_mach_arm_iWMMXt)
26928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	insn = insn + IWMMXT_INSN_COUNT;
26938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
26948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if ((given & insn->mask) == insn->value
26958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* Special case: an instruction with all bits set in the condition field
26968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     (0xFnnn_nnnn) is only matched if all those bits are set in insn->mask,
26978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     or by the catchall at the end of the table.  */
26988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  && ((given & 0xF0000000) != 0xF0000000
26998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      || (insn->mask & 0xF0000000) == 0xF0000000
27008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      || (insn->mask == 0 && insn->value == 0)))
27018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
27028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  const char *c;
27038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
27048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  for (c = insn->assembler; *c; c++)
27058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
27068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (*c == '%')
27078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
27088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  switch (*++c)
27098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
27108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '%':
27118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "%%");
27128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
27138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
27148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'a':
27158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      print_arm_address (pc, info, given);
27168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
27178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
27188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'P':
27198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      /* Set P address bit and use normal address
27208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			 printing routine.  */
27218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      print_arm_address (pc, info, given | (1 << 24));
27228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
27238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
27248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 's':
27258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                      if ((given & 0x004f0000) == 0x004f0000)
27268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
27278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                          /* PC relative with immediate offset.  */
27288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int offset = ((given & 0xf00) >> 4) | (given & 0xf);
27298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
27308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if ((given & 0x00800000) == 0)
27318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    offset = -offset;
27328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
27338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "[pc, #%d]\t; ", offset);
27348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  info->print_address_func (offset + pc + 8, info);
27358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
27368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      else
27378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
27388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "[%s",
27398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				arm_regnames[(given >> 16) & 0xf]);
27408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if ((given & 0x01000000) != 0)
27418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
27428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              /* Pre-indexed.  */
27438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if ((given & 0x00400000) == 0x00400000)
27448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				{
27458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                  /* Immediate.  */
27468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                  int offset = ((given & 0xf00) >> 4) | (given & 0xf);
27478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  if (offset)
27488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				    func (stream, ", #%s%d",
27498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					  (((given & 0x00800000) == 0)
27508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					   ? "-" : ""), offset);
27518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				}
27528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      else
27538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				{
27548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                  /* Register.  */
27558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  func (stream, ", %s%s",
27568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					(((given & 0x00800000) == 0)
27578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					 ? "-" : ""),
27588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                        arm_regnames[given & 0xf]);
27598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				}
27608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
27618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "]%s",
27628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				    ((given & 0x00200000) != 0) ? "!" : "");
27638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
27648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  else
27658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
27668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                              /* Post-indexed.  */
27678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if ((given & 0x00400000) == 0x00400000)
27688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				{
27698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                  /* Immediate.  */
27708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                  int offset = ((given & 0xf00) >> 4) | (given & 0xf);
27718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  if (offset)
27728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				    func (stream, "], #%s%d",
27738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					  (((given & 0x00800000) == 0)
27748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					   ? "-" : ""), offset);
27758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  else
27768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				    func (stream, "]");
27778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				}
27788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      else
27798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				{
27808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                  /* Register.  */
27818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  func (stream, "], %s%s",
27828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					(((given & 0x00800000) == 0)
27838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project					 ? "-" : ""),
27848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                        arm_regnames[given & 0xf]);
27858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				}
27868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
27878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
27888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
27898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
27908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'b':
27918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
27928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int disp = (((given & 0xffffff) ^ 0x800000) - 0x800000);
27938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			info->print_address_func (disp*4 + pc + 8, info);
27948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
27958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
27968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
27978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'c':
27988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (((given >> 28) & 0xf) != 0xe)
27998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%s",
28008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      arm_conditional [(given >> 28) & 0xf]);
28018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
28028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'm':
28048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
28058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int started = 0;
28068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int reg;
28078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "{");
28098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			for (reg = 0; reg < 16; reg++)
28108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if ((given & (1 << reg)) != 0)
28118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
28128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (started)
28138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, ", ");
28148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      started = 1;
28158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "%s", arm_regnames[reg]);
28168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
28178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "}");
28188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
28198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
28208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'q':
28228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      arm_decode_shift (given, func, stream, 0);
28238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
28248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'o':
28268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if ((given & 0x02000000) != 0)
28278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
28288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int rotate = (given & 0xf00) >> 7;
28298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int immed = (given & 0xff);
28308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  immed = (((immed << (32 - rotate))
28318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				    | (immed >> rotate)) & 0xffffffff);
28328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "#%d\t; 0x%x", immed, immed);
28338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
28348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      else
28358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			arm_decode_shift (given, func, stream, 1);
28368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
28378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'p':
28398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if ((given & 0x0000f000) == 0x0000f000)
28408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "p");
28418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
28428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 't':
28448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if ((given & 0x01200000) == 0x00200000)
28458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "t");
28468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
28478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'A':
28498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "[%s", arm_regnames [(given >> 16) & 0xf]);
28508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if ((given & (1 << 24)) != 0)
28528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
28538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int offset = given & 0xff;
28548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if (offset)
28568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, ", #%s%d]%s",
28578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  ((given & 0x00800000) == 0 ? "-" : ""),
28588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  offset * 4,
28598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				  ((given & 0x00200000) != 0 ? "!" : ""));
28608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  else
28618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "]");
28628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
28638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      else
28648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
28658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int offset = given & 0xff;
28668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "]");
28688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if (given & (1 << 21))
28708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    {
28718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      if (offset)
28728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				func (stream, ", #%s%d",
28738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      ((given & 0x00800000) == 0 ? "-" : ""),
28748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				      offset * 4);
28758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    }
28768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  else
28778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, ", {%d}", offset);
28788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
28798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
28808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'B':
28828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      /* Print ARM V5 BLX(1) address: pc+25 bits.  */
28838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
28848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			bfd_vma address;
28858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			bfd_vma offset = 0;
28868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (given & 0x00800000)
28888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  /* Is signed, hi bits should be ones.  */
28898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  offset = (-1) ^ 0x00ffffff;
28908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			/* Offset is (SignExtend(offset field)<<2).  */
28928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			offset += given & 0x00ffffff;
28938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			offset <<= 2;
28948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			address = offset + pc + 8;
28958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
28968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (given & 0x01000000)
28978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  /* H bit allows addressing to 2-byte boundaries.  */
28988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  address += 2;
28998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		        info->print_address_func (address, info);
29018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
29028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
29038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'C':
29058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "_");
29068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (given & 0x80000)
29078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "f");
29088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (given & 0x40000)
29098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "s");
29108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (given & 0x20000)
29118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "x");
29128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (given & 0x10000)
29138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "c");
29148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
29158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'U':
29178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      switch (given & 0xf)
29188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
29198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0xf: func(stream, "sy"); break;
29208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x7: func(stream, "un"); break;
29218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0xe: func(stream, "st"); break;
29228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			case 0x6: func(stream, "unst"); break;
29238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			default:
29248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func(stream, "#%d", (int)given & 0xf);
29258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  break;
29268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
29278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
29288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '0': case '1': case '2': case '3': case '4':
29308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '5': case '6': case '7': case '8': case '9':
29318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
29328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			int width;
29338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			unsigned long value;
29348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			c = arm_decode_bitfield (c, given, &value, &width);
29368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			switch (*c)
29388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
29398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'r':
29408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%s", arm_regnames[value]);
29418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
29428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'd':
29438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%ld", value);
29448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
29458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'b':
29468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%ld", value * 8);
29478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
29488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'W':
29498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%ld", value + 1);
29508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
29518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'x':
29528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "0x%08lx", value);
29538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    /* Some SWI instructions have special
29558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			       meanings.  */
29568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if ((given & 0x0fffffff) == 0x0FF00000)
29578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "\t; IMB");
29588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    else if ((given & 0x0fffffff) == 0x0FF00001)
29598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "\t; IMBRange");
29608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
29618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'X':
29628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%01lx", value & 0xf);
29638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
29648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case '`':
29658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    c++;
29668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (value == 0)
29678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "%c", *c);
29688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
29698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case '\'':
29708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    c++;
29718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    if (value == ((1ul << width) - 1))
29728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      func (stream, "%c", *c);
29738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
29748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case '?':
29758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%c", c[(1 << width) - (int)value]);
29768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    c += 1 << width;
29778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
29788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  default:
29798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    abort ();
29808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
29818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
29828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'e':
29848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
29858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  int imm;
29868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  imm = (given & 0xf) | ((given & 0xfff00) >> 4);
29888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "%d", imm);
29898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
29908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
29918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'E':
29938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			/* LSB and WIDTH fields of BFI or BFC.  The machine-
29948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			   language instruction encodes LSB and MSB.  */
29958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
29968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  long msb = (given & 0x001f0000) >> 16;
29978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  long lsb = (given & 0x00000f80) >> 7;
29988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
29998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  long width = msb - lsb + 1;
30008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  if (width > 0)
30018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "#%lu, #%lu", lsb, width);
30028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  else
30038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "(invalid: %lu:%lu)", lsb, msb);
30048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
30058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
30068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      case 'V':
30088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			/* 16-bit unsigned immediate from a MOVT or MOVW
30098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			   instruction, encoded in bits 0:11 and 15:19.  */
30108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			{
30118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  long hi = (given & 0x000f0000) >> 4;
30128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  long lo = (given & 0x00000fff);
30138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  long imm16 = hi | lo;
30148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, "#%lu\t; 0x%lx", imm16, imm16);
30158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			}
30168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			break;
30178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      default:
30198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			abort ();
30208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
30218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
30228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
30238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      else
30248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, "%c", *c);
30258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
30268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  return;
30278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
30288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
30298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  abort ();
30308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
30318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Print one 16-bit Thumb instruction from PC on INFO->STREAM.  */
30338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void
30358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectprint_insn_thumb16 (bfd_vma pc, struct disassemble_info *info, long given)
30368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
30378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const struct opcode16 *insn;
30388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  void *stream = info->stream;
3039c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner  fprintf_function func = info->fprintf_func;
30408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (insn = thumb_opcodes; insn->assembler; insn++)
30428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if ((given & insn->mask) == insn->value)
30438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      {
30448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	const char *c = insn->assembler;
30458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	for (; *c; c++)
30468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  {
30478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    int domaskpc = 0;
30488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    int domasklr = 0;
30498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    if (*c != '%')
30518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      {
30528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, "%c", *c);
30538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		continue;
30548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      }
30558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    switch (*++c)
30578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      {
30588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case '%':
30598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, "%%");
30608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
30618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'c':
30638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if (ifthen_state)
30648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "%s", arm_conditional[IFTHEN_COND]);
30658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
30668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'C':
30688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if (ifthen_state)
30698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "%s", arm_conditional[IFTHEN_COND]);
30708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		else
30718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "s");
30728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
30738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'I':
30758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
30768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int tmp;
30778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  ifthen_next_state = given & 0xff;
30798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  for (tmp = given << 1; tmp & 0xf; tmp <<= 1)
30808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    func (stream, ((given ^ tmp) & 0x10) ? "e" : "t");
30818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "\t%s", arm_conditional[(given >> 4) & 0xf]);
30828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
30838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
30848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'x':
30868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if (ifthen_next_state)
30878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "\t; unpredictable branch in IT block\n");
30888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
30898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'X':
30918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if (ifthen_state)
30928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "\t; unpredictable <IT:%s>",
30938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			arm_conditional[IFTHEN_COND]);
30948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
30958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
30968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'S':
30978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
30988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  long reg;
30998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  reg = (given >> 3) & 0x7;
31018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (given & (1 << 6))
31028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    reg += 8;
31038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "%s", arm_regnames[reg]);
31058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
31068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
31078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'D':
31098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
31108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  long reg;
31118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  reg = given & 0x7;
31138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (given & (1 << 7))
31148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    reg += 8;
31158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "%s", arm_regnames[reg]);
31178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
31188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
31198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'N':
31218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if (given & (1 << 8))
31228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  domasklr = 1;
31238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		/* Fall through.  */
31248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'O':
31258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if (*c == 'O' && (given & (1 << 8)))
31268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  domaskpc = 1;
31278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		/* Fall through.  */
31288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'M':
31298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
31308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int started = 0;
31318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int reg;
31328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "{");
31348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  /* It would be nice if we could spot
31368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		     ranges, and generate the rS-rE format: */
31378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  for (reg = 0; (reg < 8); reg++)
31388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    if ((given & (1 << reg)) != 0)
31398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
31408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (started)
31418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, ", ");
31428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			started = 1;
31438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%s", arm_regnames[reg]);
31448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
31458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (domasklr)
31478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
31488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (started)
31498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, ", ");
31508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      started = 1;
315175fb4a08de4abce11ee7cf81bcddd5193eb0438dDavid Turner		      func (stream, "%s", arm_regnames[14] /* "lr" */);
31528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
31538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (domaskpc)
31558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
31568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (started)
31578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, ", ");
315875fb4a08de4abce11ee7cf81bcddd5193eb0438dDavid Turner		      func (stream, "%s", arm_regnames[15] /* "pc" */);
31598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
31608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "}");
31628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
31638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
31648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'b':
31668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		/* Print ARM V6T2 CZB address: pc+4+6 bits.  */
31678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
31688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  bfd_vma address = (pc + 4
31698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				     + ((given & 0x00f8) >> 2)
31708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				     + ((given & 0x0200) >> 3));
31718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  info->print_address_func (address, info);
31728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
31738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
31748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 's':
31768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		/* Right shift immediate -- bits 6..10; 1-31 print
31778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		   as themselves, 0 prints as 32.  */
31788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
31798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  long imm = (given & 0x07c0) >> 6;
31808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (imm == 0)
31818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    imm = 32;
31828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "#%ld", imm);
31838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
31848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
31858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case '0': case '1': case '2': case '3': case '4':
31878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case '5': case '6': case '7': case '8': case '9':
31888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
31898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int bitstart = *c++ - '0';
31908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int bitend = 0;
31918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  while (*c >= '0' && *c <= '9')
31938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    bitstart = (bitstart * 10) + *c++ - '0';
31948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
31958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  switch (*c)
31968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
31978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '-':
31988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
31998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			long reg;
32008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			c++;
32028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			while (*c >= '0' && *c <= '9')
32038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  bitend = (bitend * 10) + *c++ - '0';
32048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (!bitend)
32058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  abort ();
32068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			reg = given >> bitstart;
32078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			reg &= (2 << (bitend - bitstart)) - 1;
32088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			switch (*c)
32098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  {
32108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'r':
32118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%s", arm_regnames[reg]);
32128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
32138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'd':
32158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%ld", reg);
32168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
32178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'H':
32198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%ld", reg << 1);
32208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
32218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'W':
32238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%ld", reg << 2);
32248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
32258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'a':
32278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    /* PC-relative address -- the bottom two
32288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			       bits of the address are dropped
32298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			       before the calculation.  */
32308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    info->print_address_func
32318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			      (((pc + 4) & ~3) + (reg << 2), info);
32328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
32338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'x':
32358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "0x%04lx", reg);
32368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
32378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'B':
32398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    reg = ((reg ^ (1 << bitend)) - (1 << bitend));
32408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    info->print_address_func (reg * 2 + pc + 4, info);
32418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
32428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  case 'c':
32448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    func (stream, "%s", arm_conditional [reg]);
32458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    break;
32468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  default:
32488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			    abort ();
32498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  }
32508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
32518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
32528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '\'':
32548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      c++;
32558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if ((given & (1 << bitstart)) != 0)
32568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%c", *c);
32578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
32588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '?':
32608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      ++c;
32618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if ((given & (1 << bitstart)) != 0)
32628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%c", *c++);
32638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      else
32648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%c", *++c);
32658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
32668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    default:
32688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      abort ();
32698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
32708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
32718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
32728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      default:
32748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		abort ();
32758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      }
32768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  }
32778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	return;
32788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      }
32798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* No match.  */
32818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  abort ();
32828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
32838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
32848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Return the name of an V7M special register.  */
32858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic const char *
32868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectpsr_name (int regno)
32878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
32888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  switch (regno)
32898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
32908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 0: return "APSR";
32918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 1: return "IAPSR";
32928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 2: return "EAPSR";
32938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 3: return "PSR";
32948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 5: return "IPSR";
32958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 6: return "EPSR";
32968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 7: return "IEPSR";
32978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 8: return "MSP";
32988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 9: return "PSP";
32998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 16: return "PRIMASK";
33008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 17: return "BASEPRI";
33018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 18: return "BASEPRI_MASK";
33028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 19: return "FAULTMASK";
33038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 20: return "CONTROL";
33048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    default: return "<unknown>";
33058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
33068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
33078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Print one 32-bit Thumb instruction from PC on INFO->STREAM.  */
33098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void
33118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectprint_insn_thumb32 (bfd_vma pc, struct disassemble_info *info, long given)
33128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
33138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  const struct opcode32 *insn;
33148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  void *stream = info->stream;
3315c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner  fprintf_function func = info->fprintf_func;
33168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3317dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner  if (print_insn_coprocessor (pc, info, given, true))
33188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    return;
33198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3320dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner  if (print_insn_neon (info, given, true))
33218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    return;
33228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (insn = thumb32_opcodes; insn->assembler; insn++)
33248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if ((given & insn->mask) == insn->value)
33258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      {
33268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	const char *c = insn->assembler;
33278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	for (; *c; c++)
33288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  {
33298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    if (*c != '%')
33308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      {
33318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, "%c", *c);
33328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		continue;
33338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      }
33348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    switch (*++c)
33368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      {
33378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case '%':
33388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		func (stream, "%%");
33398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
33408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'c':
33428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if (ifthen_state)
33438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "%s", arm_conditional[IFTHEN_COND]);
33448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
33458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'x':
33478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if (ifthen_next_state)
33488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "\t; unpredictable branch in IT block\n");
33498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
33508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'X':
33528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if (ifthen_state)
33538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "\t; unpredictable <IT:%s>",
33548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			arm_conditional[IFTHEN_COND]);
33558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
33568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'I':
33588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
33598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int imm12 = 0;
33608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm12 |= (given & 0x000000ffu);
33618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm12 |= (given & 0x00007000u) >> 4;
33628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm12 |= (given & 0x04000000u) >> 15;
33638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "#%u\t; 0x%x", imm12, imm12);
33648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
33658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
33668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'M':
33688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
33698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int bits = 0, imm, imm8, mod;
33708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  bits |= (given & 0x000000ffu);
33718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  bits |= (given & 0x00007000u) >> 4;
33728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  bits |= (given & 0x04000000u) >> 15;
33738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm8 = (bits & 0x0ff);
33748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  mod = (bits & 0xf00) >> 8;
33758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  switch (mod)
33768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
33778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 0: imm = imm8; break;
33788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 1: imm = ((imm8<<16) | imm8); break;
33798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 2: imm = ((imm8<<24) | (imm8 << 8)); break;
33808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 3: imm = ((imm8<<24) | (imm8 << 16) | (imm8 << 8) | imm8); break;
33818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    default:
33828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      mod  = (bits & 0xf80) >> 7;
33838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      imm8 = (bits & 0x07f) | 0x80;
33848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      imm  = (((imm8 << (32 - mod)) | (imm8 >> mod)) & 0xffffffff);
33858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
33868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "#%u\t; 0x%x", imm, imm);
33878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
33888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
33898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
33908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'J':
33918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
33928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int imm = 0;
33938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm |= (given & 0x000000ffu);
33948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm |= (given & 0x00007000u) >> 4;
33958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm |= (given & 0x04000000u) >> 15;
33968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm |= (given & 0x000f0000u) >> 4;
33978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "#%u\t; 0x%x", imm, imm);
33988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
33998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
34008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'K':
34028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
34038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int imm = 0;
34048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm |= (given & 0x000f0000u) >> 16;
34058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm |= (given & 0x00000ff0u) >> 0;
34068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm |= (given & 0x0000000fu) << 12;
34078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "#%u\t; 0x%x", imm, imm);
34088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
34098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
34108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'S':
34128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
34138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int reg = (given & 0x0000000fu);
34148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int stp = (given & 0x00000030u) >> 4;
34158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int imm = 0;
34168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm |= (given & 0x000000c0u) >> 6;
34178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  imm |= (given & 0x00007000u) >> 10;
34188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "%s", arm_regnames[reg]);
34208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  switch (stp)
34218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
34228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 0:
34238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (imm > 0)
34248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, ", lsl #%u", imm);
34258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
34268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 1:
34288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (imm == 0)
34298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			imm = 32;
34308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, ", lsr #%u", imm);
34318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
34328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 2:
34348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (imm == 0)
34358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			imm = 32;
34368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, ", asr #%u", imm);
34378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
34388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 3:
34408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (imm == 0)
34418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, ", rrx");
34428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      else
34438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, ", ror #%u", imm);
34448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
34458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
34468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
34478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'a':
34498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
34508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int Rn  = (given & 0x000f0000) >> 16;
34518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int U   = (given & 0x00800000) >> 23;
34528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int op  = (given & 0x00000f00) >> 8;
34538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int i12 = (given & 0x00000fff);
34548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int i8  = (given & 0x000000ff);
3455dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner		  bfd_boolean writeback = false, postind = false;
34568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int offset = 0;
34578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "[%s", arm_regnames[Rn]);
34598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (U) /* 12-bit positive immediate offset */
34608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    offset = i12;
34618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  else if (Rn == 15) /* 12-bit negative immediate offset */
34628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    offset = -(int)i12;
34638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  else if (op == 0x0) /* shifted register offset */
34648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
34658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      unsigned int Rm = (i8 & 0x0f);
34668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      unsigned int sh = (i8 & 0x30) >> 4;
34678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, ", %s", arm_regnames[Rm]);
34688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (sh)
34698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, ", lsl #%u", sh);
34708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "]");
34718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
34728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
34738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  else switch (op)
34748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
34758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 0xE:  /* 8-bit positive immediate offset */
34768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      offset = i8;
34778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
34788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 0xC:  /* 8-bit negative immediate offset */
34808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      offset = -i8;
34818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
34828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 0xF:  /* 8-bit + preindex with wb */
34848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      offset = i8;
3485dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner		      writeback = true;
34868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
34878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 0xD:  /* 8-bit - preindex with wb */
34898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      offset = -i8;
3490dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner		      writeback = true;
34918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
34928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 0xB:  /* 8-bit + postindex */
34948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      offset = i8;
3495dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner		      postind = true;
34968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
34978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
34988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 0x9:  /* 8-bit - postindex */
34998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      offset = -i8;
3500dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner		      postind = true;
35018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
35028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
35038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    default:
35048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, ", <undefined>]");
35058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      goto skip;
35068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
35078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
35088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (postind)
35098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    func (stream, "], #%d", offset);
35108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  else
35118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
35128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (offset)
35138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, ", #%d", offset);
35148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, writeback ? "]!" : "]");
35158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
35168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
35178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (Rn == 15)
35188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
35198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "\t; ");
35208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      info->print_address_func (((pc + 4) & ~3) + offset, info);
35218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
35228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
35238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      skip:
35248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
35258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
35268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'A':
35278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
35288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int P   = (given & 0x01000000) >> 24;
35298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int U   = (given & 0x00800000) >> 23;
35308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int W   = (given & 0x00400000) >> 21;
35318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int Rn  = (given & 0x000f0000) >> 16;
35328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int off = (given & 0x000000ff);
35338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
35348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "[%s", arm_regnames[Rn]);
35358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (P)
35368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
35378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (off || !U)
35388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, ", #%c%u", U ? '+' : '-', off * 4);
35398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "]");
35408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (W)
35418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "!");
35428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
35438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  else
35448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
35458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "], ");
35468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (W)
35478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "#%c%u", U ? '+' : '-', off * 4);
35488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      else
35498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "{%u}", off);
35508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
35518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
35528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
35538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
35548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'w':
35558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
35568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int Sbit = (given & 0x01000000) >> 24;
35578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int type = (given & 0x00600000) >> 21;
35588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  switch (type)
35598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
35608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 0: func (stream, Sbit ? "sb" : "b"); break;
35618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 1: func (stream, Sbit ? "sh" : "h"); break;
35628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 2:
35638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (Sbit)
35648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "??");
35658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
35668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 3:
35678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "??");
35688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
35698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
35708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
35718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
35728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
35738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'm':
35748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
35758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int started = 0;
35768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int reg;
35778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
35788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "{");
35798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  for (reg = 0; reg < 16; reg++)
35808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    if ((given & (1 << reg)) != 0)
35818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      {
35828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			if (started)
35838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			  func (stream, ", ");
35848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			started = 1;
35858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%s", arm_regnames[reg]);
35868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      }
35878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "}");
35888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
35898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
35908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
35918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'E':
35928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
35938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int msb = (given & 0x0000001f);
35948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int lsb = 0;
35958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  lsb |= (given & 0x000000c0u) >> 6;
35968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  lsb |= (given & 0x00007000u) >> 10;
35978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "#%u, #%u", lsb, msb - lsb + 1);
35988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
35998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
36008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'F':
36028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
36038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int width = (given & 0x0000001f) + 1;
36048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int lsb = 0;
36058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  lsb |= (given & 0x000000c0u) >> 6;
36068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  lsb |= (given & 0x00007000u) >> 10;
36078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "#%u, #%u", lsb, width);
36088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
36098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
36108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'b':
36128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
36138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int S = (given & 0x04000000u) >> 26;
36148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int J1 = (given & 0x00002000u) >> 13;
36158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int J2 = (given & 0x00000800u) >> 11;
36168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int offset = 0;
36178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= !S << 20;
36198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= J2 << 19;
36208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= J1 << 18;
36218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= (given & 0x003f0000) >> 4;
36228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= (given & 0x000007ff) << 1;
36238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset -= (1 << 20);
36248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  info->print_address_func (pc + 4 + offset, info);
36268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
36278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
36288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'B':
36308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
36318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int S = (given & 0x04000000u) >> 26;
36328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int I1 = (given & 0x00002000u) >> 13;
36338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int I2 = (given & 0x00000800u) >> 11;
36348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int offset = 0;
36358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= !S << 24;
36378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= !(I1 ^ S) << 23;
36388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= !(I2 ^ S) << 22;
36398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= (given & 0x03ff0000u) >> 4;
36408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset |= (given & 0x000007ffu) << 1;
36418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset -= (1 << 24);
36428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  offset += pc + 4;
36438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  /* BLX target addresses are always word aligned.  */
36458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if ((given & 0x00001000u) == 0)
36468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      offset &= ~2u;
36478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  info->print_address_func (offset, info);
36498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
36508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
36518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 's':
36538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
36548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int shift = 0;
36558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  shift |= (given & 0x000000c0u) >> 6;
36568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  shift |= (given & 0x00007000u) >> 10;
36578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (given & 0x00200000u)
36588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    func (stream, ", asr #%u", shift);
36598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  else if (shift)
36608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    func (stream, ", lsl #%u", shift);
36618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  /* else print nothing - lsl #0 */
36628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
36638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
36648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'R':
36668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
36678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned int rot = (given & 0x00000030) >> 4;
36688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (rot)
36698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    func (stream, ", ror #%u", rot * 8);
36708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
36718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
36728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'U':
36748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		switch (given & 0xf)
36758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  {
36768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  case 0xf: func(stream, "sy"); break;
36778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  case 0x7: func(stream, "un"); break;
36788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  case 0xe: func(stream, "st"); break;
36798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  case 0x6: func(stream, "unst"); break;
36808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  default:
36818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    func(stream, "#%d", (int)given & 0xf);
36828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    break;
36838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  }
36848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
36858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
36868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'C':
36878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if ((given & 0xff) == 0)
36888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  {
36898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    func (stream, "%cPSR_", (given & 0x100000) ? 'S' : 'C');
36908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    if (given & 0x800)
36918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "f");
36928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    if (given & 0x400)
36938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "s");
36948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    if (given & 0x200)
36958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "x");
36968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    if (given & 0x100)
36978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "c");
36988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  }
36998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		else
37008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  {
370175fb4a08de4abce11ee7cf81bcddd5193eb0438dDavid Turner		    func (stream, "%s", psr_name (given & 0xff));
37028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  }
37038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
37048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case 'D':
37068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		if ((given & 0xff) == 0)
37078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  func (stream, "%cPSR", (given & 0x100000) ? 'S' : 'C');
37088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		else
370975fb4a08de4abce11ee7cf81bcddd5193eb0438dDavid Turner		  func (stream, "%s", psr_name (given & 0xff));
37108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
37118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case '0': case '1': case '2': case '3': case '4':
37138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      case '5': case '6': case '7': case '8': case '9':
37148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
37158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  int width;
37168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  unsigned long val;
37178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  c = arm_decode_bitfield (c, given, &val, &width);
37198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  switch (*c)
37218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    {
37228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'd': func (stream, "%lu", val); break;
37238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'W': func (stream, "%lu", val * 4); break;
37248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'r': func (stream, "%s", arm_regnames[val]); break;
37258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case 'c':
37278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "%s", arm_conditional[val]);
37288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
37298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '\'':
37318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      c++;
37328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (val == ((1ul << width) - 1))
37338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%c", *c);
37348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
37358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '`':
37378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      c++;
37388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      if (val == 0)
37398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project			func (stream, "%c", *c);
37408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
37418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    case '?':
37438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      func (stream, "%c", c[(1 << width) - (int)val]);
37448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      c += 1 << width;
37458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      break;
37468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    default:
37488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      abort ();
37498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    }
37508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
37518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
37528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      default:
37548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		abort ();
37558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      }
37568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  }
37578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	return;
37588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      }
37598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* No match.  */
37618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  abort ();
37628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
37638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Print data bytes on INFO->STREAM.  */
37658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void
37678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectprint_insn_data (bfd_vma pc ATTRIBUTE_UNUSED, struct disassemble_info *info,
37688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		 long given)
37698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
37708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  switch (info->bytes_per_chunk)
37718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
37728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 1:
37738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      info->fprintf_func (info->stream, ".byte\t0x%02lx", given);
37748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      break;
37758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 2:
37768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      info->fprintf_func (info->stream, ".short\t0x%04lx", given);
37778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      break;
37788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    case 4:
37798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      info->fprintf_func (info->stream, ".word\t0x%08lx", given);
37808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      break;
37818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    default:
37828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      abort ();
37838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
37848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
37858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Search back through the insn stream to determine if this instruction is
37878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   conditionally executed.  */
37888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void
37898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectfind_ifthen_state (bfd_vma pc, struct disassemble_info *info,
37908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		   bfd_boolean little)
37918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
37928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned char b[2];
37938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned int insn;
37948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  int status;
37958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* COUNT is twice the number of instructions seen.  It will be odd if we
37968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project     just crossed an instruction boundary.  */
37978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  int count;
37988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  int it_count;
37998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned int seen_it;
38008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  bfd_vma addr;
38018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ifthen_address = pc;
38038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ifthen_state = 0;
38048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  addr = pc;
38068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  count = 1;
38078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  it_count = 0;
38088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  seen_it = 0;
38098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* Scan backwards looking for IT instructions, keeping track of where
38108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project     instruction boundaries are.  We don't know if something is actually an
38118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project     IT instruction until we find a definite instruction boundary.  */
38128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  for (;;)
38138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
38148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (addr == 0 || info->symbol_at_address_func(addr, info))
38158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
38168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* A symbol must be on an instruction boundary, and will not
38178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     be within an IT block.  */
38188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if (seen_it && (count & 1))
38198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    break;
38208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  return;
38228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
38238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      addr -= 2;
38248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      status = info->read_memory_func (addr, (bfd_byte *)b, 2, info);
38258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (status)
38268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	return;
38278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (little)
38298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	insn = (b[0]) | (b[1] << 8);
38308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
38318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	insn = (b[1]) | (b[0] << 8);
38328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (seen_it)
38338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
38348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if ((insn & 0xf800) < 0xe800)
38358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
38368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      /* Addr + 2 is an instruction boundary.  See if this matches
38378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	         the expected boundary based on the position of the last
38388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		 IT candidate.  */
38398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (count & 1)
38408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		break;
38418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      seen_it = 0;
38428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
38438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
38448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if ((insn & 0xff00) == 0xbf00 && (insn & 0xf) != 0)
38458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
38468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* This could be an IT instruction.  */
38478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  seen_it = insn;
38488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  it_count = count >> 1;
38498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
38508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if ((insn & 0xf800) >= 0xe800)
38518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	count++;
38528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
38538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	count = (count + 2) | 1;
38548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      /* IT blocks contain at most 4 instructions.  */
38558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (count >= 8 && !seen_it)
38568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	return;
38578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
38588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* We found an IT instruction.  */
38598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  ifthen_state = (seen_it & 0xe0) | ((seen_it << it_count) & 0x1f);
38608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if ((ifthen_state & 0xf) == 0)
38618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    ifthen_state = 0;
38628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
38638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* NOTE: There are no checks in these routines that
38658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   the relevant number of data bytes exist.  */
38668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint
38688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectprint_insn_arm (bfd_vma pc, struct disassemble_info *info)
38698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
38708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned char b[4];
38718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  long		given;
38728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  int           status;
3873dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner  int           is_thumb = false;
3874dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner  int           is_data = false;
38758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  unsigned int	size = 4;
38768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  void	 	(*printer) (bfd_vma, struct disassemble_info *, long);
38778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if 0
3878dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner  bfd_boolean   found = false;
38798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (info->disassembler_options)
38818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
38828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      parse_disassembler_options (info->disassembler_options);
38838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      /* To avoid repeated parsing of these options, we remove them here.  */
38858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      info->disassembler_options = NULL;
38868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
38878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  /* First check the full symtab for a mapping symbol, even if there
38898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project     are no usable non-mapping symbols for this address.  */
38908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (info->symtab != NULL
38918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      && bfd_asymbol_flavour (*info->symtab) == bfd_target_elf_flavour)
38928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
38938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      bfd_vma addr;
38948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      int n;
38958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      int last_sym = -1;
38968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      enum map_type type = MAP_ARM;
38978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
38988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (pc <= last_mapping_addr)
38998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	last_mapping_sym = -1;
39008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      is_thumb = (last_type == MAP_THUMB);
3901dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner      found = false;
39028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      /* Start scanning at the start of the function, or wherever
39038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	 we finished last time.  */
39048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      n = info->symtab_pos + 1;
39058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (n < last_mapping_sym)
39068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	n = last_mapping_sym;
39078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
39088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      /* Scan up to the location being disassembled.  */
39098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      for (; n < info->symtab_size; n++)
39108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
39118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  addr = bfd_asymbol_value (info->symtab[n]);
39128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if (addr > pc)
39138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    break;
39148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if ((info->section == NULL
39158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	       || info->section == info->symtab[n]->section)
39168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      && get_sym_code_type (info, n, &type))
39178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
39188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      last_sym = n;
3919dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner	      found = true;
39208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
39218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
39228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
39238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (!found)
39248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
39258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  n = info->symtab_pos;
39268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if (n < last_mapping_sym - 1)
39278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    n = last_mapping_sym - 1;
39288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
39298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* No mapping symbol found at this address.  Look backwards
39308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     for a preceeding one.  */
39318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  for (; n >= 0; n--)
39328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
39338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (get_sym_code_type (info, n, &type))
39348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
39358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  last_sym = n;
3936dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner		  found = true;
39378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  break;
39388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
39398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
39408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
39418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
39428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      last_mapping_sym = last_sym;
39438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      last_type = type;
39448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      is_thumb = (last_type == MAP_THUMB);
39458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      is_data = (last_type == MAP_DATA);
39468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
39478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      /* Look a little bit ahead to see if we should print out
39488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	 two or four bytes of data.  If there's a symbol,
39498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	 mapping or otherwise, after two bytes then don't
39508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	 print more.  */
39518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (is_data)
39528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
39538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  size = 4 - (pc & 3);
39548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  for (n = last_sym + 1; n < info->symtab_size; n++)
39558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
39568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      addr = bfd_asymbol_value (info->symtab[n]);
39578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (addr > pc)
39588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		{
39598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  if (addr - pc < size)
39608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		    size = addr - pc;
39618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		  break;
39628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		}
39638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
39648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* If the next symbol is after three bytes, we need to
39658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     print only part of the data, so that we can use either
39668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     .byte or .short.  */
39678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if (size == 3)
39688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    size = (pc & 1) ? 1 : 2;
39698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
39708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
39718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
39728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (info->symbols != NULL)
39738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
39748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (bfd_asymbol_flavour (*info->symbols) == bfd_target_coff_flavour)
39758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
39768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  coff_symbol_type * cs;
39778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
39788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  cs = coffsymbol (*info->symbols);
39798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  is_thumb = (   cs->native->u.syment.n_sclass == C_THUMBEXT
39808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      || cs->native->u.syment.n_sclass == C_THUMBSTAT
39818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      || cs->native->u.syment.n_sclass == C_THUMBLABEL
39828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      || cs->native->u.syment.n_sclass == C_THUMBEXTFUNC
39838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		      || cs->native->u.syment.n_sclass == C_THUMBSTATFUNC);
39848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
39858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else if (bfd_asymbol_flavour (*info->symbols) == bfd_target_elf_flavour
39868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	       && !found)
39878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
39888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* If no mapping symbol has been found then fall back to the type
39898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     of the function symbol.  */
39908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  elf_symbol_type *  es;
39918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  unsigned int       type;
39928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
39938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  es = *(elf_symbol_type **)(info->symbols);
39948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
39958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
39968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  is_thumb = (type == STT_ARM_TFUNC) || (type == STT_ARM_16BIT);
39978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
39988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
39998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
40008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  int little;
40018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  little = (info->endian == BFD_ENDIAN_LITTLE);
40038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  is_thumb |= (pc & 1);
40048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  pc &= ~(bfd_vma)1;
40058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
40068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (force_thumb)
4008dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner    is_thumb = true;
40098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  info->bytes_per_line = 4;
40118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (is_data)
40138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
40148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      int i;
40158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      /* size was already set above.  */
40178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      info->bytes_per_chunk = size;
40188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      printer = print_insn_data;
40198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      status = info->read_memory_func (pc, (bfd_byte *)b, size, info);
40218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      given = 0;
40228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (little)
40238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	for (i = size - 1; i >= 0; i--)
40248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  given = b[i] | (given << 8);
40258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
40268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	for (i = 0; i < (int) size; i++)
40278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  given = b[i] | (given << 8);
40288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
40298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  else if (!is_thumb)
40308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
40318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      /* In ARM mode endianness is a straightforward issue: the instruction
40328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	 is four bytes long and is either ordered 0123 or 3210.  */
40338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      printer = print_insn_arm_internal;
40348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      info->bytes_per_chunk = 4;
40358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      size = 4;
40368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      status = info->read_memory_func (pc, (bfd_byte *)b, 4, info);
40388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (little)
40398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	given = (b[0]) | (b[1] << 8) | (b[2] << 16) | (b[3] << 24);
40408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
40418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	given = (b[3]) | (b[2] << 8) | (b[1] << 16) | (b[0] << 24);
40428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
40438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  else
40448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
40458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      /* In Thumb mode we have the additional wrinkle of two
40468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	 instruction lengths.  Fortunately, the bits that determine
40478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	 the length of the current instruction are always to be found
40488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	 in the first two bytes.  */
40498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      printer = print_insn_thumb16;
40508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      info->bytes_per_chunk = 2;
40518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      size = 2;
40528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      status = info->read_memory_func (pc, (bfd_byte *)b, 2, info);
40548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (little)
40558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	given = (b[0]) | (b[1] << 8);
40568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      else
40578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	given = (b[1]) | (b[0] << 8);
40588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (!status)
40608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
40618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  /* These bit patterns signal a four-byte Thumb
40628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	     instruction.  */
40638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if ((given & 0xF800) == 0xF800
40648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      || (given & 0xF800) == 0xF000
40658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      || (given & 0xF800) == 0xE800)
40668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    {
40678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      status = info->read_memory_func (pc + 2, (bfd_byte *)b, 2, info);
40688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      if (little)
40698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		given = (b[0]) | (b[1] << 8) | (given << 16);
40708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      else
40718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		given = (b[1]) | (b[0] << 8) | (given << 16);
40728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      printer = print_insn_thumb32;
40748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	      size = 4;
40758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    }
40768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
40778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (ifthen_address != pc)
40798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	find_ifthen_state(pc, info, little);
40808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      if (ifthen_state)
40828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	{
40838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  if ((ifthen_state & 0xf) == 0x8)
40848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    ifthen_next_state = 0;
40858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	  else
40868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	    ifthen_next_state = (ifthen_state & 0xe0)
40878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project				| ((ifthen_state & 0xf) << 1);
40888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	}
40898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
40908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
40918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (status)
40928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
40938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      info->memory_error_func (status, pc, info);
40948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      return -1;
40958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
40968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (info->flags & INSN_HAS_RELOC)
40978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* If the instruction has a reloc associated with it, then
40988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       the offset field in the instruction will actually be the
40998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       addend for the reloc.  (We are using REL type relocs).
41008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       In such cases, we can ignore the pc when computing
41018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       addresses, since the addend is not currently pc-relative.  */
41028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    pc = 0;
41038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4104c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner  /* We include the hexdump of the instruction. The format here
4105c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner     matches that used by objdump and the ARM ARM (in particular,
4106c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner     32 bit Thumb instructions are displayed as pairs of halfwords,
4107c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner     not as a single word.)  */
4108c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner  if (is_thumb)
4109c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner    {
4110c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner      if (size == 2)
4111c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner	{
4112c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner	  info->fprintf_func(info->stream, "%04lx       ",
4113c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner			     ((unsigned long)given) & 0xffff);
4114c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner	}
4115c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner      else
4116c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner	{
4117c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner	  info->fprintf_func(info->stream, "%04lx %04lx  ",
4118c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner			     (((unsigned long)given) >> 16) & 0xffff,
4119c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner			     ((unsigned long)given) & 0xffff);
4120c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner	}
4121c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner    }
4122c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner  else
4123c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner    {
4124c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner      info->fprintf_func(info->stream, "%08lx      ",
4125c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner			 ((unsigned long)given) & 0xffffffff);
4126c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner    }
4127c98cf7b1fa9531879937a970435073acd1179263David 'Digit' Turner
41288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  printer (pc, info, given);
41298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
41308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  if (is_thumb)
41318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    {
41328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      ifthen_state = ifthen_next_state;
41338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      ifthen_address += size;
41348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
41358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  return size;
41368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4137