167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee/* 267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * Copyright (C) 2011 The Android Open Source Project 367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * Licensed under the Apache License, Version 2.0 (the "License"); 567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * you may not use this file except in compliance with the License. 667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * You may obtain a copy of the License at 767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * http://www.apache.org/licenses/LICENSE-2.0 967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 1067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * Unless required by applicable law or agreed to in writing, software 1167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * distributed under the License is distributed on an "AS IS" BASIS, 1267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * See the License for the specific language governing permissions and 1467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * limitations under the License. 1567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee */ 1667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 17efc6369224b036a1fb77849f7ae65b3492c832c0buzbee#include "arm_lir.h" 1802031b185b4653e6c72e21f7a51238b903f6d638buzbee#include "codegen_arm.h" 197940e44f4517de5e2634a7e07d58d0fb26160513Brian Carlstrom#include "dex/quick/mir_to_lir-inl.h" 2067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 2111d1b0c31ddd710d26068da8e0e4621002205b4bElliott Hughesnamespace art { 2211d1b0c31ddd710d26068da8e0e4621002205b4bElliott Hughes 2367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee/* 2467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * opcode: ArmOpcode enum 2567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * skeleton: pre-designated bit-pattern for this opcode 2667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * k0: key to applying ds/de 2767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * ds: dest start bit position 2867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * de: dest end bit position 2967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * k1: key to applying s1s/s1e 3067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * s1s: src1 start bit position 3167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * s1e: src1 end bit position 3267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * k2: key to applying s2s/s2e 3367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * s2s: src2 start bit position 3467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * s2e: src2 end bit position 3567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * operands: number of operands (for sanity check purposes) 3667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * name: mnemonic name 3767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * fmt: for pretty-printing 3867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee */ 3967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee#define ENCODING_MAP(opcode, skeleton, k0, ds, de, k1, s1s, s1e, k2, s2s, s2e, \ 4067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee k3, k3s, k3e, flags, name, fmt, size) \ 4167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee {skeleton, {{k0, ds, de}, {k1, s1s, s1e}, {k2, s2s, s2e}, \ 4267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee {k3, k3s, k3e}}, opcode, flags, name, fmt, size} 4367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 4467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee/* Instruction dump string format keys: !pf, where "!" is the start 4567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * of the key, "p" is which numeric operand to use and "f" is the 4667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * print format. 4767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 4867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * [p]ositions: 4967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 0 -> operands[0] (dest) 5067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 1 -> operands[1] (src1) 5167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 2 -> operands[2] (src2) 5267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 3 -> operands[3] (extra) 5367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 5467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * [f]ormats: 5567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * h -> 4-digit hex 5667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * d -> decimal 5767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * E -> decimal*4 5867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * F -> decimal*2 5967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * c -> branch condition (beq, bne, etc.) 6067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * t -> pc-relative target 6167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * u -> 1st half of bl[x] target 6267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * v -> 2nd half ob bl[x] target 6367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * R -> register list 6467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * s -> single precision floating point register 6567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * S -> double precision floating point register 6667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * m -> Thumb2 modified immediate 6767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * n -> complimented Thumb2 modified immediate 6867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * M -> Thumb2 16-bit zero-extended immediate 6967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * b -> 4-digit binary 7067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * B -> dmb option string (sy, st, ish, ishst, nsh, hshst) 7167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * H -> operand shift 7267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * C -> core register name 7367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * P -> fp cs register list (base of s16) 7467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * Q -> fp cs register list (base of s0) 7567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * 7667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * [!] escape. To insert "!", use "!!" 7767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee */ 7831a4a6f5717f645da6b97ccc1e420ae1e1c71ce0buzbee/* NOTE: must be kept in sync with enum ArmOpcode from LIR.h */ 791fd3346740dfb7f47be9922312b68a4227fada96buzbeeconst ArmEncodingMap ArmMir2Lir::EncodingMap[kArmLast] = { 8067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kArm16BitData, 0x0000, 8167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 8271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee kFmtUnused, -1, -1, IS_UNARY_OP, "data", "0x!0h(!0d)", 2), 8367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAdcRR, 0x4140, 8467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 8567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 8667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES | USES_CCODES, 8771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "adcs", "!0C, !1C", 2), 8867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAddRRI3, 0x1c00, 8967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 9067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 9167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 9271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "adds", "!0C, !1C, #!2d", 2), 9367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAddRI8, 0x3000, 9467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, 9567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 9667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE0 | SETS_CCODES, 9771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "adds", "!0C, !0C, #!1d", 2), 9867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAddRRR, 0x1800, 9967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 10067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 10167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE12 | SETS_CCODES, 10271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "adds", "!0C, !1C, !2C", 2), 10367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAddRRLH, 0x4440, 10467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 10567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE01, 10671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "add", "!0C, !1C", 2), 10767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAddRRHL, 0x4480, 10867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 10967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE01, 11071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "add", "!0C, !1C", 2), 11167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAddRRHH, 0x44c0, 11267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 11367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE01, 11471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "add", "!0C, !1C", 2), 11567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAddPcRel, 0xa000, 11667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, 1175abfa3ea35781464df8fae60aaf03f48a295e965buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | IS_BRANCH | NEEDS_FIXUP, 11871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "add", "!0C, pc, #!1E", 2), 11967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAddSpRel, 0xa800, 12067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtUnused, -1, -1, kFmtBitBlt, 7, 0, 12167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF_SP | REG_USE_SP, 12271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "add", "!0C, sp, #!2E", 2), 12367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAddSpI7, 0xb000, 12467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 6, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 12567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_UNARY_OP | REG_DEF_SP | REG_USE_SP, 12671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "add", "sp, #!0d*4", 2), 12767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAndRR, 0x4000, 12867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 12967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 13067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES, 13171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ands", "!0C, !1C", 2), 13267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAsrRRI5, 0x1000, 13367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 10, 6, 13467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 13567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 13671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "asrs", "!0C, !1C, #!2d", 2), 13767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbAsrRR, 0x4100, 13867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 13967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 14067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES, 14171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "asrs", "!0C, !1C", 2), 14267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBCond, 0xd000, 14367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 7, 0, kFmtBitBlt, 11, 8, kFmtUnused, -1, -1, 1445abfa3ea35781464df8fae60aaf03f48a295e965buzbee kFmtUnused, -1, -1, IS_BINARY_OP | IS_BRANCH | USES_CCODES | 14571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee NEEDS_FIXUP, "b!1c", "!0t", 2), 14667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBUncond, 0xe000, 14767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 148680b1bdd7e5d112ba4b95d6c81a43b65119b3b9cIan Rogers kFmtUnused, -1, -1, IS_UNARY_OP | IS_BRANCH | NEEDS_FIXUP, 14971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "b", "!0t", 2), 15067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBicRR, 0x4380, 15167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 15267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 15367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES, 15471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "bics", "!0C, !1C", 2), 15567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBkpt, 0xbe00, 15667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 15767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_UNARY_OP | IS_BRANCH, 15871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "bkpt", "!0d", 2), 15967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBlx1, 0xf000, 16067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 1615abfa3ea35781464df8fae60aaf03f48a295e965buzbee kFmtUnused, -1, -1, IS_BINARY_OP | IS_BRANCH | REG_DEF_LR | 16271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee NEEDS_FIXUP, "blx_1", "!0u", 2), 16367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBlx2, 0xe800, 16467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 1655abfa3ea35781464df8fae60aaf03f48a295e965buzbee kFmtUnused, -1, -1, IS_BINARY_OP | IS_BRANCH | REG_DEF_LR | 16671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee NEEDS_FIXUP, "blx_2", "!0v", 2), 16767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBl1, 0xf000, 16867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 16967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_UNARY_OP | IS_BRANCH | REG_DEF_LR, 17071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "bl_1", "!0u", 2), 17167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBl2, 0xf800, 17267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 17367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_UNARY_OP | IS_BRANCH | REG_DEF_LR, 17471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "bl_2", "!0v", 2), 17567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBlxR, 0x4780, 17667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 6, 3, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 17767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 17867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_UNARY_OP | REG_USE0 | IS_BRANCH | REG_DEF_LR, 17971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "blx", "!0C", 2), 18067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbBx, 0x4700, 18167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 6, 3, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 18267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_UNARY_OP | IS_BRANCH, 18371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "bx", "!0C", 2), 18467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbCmnRR, 0x42c0, 18567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 18667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE01 | SETS_CCODES, 18771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "cmn", "!0C, !1C", 2), 18867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbCmpRI8, 0x2800, 18967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, 19067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE0 | SETS_CCODES, 19171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "cmp", "!0C, #!1d", 2), 19267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbCmpRR, 0x4280, 19367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 19467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE01 | SETS_CCODES, 19571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "cmp", "!0C, !1C", 2), 19667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbCmpLH, 0x4540, 19767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 19867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE01 | SETS_CCODES, 19971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "cmp", "!0C, !1C", 2), 20067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbCmpHL, 0x4580, 20167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 20267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE01 | SETS_CCODES, 20371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "cmp", "!0C, !1C", 2), 20467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbCmpHH, 0x45c0, 20567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 20667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE01 | SETS_CCODES, 20771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "cmp", "!0C, !1C", 2), 20867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbEorRR, 0x4040, 20967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 21067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 21167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES, 21271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "eors", "!0C, !1C", 2), 21367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdmia, 0xc800, 21467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, 21567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 21667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE0 | REG_DEF_LIST1 | IS_LOAD, 21771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldmia", "!0C!!, <!1R>", 2), 21867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrRRI5, 0x6800, 21967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 10, 6, 22067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 22171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldr", "!0C, [!1C, #!2E]", 2), 22267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrRRR, 0x5800, 22367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 22467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12 | IS_LOAD, 22571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldr", "!0C, [!1C, !2C]", 2), 22667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrPcRel, 0x4800, 22767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, 22867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0 | REG_USE_PC 22971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_LOAD | NEEDS_FIXUP, "ldr", "!0C, [pc, #!1E]", 2), 23067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrSpRel, 0x9800, 23167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtUnused, -1, -1, kFmtBitBlt, 7, 0, 23267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0 | REG_USE_SP 23371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_LOAD, "ldr", "!0C, [sp, #!2E]", 2), 23467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrbRRI5, 0x7800, 23567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 10, 6, 23667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 23771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrb", "!0C, [!1C, #2d]", 2), 23867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrbRRR, 0x5c00, 23967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 24067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12 | IS_LOAD, 24171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrb", "!0C, [!1C, !2C]", 2), 24267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrhRRI5, 0x8800, 24367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 10, 6, 24467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 24571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrh", "!0C, [!1C, #!2F]", 2), 24667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrhRRR, 0x5a00, 24767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 24867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12 | IS_LOAD, 24971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrh", "!0C, [!1C, !2C]", 2), 25067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrsbRRR, 0x5600, 25167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 25267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12 | IS_LOAD, 25371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrsb", "!0C, [!1C, !2C]", 2), 25467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLdrshRRR, 0x5e00, 25567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 25667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12 | IS_LOAD, 25771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrsh", "!0C, [!1C, !2C]", 2), 25867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLslRRI5, 0x0000, 25967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 10, 6, 26067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 26167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 26271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "lsls", "!0C, !1C, #!2d", 2), 26367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLslRR, 0x4080, 26467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 26567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 26667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES, 26771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "lsls", "!0C, !1C", 2), 26867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLsrRRI5, 0x0800, 26967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 10, 6, 27067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 27167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 27271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "lsrs", "!0C, !1C, #!2d", 2), 27367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbLsrRR, 0x40c0, 27467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 27567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 27667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES, 27771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "lsrs", "!0C, !1C", 2), 27867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbMovImm, 0x2000, 27967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, 28067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 28167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0 | SETS_CCODES, 28271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "movs", "!0C, #!1d", 2), 28367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbMovRR, 0x1c00, 28467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 28567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 28667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE1 | SETS_CCODES, 28771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "movs", "!0C, !1C", 2), 28867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbMovRR_H2H, 0x46c0, 28967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 29067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 29171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mov", "!0C, !1C", 2), 29267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbMovRR_H2L, 0x4640, 29367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 29467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 29571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mov", "!0C, !1C", 2), 29667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbMovRR_L2H, 0x4680, 29767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 29867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 29971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mov", "!0C, !1C", 2), 30067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbMul, 0x4340, 30167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 30267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 30367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES, 30471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "muls", "!0C, !1C", 2), 30567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbMvn, 0x43c0, 30667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 30767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 30867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE1 | SETS_CCODES, 30971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mvns", "!0C, !1C", 2), 31067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbNeg, 0x4240, 31167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 31267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 31367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE1 | SETS_CCODES, 31471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "negs", "!0C, !1C", 2), 31567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbOrr, 0x4300, 31667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 31767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 31867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES, 31971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "orrs", "!0C, !1C", 2), 32067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbPop, 0xbc00, 32167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 8, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 32267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 32367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_UNARY_OP | REG_DEF_SP | REG_USE_SP | REG_DEF_LIST0 32471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_LOAD, "pop", "<!0R>", 2), 32567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbPush, 0xb400, 32667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 8, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 32767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 32867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_UNARY_OP | REG_DEF_SP | REG_USE_SP | REG_USE_LIST0 32971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_STORE, "push", "<!0R>", 2), 33067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbRorRR, 0x41c0, 33167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 33267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 33367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | SETS_CCODES, 33471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "rors", "!0C, !1C", 2), 33567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbSbc, 0x4180, 33667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 33767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 33867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE01 | USES_CCODES | SETS_CCODES, 33971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "sbcs", "!0C, !1C", 2), 34067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbStmia, 0xc000, 34167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, 34267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 34367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0 | REG_USE0 | REG_USE_LIST1 | IS_STORE, 34471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "stmia", "!0C!!, <!1R>", 2), 34567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbStrRRI5, 0x6000, 34667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 10, 6, 34767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE01 | IS_STORE, 34871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "str", "!0C, [!1C, #!2E]", 2), 34967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbStrRRR, 0x5000, 35067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 35167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE012 | IS_STORE, 35271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "str", "!0C, [!1C, !2C]", 2), 35367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbStrSpRel, 0x9000, 35467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtUnused, -1, -1, kFmtBitBlt, 7, 0, 35567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE0 | REG_USE_SP 35671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_STORE, "str", "!0C, [sp, #!2E]", 2), 35767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbStrbRRI5, 0x7000, 35867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 10, 6, 35967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE01 | IS_STORE, 36071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "strb", "!0C, [!1C, #!2d]", 2), 36167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbStrbRRR, 0x5400, 36267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 36367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE012 | IS_STORE, 36471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "strb", "!0C, [!1C, !2C]", 2), 36567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbStrhRRI5, 0x8000, 36667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 10, 6, 36767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE01 | IS_STORE, 36871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "strh", "!0C, [!1C, #!2F]", 2), 36967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbStrhRRR, 0x5200, 37067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 37167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE012 | IS_STORE, 37271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "strh", "!0C, [!1C, !2C]", 2), 37367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbSubRRI3, 0x1e00, 37467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 37567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 37667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 37771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "subs", "!0C, !1C, #!2d", 2), 37867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbSubRI8, 0x3800, 37967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 10, 8, kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, 38067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 38167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE0 | SETS_CCODES, 38271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "subs", "!0C, #!1d", 2), 38367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbSubRRR, 0x1a00, 38467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtBitBlt, 8, 6, 38567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 38667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE12 | SETS_CCODES, 38771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "subs", "!0C, !1C, !2C", 2), 38867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbSubSpI7, 0xb080, 38967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 6, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 39067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 39167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_UNARY_OP | REG_DEF_SP | REG_USE_SP, 39271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "sub", "sp, #!0d*4", 2), 39367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbSwi, 0xdf00, 394408f79aeb676251ba35667a64e86c20638d7cb0bIan Rogers kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 395408f79aeb676251ba35667a64e86c20638d7cb0bIan Rogers kFmtUnused, -1, -1, IS_UNARY_OP | IS_BRANCH, 39671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "swi", "!0d", 2), 39767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbTst, 0x4200, 39867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtBitBlt, 5, 3, kFmtUnused, -1, -1, 39967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_UNARY_OP | REG_USE01 | SETS_CCODES, 40071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "tst", "!0C, !1C", 2), 40167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vldrs, 0xed900a00, 40267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 7, 0, 4034965b661a6edc7f263b6fef1439b03ca8c95da49buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD | 40471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee REG_DEF_LR | NEEDS_FIXUP, "vldr", "!0s, [!1C, #!2E]", 4), 40567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vldrd, 0xed900b00, 40667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 7, 0, 4074965b661a6edc7f263b6fef1439b03ca8c95da49buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD | 40871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee REG_DEF_LR | NEEDS_FIXUP, "vldr", "!0S, [!1C, #!2E]", 4), 40967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vmuls, 0xee200a00, 41067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 7, 16, kFmtSfp, 5, 0, 41167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 41267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE12, 41371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vmuls", "!0s, !1s, !2s", 4), 41467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vmuld, 0xee200b00, 41567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 7, 16, kFmtDfp, 5, 0, 41667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 41771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vmuld", "!0S, !1S, !2S", 4), 41867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vstrs, 0xed800a00, 41967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 7, 0, 42067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE01 | IS_STORE, 42171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vstr", "!0s, [!1C, #!2E]", 4), 42267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vstrd, 0xed800b00, 42367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 7, 0, 42467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE01 | IS_STORE, 42571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vstr", "!0S, [!1C, #!2E]", 4), 42667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vsubs, 0xee300a40, 42767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 7, 16, kFmtSfp, 5, 0, 42867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 42971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vsub", "!0s, !1s, !2s", 4), 43067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vsubd, 0xee300b40, 43167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 7, 16, kFmtDfp, 5, 0, 43267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 43371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vsub", "!0S, !1S, !2S", 4), 43467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vadds, 0xee300a00, 43567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 7, 16, kFmtSfp, 5, 0, 43667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 43771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vadd", "!0s, !1s, !2s", 4), 43867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vaddd, 0xee300b00, 43967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 7, 16, kFmtDfp, 5, 0, 44067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 44171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vadd", "!0S, !1S, !2S", 4), 44267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vdivs, 0xee800a00, 44367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 7, 16, kFmtSfp, 5, 0, 44467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 44571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vdivs", "!0s, !1s, !2s", 4), 44667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vdivd, 0xee800b00, 44767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 7, 16, kFmtDfp, 5, 0, 44867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 44971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vdivd", "!0S, !1S, !2S", 4), 45067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2VcvtIF, 0xeeb80ac0, 45167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 45267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 45371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vcvt.f32", "!0s, !1s", 4), 45467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2VcvtID, 0xeeb80bc0, 45567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 45667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 45771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vcvt.f64", "!0S, !1s", 4), 45867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2VcvtFI, 0xeebd0ac0, 45967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 46067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 46171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vcvt.s32.f32 ", "!0s, !1s", 4), 46267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2VcvtDI, 0xeebd0bc0, 46367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtDfp, 5, 0, kFmtUnused, -1, -1, 46467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 46571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vcvt.s32.f64 ", "!0s, !1S", 4), 46667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2VcvtFd, 0xeeb70ac0, 46767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 46867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 46971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vcvt.f64.f32 ", "!0S, !1s", 4), 47067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2VcvtDF, 0xeeb70bc0, 47167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtDfp, 5, 0, kFmtUnused, -1, -1, 47267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 47371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vcvt.f32.f64 ", "!0s, !1S", 4), 47467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vsqrts, 0xeeb10ac0, 47567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 47667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 47771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vsqrt.f32 ", "!0s, !1s", 4), 47867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vsqrtd, 0xeeb10bc0, 47967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 5, 0, kFmtUnused, -1, -1, 48067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 48171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vsqrt.f64 ", "!0S, !1S", 4), 48267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2MovImmShift, 0xf04f0000, /* no setflags encoding */ 48367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtModImm, -1, -1, kFmtUnused, -1, -1, 48467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0, 48571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mov", "!0C, #!1m", 4), 48667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2MovImm16, 0xf2400000, 48767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtImm16, -1, -1, kFmtUnused, -1, -1, 48867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0, 48971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mov", "!0C, #!1M", 4), 49067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2StrRRI12, 0xf8c00000, 49167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 11, 0, 49267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE01 | IS_STORE, 49371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "str", "!0C, [!1C, #!2d]", 4), 49467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrRRI12, 0xf8d00000, 49567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 11, 0, 49667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 49771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldr", "!0C, [!1C, #!2d]", 4), 49867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2StrRRI8Predec, 0xf8400c00, 49967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 8, 0, 50067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE01 | IS_STORE, 50171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "str", "!0C, [!1C, #-!2d]", 4), 50267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrRRI8Predec, 0xf8500c00, 50367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 8, 0, 50467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 50571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldr", "!0C, [!1C, #-!2d]", 4), 50667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Cbnz, 0xb900, /* Note: does not affect flags */ 50767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtImm6, -1, -1, kFmtUnused, -1, -1, 5085abfa3ea35781464df8fae60aaf03f48a295e965buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE0 | IS_BRANCH | 50971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee NEEDS_FIXUP, "cbnz", "!0C,!1t", 2), 51067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Cbz, 0xb100, /* Note: does not affect flags */ 51167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 2, 0, kFmtImm6, -1, -1, kFmtUnused, -1, -1, 5125abfa3ea35781464df8fae60aaf03f48a295e965buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE0 | IS_BRANCH | 51371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee NEEDS_FIXUP, "cbz", "!0C,!1t", 2), 51467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AddRRI12, 0xf2000000, 51567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtImm12, -1, -1, 51667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 51767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1,/* Note: doesn't affect flags */ 51871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "add", "!0C,!1C,#!2d", 4), 51967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2MovRR, 0xea4f0000, /* no setflags encoding */ 52067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 3, 0, kFmtUnused, -1, -1, 52167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 52271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mov", "!0C, !1C", 4), 52367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vmovs, 0xeeb00a40, 52467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 52567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 52671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vmov.f32 ", " !0s, !1s", 4), 52767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vmovd, 0xeeb00b40, 52867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 5, 0, kFmtUnused, -1, -1, 52967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 53071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vmov.f64 ", " !0S, !1S", 4), 53167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Ldmia, 0xe8900000, 53267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtBitBlt, 15, 0, kFmtUnused, -1, -1, 53367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 53467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE0 | REG_DEF_LIST1 | IS_LOAD, 53571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldmia", "!0C!!, <!1R>", 4), 53667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Stmia, 0xe8800000, 53767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtBitBlt, 15, 0, kFmtUnused, -1, -1, 53867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 53967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE0 | REG_USE_LIST1 | IS_STORE, 54071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "stmia", "!0C!!, <!1R>", 4), 54167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AddRRR, 0xeb100000, /* setflags encoding */ 54267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 54367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtShift, -1, -1, 54467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_QUAD_OP | REG_DEF0_USE12 | SETS_CCODES, 54571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "adds", "!0C, !1C, !2C!3H", 4), 54667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2SubRRR, 0xebb00000, /* setflags enconding */ 54767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 54867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtShift, -1, -1, 54967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_QUAD_OP | REG_DEF0_USE12 | SETS_CCODES, 55071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "subs", "!0C, !1C, !2C!3H", 4), 55167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2SbcRRR, 0xeb700000, /* setflags encoding */ 55267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 55367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtShift, -1, -1, 55467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_QUAD_OP | REG_DEF0_USE12 | USES_CCODES | SETS_CCODES, 55571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "sbcs", "!0C, !1C, !2C!3H", 4), 55667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2CmpRR, 0xebb00f00, 55767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, kFmtShift, -1, -1, 55867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 55967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_USE01 | SETS_CCODES, 56071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "cmp", "!0C, !1C", 4), 56167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2SubRRI12, 0xf2a00000, 56267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtImm12, -1, -1, 56367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 56467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1,/* Note: doesn't affect flags */ 56571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "sub", "!0C,!1C,#!2d", 4), 56658f9274efe66535255a70327022b8f586d334843buzbee ENCODING_MAP(kThumb2MvnImm12, 0xf06f0000, /* no setflags encoding */ 56758f9274efe66535255a70327022b8f586d334843buzbee kFmtBitBlt, 11, 8, kFmtImm12, -1, -1, kFmtUnused, -1, -1, 56867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0, 56971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mvn", "!0C, #!1n", 4), 57067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Sel, 0xfaa0f080, 57167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 57267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 57367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE12 | USES_CCODES, 57471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "sel", "!0C, !1C, !2C", 4), 57567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Ubfx, 0xf3c00000, 57667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtLsb, -1, -1, 57767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBWidth, 4, 0, IS_QUAD_OP | REG_DEF0_USE1, 57871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ubfx", "!0C, !1C, #!2d, #!3d", 4), 57967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Sbfx, 0xf3400000, 58067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtLsb, -1, -1, 58167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBWidth, 4, 0, IS_QUAD_OP | REG_DEF0_USE1, 58271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "sbfx", "!0C, !1C, #!2d, #!3d", 4), 58367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrRRR, 0xf8500000, 58467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 58567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 5, 4, IS_QUAD_OP | REG_DEF0_USE12 | IS_LOAD, 58671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldr", "!0C, [!1C, !2C, LSL #!3d]", 4), 58767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrhRRR, 0xf8300000, 58867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 58967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 5, 4, IS_QUAD_OP | REG_DEF0_USE12 | IS_LOAD, 59071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrh", "!0C, [!1C, !2C, LSL #!3d]", 4), 59167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrshRRR, 0xf9300000, 59267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 59367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 5, 4, IS_QUAD_OP | REG_DEF0_USE12 | IS_LOAD, 59471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrsh", "!0C, [!1C, !2C, LSL #!3d]", 4), 59567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrbRRR, 0xf8100000, 59667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 59767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 5, 4, IS_QUAD_OP | REG_DEF0_USE12 | IS_LOAD, 59871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrb", "!0C, [!1C, !2C, LSL #!3d]", 4), 59967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrsbRRR, 0xf9100000, 60067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 60167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 5, 4, IS_QUAD_OP | REG_DEF0_USE12 | IS_LOAD, 60271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrsb", "!0C, [!1C, !2C, LSL #!3d]", 4), 60367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2StrRRR, 0xf8400000, 60467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 60567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 5, 4, IS_QUAD_OP | REG_USE012 | IS_STORE, 60671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "str", "!0C, [!1C, !2C, LSL #!3d]", 4), 60767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2StrhRRR, 0xf8200000, 60867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 60967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 5, 4, IS_QUAD_OP | REG_USE012 | IS_STORE, 61071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "strh", "!0C, [!1C, !2C, LSL #!3d]", 4), 61167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2StrbRRR, 0xf8000000, 61267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 61367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 5, 4, IS_QUAD_OP | REG_USE012 | IS_STORE, 61471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "strb", "!0C, [!1C, !2C, LSL #!3d]", 4), 61567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrhRRI12, 0xf8b00000, 61667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 11, 0, 61767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 61871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrh", "!0C, [!1C, #!2d]", 4), 61967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrshRRI12, 0xf9b00000, 62067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 11, 0, 62167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 62271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrsh", "!0C, [!1C, #!2d]", 4), 62367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrbRRI12, 0xf8900000, 62467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 11, 0, 62567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 62671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrb", "!0C, [!1C, #!2d]", 4), 62767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrsbRRI12, 0xf9900000, 62867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 11, 0, 62967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 63071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrsb", "!0C, [!1C, #!2d]", 4), 63167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2StrhRRI12, 0xf8a00000, 63267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 11, 0, 63367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE01 | IS_STORE, 63471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "strh", "!0C, [!1C, #!2d]", 4), 63567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2StrbRRI12, 0xf8800000, 63667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 11, 0, 63767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_USE01 | IS_STORE, 63871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "strb", "!0C, [!1C, #!2d]", 4), 63967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Pop, 0xe8bd0000, 64067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 64167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 64267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_UNARY_OP | REG_DEF_SP | REG_USE_SP | REG_DEF_LIST0 64371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_LOAD | NEEDS_FIXUP, "pop", "<!0R>", 4), 64467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Push, 0xe92d0000, 64567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 64667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 64767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_UNARY_OP | REG_DEF_SP | REG_USE_SP | REG_USE_LIST0 64871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_STORE | NEEDS_FIXUP, "push", "<!0R>", 4), 6494ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee ENCODING_MAP(kThumb2CmpRI12, 0xf1b00f00, 65067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, kFmtUnused, -1, -1, 65167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 65267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_USE0 | SETS_CCODES, 65371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "cmp", "!0C, #!1m", 4), 65467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AdcRRR, 0xeb500000, /* setflags encoding */ 65567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 65667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtShift, -1, -1, 65767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_QUAD_OP | REG_DEF0_USE12 | SETS_CCODES, 65871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "adcs", "!0C, !1C, !2C!3H", 4), 65967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AndRRR, 0xea000000, 66067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 66167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtShift, -1, -1, IS_QUAD_OP | REG_DEF0_USE12, 66271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "and", "!0C, !1C, !2C!3H", 4), 66367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2BicRRR, 0xea200000, 66467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 66567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtShift, -1, -1, IS_QUAD_OP | REG_DEF0_USE12, 66671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "bic", "!0C, !1C, !2C!3H", 4), 66767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2CmnRR, 0xeb000000, 66867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, kFmtShift, -1, -1, 66967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 67067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 67171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "cmn", "!0C, !1C, shift !2d", 4), 67267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2EorRRR, 0xea800000, 67367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 67467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtShift, -1, -1, IS_QUAD_OP | REG_DEF0_USE12, 67571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "eor", "!0C, !1C, !2C!3H", 4), 67667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2MulRRR, 0xfb00f000, 67767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 67867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 67971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mul", "!0C, !1C, !2C", 4), 68067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2MnvRR, 0xea6f0000, 68167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 3, 0, kFmtShift, -1, -1, 68267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1, 68371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mvn", "!0C, !1C, shift !2d", 4), 68467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2RsubRRI8, 0xf1d00000, 68567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, 68667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 68767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 68871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "rsb", "!0C,!1C,#!2m", 4), 68967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2NegRR, 0xf1d00000, /* instance of rsub */ 69067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtUnused, -1, -1, 69167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 69267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE1 | SETS_CCODES, 69371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "neg", "!0C,!1C", 4), 69467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2OrrRRR, 0xea400000, 69567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 69667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtShift, -1, -1, IS_QUAD_OP | REG_DEF0_USE12, 69771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "orr", "!0C, !1C, !2C!3H", 4), 69867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2TstRR, 0xea100f00, 69967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, kFmtShift, -1, -1, 70067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 70167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_USE01 | SETS_CCODES, 70271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "tst", "!0C, !1C, shift !2d", 4), 70367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LslRRR, 0xfa00f000, 70467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 70567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 70671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "lsl", "!0C, !1C, !2C", 4), 70767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LsrRRR, 0xfa20f000, 70867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 70967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 71071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "lsr", "!0C, !1C, !2C", 4), 71167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AsrRRR, 0xfa40f000, 71267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 71367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 71471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "asr", "!0C, !1C, !2C", 4), 71567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2RorRRR, 0xfa60f000, 71667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 71767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 71871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ror", "!0C, !1C, !2C", 4), 71967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LslRRI5, 0xea4f0000, 72067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 3, 0, kFmtShift5, -1, -1, 72167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1, 72271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "lsl", "!0C, !1C, #!2d", 4), 72367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LsrRRI5, 0xea4f0010, 72467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 3, 0, kFmtShift5, -1, -1, 72567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1, 72671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "lsr", "!0C, !1C, #!2d", 4), 72767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AsrRRI5, 0xea4f0020, 72867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 3, 0, kFmtShift5, -1, -1, 72967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1, 73071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "asr", "!0C, !1C, #!2d", 4), 73167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2RorRRI5, 0xea4f0030, 73267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 3, 0, kFmtShift5, -1, -1, 73367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1, 73471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ror", "!0C, !1C, #!2d", 4), 73567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2BicRRI8, 0xf0200000, 73667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, 73767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1, 73871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "bic", "!0C, !1C, #!2m", 4), 73967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AndRRI8, 0xf0000000, 74067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, 74167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1, 74271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "and", "!0C, !1C, #!2m", 4), 74367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2OrrRRI8, 0xf0400000, 74467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, 74567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1, 74671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "orr", "!0C, !1C, #!2m", 4), 74767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2EorRRI8, 0xf0800000, 74867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, 74967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1, 75071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "eor", "!0C, !1C, #!2m", 4), 75167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AddRRI8, 0xf1100000, 75267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, 75367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 75467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 75571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "adds", "!0C, !1C, #!2m", 4), 75667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AdcRRI8, 0xf1500000, 75767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, 75867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 75967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES | USES_CCODES, 76071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "adcs", "!0C, !1C, #!2m", 4), 76167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2SubRRI8, 0xf1b00000, 76267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, 76367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 76467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 76571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "subs", "!0C, !1C, #!2m", 4), 76667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2SbcRRI8, 0xf1700000, 76767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtModImm, -1, -1, 76867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 76967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES | USES_CCODES, 77071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "sbcs", "!0C, !1C, #!2m", 4), 77167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2It, 0xbf00, 77267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 7, 4, kFmtBitBlt, 3, 0, kFmtModImm, -1, -1, 77367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | IS_IT | USES_CCODES, 77471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "it:!1b", "!0c", 2), 77567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Fmstat, 0xeef1fa10, 77667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 77767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, NO_OPERAND | SETS_CCODES, 77871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "fmstat", "", 4), 77967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vcmpd, 0xeeb40b40, 78067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 5, 0, kFmtUnused, -1, -1, 78167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE01, 78271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vcmp.f64", "!0S, !1S", 4), 78367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vcmps, 0xeeb40a40, 78467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 78567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_USE01, 78671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vcmp.f32", "!0s, !1s", 4), 78767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrPcRel12, 0xf8df0000, 78867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 11, 0, kFmtUnused, -1, -1, 78967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 7905abfa3ea35781464df8fae60aaf03f48a295e965buzbee IS_TERTIARY_OP | REG_DEF0 | REG_USE_PC | IS_LOAD | NEEDS_FIXUP, 79171ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldr", "!0C, [r15pc, #!1d]", 4), 79267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2BCond, 0xf0008000, 79367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBrOffset, -1, -1, kFmtBitBlt, 25, 22, kFmtUnused, -1, -1, 79467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 7955abfa3ea35781464df8fae60aaf03f48a295e965buzbee IS_BINARY_OP | IS_BRANCH | USES_CCODES | NEEDS_FIXUP, 79671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "b!1c", "!0t", 4), 79767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vmovd_RR, 0xeeb00b40, 79867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 5, 0, kFmtUnused, -1, -1, 79967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 80071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vmov.f64", "!0S, !1S", 4), 80167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vmovs_RR, 0xeeb00a40, 80267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 80367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 80471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vmov.f32", "!0s, !1s", 4), 80567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Fmrs, 0xee100a10, 80667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtSfp, 7, 16, kFmtUnused, -1, -1, 80767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 80871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "fmrs", "!0C, !1s", 4), 80967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Fmsr, 0xee000a10, 81067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 7, 16, kFmtBitBlt, 15, 12, kFmtUnused, -1, -1, 81167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 81271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "fmsr", "!0s, !1C", 4), 81367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Fmrrd, 0xec500b10, 81467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtDfp, 5, 0, 81567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF01_USE2, 81671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "fmrrd", "!0C, !1C, !2S", 4), 81767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Fmdrr, 0xec400b10, 81867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 5, 0, kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, 81967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE12, 82071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "fmdrr", "!0S, !1C, !2C", 4), 82167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vabsd, 0xeeb00bc0, 82267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 5, 0, kFmtUnused, -1, -1, 82367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 82471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vabs.f64", "!0S, !1S", 4), 82567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vabss, 0xeeb00ac0, 82667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 82767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 82871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vabs.f32", "!0s, !1s", 4), 82967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vnegd, 0xeeb10b40, 83067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtDfp, 5, 0, kFmtUnused, -1, -1, 83167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 83271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vneg.f64", "!0S, !1S", 4), 83367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vnegs, 0xeeb10a40, 83467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtSfp, 5, 0, kFmtUnused, -1, -1, 83567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0_USE1, 83671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vneg.f32", "!0s, !1s", 4), 83767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vmovs_IMM8, 0xeeb00a00, 83867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtSfp, 22, 12, kFmtFPImm, 16, 0, kFmtUnused, -1, -1, 83967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0, 84071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vmov.f32", "!0s, #0x!1h", 4), 84167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vmovd_IMM8, 0xeeb00b00, 84267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtDfp, 22, 12, kFmtFPImm, 16, 0, kFmtUnused, -1, -1, 84367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0, 84471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "vmov.f64", "!0S, #0x!1h", 4), 84567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Mla, 0xfb000000, 84667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 84767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, 84867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_QUAD_OP | REG_DEF0 | REG_USE1 | REG_USE2 | REG_USE3, 84971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mla", "!0C, !1C, !2C, !3C", 4), 85067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Umull, 0xfba00000, 85167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, 85267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 3, 0, 85367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_QUAD_OP | REG_DEF0 | REG_DEF1 | REG_USE2 | REG_USE3, 85471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "umull", "!0C, !1C, !2C, !3C", 4), 85567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Ldrex, 0xe8500f00, 85667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, kFmtBitBlt, 7, 0, 85767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0_USE1 | IS_LOAD, 85871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldrex", "!0C, [!1C, #!2E]", 4), 85967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Strex, 0xe8400000, 86067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 15, 12, kFmtBitBlt, 19, 16, 86167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 7, 0, IS_QUAD_OP | REG_DEF0_USE12 | IS_STORE, 86271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "strex", "!0C,!1C, [!2C, #!2E]", 4), 86367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Clrex, 0xf3bf8f2f, 86467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 86567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, NO_OPERAND, 86671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "clrex", "", 4), 86767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Bfi, 0xf3600000, 86867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtShift5, -1, -1, 86967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 4, 0, IS_QUAD_OP | REG_DEF0_USE1, 87071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "bfi", "!0C,!1C,#!2d,#!3d", 4), 87167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Bfc, 0xf36f0000, 87267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtShift5, -1, -1, kFmtBitBlt, 4, 0, 87367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_TERTIARY_OP | REG_DEF0, 87471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "bfc", "!0C,#!1d,#!2d", 4), 87567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Dmb, 0xf3bf8f50, 87667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 3, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 87767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, IS_UNARY_OP, 878b1eba213afaf7fa6445de863ddc9680ab99762eaBrian Carlstrom "dmb", "#!0B", 4), 87967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdrPcReln12, 0xf85f0000, 88067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 11, 0, kFmtUnused, -1, -1, 88167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 88267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0 | REG_USE_PC | IS_LOAD, 88371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldr", "!0C, [r15pc, -#!1d]", 4), 88467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Stm, 0xe9000000, 88567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtBitBlt, 12, 0, kFmtUnused, -1, -1, 88667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 88767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_USE0 | REG_USE_LIST1 | IS_STORE, 88871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "stm", "!0C, <!1R>", 4), 88967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumbUndefined, 0xde00, 89067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 89167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, NO_OPERAND, 89271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "undefined", "", 2), 89367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee // NOTE: vpop, vpush hard-encoded for s16+ reg list 89467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2VPopCS, 0xecbd8a00, 89567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 89667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 89767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_UNARY_OP | REG_DEF_SP | REG_USE_SP | REG_DEF_FPCS_LIST0 89871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_LOAD, "vpop", "<!0P>", 4), 89967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2VPushCS, 0xed2d8a00, 90067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 7, 0, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 90167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 90267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_UNARY_OP | REG_DEF_SP | REG_USE_SP | REG_USE_FPCS_LIST0 90371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_STORE, "vpush", "<!0P>", 4), 90467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vldms, 0xec900a00, 90567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtSfp, 22, 12, kFmtBitBlt, 7, 0, 90667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 90767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_USE0 | REG_DEF_FPCS_LIST2 90871ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_LOAD, "vldms", "!0C, <!2Q>", 4), 90967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2Vstms, 0xec800a00, 91067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtSfp, 22, 12, kFmtBitBlt, 7, 0, 91167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 91267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_USE0 | REG_USE_FPCS_LIST2 91371ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_STORE, "vstms", "!0C, <!2Q>", 4), 91467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2BUncond, 0xf0009000, 91567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtOff24, -1, -1, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 91667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, NO_OPERAND | IS_BRANCH, 91771ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "b", "!0t", 4), 91867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2MovImm16H, 0xf2c00000, 91967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtImm16, -1, -1, kFmtUnused, -1, -1, 9204ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0 | REG_USE0, 9214ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee "movt", "!0C, #!1M", 4), 92267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2AddPCR, 0x4487, 92367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 6, 3, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 92467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 92567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_UNARY_OP | REG_USE0 | IS_BRANCH, 92671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "add", "rPC, !0C", 2), 92703fa263ba90e9f6b11231576c6b9cc434e67141dbuzbee ENCODING_MAP(kThumb2Adr, 0xf20f0000, 92867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtImm12, -1, -1, kFmtUnused, -1, -1, 92967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 9305abfa3ea35781464df8fae60aaf03f48a295e965buzbee /* Note: doesn't affect flags */ 9315abfa3ea35781464df8fae60aaf03f48a295e965buzbee IS_TERTIARY_OP | REG_DEF0 | NEEDS_FIXUP, 93271ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "adr", "!0C,#!1d", 4), 93367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2MovImm16LST, 0xf2400000, 93467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtImm16, -1, -1, kFmtUnused, -1, -1, 9355abfa3ea35781464df8fae60aaf03f48a295e965buzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0 | NEEDS_FIXUP, 93671ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "mov", "!0C, #!1M", 4), 93767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2MovImm16HST, 0xf2c00000, 93867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtImm16, -1, -1, kFmtUnused, -1, -1, 9394ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee kFmtUnused, -1, -1, IS_BINARY_OP | REG_DEF0 | REG_USE0 | NEEDS_FIXUP, 9404ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee "movt", "!0C, #!1M", 4), 94167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2LdmiaWB, 0xe8b00000, 94267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 19, 16, kFmtBitBlt, 15, 0, kFmtUnused, -1, -1, 94367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 94467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_BINARY_OP | REG_DEF0_USE0 | REG_DEF_LIST1 | IS_LOAD, 94571ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "ldmia", "!0C!!, <!1R>", 4), 94667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee ENCODING_MAP(kThumb2SubsRRI12, 0xf1b00000, 94767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtImm12, -1, -1, 94867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee kFmtUnused, -1, -1, 94967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee IS_TERTIARY_OP | REG_DEF0_USE1 | SETS_CCODES, 95071ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "subs", "!0C,!1C,#!2d", 4), 95158f9274efe66535255a70327022b8f586d334843buzbee ENCODING_MAP(kThumb2OrrRRRs, 0xea500000, 95258f9274efe66535255a70327022b8f586d334843buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 95358f9274efe66535255a70327022b8f586d334843buzbee kFmtShift, -1, -1, IS_QUAD_OP | REG_DEF0_USE12 | SETS_CCODES, 95471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee "orrs", "!0C, !1C, !2C!3H", 4), 955e70708051e06119c04be33ca49fb16bef8162059buzbee ENCODING_MAP(kThumb2Push1, 0xf84d0d04, 956e70708051e06119c04be33ca49fb16bef8162059buzbee kFmtBitBlt, 15, 12, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 957e70708051e06119c04be33ca49fb16bef8162059buzbee kFmtUnused, -1, -1, 958e70708051e06119c04be33ca49fb16bef8162059buzbee IS_UNARY_OP | REG_DEF_SP | REG_USE_SP | REG_USE0 95971ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_STORE, "push1", "!0C", 4), 960e70708051e06119c04be33ca49fb16bef8162059buzbee ENCODING_MAP(kThumb2Pop1, 0xf85d0b04, 961e70708051e06119c04be33ca49fb16bef8162059buzbee kFmtBitBlt, 15, 12, kFmtUnused, -1, -1, kFmtUnused, -1, -1, 962e70708051e06119c04be33ca49fb16bef8162059buzbee kFmtUnused, -1, -1, 963e70708051e06119c04be33ca49fb16bef8162059buzbee IS_UNARY_OP | REG_DEF_SP | REG_USE_SP | REG_DEF0 96471ac99485e79ad7eb1ba3ea2d404d53bb5784c13buzbee | IS_LOAD, "pop1", "!0C", 4), 965f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee ENCODING_MAP(kThumb2RsubRRR, 0xebd00000, /* setflags encoding */ 966f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, kFmtBitBlt, 3, 0, 967f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee kFmtShift, -1, -1, 968f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee IS_QUAD_OP | REG_DEF0_USE12 | SETS_CCODES, 969f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee "rsbs", "!0C, !1C, !2C!3H", 4), 970f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee ENCODING_MAP(kThumb2Smull, 0xfb800000, 971f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, 972f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee kFmtBitBlt, 3, 0, 973f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee IS_QUAD_OP | REG_DEF0 | REG_DEF1 | REG_USE2 | REG_USE3, 974f3aac973bb944885a1a4779ba04a97faa88b7ed0buzbee "smull", "!0C, !1C, !2C, !3C", 4), 9754ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee ENCODING_MAP(kThumb2LdrdPcRel8, 0xe9df0000, 9764ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 11, 8, kFmtBitBlt, 7, 0, 9774ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee kFmtUnused, -1, -1, 9784ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee IS_TERTIARY_OP | REG_DEF0 | REG_DEF1 | REG_USE_PC | IS_LOAD | NEEDS_FIXUP, 9794ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee "ldrd", "!0C, !1C, [pc, #!2E]", 4), 9804ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee ENCODING_MAP(kThumb2LdrdI8, 0xe9d00000, 9814ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, 9824ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee kFmtBitBlt, 7, 0, 9834ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee IS_QUAD_OP | REG_DEF0 | REG_DEF1 | REG_USE2 | IS_LOAD, 9844ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee "ldrd", "!0C, !1C, [!2C, #!3E]", 4), 9854ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee ENCODING_MAP(kThumb2StrdI8, 0xe9c00000, 9864ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee kFmtBitBlt, 15, 12, kFmtBitBlt, 11, 8, kFmtBitBlt, 19, 16, 9874ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee kFmtBitBlt, 7, 0, 9884ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee IS_QUAD_OP | REG_USE0 | REG_USE1 | REG_USE2 | IS_STORE, 9894ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee "strd", "!0C, !1C, [!2C, #!3E]", 4), 99067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee}; 99167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 99267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee/* 99367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * The fake NOP of moving r0 to r0 actually will incur data stalls if r0 is 99467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * not ready. Since r5FP is not updated often, it is less likely to 99567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * generate unnecessary stall cycles. 99667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * TUNING: No longer true - find new NOP pattern. 99767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee */ 99867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee#define PADDING_MOV_R5_R5 0x1C2D 99967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 100067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee/* 100167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * Assemble the LIR into binary instruction format. Note that we may 100267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * discover that pc-relative displacements may not fit the selected 100367bf885d62b1473c833bece1c9e0bb624e6ba391buzbee * instruction. 100467bf885d62b1473c833bece1c9e0bb624e6ba391buzbee */ 10052ce745c06271d5223d57dbf08117b20d5b60694aBrian CarlstromAssemblerStatus ArmMir2Lir::AssembleInstructions(uintptr_t start_addr) { 1006a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee LIR* lir; 1007a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee AssemblerStatus res = kSuccess; // Assume success 100867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 10091fd3346740dfb7f47be9922312b68a4227fada96buzbee for (lir = first_lir_insn_; lir != NULL; lir = NEXT_LIR(lir)) { 1010a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (lir->opcode < 0) { 1011a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* 1 means padding is needed */ 1012a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if ((lir->opcode == kPseudoPseudoAlign4) && (lir->operands[0] == 1)) { 10131fd3346740dfb7f47be9922312b68a4227fada96buzbee code_buffer_.push_back(PADDING_MOV_R5_R5 & 0xFF); 10141fd3346740dfb7f47be9922312b68a4227fada96buzbee code_buffer_.push_back((PADDING_MOV_R5_R5 >> 8) & 0xFF); 1015a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1016a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee continue; 1017a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 101867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 1019fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee if (lir->flags.is_nop) { 1020a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee continue; 1021a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 102267bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 1023a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* 1024a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * For PC-relative displacements we won't know if the 1025a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * selected instruction will work until late (i.e. - now). 1026a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * If something doesn't fit, we must replace the short-form 1027a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * operation with a longer-form one. Note, though, that this 1028a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * can change code we've already processed, so we'll need to 1029a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * re-calculate offsets and restart. To limit the number of 1030a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * restarts, the entire list will be scanned and patched. 1031a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Of course, the patching itself may cause new overflows so this 1032a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * is an iterative process. 1033a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 1034a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (lir->flags.pcRelFixup) { 1035a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (lir->opcode == kThumbLdrPcRel || 1036a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->opcode == kThumb2LdrPcRel12 || 1037a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->opcode == kThumbAddPcRel || 10384ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee lir->opcode == kThumb2LdrdPcRel8 || 1039a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee ((lir->opcode == kThumb2Vldrd) && (lir->operands[1] == r15pc)) || 1040a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee ((lir->opcode == kThumb2Vldrs) && (lir->operands[1] == r15pc))) { 104167bf885d62b1473c833bece1c9e0bb624e6ba391buzbee /* 1042a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * PC-relative loads are mostly used to load immediates 1043a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * that are too large to materialize directly in one shot. 1044a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * However, if the load displacement exceeds the limit, 10454ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee * we revert to a multiple-instruction materialization sequence. 104667bf885d62b1473c833bece1c9e0bb624e6ba391buzbee */ 1047fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee LIR *lir_target = lir->target; 1048cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee uintptr_t pc = (lir->offset + 4) & ~3; 1049fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee uintptr_t target = lir_target->offset; 1050a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee int delta = target - pc; 1051a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (delta & 0x3) { 1052a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee LOG(FATAL) << "PC-rel offset not multiple of 4: " << delta; 1053a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1054a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee // First, a sanity check for cases we shouldn't see now 1055a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (((lir->opcode == kThumbAddPcRel) && (delta > 1020)) || 1056a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee ((lir->opcode == kThumbLdrPcRel) && (delta > 1020))) { 1057a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee // Shouldn't happen in current codegen. 1058a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee LOG(FATAL) << "Unexpected pc-rel offset " << delta; 1059a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 10604ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee // Now, check for the difficult cases 1061a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (((lir->opcode == kThumb2LdrPcRel12) && (delta > 4091)) || 10624ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee ((lir->opcode == kThumb2LdrdPcRel8) && (delta > 1020)) || 1063a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee ((lir->opcode == kThumb2Vldrs) && (delta > 1020)) || 1064a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee ((lir->opcode == kThumb2Vldrd) && (delta > 1020))) { 1065a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* 1066f0504cdc5b6400edd4b39eea64ac280465042d5bbuzbee * Note: because rARM_LR may be used to fix up out-of-range 1067a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * vldrs/vldrd we include REG_DEF_LR in the resource 1068a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * masks for these instructions. 1069a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 10704ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee int base_reg = ((lir->opcode == kThumb2LdrdPcRel8) || (lir->opcode == kThumb2LdrPcRel12)) 10714ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee ? lir->operands[0] : rARM_LR; 107203fa263ba90e9f6b11231576c6b9cc434e67141dbuzbee 10734ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee // Add new Adr to generate the address. 10741fd3346740dfb7f47be9922312b68a4227fada96buzbee LIR* new_adr = RawLIR(lir->dalvik_offset, kThumb2Adr, 1075fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee base_reg, 0, 0, 0, 0, lir->target); 1076fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee InsertLIRBefore(lir, new_adr); 107703fa263ba90e9f6b11231576c6b9cc434e67141dbuzbee 10784ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee // Convert to normal load. 1079a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (lir->opcode == kThumb2LdrPcRel12) { 1080a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->opcode = kThumb2LdrRRI12; 10814ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee } else if (lir->opcode == kThumb2LdrdPcRel8) { 10824ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee lir->opcode = kThumb2LdrdI8; 10834ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee } 10844ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee // Change the load to be relative to the new Adr base. 10854ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee if (lir->opcode == kThumb2LdrdI8) { 10864ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee lir->operands[3] = 0; 10874ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee lir->operands[2] = base_reg; 10884ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee } else { 10894ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee lir->operands[2] = 0; 10904ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee lir->operands[1] = base_reg; 1091a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 10921fd3346740dfb7f47be9922312b68a4227fada96buzbee SetupResourceMasks(lir); 1093a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee res = kRetryAll; 1094a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else { 1095a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if ((lir->opcode == kThumb2Vldrs) || 10964ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee (lir->opcode == kThumb2Vldrd) || 10974ef3e45d7c6ec3c482a1a48f4df470811aa3cf0abuzbee (lir->opcode == kThumb2LdrdPcRel8)) { 1098a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[2] = delta >> 2; 1099a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else { 1100a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[1] = (lir->opcode == kThumb2LdrPcRel12) ? delta : 1101a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee delta >> 2; 1102a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1103a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1104a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumb2Cbnz || lir->opcode == kThumb2Cbz) { 1105fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee LIR *target_lir = lir->target; 1106cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee uintptr_t pc = lir->offset + 4; 1107fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee uintptr_t target = target_lir->offset; 1108a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee int delta = target - pc; 1109a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (delta > 126 || delta < 0) { 1110a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* 1111a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Convert to cmp rx,#0 / b[eq/ne] tgt pair 1112a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * Make new branch instruction and insert after 1113a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 1114fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee LIR* new_inst = 11151fd3346740dfb7f47be9922312b68a4227fada96buzbee RawLIR(lir->dalvik_offset, kThumbBCond, 0, 1116a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee (lir->opcode == kThumb2Cbz) ? kArmCondEq : kArmCondNe, 1117a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee 0, 0, 0, lir->target); 1118fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee InsertLIRAfter(lir, new_inst); 1119a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* Convert the cb[n]z to a cmp rx, #0 ] */ 1120a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->opcode = kThumbCmpRI8; 1121a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* operand[0] is src1 in both cb[n]z & CmpRI8 */ 1122a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[1] = 0; 1123a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->target = 0; 11241fd3346740dfb7f47be9922312b68a4227fada96buzbee SetupResourceMasks(lir); 1125a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee res = kRetryAll; 1126a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else { 1127a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[1] = delta >> 1; 1128a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1129a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumb2Push || lir->opcode == kThumb2Pop) { 1130a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (__builtin_popcount(lir->operands[0]) == 1) { 1131a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* 1132a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * The standard push/pop multiple instruction 1133a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * requires at least two registers in the list. 1134a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * If we've got just one, switch to the single-reg 1135a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * encoding. 1136a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 1137a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->opcode = (lir->opcode == kThumb2Push) ? kThumb2Push1 : 1138a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee kThumb2Pop1; 1139a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee int reg = 0; 1140a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee while (lir->operands[0]) { 1141a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (lir->operands[0] & 0x1) { 1142a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1143a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else { 1144a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee reg++; 1145a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] >>= 1; 1146a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1147a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1148a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] = reg; 11491fd3346740dfb7f47be9922312b68a4227fada96buzbee SetupResourceMasks(lir); 1150a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee res = kRetryAll; 1151a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1152a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumbBCond || lir->opcode == kThumb2BCond) { 1153fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee LIR *target_lir = lir->target; 1154a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee int delta = 0; 1155fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee DCHECK(target_lir); 1156cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee uintptr_t pc = lir->offset + 4; 1157fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee uintptr_t target = target_lir->offset; 1158a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee delta = target - pc; 1159a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if ((lir->opcode == kThumbBCond) && (delta > 254 || delta < -256)) { 1160a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->opcode = kThumb2BCond; 11611fd3346740dfb7f47be9922312b68a4227fada96buzbee SetupResourceMasks(lir); 1162a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee res = kRetryAll; 1163a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1164a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] = delta >> 1; 1165a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumb2BUncond) { 1166fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee LIR *target_lir = lir->target; 1167cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee uintptr_t pc = lir->offset + 4; 1168fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee uintptr_t target = target_lir->offset; 1169a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee int delta = target - pc; 1170a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] = delta >> 1; 11711fd3346740dfb7f47be9922312b68a4227fada96buzbee if (!(cu_->disable_opt & (1 << kSafeOptimizations)) && 1172a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] == 0) { // Useless branch 1173fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee lir->flags.is_nop = true; 1174a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee res = kRetryAll; 1175a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1176a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumbBUncond) { 1177fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee LIR *target_lir = lir->target; 1178cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee uintptr_t pc = lir->offset + 4; 1179fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee uintptr_t target = target_lir->offset; 1180a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee int delta = target - pc; 1181a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (delta > 2046 || delta < -2048) { 1182a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee // Convert to Thumb2BCond w/ kArmCondAl 1183a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->opcode = kThumb2BUncond; 1184a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] = 0; 11851fd3346740dfb7f47be9922312b68a4227fada96buzbee SetupResourceMasks(lir); 1186a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee res = kRetryAll; 1187a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else { 1188a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] = delta >> 1; 11891fd3346740dfb7f47be9922312b68a4227fada96buzbee if (!(cu_->disable_opt & (1 << kSafeOptimizations)) && 1190a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] == -1) { // Useless branch 1191fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee lir->flags.is_nop = true; 1192a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee res = kRetryAll; 1193a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1194a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1195a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumbBlx1) { 1196a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee DCHECK(NEXT_LIR(lir)->opcode == kThumbBlx2); 1197fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee /* cur_pc is Thumb */ 1198fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee uintptr_t cur_pc = (start_addr + lir->offset + 4) & ~3; 1199cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee uintptr_t target = lir->operands[1]; 120067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 1201a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* Match bit[1] in target with base */ 1202fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee if (cur_pc & 0x2) { 1203a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee target |= 0x2; 1204a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1205fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee int delta = target - cur_pc; 1206a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee DCHECK((delta >= -(1<<22)) && (delta <= ((1<<22)-2))); 120767bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 1208a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] = (delta >> 12) & 0x7ff; 1209a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee NEXT_LIR(lir)->operands[0] = (delta>> 1) & 0x7ff; 1210a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumbBl1) { 1211a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee DCHECK(NEXT_LIR(lir)->opcode == kThumbBl2); 1212fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee /* Both cur_pc and target are Thumb */ 1213fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee uintptr_t cur_pc = start_addr + lir->offset + 4; 1214cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee uintptr_t target = lir->operands[1]; 121567bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 1216fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee int delta = target - cur_pc; 1217a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee DCHECK((delta >= -(1<<22)) && (delta <= ((1<<22)-2))); 121867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 1219a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[0] = (delta >> 12) & 0x7ff; 1220a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee NEXT_LIR(lir)->operands[0] = (delta>> 1) & 0x7ff; 1221a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumb2Adr) { 1222fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee SwitchTable *tab_rec = reinterpret_cast<SwitchTable*>(lir->operands[2]); 1223cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee LIR* target = lir->target; 1224fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee int target_disp = tab_rec ? tab_rec->offset 1225a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee : target->offset; 1226fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee int disp = target_disp - ((lir->offset + 4) & ~3); 1227a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (disp < 4096) { 1228a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[1] = disp; 1229a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else { 1230a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee // convert to ldimm16l, ldimm16h, add tgt, pc, operands[0] 123111ba0e9f6744cf1bdb5ebe2011eadadbc088eadebuzbee // TUNING: if this case fires often, it can be improved. Not expected to be common. 1232fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee LIR *new_mov16L = 12331fd3346740dfb7f47be9922312b68a4227fada96buzbee RawLIR(lir->dalvik_offset, kThumb2MovImm16LST, 1234cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee lir->operands[0], 0, reinterpret_cast<uintptr_t>(lir), 1235fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee reinterpret_cast<uintptr_t>(tab_rec), 0, lir->target); 1236fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee InsertLIRBefore(lir, new_mov16L); 1237fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee LIR *new_mov16H = 12381fd3346740dfb7f47be9922312b68a4227fada96buzbee RawLIR(lir->dalvik_offset, kThumb2MovImm16HST, 1239cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee lir->operands[0], 0, reinterpret_cast<uintptr_t>(lir), 1240fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee reinterpret_cast<uintptr_t>(tab_rec), 0, lir->target); 1241fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee InsertLIRBefore(lir, new_mov16H); 124211ba0e9f6744cf1bdb5ebe2011eadadbc088eadebuzbee if (ARM_LOWREG(lir->operands[0])) { 124311ba0e9f6744cf1bdb5ebe2011eadadbc088eadebuzbee lir->opcode = kThumbAddRRLH; 124411ba0e9f6744cf1bdb5ebe2011eadadbc088eadebuzbee } else { 124511ba0e9f6744cf1bdb5ebe2011eadadbc088eadebuzbee lir->opcode = kThumbAddRRHH; 124611ba0e9f6744cf1bdb5ebe2011eadadbc088eadebuzbee } 1247f0504cdc5b6400edd4b39eea64ac280465042d5bbuzbee lir->operands[1] = rARM_PC; 12481fd3346740dfb7f47be9922312b68a4227fada96buzbee SetupResourceMasks(lir); 1249a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee res = kRetryAll; 125067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee } 1251a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumb2MovImm16LST) { 1252fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee // operands[1] should hold disp, [2] has add, [3] has tab_rec 1253cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee LIR *addPCInst = reinterpret_cast<LIR*>(lir->operands[2]); 1254fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee SwitchTable *tab_rec = reinterpret_cast<SwitchTable*>(lir->operands[3]); 1255fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee // If tab_rec is null, this is a literal load. Use target 1256cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee LIR* target = lir->target; 1257fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee int target_disp = tab_rec ? tab_rec->offset : target->offset; 1258fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee lir->operands[1] = (target_disp - (addPCInst->offset + 4)) & 0xffff; 1259a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } else if (lir->opcode == kThumb2MovImm16HST) { 1260fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee // operands[1] should hold disp, [2] has add, [3] has tab_rec 1261cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee LIR *addPCInst = reinterpret_cast<LIR*>(lir->operands[2]); 1262fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee SwitchTable *tab_rec = reinterpret_cast<SwitchTable*>(lir->operands[3]); 1263fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee // If tab_rec is null, this is a literal load. Use target 1264cbd6d44c0a94f3d26671b5325aa21bbf1335ffe8buzbee LIR* target = lir->target; 1265fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee int target_disp = tab_rec ? tab_rec->offset : target->offset; 1266a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee lir->operands[1] = 1267fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee ((target_disp - (addPCInst->offset + 4)) >> 16) & 0xffff; 1268a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1269a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1270a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* 1271a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * If one of the pc-relative instructions expanded we'll have 1272a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * to make another pass. Don't bother to fully assemble the 1273a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee * instruction. 1274a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee */ 1275a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (res != kSuccess) { 1276a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee continue; 1277a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1278a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee const ArmEncodingMap *encoder = &EncodingMap[lir->opcode]; 1279eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t bits = encoder->skeleton; 1280a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee int i; 1281a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee for (i = 0; i < 4; i++) { 1282eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t operand; 1283eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t value; 1284a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee operand = lir->operands[i]; 1285fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee switch (encoder->field_loc[i].kind) { 1286a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtUnused: 1287a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1288a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtFPImm: 1289fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee value = ((operand & 0xF0) >> 4) << encoder->field_loc[i].end; 1290fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee value |= (operand & 0x0F) << encoder->field_loc[i].start; 1291a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1292a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1293a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtBrOffset: 1294a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value = ((operand & 0x80000) >> 19) << 26; 1295a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= ((operand & 0x40000) >> 18) << 11; 1296a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= ((operand & 0x20000) >> 17) << 13; 1297a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= ((operand & 0x1f800) >> 11) << 16; 1298a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= (operand & 0x007ff); 1299a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1300a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1301a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtShift5: 1302a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value = ((operand & 0x1c) >> 2) << 12; 1303a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= (operand & 0x03) << 6; 1304a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1305a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1306a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtShift: 1307a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value = ((operand & 0x70) >> 4) << 12; 1308a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= (operand & 0x0f) << 4; 1309a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1310a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1311a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtBWidth: 1312a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value = operand - 1; 1313a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1314a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1315a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtLsb: 1316a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value = ((operand & 0x1c) >> 2) << 12; 1317a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= (operand & 0x03) << 6; 1318a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1319a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1320a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtImm6: 1321a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value = ((operand & 0x20) >> 5) << 9; 1322a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= (operand & 0x1f) << 3; 1323a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1324a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1325a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtBitBlt: 1326fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee value = (operand << encoder->field_loc[i].start) & 1327fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee ((1 << (encoder->field_loc[i].end + 1)) - 1); 1328a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1329a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1330a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtDfp: { 1331f0504cdc5b6400edd4b39eea64ac280465042d5bbuzbee DCHECK(ARM_DOUBLEREG(operand)); 1332748474146da0c6484fa3dca0a700f612d47550c3Elliott Hughes DCHECK_EQ((operand & 0x1), 0U); 1333fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee int reg_name = (operand & ARM_FP_REG_MASK) >> 1; 1334a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* Snag the 1-bit slice and position it */ 1335fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee value = ((reg_name & 0x10) >> 4) << encoder->field_loc[i].end; 1336a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* Extract and position the 4-bit slice */ 1337fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee value |= (reg_name & 0x0f) << encoder->field_loc[i].start; 1338a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1339a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 134067bf885d62b1473c833bece1c9e0bb624e6ba391buzbee } 1341a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtSfp: 1342f0504cdc5b6400edd4b39eea64ac280465042d5bbuzbee DCHECK(ARM_SINGLEREG(operand)); 1343a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* Snag the 1-bit slice and position it */ 1344fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee value = (operand & 0x1) << encoder->field_loc[i].end; 1345a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee /* Extract and position the 4-bit slice */ 1346fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee value |= ((operand & 0x1e) >> 1) << encoder->field_loc[i].start; 1347a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1348a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1349a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtImm12: 1350a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtModImm: 1351a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value = ((operand & 0x800) >> 11) << 26; 1352a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= ((operand & 0x700) >> 8) << 12; 1353a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= operand & 0x0ff; 1354a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1355a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1356a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtImm16: 1357a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value = ((operand & 0x0800) >> 11) << 26; 1358a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= ((operand & 0xf000) >> 12) << 16; 1359a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= ((operand & 0x0700) >> 8) << 12; 1360a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value |= operand & 0x0ff; 1361a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1362a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1363a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee case kFmtOff24: { 1364eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t signbit = (operand >> 31) & 0x1; 1365eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t i1 = (operand >> 22) & 0x1; 1366eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t i2 = (operand >> 21) & 0x1; 1367eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t imm10 = (operand >> 11) & 0x03ff; 1368eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t imm11 = operand & 0x07ff; 1369eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t j1 = (i1 ^ signbit) ? 0 : 1; 1370eaf09bc65f9a10d12befcdb239156938c9bceef2buzbee uint32_t j2 = (i2 ^ signbit) ? 0 : 1; 1371a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee value = (signbit << 26) | (j1 << 13) | (j2 << 11) | (imm10 << 16) | 1372a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee imm11; 1373a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee bits |= value; 1374a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1375a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee break; 1376a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee default: 1377fa57c47f1b72916371a9c2d5c1389219bce655b4buzbee LOG(FATAL) << "Bad fmt:" << encoder->field_loc[i].kind; 1378a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 137967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee } 1380a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee if (encoder->size == 4) { 13811fd3346740dfb7f47be9922312b68a4227fada96buzbee code_buffer_.push_back((bits >> 16) & 0xff); 13821fd3346740dfb7f47be9922312b68a4227fada96buzbee code_buffer_.push_back((bits >> 24) & 0xff); 1383a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 13841fd3346740dfb7f47be9922312b68a4227fada96buzbee code_buffer_.push_back(bits & 0xff); 13851fd3346740dfb7f47be9922312b68a4227fada96buzbee code_buffer_.push_back((bits >> 8) & 0xff); 1386a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee } 1387a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee return res; 138867bf885d62b1473c833bece1c9e0bb624e6ba391buzbee} 138967bf885d62b1473c833bece1c9e0bb624e6ba391buzbee 13902ce745c06271d5223d57dbf08117b20d5b60694aBrian Carlstromint ArmMir2Lir::GetInsnSize(LIR* lir) { 1391a114add0300b95eeaae7465493f39144e07324e8Bill Buzbee return EncodingMap[lir->opcode].size; 1392e88dfbf138bc204b1ce21911f1c34098ea74af7cbuzbee} 1393e88dfbf138bc204b1ce21911f1c34098ea74af7cbuzbee 139411d1b0c31ddd710d26068da8e0e4621002205b4bElliott Hughes} // namespace art 1395