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