thumb.isa revision 7126:0f3f378d2b7f
113821Sgabeblack@google.com// -*- mode:c++ -*- 213821Sgabeblack@google.com 313821Sgabeblack@google.com// Copyright (c) 2010 ARM Limited 413821Sgabeblack@google.com// All rights reserved 513821Sgabeblack@google.com// 613821Sgabeblack@google.com// The license below extends only to copyright in the software and shall 713821Sgabeblack@google.com// not be construed as granting a license to any other intellectual 813821Sgabeblack@google.com// property including but not limited to intellectual property relating 913821Sgabeblack@google.com// to a hardware implementation of the functionality of the software 1013821Sgabeblack@google.com// licensed hereunder. You may use the software subject to the license 1113821Sgabeblack@google.com// terms below provided that you ensure that this notice is replicated 1213821Sgabeblack@google.com// unmodified and in its entirety in all distributions of the software, 1313821Sgabeblack@google.com// modified or unmodified, in source code or in binary form. 1413821Sgabeblack@google.com// 1513821Sgabeblack@google.com// Copyright (c) 2009 The Regents of The University of Michigan 1613821Sgabeblack@google.com// All rights reserved. 1713821Sgabeblack@google.com// 1813821Sgabeblack@google.com// Redistribution and use in source and binary forms, with or without 1913821Sgabeblack@google.com// modification, are permitted provided that the following conditions are 2013821Sgabeblack@google.com// met: redistributions of source code must retain the above copyright 2113821Sgabeblack@google.com// notice, this list of conditions and the following disclaimer; 2213821Sgabeblack@google.com// redistributions in binary form must reproduce the above copyright 2313821Sgabeblack@google.com// notice, this list of conditions and the following disclaimer in the 2413821Sgabeblack@google.com// documentation and/or other materials provided with the distribution; 2513821Sgabeblack@google.com// neither the name of the copyright holders nor the names of its 2613821Sgabeblack@google.com// contributors may be used to endorse or promote products derived from 2713821Sgabeblack@google.com// this software without specific prior written permission. 2813821Sgabeblack@google.com// 2913821Sgabeblack@google.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3013821Sgabeblack@google.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3113821Sgabeblack@google.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 3213821Sgabeblack@google.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3313821Sgabeblack@google.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3413821Sgabeblack@google.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3513821Sgabeblack@google.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3613821Sgabeblack@google.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3713821Sgabeblack@google.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3813821Sgabeblack@google.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3913821Sgabeblack@google.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 4013821Sgabeblack@google.com// 4113821Sgabeblack@google.com// Authors: Gabe Black 4213821Sgabeblack@google.com 4313821Sgabeblack@google.com1: decode BIGTHUMB { 4413821Sgabeblack@google.com // 16 bit thumb instructions. 4513821Sgabeblack@google.com 0: decode TOPCODE_15_13 { 4613821Sgabeblack@google.com 0x0, 0x1: decode TOPCODE_13_11 { 4713821Sgabeblack@google.com 0x0: WarnUnimpl::lsl(); //immediate 4813821Sgabeblack@google.com 0x1: WarnUnimpl::lsr(); //immediate 4913821Sgabeblack@google.com 0x2: WarnUnimpl::asr(); //immediate 5013821Sgabeblack@google.com 0x3: decode TOPCODE_10_9 { 5113821Sgabeblack@google.com 0x0: WarnUnimpl::add(); //register 5213821Sgabeblack@google.com 0x1: WarnUnimpl::sub(); //register 5313821Sgabeblack@google.com 0x2: WarnUnimpl::add(); //3 bit immediate 5413821Sgabeblack@google.com 0x3: WarnUnimpl::sub(); //3 bit immediate 5513821Sgabeblack@google.com } 5613821Sgabeblack@google.com 0x4: WarnUnimpl::mov(); //immediate 5713821Sgabeblack@google.com 0x5: WarnUnimpl::cmp(); //immediate 5813821Sgabeblack@google.com 0x6: WarnUnimpl::add(); //8 bit immediate, thumb 5913821Sgabeblack@google.com 0x7: WarnUnimpl::sub(); //8 bit immediate, thumb 6013821Sgabeblack@google.com } 6113821Sgabeblack@google.com 0x2: decode TOPCODE_12_10 { 6213821Sgabeblack@google.com // Data processing 6313821Sgabeblack@google.com 0x0: decode TOPCODE_9_6 { 6413821Sgabeblack@google.com 0x0: WarnUnimpl::and(); //register 6513821Sgabeblack@google.com 0x1: WarnUnimpl::eor(); //register 6613823Sgabeblack@google.com 0x2: WarnUnimpl::lsl(); //register 6713823Sgabeblack@google.com 0x3: WarnUnimpl::lsr(); //register 6813821Sgabeblack@google.com 0x4: WarnUnimpl::asr(); //register 6913821Sgabeblack@google.com 0x5: WarnUnimpl::adc(); //register 7013821Sgabeblack@google.com 0x6: WarnUnimpl::sbc(); //register 7113821Sgabeblack@google.com 0x7: WarnUnimpl::ror(); //register 7213821Sgabeblack@google.com 0x8: WarnUnimpl::tst(); //register 7313821Sgabeblack@google.com 0x9: WarnUnimpl::rsb(); //immediate 7413821Sgabeblack@google.com 0xa: WarnUnimpl::cmp(); //register (high registers) 7513821Sgabeblack@google.com 0xb: WarnUnimpl::cmn(); //register 7613821Sgabeblack@google.com 0xc: WarnUnimpl::orr(); //register 7713821Sgabeblack@google.com 0xd: WarnUnimpl::mul(); 7813821Sgabeblack@google.com 0xe: WarnUnimpl::bic(); //register 7913821Sgabeblack@google.com 0xf: WarnUnimpl::mvn(); //register 8013821Sgabeblack@google.com } 8113821Sgabeblack@google.com // Special data instructions and branch and exchange 8213821Sgabeblack@google.com 0x1: decode TOPCODE_9_6 { 8313821Sgabeblack@google.com 0x0: WarnUnimpl::add(); //register (low registers) 8413821Sgabeblack@google.com 0x1, 0x2, 0x3: WarnUnimpl::add(); //register (high registers) 8513821Sgabeblack@google.com 0x4: WarnUnimpl::unpredictable(); //? 8613821Sgabeblack@google.com 0x5, 0x6, 0x7: WarnUnimpl::cmp(); //register 8713821Sgabeblack@google.com 0x8: WarnUnimpl::mov(); //register (low registers) 8813821Sgabeblack@google.com 0x9, 0xa, 0xb: WarnUnimpl::mov(); //register (high registers) 8913821Sgabeblack@google.com 0xc, 0xd: WarnUnimpl::bx(); 9013821Sgabeblack@google.com 0xe, 0xf: WarnUnimpl::blx(); //register 9113821Sgabeblack@google.com } 9213821Sgabeblack@google.com 0x2, 0x3: Thumb16MemLit::thumb16MemLit(); 9313821Sgabeblack@google.com default: Thumb16MemReg::thumb16MemReg(); 9413821Sgabeblack@google.com } 9513821Sgabeblack@google.com 0x3, 0x4: Thumb16MemImm::thumb16MemImm(); 9613821Sgabeblack@google.com 0x5: decode TOPCODE_12_11 { 9713821Sgabeblack@google.com 0x0: WarnUnimpl::adr(); 9813821Sgabeblack@google.com 0x1: WarnUnimpl::add(); //sp, immediate 9913821Sgabeblack@google.com 0x2: decode TOPCODE_10_8 { 10013821Sgabeblack@google.com 0x0: decode TOPCODE_7 { 10113821Sgabeblack@google.com 0x0: WarnUnimpl::add(); //sp, immediate 10213821Sgabeblack@google.com 0x1: WarnUnimpl::sub(); //sp, immediate 10313821Sgabeblack@google.com } 10413821Sgabeblack@google.com 0x1, 0x3: WarnUnimpl::cbz(); //cbnz too... 10513821Sgabeblack@google.com 0x2: decode TOPCODE_7_6 { 10613821Sgabeblack@google.com 0x0: WarnUnimpl::sxth(); 10713821Sgabeblack@google.com 0x1: WarnUnimpl::sxtb(); 10813821Sgabeblack@google.com 0x2: WarnUnimpl::uxth(); 10913821Sgabeblack@google.com 0x3: WarnUnimpl::uxtb(); 11013821Sgabeblack@google.com } 11113823Sgabeblack@google.com 0x4, 0x5: WarnUnimpl::pop(); 11213821Sgabeblack@google.com 0x6: decode TOPCODE_7_5 { 11313823Sgabeblack@google.com 0x2: WarnUnimpl::setend(); 11413823Sgabeblack@google.com 0x3: WarnUnimpl::cps(); 11513821Sgabeblack@google.com } 11613821Sgabeblack@google.com } 11713821Sgabeblack@google.com 0x3: decode TOPCODE_10_8 { 11813821Sgabeblack@google.com 0x1, 0x3: WarnUnimpl::cbz(); //cbnz too... 11913821Sgabeblack@google.com 0x2: decode TOPCODE_7_6 { 12013821Sgabeblack@google.com 0x0: WarnUnimpl::rev(); 12113821Sgabeblack@google.com 0x1: WarnUnimpl::rev16(); 12213821Sgabeblack@google.com 0x3: WarnUnimpl::revsh(); 12313821Sgabeblack@google.com } 12413821Sgabeblack@google.com 0x4, 0x5: WarnUnimpl::pop(); 12513821Sgabeblack@google.com 0x6: WarnUnimpl::bkpt(); 12613821Sgabeblack@google.com 0x7: decode TOPCODE_3_0 { 12713821Sgabeblack@google.com 0x0: WarnUnimpl::it(); 12813821Sgabeblack@google.com default: decode TOPCODE_7_4 { 12913821Sgabeblack@google.com 0x0: WarnUnimpl::nop(); 13013821Sgabeblack@google.com 0x1: WarnUnimpl::yield(); 13113821Sgabeblack@google.com 0x2: WarnUnimpl::wfe(); 13213821Sgabeblack@google.com 0x3: WarnUnimpl::wfi(); 13313821Sgabeblack@google.com 0x4: WarnUnimpl::sev(); 13413821Sgabeblack@google.com default: WarnUnimpl::unallocated_hint(); 13513821Sgabeblack@google.com } 13613821Sgabeblack@google.com } 13713821Sgabeblack@google.com } 13813821Sgabeblack@google.com } 13913821Sgabeblack@google.com 0x6: decode TOPCODE_12_11 { 14013821Sgabeblack@google.com 0x0: WarnUnimpl::stm(); // also stmia, stmea 14113821Sgabeblack@google.com 0x1: WarnUnimpl::ldm(); // also ldmia, ldmea 14213821Sgabeblack@google.com default: decode TOPCODE_11_8 { 14313821Sgabeblack@google.com 0xe: WarnUnimpl::undefined(); // permanently undefined 14413821Sgabeblack@google.com 0xf: WarnUnimpl::svc(); // formerly swi 14513821Sgabeblack@google.com default: WarnUnimpl::b(); // conditional 14613821Sgabeblack@google.com } 14713821Sgabeblack@google.com } 14813821Sgabeblack@google.com 0x7: decode TOPCODE_12_11 { 14913821Sgabeblack@google.com 0x0: WarnUnimpl::b(); // unconditional 15013821Sgabeblack@google.com } 15113821Sgabeblack@google.com } 15213821Sgabeblack@google.com 15313821Sgabeblack@google.com // 32 bit thumb instructions. 15413821Sgabeblack@google.com 1: decode HTOPCODE_12_11 { 15513821Sgabeblack@google.com 0x1: decode HTOPCODE_10_9 { 15613821Sgabeblack@google.com 0x0: decode HTOPCODE_8_6 { 15713821Sgabeblack@google.com 0x0, 0x6: decode HTOPCODE_4 { 15813821Sgabeblack@google.com 0x0: WarnUnimpl::srs(); 15913821Sgabeblack@google.com 0x1: WarnUnimpl::rfe(); 16013821Sgabeblack@google.com } 16113821Sgabeblack@google.com 0x1: decode HTOPCODE_5_4 { 16213821Sgabeblack@google.com 0x0: WarnUnimpl::strex(); 16313821Sgabeblack@google.com 0x1: WarnUnimpl::ldrex(); 16413821Sgabeblack@google.com 0x2: WarnUnimpl::strd(); // immediate 16513821Sgabeblack@google.com 0x3: decode HTRN { 16613821Sgabeblack@google.com 0xf: WarnUnimpl::ldrd(); // literal 16713821Sgabeblack@google.com default: WarnUnimpl::ldrd(); // immediate 16813821Sgabeblack@google.com } 16913821Sgabeblack@google.com } 17013823Sgabeblack@google.com 0x2: decode HTOPCODE_4 { 17113821Sgabeblack@google.com 0x0: WarnUnimpl::stm(); // stmia, stmea 17213823Sgabeblack@google.com 0x1: decode HTRN { 17313821Sgabeblack@google.com 0xd: WarnUnimpl::pop(); 17413821Sgabeblack@google.com default: WarnUnimpl::ldm(); // ldmia, ldmfd 17513821Sgabeblack@google.com } 17613821Sgabeblack@google.com } 17713821Sgabeblack@google.com 0x3: decode HTOPCODE_5_4 { 17813821Sgabeblack@google.com 0x0: decode LTOPCODE_7_4 { 17913821Sgabeblack@google.com 0x4: WarnUnimpl::strexb(); 18013821Sgabeblack@google.com 0x5: WarnUnimpl::strexh(); 18113821Sgabeblack@google.com 0x7: WarnUnimpl::strexd(); 18213821Sgabeblack@google.com } 18313821Sgabeblack@google.com 0x1: decode LTOPCODE_7_4 { 18413821Sgabeblack@google.com 0x0: WarnUnimpl::tbb(); 18513821Sgabeblack@google.com 0x1: WarnUnimpl::tbh(); 18613821Sgabeblack@google.com 0x4: WarnUnimpl::ldrexb(); 18713821Sgabeblack@google.com 0x5: WarnUnimpl::ldrexh(); 18813821Sgabeblack@google.com 0x7: WarnUnimpl::ldrexd(); 18913821Sgabeblack@google.com } 19013821Sgabeblack@google.com 0x2: WarnUnimpl::strd(); // immediate 19113821Sgabeblack@google.com 0x3: decode HTRN { 19213821Sgabeblack@google.com 0xf: WarnUnimpl::ldrd(); // literal 19313821Sgabeblack@google.com default: WarnUnimpl::ldrd(); // immediate 19413821Sgabeblack@google.com } 19513821Sgabeblack@google.com } 19613821Sgabeblack@google.com 0x4: decode HTOPCODE_4 { 19713821Sgabeblack@google.com 0x0: decode HTRN { 19813821Sgabeblack@google.com 0xd: WarnUnimpl::push(); 19913821Sgabeblack@google.com default: WarnUnimpl::stmdb(); // stmfd 20013821Sgabeblack@google.com } 20113821Sgabeblack@google.com 0x1: WarnUnimpl::ldmdb(); // ldmea 20213821Sgabeblack@google.com } 20313821Sgabeblack@google.com 0x5, 0x7: decode HTOPCODE_4 { 20413821Sgabeblack@google.com 0x0: WarnUnimpl::strd(); // immediate 20513821Sgabeblack@google.com 0x1: decode HTRN { 20613821Sgabeblack@google.com 0xf: WarnUnimpl::ldrd(); // literal 20713821Sgabeblack@google.com default: WarnUnimpl::ldrd(); // immediate 20813821Sgabeblack@google.com } 20913821Sgabeblack@google.com } 21013821Sgabeblack@google.com } 21113821Sgabeblack@google.com 0x1: decode HTOPCODE_8_5 { 21213821Sgabeblack@google.com 0x0: decode LTRD { 21313823Sgabeblack@google.com 0xf: decode HTS { 21413821Sgabeblack@google.com 0x1: WarnUnimpl::tst(); // register 21513823Sgabeblack@google.com } 21613821Sgabeblack@google.com default: WarnUnimpl::and(); // register 21713821Sgabeblack@google.com } 21813821Sgabeblack@google.com 0x1: WarnUnimpl::bic(); // register 21913821Sgabeblack@google.com 0x2: decode HTRN { 22013821Sgabeblack@google.com 0xf: WarnUnimpl::mov(); // register 22113821Sgabeblack@google.com default: WarnUnimpl::orr(); // register 22213821Sgabeblack@google.com } 22313823Sgabeblack@google.com 0x3: decode HTRN { 22413821Sgabeblack@google.com 0xf: WarnUnimpl::mvn(); // register 22513823Sgabeblack@google.com default: WarnUnimpl::orn(); // register 22613821Sgabeblack@google.com } 22713821Sgabeblack@google.com 0x4: decode LTRD { 22813821Sgabeblack@google.com 0xf: decode HTS { 22913821Sgabeblack@google.com 0x1: WarnUnimpl::teq(); // register 23013821Sgabeblack@google.com } 23113821Sgabeblack@google.com default: WarnUnimpl::eor(); // register 23213821Sgabeblack@google.com } 23313821Sgabeblack@google.com 0x6: WarnUnimpl::pkh(); 23413821Sgabeblack@google.com 0x8: decode LTRD { 23513821Sgabeblack@google.com 0xf: decode HTS { 23613821Sgabeblack@google.com 0x1: WarnUnimpl::cmn(); // register 23713821Sgabeblack@google.com } 23813821Sgabeblack@google.com default: WarnUnimpl::add(); // register 23913821Sgabeblack@google.com } 24013821Sgabeblack@google.com 0xa: WarnUnimpl::adc(); // register 24113821Sgabeblack@google.com 0xb: WarnUnimpl::sbc(); // register 24213821Sgabeblack@google.com 0xd: decode LTRD { 24313821Sgabeblack@google.com 0xf: decode HTS { 24413821Sgabeblack@google.com 0x1: WarnUnimpl::cmp(); // register 24513821Sgabeblack@google.com } 24613821Sgabeblack@google.com default: WarnUnimpl::sub(); // register 24713821Sgabeblack@google.com } 24813821Sgabeblack@google.com 0xe: WarnUnimpl::rsb(); // register 24913821Sgabeblack@google.com } 25013821Sgabeblack@google.com default: decode HTOPCODE_9_8 { 25113821Sgabeblack@google.com 0x2: decode LTOPCODE_4 { 25213821Sgabeblack@google.com 0x0: decode LTCOPROC { 25313821Sgabeblack@google.com 0xa, 0xb: decode OPCODE_23_20 { 25413821Sgabeblack@google.com##include "vfp.isa" 25513821Sgabeblack@google.com } 25613821Sgabeblack@google.com default: WarnUnimpl::cdp(); // cdp2 25713821Sgabeblack@google.com } 25813821Sgabeblack@google.com 0x1: decode LTCOPROC { 25913821Sgabeblack@google.com 0xa, 0xb: WarnUnimpl::Core_to_extension_transfer(); 26013821Sgabeblack@google.com default: decode HTOPCODE_4 { 26113821Sgabeblack@google.com 0x0: WarnUnimpl::mcr(); // mcr2 26213821Sgabeblack@google.com 0x1: WarnUnimpl::mrc(); // mrc2 26313821Sgabeblack@google.com } 26413821Sgabeblack@google.com } 26513821Sgabeblack@google.com } 26613821Sgabeblack@google.com 0x3: WarnUnimpl::Advanced_SIMD(); 26713821Sgabeblack@google.com default: decode LTCOPROC { 26813821Sgabeblack@google.com 0xa, 0xb: decode HTOPCODE_9_4 { 26913821Sgabeblack@google.com 0x00: WarnUnimpl::undefined(); 27013821Sgabeblack@google.com 0x04: WarnUnimpl::mcrr(); // mcrr2 27113821Sgabeblack@google.com 0x05: WarnUnimpl::mrrc(); // mrrc2 27213821Sgabeblack@google.com 0x02, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 27313821Sgabeblack@google.com 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e: 27413821Sgabeblack@google.com WarnUnimpl::stc(); // stc2 27513821Sgabeblack@google.com 0x03, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11, 27613821Sgabeblack@google.com 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f: 27713821Sgabeblack@google.com decode HTRN { 27813821Sgabeblack@google.com 0xf: WarnUnimpl::ldc(); // ldc2 (literal) 27913821Sgabeblack@google.com default: WarnUnimpl::ldc(); // ldc2 (immediate) 28013821Sgabeblack@google.com } 28113821Sgabeblack@google.com } 28213821Sgabeblack@google.com default: decode HTOPCODE_9_5 { 28313821Sgabeblack@google.com 0x00: WarnUnimpl::undefined(); 28413821Sgabeblack@google.com 0x02: WarnUnimpl::SIMD_VFP_64_bit_core_extension_transfer(); 28513821Sgabeblack@google.com 0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 28613821Sgabeblack@google.com 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f: 28713821Sgabeblack@google.com WarnUnimpl::Extension_register_load_store_instruction(); 28813821Sgabeblack@google.com } 28913821Sgabeblack@google.com } 29013821Sgabeblack@google.com } 29113821Sgabeblack@google.com } 29213821Sgabeblack@google.com 0x2: decode LTOPCODE_15 { 29313821Sgabeblack@google.com 0x0: decode HTOPCODE_9 { 29413821Sgabeblack@google.com 0x0: decode HTOPCODE_8_5 { 29513821Sgabeblack@google.com 0x0: decode LTRD { 29613821Sgabeblack@google.com 0xf: decode HTS { 29713821Sgabeblack@google.com 0x1: DataModImmOp::tst({{ 29813821Sgabeblack@google.com resTemp = Rn & rotated_imm; 29913821Sgabeblack@google.com }}); 30013821Sgabeblack@google.com } 30113821Sgabeblack@google.com default: DataModImmOp::and({{ 30213821Sgabeblack@google.com Rs = resTemp = Rn & rotated_imm; 30313821Sgabeblack@google.com }}); 30413821Sgabeblack@google.com } 30513821Sgabeblack@google.com 0x1: DataModImmOp::bic({{ 30613821Sgabeblack@google.com Rs = resTemp = Rn & ~rotated_imm; 30713821Sgabeblack@google.com }}); 30813821Sgabeblack@google.com 0x2: decode HTRN { 30913821Sgabeblack@google.com 0xf: DataModImmOp::mov({{ 31013821Sgabeblack@google.com Rs = resTemp = rotated_imm; 31113821Sgabeblack@google.com }}); 31213821Sgabeblack@google.com default: DataModImmOp::orr({{ 31313821Sgabeblack@google.com Rs = resTemp = Rn | rotated_imm; 31413821Sgabeblack@google.com }}); 31513821Sgabeblack@google.com } 31613821Sgabeblack@google.com 0x3: decode HTRN { 31713821Sgabeblack@google.com 0xf: DataModImmOp::mvn({{ 31813821Sgabeblack@google.com Rs = resTemp = ~rotated_imm; 31913823Sgabeblack@google.com }}); 32013821Sgabeblack@google.com default: DataModImmOp::orn({{ 32113823Sgabeblack@google.com Rs = resTemp = Rn | ~rotated_imm; 32213821Sgabeblack@google.com }}); 32313821Sgabeblack@google.com } 32413821Sgabeblack@google.com 0x4: decode LTRD { 32513821Sgabeblack@google.com 0xf: decode HTS { 32613821Sgabeblack@google.com 0x1: DataModImmOp::teq({{ 32713821Sgabeblack@google.com resTemp = Rn ^ rotated_imm; 32813821Sgabeblack@google.com }}); 32913823Sgabeblack@google.com } 33013821Sgabeblack@google.com default: DataModImmOp::eor({{ 33113823Sgabeblack@google.com Rs = resTemp = Rn ^ rotated_imm; 33213821Sgabeblack@google.com }}); 33313821Sgabeblack@google.com } 33413821Sgabeblack@google.com 0x8: decode LTRD { 33513821Sgabeblack@google.com 0xf: decode HTS { 33613823Sgabeblack@google.com 0x1: DataModImmOp::cmn({{ 33713821Sgabeblack@google.com resTemp = Rn + rotated_imm; 33813823Sgabeblack@google.com }}, add); 33913821Sgabeblack@google.com } 34013821Sgabeblack@google.com default: DataModImmOp::add({{ 34113821Sgabeblack@google.com Rs = resTemp = Rn + rotated_imm; 34213821Sgabeblack@google.com }}, add); 34313821Sgabeblack@google.com } 34413821Sgabeblack@google.com 0xa: DataModImmOp::adc({{ 34513821Sgabeblack@google.com Rs = resTemp = Rn + rotated_imm + CondCodes<29:>; 34613821Sgabeblack@google.com }}, add); 34713821Sgabeblack@google.com 0xb: DataModImmOp::sbc({{ 34813821Sgabeblack@google.com Rs = resTemp = Rn - rotated_imm - !CondCodes<29:>; 34913821Sgabeblack@google.com }}, sub); 35013821Sgabeblack@google.com 0xd: decode LTRD { 35113821Sgabeblack@google.com 0xf: decode HTS { 35213821Sgabeblack@google.com 0x1: DataModImmOp::cmp({{ 35313821Sgabeblack@google.com resTemp = Rn - rotated_imm; 35413821Sgabeblack@google.com }}, sub); 35513821Sgabeblack@google.com } 35613821Sgabeblack@google.com default: DataModImmOp::sub({{ 35713821Sgabeblack@google.com Rs = resTemp = Rn - rotated_imm; 35813821Sgabeblack@google.com }}, sub); 35913821Sgabeblack@google.com } 36013823Sgabeblack@google.com 0xe: DataModImmOp::rsb({{ 36113821Sgabeblack@google.com Rs = resTemp = rotated_imm - Rn; 36213823Sgabeblack@google.com }}, rsb); 36313821Sgabeblack@google.com } 36413821Sgabeblack@google.com 0x1: WarnUnimpl::Data_processing_plain_binary_immediate(); 36513821Sgabeblack@google.com } 36613821Sgabeblack@google.com 0x1: WarnUnimpl::Branches_and_miscellaneous_control(); 36713821Sgabeblack@google.com } 36813821Sgabeblack@google.com 0x3: decode HTOPCODE_10_9 { 36913821Sgabeblack@google.com 0x0: decode HTOPCODE_4 { 37013821Sgabeblack@google.com 0x0: decode HTOPCODE_8 { 37113821Sgabeblack@google.com 0x0: Thumb32StoreSingle::thumb32StoreSingle(); 37213821Sgabeblack@google.com 0x1: WarnUnimpl::Advanced_SIMD_or_structure_load_store(); 37313821Sgabeblack@google.com } 37413821Sgabeblack@google.com 0x1: decode HTOPCODE_6_5 { 37513821Sgabeblack@google.com 0x0: WarnUnimpl::Load_byte_memory_hints(); 37613821Sgabeblack@google.com 0x1: WarnUnimpl::Load_halfword_memory_hints(); 37713821Sgabeblack@google.com 0x2: Thumb32LoadWord::thumb32LoadWord(); 37813821Sgabeblack@google.com 0x3: WarnUnimpl::undefined(); 37913821Sgabeblack@google.com } 38013821Sgabeblack@google.com } 38113821Sgabeblack@google.com 0x1: decode HTOPCODE_8_7 { 38213821Sgabeblack@google.com 0x2: WarnUnimpl::Multiply_multiply_accumulate_and_absolute_difference(); 38313823Sgabeblack@google.com 0x3: WarnUnimpl::Long_multiply_long_multiply_accumulate_and_divide(); 38413821Sgabeblack@google.com default: WarnUnimpl::Data_processing_register(); 38513823Sgabeblack@google.com } 38613821Sgabeblack@google.com default: decode HTOPCODE_9_8 { 38713821Sgabeblack@google.com 0x2: decode LTOPCODE_4 { 38813821Sgabeblack@google.com 0x0: decode LTCOPROC { 38913821Sgabeblack@google.com 0xa, 0xb: WarnUnimpl::VFP_Inst(); 39013821Sgabeblack@google.com default: WarnUnimpl::cdp(); // cdp2 39113821Sgabeblack@google.com } 39213821Sgabeblack@google.com 0x1: decode LTCOPROC { 39313821Sgabeblack@google.com 0xa, 0xb: WarnUnimpl::Core_to_extension_transfer(); 39413821Sgabeblack@google.com default: decode HTOPCODE_4 { 39513821Sgabeblack@google.com 0x0: WarnUnimpl::mcr(); // mcr2 39613823Sgabeblack@google.com 0x1: WarnUnimpl::mrc(); // mrc2 39713823Sgabeblack@google.com } 39813821Sgabeblack@google.com } 39913823Sgabeblack@google.com } 40013821Sgabeblack@google.com 0x3: WarnUnimpl::Advanced_SIMD(); 40113821Sgabeblack@google.com default: decode LTCOPROC { 40213821Sgabeblack@google.com 0xa, 0xb: decode HTOPCODE_9_4 { 40313821Sgabeblack@google.com 0x00: WarnUnimpl::undefined(); 40413821Sgabeblack@google.com 0x04: WarnUnimpl::mcrr(); // mcrr2 40513821Sgabeblack@google.com 0x05: WarnUnimpl::mrrc(); // mrrc2 40613821Sgabeblack@google.com 0x02, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 40713821Sgabeblack@google.com 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e: 40813823Sgabeblack@google.com WarnUnimpl::stc(); // stc2 40913821Sgabeblack@google.com 0x03, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11, 41013823Sgabeblack@google.com 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f: 41113821Sgabeblack@google.com decode HTRN { 41213821Sgabeblack@google.com 0xf: WarnUnimpl::ldc(); // ldc2 (literal) 41313821Sgabeblack@google.com default: WarnUnimpl::ldc(); // ldc2 (immediate) 41413821Sgabeblack@google.com } 41513821Sgabeblack@google.com } 41613821Sgabeblack@google.com default: decode HTOPCODE_9_5 { 41713821Sgabeblack@google.com 0x00: WarnUnimpl::undefined(); 41813821Sgabeblack@google.com 0x02: WarnUnimpl::SIMD_VFP_64_bit_core_extension_transfer(); 41913821Sgabeblack@google.com 0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 42013823Sgabeblack@google.com 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f: 42113821Sgabeblack@google.com WarnUnimpl::Extension_register_load_store_instruction(); 42213823Sgabeblack@google.com } 42313821Sgabeblack@google.com } 42413821Sgabeblack@google.com } 42513821Sgabeblack@google.com } 42613821Sgabeblack@google.com } 42713821Sgabeblack@google.com} 42813821Sgabeblack@google.com