thumb.isa revision 7113
12SN/A// -*- mode:c++ -*-
21762SN/A
32SN/A// Copyright (c) 2010 ARM Limited
42SN/A// All rights reserved
52SN/A//
62SN/A// The license below extends only to copyright in the software and shall
72SN/A// not be construed as granting a license to any other intellectual
82SN/A// property including but not limited to intellectual property relating
92SN/A// to a hardware implementation of the functionality of the software
102SN/A// licensed hereunder.  You may use the software subject to the license
112SN/A// terms below provided that you ensure that this notice is replicated
122SN/A// unmodified and in its entirety in all distributions of the software,
132SN/A// modified or unmodified, in source code or in binary form.
142SN/A//
152SN/A// Copyright (c) 2009 The Regents of The University of Michigan
162SN/A// All rights reserved.
172SN/A//
182SN/A// Redistribution and use in source and binary forms, with or without
192SN/A// modification, are permitted provided that the following conditions are
202SN/A// met: redistributions of source code must retain the above copyright
212SN/A// notice, this list of conditions and the following disclaimer;
222SN/A// redistributions in binary form must reproduce the above copyright
232SN/A// notice, this list of conditions and the following disclaimer in the
242SN/A// documentation and/or other materials provided with the distribution;
252SN/A// neither the name of the copyright holders nor the names of its
262SN/A// contributors may be used to endorse or promote products derived from
272665Ssaidi@eecs.umich.edu// this software without specific prior written permission.
282665Ssaidi@eecs.umich.edu//
292665Ssaidi@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
302665Ssaidi@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
312SN/A// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
322SN/A// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
332SN/A// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
342SN/A// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
352SN/A// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
362SN/A// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
372SN/A// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
383971Sgblack@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3956SN/A// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4056SN/A//
411158SN/A// Authors: Gabe Black
42146SN/A
431858SN/A1: decode BIGTHUMB {
442680Sktlim@umich.edu    // 16 bit thumb instructions.
452378SN/A    0: decode TOPCODE_15_13 {
462522SN/A        0x0, 0x1: decode TOPCODE_13_11 {
472401SN/A            0x0: WarnUnimpl::lsl(); //immediate
485154Sgblack@eecs.umich.edu            0x1: WarnUnimpl::lsr(); //immediate
494762Snate@binkert.org            0x2: WarnUnimpl::asr(); //immediate
50360SN/A            0x3: decode TOPCODE_10_9 {
514434Ssaidi@eecs.umich.edu                0x0: WarnUnimpl::add(); //register
52695SN/A                0x1: WarnUnimpl::sub(); //register
532093SN/A                0x2: WarnUnimpl::add(); //3 bit immediate
542378SN/A                0x3: WarnUnimpl::sub(); //3 bit immediate
552SN/A            }
562715Sstever@eecs.umich.edu            0x4: WarnUnimpl::mov(); //immediate
572715Sstever@eecs.umich.edu            0x5: WarnUnimpl::cmp(); //immediate
582715Sstever@eecs.umich.edu            0x6: WarnUnimpl::add(); //8 bit immediate, thumb
592715Sstever@eecs.umich.edu            0x7: WarnUnimpl::sub(); //8 bit immediate, thumb
602715Sstever@eecs.umich.edu        }
612715Sstever@eecs.umich.edu        0x2: decode TOPCODE_12_10 {
622715Sstever@eecs.umich.edu            // Data processing
632715Sstever@eecs.umich.edu            0x0: decode TOPCODE_9_6 {
642715Sstever@eecs.umich.edu                0x0: WarnUnimpl::and(); //register
654157Sgblack@eecs.umich.edu                0x1: WarnUnimpl::eor(); //register
664166Sgblack@eecs.umich.edu                0x2: WarnUnimpl::lsl(); //register
672715Sstever@eecs.umich.edu                0x3: WarnUnimpl::lsr(); //register
682715Sstever@eecs.umich.edu                0x4: WarnUnimpl::asr(); //register
692715Sstever@eecs.umich.edu                0x5: WarnUnimpl::adc(); //register
702715Sstever@eecs.umich.edu                0x6: WarnUnimpl::sbc(); //register
712715Sstever@eecs.umich.edu                0x7: WarnUnimpl::ror(); //register
722SN/A                0x8: WarnUnimpl::tst(); //register
732107SN/A                0x9: WarnUnimpl::rsb(); //immediate
742SN/A                0xa: WarnUnimpl::cmp(); //register (high registers)
752SN/A                0xb: WarnUnimpl::cmn(); //register
762SN/A                0xc: WarnUnimpl::orr(); //register
772SN/A                0xd: WarnUnimpl::mul();
782SN/A                0xe: WarnUnimpl::bic(); //register
792SN/A                0xf: WarnUnimpl::mvn(); //register
801858SN/A            }
81360SN/A            // Special data instructions and branch and exchange
822SN/A            0x1: decode TOPCODE_9_6 {
832SN/A                0x0: WarnUnimpl::add(); //register (low registers)
842SN/A                0x1, 0x2, 0x3: WarnUnimpl::add(); //register (high registers)
852SN/A                0x4: WarnUnimpl::unpredictable(); //?
862SN/A                0x5, 0x6, 0x7: WarnUnimpl::cmp(); //register
875154Sgblack@eecs.umich.edu                0x8: WarnUnimpl::mov(); //register (low registers)
885183Ssaidi@eecs.umich.edu                0x9, 0xa, 0xb: WarnUnimpl::mov(); //register (high registers)
895154Sgblack@eecs.umich.edu                0xc, 0xd: WarnUnimpl::bx();
902SN/A                0xe, 0xf: WarnUnimpl::blx(); //register
915154Sgblack@eecs.umich.edu            }
925154Sgblack@eecs.umich.edu            0x2, 0x3: WarnUnimpl::ldr();
935154Sgblack@eecs.umich.edu            default: decode TOPCODE_11_9 {
945154Sgblack@eecs.umich.edu                0x0: WarnUnimpl::str(); //register
955154Sgblack@eecs.umich.edu                0x1: WarnUnimpl::strh(); //register
965154Sgblack@eecs.umich.edu                0x2: WarnUnimpl::strb(); //register
975154Sgblack@eecs.umich.edu                0x3: WarnUnimpl::ldrsb(); //register
985154Sgblack@eecs.umich.edu                0x4: WarnUnimpl::ldr(); //register
995154Sgblack@eecs.umich.edu                0x5: WarnUnimpl::ldrh(); //register
1005154Sgblack@eecs.umich.edu                0x6: WarnUnimpl::ldrb(); //register
1015154Sgblack@eecs.umich.edu                0x7: WarnUnimpl::ldrsh(); //register
1025154Sgblack@eecs.umich.edu            }
1035154Sgblack@eecs.umich.edu        }
1045154Sgblack@eecs.umich.edu        0x3: decode TOPCODE_12_11 {
1055154Sgblack@eecs.umich.edu            0x0: WarnUnimpl::str(); //immediate, thumb
1065154Sgblack@eecs.umich.edu            0x1: WarnUnimpl::ldr(); //immediate, thumb
1075154Sgblack@eecs.umich.edu            0x2: WarnUnimpl::strb(); //immediate, thumb
1085154Sgblack@eecs.umich.edu            0x3: WarnUnimpl::ldrb(); //immediate, thumb
1095154Sgblack@eecs.umich.edu        }
1105154Sgblack@eecs.umich.edu        0x4: decode TOPCODE_12_11 {
1115154Sgblack@eecs.umich.edu            0x0: WarnUnimpl::strh(); //immediate, thumb
1125154Sgblack@eecs.umich.edu            0x1: WarnUnimpl::ldrh(); //immediate, thumb
1135154Sgblack@eecs.umich.edu            0x2: WarnUnimpl::str(); //immediate, thumb
1145154Sgblack@eecs.umich.edu            0x3: WarnUnimpl::ldr(); //immediate, thumb
1154997Sgblack@eecs.umich.edu        }
1162SN/A        0x5: decode TOPCODE_12_11 {
1172SN/A            0x0: WarnUnimpl::adr();
1182SN/A            0x1: WarnUnimpl::add(); //sp, immediate
1192SN/A            0x2: decode TOPCODE_10_8 {
1202SN/A                0x0: decode TOPCODE_7 {
1212SN/A                    0x0: WarnUnimpl::add(); //sp, immediate
1222SN/A                    0x1: WarnUnimpl::sub(); //sp, immediate
1232SN/A                }
1242SN/A                0x1, 0x3: WarnUnimpl::cbz(); //cbnz too...
1252SN/A                0x2: decode TOPCODE_7_6 {
1261450SN/A                    0x0: WarnUnimpl::sxth();
1271514SN/A                    0x1: WarnUnimpl::sxtb();
1282378SN/A                    0x2: WarnUnimpl::uxth();
1292SN/A                    0x3: WarnUnimpl::uxtb();
1302SN/A                }
1312SN/A                0x4, 0x5: WarnUnimpl::pop();
1322378SN/A                0x6: decode TOPCODE_7_5 {
1332SN/A                    0x2: WarnUnimpl::setend();
1342SN/A                    0x3: WarnUnimpl::cps();
1352SN/A                }
136729SN/A            }
1372SN/A            0x3: decode TOPCODE_10_8 {
1382SN/A                0x1, 0x3: WarnUnimpl::cbz(); //cbnz too...
1392SN/A                0x2: decode TOPCODE_7_6 {
1402SN/A                    0x0: WarnUnimpl::rev();
1412SN/A                    0x1: WarnUnimpl::rev16();
1422SN/A                    0x3: WarnUnimpl::revsh();
1432SN/A                }
1442SN/A                0x4, 0x5: WarnUnimpl::pop();
1452SN/A                0x6: WarnUnimpl::bkpt();
1462SN/A                0x7: decode TOPCODE_3_0 {
1472SN/A                    0x0: WarnUnimpl::it();
1482SN/A                    default: decode TOPCODE_7_4 {
1492SN/A                        0x0: WarnUnimpl::nop();
1502SN/A                        0x1: WarnUnimpl::yield();
1512SN/A                        0x2: WarnUnimpl::wfe();
1522SN/A                        0x3: WarnUnimpl::wfi();
1532SN/A                        0x4: WarnUnimpl::sev();
1542SN/A                        default: WarnUnimpl::unallocated_hint();
1552SN/A                    }
1562SN/A                }
1572SN/A            }
1582SN/A        }
1592SN/A        0x6: decode TOPCODE_12_11 {
1602SN/A            0x0: WarnUnimpl::stm(); // also stmia, stmea
1612SN/A            0x1: WarnUnimpl::ldm(); // also ldmia, ldmea
1622SN/A            default: decode TOPCODE_11_8 {
1632SN/A                0xe: WarnUnimpl::undefined(); // permanently undefined
1642SN/A                0xf: WarnUnimpl::svc(); // formerly swi
1652SN/A                default: WarnUnimpl::b(); // conditional
1662SN/A            }
1672SN/A        }
1682SN/A        0x7: decode TOPCODE_12_11 {
1692SN/A            0x0: WarnUnimpl::b(); // unconditional
1702SN/A        }
1712SN/A    }
1722SN/A
1732SN/A    // 32 bit thumb instructions.
1742SN/A    1: decode HTOPCODE_12_11 {
1752SN/A        0x1: decode HTOPCODE_10_9 {
1762SN/A            0x0: decode HTOPCODE_8_6 {
177180SN/A                0x0, 0x6: decode HTOPCODE_4 {
1782680Sktlim@umich.edu                    0x0: WarnUnimpl::srs();
1792SN/A                    0x1: WarnUnimpl::rfe();
180180SN/A                }
1812680Sktlim@umich.edu                0x1: decode HTOPCODE_5_4 {
1822680Sktlim@umich.edu                    0x0: WarnUnimpl::strex();
183180SN/A                    0x1: WarnUnimpl::ldrex();
1845109Sgblack@eecs.umich.edu                    0x2: WarnUnimpl::strd(); // immediate
1855109Sgblack@eecs.umich.edu                    0x3: decode HTRN {
1865109Sgblack@eecs.umich.edu                        0xf: WarnUnimpl::ldrd(); // literal
1873971Sgblack@eecs.umich.edu                        default: WarnUnimpl::ldrd(); // immediate
1883971Sgblack@eecs.umich.edu                    }
1895109Sgblack@eecs.umich.edu                }
1903971Sgblack@eecs.umich.edu                0x2: decode HTOPCODE_4 {
1912378SN/A                    0x0: WarnUnimpl::stm(); // stmia, stmea
192180SN/A                    0x1: decode HTRN {
1932SN/A                        0xd: WarnUnimpl::pop();
1942SN/A                        default: WarnUnimpl::ldm(); // ldmia, ldmfd
1951395SN/A                    }
1961395SN/A                }
1971395SN/A                0x3: decode HTOPCODE_5_4 {
1982680Sktlim@umich.edu                    0x0: decode LTOPCODE_7_4 {
1992378SN/A                        0x4: WarnUnimpl::strexb();
2002378SN/A                        0x5: WarnUnimpl::strexh();
2012680Sktlim@umich.edu                        0x7: WarnUnimpl::strexd();
2022680Sktlim@umich.edu                    }
2031395SN/A                    0x1: decode LTOPCODE_7_4 {
2041634SN/A                        0x0: WarnUnimpl::tbb();
2052680Sktlim@umich.edu                        0x1: WarnUnimpl::tbh();
2062462SN/A                        0x4: WarnUnimpl::ldrexb();
2072519SN/A                        0x5: WarnUnimpl::ldrexh();
2082519SN/A                        0x7: WarnUnimpl::ldrexd();
2094434Ssaidi@eecs.umich.edu                    }
2104434Ssaidi@eecs.umich.edu                    0x2: WarnUnimpl::strd(); // immediate
2112519SN/A                    0x3: decode HTRN {
2122519SN/A                        0xf: WarnUnimpl::ldrd(); // literal
2131395SN/A                        default: WarnUnimpl::ldrd(); // immediate
2142SN/A                    }
215180SN/A                }
2162680Sktlim@umich.edu                0x4: decode HTOPCODE_4 {
217180SN/A                    0x0: decode HTRN {
2182680Sktlim@umich.edu                        0xd: WarnUnimpl::push();
2192680Sktlim@umich.edu                        default: WarnUnimpl::stmdb(); // stmfd
2202680Sktlim@umich.edu                    }
221180SN/A                    0x1: WarnUnimpl::ldmdb(); // ldmea
222180SN/A                }
2232680Sktlim@umich.edu                0x5, 0x7: decode HTOPCODE_4 {
224180SN/A                    0x0: WarnUnimpl::strd(); // immediate
225180SN/A                    0x1: decode HTRN {
2262SN/A                        0xf: WarnUnimpl::ldrd(); // literal
2272SN/A                        default: WarnUnimpl::ldrd(); // immediate
2282SN/A                    }
2292SN/A                }
2302SN/A            }
2312SN/A            0x1: decode HTOPCODE_8_5 {
2322SN/A                0x0: decode LTRD {
2332SN/A                    0xf: decode HTS {
2342SN/A                        0x1: WarnUnimpl::tst(); // register
2352SN/A                    }
2362SN/A                    default: WarnUnimpl::and(); // register
2372SN/A                }
2382SN/A                0x1: WarnUnimpl::bic(); // register
2391970SN/A                0x2: decode HTRN {
2402SN/A                    0xf: WarnUnimpl::mov(); // register
2412SN/A                    default: WarnUnimpl::orr(); // register
2422SN/A                }
2432SN/A                0x3: decode HTRN {
2442SN/A                    0xf: WarnUnimpl::mvn(); // register
2452SN/A                    default: WarnUnimpl::orn(); // register
2461970SN/A                }
2471970SN/A                0x4: decode LTRD {
2481970SN/A                    0xf: decode HTS {
2491970SN/A                        0x1: WarnUnimpl::teq(); // register
2501970SN/A                    }
2512SN/A                    default: WarnUnimpl::eor(); // register
2522SN/A                }
2531970SN/A                0x6: WarnUnimpl::pkh();
2541970SN/A                0x8: decode LTRD {
2552SN/A                    0xf: decode HTS {
2561970SN/A                        0x1: WarnUnimpl::cmn(); // register
2571970SN/A                    }
2581970SN/A                    default: WarnUnimpl::add(); // register
2591970SN/A                }
2601970SN/A                0xa: WarnUnimpl::adc(); // register
2611970SN/A                0xb: WarnUnimpl::sbc(); // register
2621970SN/A                0xd: decode LTRD {
2631970SN/A                    0xf: decode HTS {
2641970SN/A                        0x1: WarnUnimpl::cmp(); // register
2652SN/A                    }
2662SN/A                    default: WarnUnimpl::sub(); // register
2672SN/A                }
2682SN/A                0xe: WarnUnimpl::rsb(); // register
2692SN/A            }
2702SN/A            default: decode HTOPCODE_9_8 {
2712SN/A                0x2: decode LTOPCODE_4 {
2722SN/A                    0x0: decode LTCOPROC {
2732SN/A                        0xa, 0xb: decode OPCODE_23_20 {
2742SN/A##include "vfpdecode.isa"
2752SN/A                        }
2762SN/A                        default: WarnUnimpl::cdp(); // cdp2
2772SN/A                    }
2784434Ssaidi@eecs.umich.edu                    0x1: decode LTCOPROC {
2794434Ssaidi@eecs.umich.edu                        0xa, 0xb: WarnUnimpl::Core_to_extension_transfer();
2804434Ssaidi@eecs.umich.edu                        default: decode HTOPCODE_4 {
2814434Ssaidi@eecs.umich.edu                            0x0: WarnUnimpl::mcr(); // mcr2
2824434Ssaidi@eecs.umich.edu                            0x1: WarnUnimpl::mrc(); // mrc2
2834434Ssaidi@eecs.umich.edu                        }
2844434Ssaidi@eecs.umich.edu                    }
2854434Ssaidi@eecs.umich.edu                }
2864434Ssaidi@eecs.umich.edu                0x3: WarnUnimpl::Advanced_SIMD();
2874434Ssaidi@eecs.umich.edu                default: decode LTCOPROC {
2884434Ssaidi@eecs.umich.edu                    0xa, 0xb: decode HTOPCODE_9_4 {
2895154Sgblack@eecs.umich.edu                        0x00: WarnUnimpl::undefined();
2905154Sgblack@eecs.umich.edu                        0x04: WarnUnimpl::mcrr(); // mcrr2
2915154Sgblack@eecs.umich.edu                        0x05: WarnUnimpl::mrrc(); // mrrc2
2925154Sgblack@eecs.umich.edu                        0x02, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10,
2935154Sgblack@eecs.umich.edu                        0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e:
2945154Sgblack@eecs.umich.edu                            WarnUnimpl::stc(); // stc2
2955154Sgblack@eecs.umich.edu                        0x03, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11,
2965154Sgblack@eecs.umich.edu                        0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f:
2975154Sgblack@eecs.umich.edu                            decode HTRN {
2985154Sgblack@eecs.umich.edu                                0xf: WarnUnimpl::ldc(); // ldc2 (literal)
2994434Ssaidi@eecs.umich.edu                                default: WarnUnimpl::ldc(); // ldc2 (immediate)
3004434Ssaidi@eecs.umich.edu                            }
3014434Ssaidi@eecs.umich.edu                    }
3024434Ssaidi@eecs.umich.edu                    default: decode HTOPCODE_9_5 {
3034434Ssaidi@eecs.umich.edu                        0x00: WarnUnimpl::undefined();
3043311Ssaidi@eecs.umich.edu                        0x02: WarnUnimpl::SIMD_VFP_64_bit_core_extension_transfer();
3053311Ssaidi@eecs.umich.edu                        0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
3063311Ssaidi@eecs.umich.edu                        0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f:
3073311Ssaidi@eecs.umich.edu                            WarnUnimpl::Extension_register_load_store_instruction();
3083311Ssaidi@eecs.umich.edu                    }
3093311Ssaidi@eecs.umich.edu                }
3103311Ssaidi@eecs.umich.edu            }
3113311Ssaidi@eecs.umich.edu        }
3123311Ssaidi@eecs.umich.edu        0x2: decode LTOPCODE_15 {
3133311Ssaidi@eecs.umich.edu            0x0: decode HTOPCODE_9 {
3143311Ssaidi@eecs.umich.edu                0x0: decode HTOPCODE_8_5 {
3153311Ssaidi@eecs.umich.edu                    0x0: decode LTRD {
3163311Ssaidi@eecs.umich.edu                        0xf: decode HTS {
3173311Ssaidi@eecs.umich.edu                            0x1: DataModImmOp::tst({{
3183311Ssaidi@eecs.umich.edu                                resTemp = Rn & rotated_imm;
3193311Ssaidi@eecs.umich.edu                            }});
3203311Ssaidi@eecs.umich.edu                        }
3213311Ssaidi@eecs.umich.edu                        default: DataModImmOp::and({{
3223311Ssaidi@eecs.umich.edu                            Rs = resTemp = Rn & rotated_imm;
3233311Ssaidi@eecs.umich.edu                        }});
3243311Ssaidi@eecs.umich.edu                    }
3253311Ssaidi@eecs.umich.edu                    0x1: DataModImmOp::bic({{
3263311Ssaidi@eecs.umich.edu                        Rs = resTemp = Rn & ~rotated_imm;
3273311Ssaidi@eecs.umich.edu                    }});
3283311Ssaidi@eecs.umich.edu                    0x2: decode HTRN {
3293311Ssaidi@eecs.umich.edu                        0xf: DataModImmOp::mov({{
3303311Ssaidi@eecs.umich.edu                            Rs = resTemp = rotated_imm;
3313311Ssaidi@eecs.umich.edu                        }});
3323311Ssaidi@eecs.umich.edu                        default: DataModImmOp::orr({{
3333311Ssaidi@eecs.umich.edu                            Rs = resTemp = Rn | rotated_imm;
3343311Ssaidi@eecs.umich.edu                        }});
3353311Ssaidi@eecs.umich.edu                    }
3363311Ssaidi@eecs.umich.edu                    0x3: decode HTRN {
3373311Ssaidi@eecs.umich.edu                        0xf: DataModImmOp::mvn({{
3385183Ssaidi@eecs.umich.edu                            Rs = resTemp = ~rotated_imm;
3395183Ssaidi@eecs.umich.edu                        }});
3405183Ssaidi@eecs.umich.edu                        default: DataModImmOp::orn({{
3415183Ssaidi@eecs.umich.edu                            Rs = resTemp = Rn | ~rotated_imm;
3423311Ssaidi@eecs.umich.edu                        }});
3432SN/A                    }
3442SN/A                    0x4: decode LTRD {
3452SN/A                        0xf: decode HTS {
3462SN/A                            0x1: DataModImmOp::teq({{
3472SN/A                                resTemp = Rn ^ rotated_imm;
3482SN/A                            }});
3492SN/A                        }
3502SN/A                        default: DataModImmOp::eor({{
35112SN/A                            Rs = resTemp = Rn ^ rotated_imm;
3525154Sgblack@eecs.umich.edu                        }});
3535154Sgblack@eecs.umich.edu                    }
3545154Sgblack@eecs.umich.edu                    0x8: decode LTRD {
3552SN/A                        0xf: decode HTS {
3565154Sgblack@eecs.umich.edu                            0x1: DataModImmOp::cmn({{
3575154Sgblack@eecs.umich.edu                                resTemp = Rn + rotated_imm;
3585154Sgblack@eecs.umich.edu                            }}, add);
3595154Sgblack@eecs.umich.edu                        }
3605154Sgblack@eecs.umich.edu                        default: DataModImmOp::add({{
3615154Sgblack@eecs.umich.edu                            Rs = resTemp = Rn + rotated_imm;
3623114Sgblack@eecs.umich.edu                        }}, add);
3635154Sgblack@eecs.umich.edu                    }
36412SN/A                    0xa: DataModImmOp::adc({{
3651158SN/A                        Rs = resTemp = Rn + rotated_imm + CondCodes<29:>;
3661158SN/A                    }}, add);
3671158SN/A                    0xb: DataModImmOp::sbc({{
3681158SN/A                        Rs = resTemp = Rn - rotated_imm - !CondCodes<29:>;
3691158SN/A                    }}, sub);
3701158SN/A                    0xd: decode LTRD {
3711158SN/A                        0xf: decode HTS {
3721158SN/A                            0x1: DataModImmOp::cmp({{
3731158SN/A                                resTemp = Rn - rotated_imm;
3741158SN/A                            }}, sub);
3751158SN/A                        }
3762378SN/A                        default: DataModImmOp::sub({{
3771158SN/A                            Rs = resTemp = Rn - rotated_imm;
3782378SN/A                        }}, sub);
3792474SN/A                    }
3802378SN/A                    0xe: DataModImmOp::rsb({{
3812378SN/A                        Rs = resTemp = rotated_imm - Rn;
38212SN/A                    }}, rsb);
3832378SN/A                }
3842378SN/A                0x1: WarnUnimpl::Data_processing_plain_binary_immediate();
38512SN/A            }
38612SN/A            0x1: WarnUnimpl::Branches_and_miscellaneous_control();
3872474SN/A        }
3882474SN/A        0x3: decode HTOPCODE_10_9 {
38912SN/A            0x0: decode HTOPCODE_4 {
39012SN/A                0x0: decode HTOPCODE_8 {
39112SN/A                    0x0: WarnUnimpl::Store_single_data_item();
39212SN/A                    0x1: WarnUnimpl::Advanced_SIMD_or_structure_load_store();
39312SN/A                }
39412SN/A                0x1: decode HTOPCODE_6_5 {
39512SN/A                    0x0: WarnUnimpl::Load_byte_memory_hints();
39612SN/A                    0x1: WarnUnimpl::Load_halfword_memory_hints();
39712SN/A                    0x2: decode HTOPCODE_8 {
39812SN/A                        0x0: decode HTRN {
39912SN/A                            0xf: WarnUnimpl::ldr(); // literal A8-122
4003005Sstever@eecs.umich.edu                            default: decode HTOPCODE_7 {
4013005Sstever@eecs.umich.edu                                0x0: decode LTOPCODE_11_8 {
40212SN/A                                    0x0: decode LTOPCODE_7_6 {
40312SN/A                                        0x0: WarnUnimpl::ldr(); // register A8-122
40412SN/A                                    }
40512SN/A                                    0x9, 0xb, 0xc, 0xd, 0xf:
4062800Ssaidi@eecs.umich.edu                                        WarnUnimpl::ldr(); // immediate thumb A8-118
40712SN/A                                    0xe: WarnUnimpl::ldrt(); // A8-176
4082378SN/A                                }
4092800Ssaidi@eecs.umich.edu                                0x1: WarnUnimpl::ldr(); // immediate thumb A8-118
41012SN/A                            }
41112SN/A                        }
4122523SN/A                    }
41312SN/A                    0x3: WarnUnimpl::undefined();
41412SN/A                }
41512SN/A            }
41612SN/A            0x1: decode HTOPCODE_8_7 {
41712SN/A                0x2: WarnUnimpl::Multiply_multiply_accumulate_and_absolute_difference();
41812SN/A                0x3: WarnUnimpl::Long_multiply_long_multiply_accumulate_and_divide();
4192474SN/A                default: WarnUnimpl::Data_processing_register();
4202474SN/A            }
4212474SN/A            default: decode HTOPCODE_9_8 {
4222474SN/A                0x2: decode LTOPCODE_4 {
4232474SN/A                    0x0: decode LTCOPROC {
4242474SN/A                        0xa, 0xb: WarnUnimpl::VFP_Inst();
4252474SN/A                        default: WarnUnimpl::cdp(); // cdp2
4262474SN/A                    }
42712SN/A                    0x1: decode LTCOPROC {
4282378SN/A                        0xa, 0xb: WarnUnimpl::Core_to_extension_transfer();
4292378SN/A                        default: decode HTOPCODE_4 {
43012SN/A                            0x0: WarnUnimpl::mcr(); // mcr2
4314772Sgblack@eecs.umich.edu                            0x1: WarnUnimpl::mrc(); // mrc2
4324772Sgblack@eecs.umich.edu                        }
4334772Sgblack@eecs.umich.edu                    }
4342680Sktlim@umich.edu                }
4352451SN/A                0x3: WarnUnimpl::Advanced_SIMD();
4362451SN/A                default: decode LTCOPROC {
4372680Sktlim@umich.edu                    0xa, 0xb: decode HTOPCODE_9_4 {
4382680Sktlim@umich.edu                        0x00: WarnUnimpl::undefined();
4392817Sksewell@umich.edu                        0x04: WarnUnimpl::mcrr(); // mcrr2
4402817Sksewell@umich.edu                        0x05: WarnUnimpl::mrrc(); // mrrc2
4412680Sktlim@umich.edu                        0x02, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10,
4422817Sksewell@umich.edu                        0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e:
4432378SN/A                            WarnUnimpl::stc(); // stc2
4442378SN/A                        0x03, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11,
4452SN/A                        0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f:
4462SN/A                            decode HTRN {
4472093SN/A                                0xf: WarnUnimpl::ldc(); // ldc2 (literal)
4482680Sktlim@umich.edu                                default: WarnUnimpl::ldc(); // ldc2 (immediate)
4492093SN/A                            }
4502093SN/A                    }
4512093SN/A                    default: decode HTOPCODE_9_5 {
4522093SN/A                        0x00: WarnUnimpl::undefined();
4532093SN/A                        0x02: WarnUnimpl::SIMD_VFP_64_bit_core_extension_transfer();
4542093SN/A                        0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
4552093SN/A                        0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f:
4562680Sktlim@umich.edu                            WarnUnimpl::Extension_register_load_store_instruction();
4572093SN/A                    }
4582SN/A                }
4592715Sstever@eecs.umich.edu            }
4605154Sgblack@eecs.umich.edu        }
4612715Sstever@eecs.umich.edu    }
4622715Sstever@eecs.umich.edu}
4632715Sstever@eecs.umich.edu