thumb.isa revision 7124
16019SN/A// -*- mode:c++ -*-
26019SN/A
37102SN/A// Copyright (c) 2010 ARM Limited
47102SN/A// All rights reserved
57102SN/A//
67102SN/A// The license below extends only to copyright in the software and shall
77102SN/A// not be construed as granting a license to any other intellectual
87102SN/A// property including but not limited to intellectual property relating
97102SN/A// to a hardware implementation of the functionality of the software
107102SN/A// licensed hereunder.  You may use the software subject to the license
117102SN/A// terms below provided that you ensure that this notice is replicated
127102SN/A// unmodified and in its entirety in all distributions of the software,
137102SN/A// modified or unmodified, in source code or in binary form.
147102SN/A//
157102SN/A// Copyright (c) 2009 The Regents of The University of Michigan
166019SN/A// All rights reserved.
176019SN/A//
186019SN/A// Redistribution and use in source and binary forms, with or without
196019SN/A// modification, are permitted provided that the following conditions are
206019SN/A// met: redistributions of source code must retain the above copyright
216019SN/A// notice, this list of conditions and the following disclaimer;
226019SN/A// redistributions in binary form must reproduce the above copyright
236019SN/A// notice, this list of conditions and the following disclaimer in the
246019SN/A// documentation and/or other materials provided with the distribution;
256019SN/A// neither the name of the copyright holders nor the names of its
266019SN/A// contributors may be used to endorse or promote products derived from
276019SN/A// this software without specific prior written permission.
286019SN/A//
296019SN/A// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
306019SN/A// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
316019SN/A// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
326019SN/A// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
336019SN/A// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
346019SN/A// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
356019SN/A// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
366019SN/A// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
376019SN/A// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
386019SN/A// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
396019SN/A// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
406019SN/A//
417102SN/A// Authors: Gabe Black
426019SN/A
437102SN/A1: decode BIGTHUMB {
447104SN/A    // 16 bit thumb instructions.
457104SN/A    0: decode TOPCODE_15_13 {
467104SN/A        0x0, 0x1: decode TOPCODE_13_11 {
477104SN/A            0x0: WarnUnimpl::lsl(); //immediate
487104SN/A            0x1: WarnUnimpl::lsr(); //immediate
497104SN/A            0x2: WarnUnimpl::asr(); //immediate
507104SN/A            0x3: decode TOPCODE_10_9 {
517104SN/A                0x0: WarnUnimpl::add(); //register
527104SN/A                0x1: WarnUnimpl::sub(); //register
537104SN/A                0x2: WarnUnimpl::add(); //3 bit immediate
547104SN/A                0x3: WarnUnimpl::sub(); //3 bit immediate
557104SN/A            }
567104SN/A            0x4: WarnUnimpl::mov(); //immediate
577104SN/A            0x5: WarnUnimpl::cmp(); //immediate
587104SN/A            0x6: WarnUnimpl::add(); //8 bit immediate, thumb
597104SN/A            0x7: WarnUnimpl::sub(); //8 bit immediate, thumb
607104SN/A        }
617104SN/A        0x2: decode TOPCODE_12_10 {
627104SN/A            // Data processing
637104SN/A            0x0: decode TOPCODE_9_6 {
647104SN/A                0x0: WarnUnimpl::and(); //register
657104SN/A                0x1: WarnUnimpl::eor(); //register
667104SN/A                0x2: WarnUnimpl::lsl(); //register
677104SN/A                0x3: WarnUnimpl::lsr(); //register
687104SN/A                0x4: WarnUnimpl::asr(); //register
697104SN/A                0x5: WarnUnimpl::adc(); //register
707104SN/A                0x6: WarnUnimpl::sbc(); //register
717104SN/A                0x7: WarnUnimpl::ror(); //register
727104SN/A                0x8: WarnUnimpl::tst(); //register
737104SN/A                0x9: WarnUnimpl::rsb(); //immediate
747104SN/A                0xa: WarnUnimpl::cmp(); //register (high registers)
757104SN/A                0xb: WarnUnimpl::cmn(); //register
767104SN/A                0xc: WarnUnimpl::orr(); //register
777104SN/A                0xd: WarnUnimpl::mul();
787104SN/A                0xe: WarnUnimpl::bic(); //register
797104SN/A                0xf: WarnUnimpl::mvn(); //register
807104SN/A            }
817104SN/A            // Special data instructions and branch and exchange
827104SN/A            0x1: decode TOPCODE_9_6 {
837104SN/A                0x0: WarnUnimpl::add(); //register (low registers)
847104SN/A                0x1, 0x2, 0x3: WarnUnimpl::add(); //register (high registers)
857104SN/A                0x4: WarnUnimpl::unpredictable(); //?
867104SN/A                0x5, 0x6, 0x7: WarnUnimpl::cmp(); //register
877104SN/A                0x8: WarnUnimpl::mov(); //register (low registers)
887104SN/A                0x9, 0xa, 0xb: WarnUnimpl::mov(); //register (high registers)
897104SN/A                0xc, 0xd: WarnUnimpl::bx();
907104SN/A                0xe, 0xf: WarnUnimpl::blx(); //register
917104SN/A            }
927104SN/A            0x2, 0x3: WarnUnimpl::ldr();
937124Sgblack@eecs.umich.edu            default: Thumb16MemReg::thumb16MemReg();
947104SN/A        }
957104SN/A        0x3: decode TOPCODE_12_11 {
967104SN/A            0x0: WarnUnimpl::str(); //immediate, thumb
977104SN/A            0x1: WarnUnimpl::ldr(); //immediate, thumb
987104SN/A            0x2: WarnUnimpl::strb(); //immediate, thumb
997104SN/A            0x3: WarnUnimpl::ldrb(); //immediate, thumb
1007104SN/A        }
1017104SN/A        0x4: decode TOPCODE_12_11 {
1027104SN/A            0x0: WarnUnimpl::strh(); //immediate, thumb
1037104SN/A            0x1: WarnUnimpl::ldrh(); //immediate, thumb
1047104SN/A            0x2: WarnUnimpl::str(); //immediate, thumb
1057104SN/A            0x3: WarnUnimpl::ldr(); //immediate, thumb
1067104SN/A        }
1077104SN/A        0x5: decode TOPCODE_12_11 {
1087104SN/A            0x0: WarnUnimpl::adr();
1097104SN/A            0x1: WarnUnimpl::add(); //sp, immediate
1107104SN/A            0x2: decode TOPCODE_10_8 {
1117104SN/A                0x0: decode TOPCODE_7 {
1127104SN/A                    0x0: WarnUnimpl::add(); //sp, immediate
1137104SN/A                    0x1: WarnUnimpl::sub(); //sp, immediate
1147104SN/A                }
1157104SN/A                0x1, 0x3: WarnUnimpl::cbz(); //cbnz too...
1167104SN/A                0x2: decode TOPCODE_7_6 {
1177104SN/A                    0x0: WarnUnimpl::sxth();
1187104SN/A                    0x1: WarnUnimpl::sxtb();
1197104SN/A                    0x2: WarnUnimpl::uxth();
1207104SN/A                    0x3: WarnUnimpl::uxtb();
1217104SN/A                }
1227104SN/A                0x4, 0x5: WarnUnimpl::pop();
1237104SN/A                0x6: decode TOPCODE_7_5 {
1247104SN/A                    0x2: WarnUnimpl::setend();
1257104SN/A                    0x3: WarnUnimpl::cps();
1267104SN/A                }
1277104SN/A            }
1287104SN/A            0x3: decode TOPCODE_10_8 {
1297104SN/A                0x1, 0x3: WarnUnimpl::cbz(); //cbnz too...
1307104SN/A                0x2: decode TOPCODE_7_6 {
1317104SN/A                    0x0: WarnUnimpl::rev();
1327104SN/A                    0x1: WarnUnimpl::rev16();
1337104SN/A                    0x3: WarnUnimpl::revsh();
1347104SN/A                }
1357104SN/A                0x4, 0x5: WarnUnimpl::pop();
1367104SN/A                0x6: WarnUnimpl::bkpt();
1377104SN/A                0x7: decode TOPCODE_3_0 {
1387104SN/A                    0x0: WarnUnimpl::it();
1397104SN/A                    default: decode TOPCODE_7_4 {
1407104SN/A                        0x0: WarnUnimpl::nop();
1417104SN/A                        0x1: WarnUnimpl::yield();
1427104SN/A                        0x2: WarnUnimpl::wfe();
1437104SN/A                        0x3: WarnUnimpl::wfi();
1447104SN/A                        0x4: WarnUnimpl::sev();
1457104SN/A                        default: WarnUnimpl::unallocated_hint();
1467104SN/A                    }
1477104SN/A                }
1487104SN/A            }
1497104SN/A        }
1507104SN/A        0x6: decode TOPCODE_12_11 {
1517104SN/A            0x0: WarnUnimpl::stm(); // also stmia, stmea
1527104SN/A            0x1: WarnUnimpl::ldm(); // also ldmia, ldmea
1537104SN/A            default: decode TOPCODE_11_8 {
1547104SN/A                0xe: WarnUnimpl::undefined(); // permanently undefined
1557104SN/A                0xf: WarnUnimpl::svc(); // formerly swi
1567104SN/A                default: WarnUnimpl::b(); // conditional
1577104SN/A            }
1587104SN/A        }
1597104SN/A        0x7: decode TOPCODE_12_11 {
1607104SN/A            0x0: WarnUnimpl::b(); // unconditional
1617104SN/A        }
1627104SN/A    }
1637107SN/A
1647107SN/A    // 32 bit thumb instructions.
1657107SN/A    1: decode HTOPCODE_12_11 {
1667107SN/A        0x1: decode HTOPCODE_10_9 {
1677107SN/A            0x0: decode HTOPCODE_8_6 {
1687107SN/A                0x0, 0x6: decode HTOPCODE_4 {
1697107SN/A                    0x0: WarnUnimpl::srs();
1707107SN/A                    0x1: WarnUnimpl::rfe();
1717107SN/A                }
1727107SN/A                0x1: decode HTOPCODE_5_4 {
1737107SN/A                    0x0: WarnUnimpl::strex();
1747107SN/A                    0x1: WarnUnimpl::ldrex();
1757107SN/A                    0x2: WarnUnimpl::strd(); // immediate
1767107SN/A                    0x3: decode HTRN {
1777107SN/A                        0xf: WarnUnimpl::ldrd(); // literal
1787107SN/A                        default: WarnUnimpl::ldrd(); // immediate
1797107SN/A                    }
1807107SN/A                }
1817107SN/A                0x2: decode HTOPCODE_4 {
1827107SN/A                    0x0: WarnUnimpl::stm(); // stmia, stmea
1837107SN/A                    0x1: decode HTRN {
1847107SN/A                        0xd: WarnUnimpl::pop();
1857107SN/A                        default: WarnUnimpl::ldm(); // ldmia, ldmfd
1867107SN/A                    }
1877107SN/A                }
1887107SN/A                0x3: decode HTOPCODE_5_4 {
1897107SN/A                    0x0: decode LTOPCODE_7_4 {
1907107SN/A                        0x4: WarnUnimpl::strexb();
1917107SN/A                        0x5: WarnUnimpl::strexh();
1927107SN/A                        0x7: WarnUnimpl::strexd();
1937107SN/A                    }
1947107SN/A                    0x1: decode LTOPCODE_7_4 {
1957107SN/A                        0x0: WarnUnimpl::tbb();
1967107SN/A                        0x1: WarnUnimpl::tbh();
1977107SN/A                        0x4: WarnUnimpl::ldrexb();
1987107SN/A                        0x5: WarnUnimpl::ldrexh();
1997107SN/A                        0x7: WarnUnimpl::ldrexd();
2007107SN/A                    }
2017107SN/A                    0x2: WarnUnimpl::strd(); // immediate
2027107SN/A                    0x3: decode HTRN {
2037107SN/A                        0xf: WarnUnimpl::ldrd(); // literal
2047107SN/A                        default: WarnUnimpl::ldrd(); // immediate
2057107SN/A                    }
2067107SN/A                }
2077107SN/A                0x4: decode HTOPCODE_4 {
2087107SN/A                    0x0: decode HTRN {
2097107SN/A                        0xd: WarnUnimpl::push();
2107107SN/A                        default: WarnUnimpl::stmdb(); // stmfd
2117107SN/A                    }
2127107SN/A                    0x1: WarnUnimpl::ldmdb(); // ldmea
2137107SN/A                }
2147107SN/A                0x5, 0x7: decode HTOPCODE_4 {
2157107SN/A                    0x0: WarnUnimpl::strd(); // immediate
2167107SN/A                    0x1: decode HTRN {
2177107SN/A                        0xf: WarnUnimpl::ldrd(); // literal
2187107SN/A                        default: WarnUnimpl::ldrd(); // immediate
2197107SN/A                    }
2207107SN/A                }
2217107SN/A            }
2227107SN/A            0x1: decode HTOPCODE_8_5 {
2237107SN/A                0x0: decode LTRD {
2247107SN/A                    0xf: decode HTS {
2257107SN/A                        0x1: WarnUnimpl::tst(); // register
2267107SN/A                    }
2277107SN/A                    default: WarnUnimpl::and(); // register
2287107SN/A                }
2297107SN/A                0x1: WarnUnimpl::bic(); // register
2307107SN/A                0x2: decode HTRN {
2317107SN/A                    0xf: WarnUnimpl::mov(); // register
2327107SN/A                    default: WarnUnimpl::orr(); // register
2337107SN/A                }
2347107SN/A                0x3: decode HTRN {
2357107SN/A                    0xf: WarnUnimpl::mvn(); // register
2367107SN/A                    default: WarnUnimpl::orn(); // register
2377107SN/A                }
2387107SN/A                0x4: decode LTRD {
2397107SN/A                    0xf: decode HTS {
2407107SN/A                        0x1: WarnUnimpl::teq(); // register
2417107SN/A                    }
2427107SN/A                    default: WarnUnimpl::eor(); // register
2437107SN/A                }
2447107SN/A                0x6: WarnUnimpl::pkh();
2457107SN/A                0x8: decode LTRD {
2467107SN/A                    0xf: decode HTS {
2477107SN/A                        0x1: WarnUnimpl::cmn(); // register
2487107SN/A                    }
2497107SN/A                    default: WarnUnimpl::add(); // register
2507107SN/A                }
2517107SN/A                0xa: WarnUnimpl::adc(); // register
2527107SN/A                0xb: WarnUnimpl::sbc(); // register
2537107SN/A                0xd: decode LTRD {
2547107SN/A                    0xf: decode HTS {
2557107SN/A                        0x1: WarnUnimpl::cmp(); // register
2567107SN/A                    }
2577107SN/A                    default: WarnUnimpl::sub(); // register
2587107SN/A                }
2597107SN/A                0xe: WarnUnimpl::rsb(); // register
2607107SN/A            }
2617107SN/A            default: decode HTOPCODE_9_8 {
2627107SN/A                0x2: decode LTOPCODE_4 {
2637107SN/A                    0x0: decode LTCOPROC {
2647107SN/A                        0xa, 0xb: decode OPCODE_23_20 {
2657117Sgblack@eecs.umich.edu##include "vfp.isa"
2667107SN/A                        }
2677107SN/A                        default: WarnUnimpl::cdp(); // cdp2
2687107SN/A                    }
2697107SN/A                    0x1: decode LTCOPROC {
2707107SN/A                        0xa, 0xb: WarnUnimpl::Core_to_extension_transfer();
2717107SN/A                        default: decode HTOPCODE_4 {
2727107SN/A                            0x0: WarnUnimpl::mcr(); // mcr2
2737107SN/A                            0x1: WarnUnimpl::mrc(); // mrc2
2747107SN/A                        }
2757107SN/A                    }
2767107SN/A                }
2777107SN/A                0x3: WarnUnimpl::Advanced_SIMD();
2787107SN/A                default: decode LTCOPROC {
2797107SN/A                    0xa, 0xb: decode HTOPCODE_9_4 {
2807107SN/A                        0x00: WarnUnimpl::undefined();
2817107SN/A                        0x04: WarnUnimpl::mcrr(); // mcrr2
2827107SN/A                        0x05: WarnUnimpl::mrrc(); // mrrc2
2837107SN/A                        0x02, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10,
2847107SN/A                        0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e:
2857107SN/A                            WarnUnimpl::stc(); // stc2
2867107SN/A                        0x03, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11,
2877107SN/A                        0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f:
2887107SN/A                            decode HTRN {
2897107SN/A                                0xf: WarnUnimpl::ldc(); // ldc2 (literal)
2907107SN/A                                default: WarnUnimpl::ldc(); // ldc2 (immediate)
2917107SN/A                            }
2927107SN/A                    }
2937107SN/A                    default: decode HTOPCODE_9_5 {
2947107SN/A                        0x00: WarnUnimpl::undefined();
2957107SN/A                        0x02: WarnUnimpl::SIMD_VFP_64_bit_core_extension_transfer();
2967107SN/A                        0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
2977107SN/A                        0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f:
2987107SN/A                            WarnUnimpl::Extension_register_load_store_instruction();
2997107SN/A                    }
3007107SN/A                }
3017107SN/A            }
3027107SN/A        }
3037107SN/A        0x2: decode LTOPCODE_15 {
3047107SN/A            0x0: decode HTOPCODE_9 {
3057108SN/A                0x0: decode HTOPCODE_8_5 {
3067108SN/A                    0x0: decode LTRD {
3077108SN/A                        0xf: decode HTS {
3087112SN/A                            0x1: DataModImmOp::tst({{
3097112SN/A                                resTemp = Rn & rotated_imm;
3107112SN/A                            }});
3117108SN/A                        }
3127112SN/A                        default: DataModImmOp::and({{
3137112SN/A                            Rs = resTemp = Rn & rotated_imm;
3147112SN/A                        }});
3157108SN/A                    }
3167112SN/A                    0x1: DataModImmOp::bic({{
3177112SN/A                        Rs = resTemp = Rn & ~rotated_imm;
3187112SN/A                    }});
3197108SN/A                    0x2: decode HTRN {
3207112SN/A                        0xf: DataModImmOp::mov({{
3217112SN/A                            Rs = resTemp = rotated_imm;
3227112SN/A                        }});
3237112SN/A                        default: DataModImmOp::orr({{
3247112SN/A                            Rs = resTemp = Rn | rotated_imm;
3257112SN/A                        }});
3267108SN/A                    }
3277108SN/A                    0x3: decode HTRN {
3287112SN/A                        0xf: DataModImmOp::mvn({{
3297112SN/A                            Rs = resTemp = ~rotated_imm;
3307112SN/A                        }});
3317112SN/A                        default: DataModImmOp::orn({{
3327112SN/A                            Rs = resTemp = Rn | ~rotated_imm;
3337112SN/A                        }});
3347108SN/A                    }
3357108SN/A                    0x4: decode LTRD {
3367108SN/A                        0xf: decode HTS {
3377112SN/A                            0x1: DataModImmOp::teq({{
3387112SN/A                                resTemp = Rn ^ rotated_imm;
3397112SN/A                            }});
3407108SN/A                        }
3417112SN/A                        default: DataModImmOp::eor({{
3427112SN/A                            Rs = resTemp = Rn ^ rotated_imm;
3437112SN/A                        }});
3447108SN/A                    }
3457108SN/A                    0x8: decode LTRD {
3467108SN/A                        0xf: decode HTS {
3477112SN/A                            0x1: DataModImmOp::cmn({{
3487112SN/A                                resTemp = Rn + rotated_imm;
3497112SN/A                            }}, add);
3507108SN/A                        }
3517112SN/A                        default: DataModImmOp::add({{
3527112SN/A                            Rs = resTemp = Rn + rotated_imm;
3537112SN/A                        }}, add);
3547108SN/A                    }
3557112SN/A                    0xa: DataModImmOp::adc({{
3567112SN/A                        Rs = resTemp = Rn + rotated_imm + CondCodes<29:>;
3577112SN/A                    }}, add);
3587112SN/A                    0xb: DataModImmOp::sbc({{
3597112SN/A                        Rs = resTemp = Rn - rotated_imm - !CondCodes<29:>;
3607112SN/A                    }}, sub);
3617108SN/A                    0xd: decode LTRD {
3627108SN/A                        0xf: decode HTS {
3637112SN/A                            0x1: DataModImmOp::cmp({{
3647112SN/A                                resTemp = Rn - rotated_imm;
3657112SN/A                            }}, sub);
3667108SN/A                        }
3677112SN/A                        default: DataModImmOp::sub({{
3687112SN/A                            Rs = resTemp = Rn - rotated_imm;
3697112SN/A                        }}, sub);
3707108SN/A                    }
3717112SN/A                    0xe: DataModImmOp::rsb({{
3727112SN/A                        Rs = resTemp = rotated_imm - Rn;
3737112SN/A                    }}, rsb);
3747108SN/A                }
3757107SN/A                0x1: WarnUnimpl::Data_processing_plain_binary_immediate();
3767107SN/A            }
3777107SN/A            0x1: WarnUnimpl::Branches_and_miscellaneous_control();
3787107SN/A        }
3797107SN/A        0x3: decode HTOPCODE_10_9 {
3807107SN/A            0x0: decode HTOPCODE_4 {
3817107SN/A                0x0: decode HTOPCODE_8 {
3827123Sgblack@eecs.umich.edu                    0x0: Thumb32StoreSingle::thumb32StoreSingle();
3837107SN/A                    0x1: WarnUnimpl::Advanced_SIMD_or_structure_load_store();
3847107SN/A                }
3857107SN/A                0x1: decode HTOPCODE_6_5 {
3867107SN/A                    0x0: WarnUnimpl::Load_byte_memory_hints();
3877107SN/A                    0x1: WarnUnimpl::Load_halfword_memory_hints();
3887121Sgblack@eecs.umich.edu                    0x2: Thumb32LoadWord::thumb32LoadWord();
3897107SN/A                    0x3: WarnUnimpl::undefined();
3907107SN/A                }
3917107SN/A            }
3927107SN/A            0x1: decode HTOPCODE_8_7 {
3937107SN/A                0x2: WarnUnimpl::Multiply_multiply_accumulate_and_absolute_difference();
3947107SN/A                0x3: WarnUnimpl::Long_multiply_long_multiply_accumulate_and_divide();
3957107SN/A                default: WarnUnimpl::Data_processing_register();
3967107SN/A            }
3977107SN/A            default: decode HTOPCODE_9_8 {
3987107SN/A                0x2: decode LTOPCODE_4 {
3997107SN/A                    0x0: decode LTCOPROC {
4007107SN/A                        0xa, 0xb: WarnUnimpl::VFP_Inst();
4017107SN/A                        default: WarnUnimpl::cdp(); // cdp2
4027107SN/A                    }
4037107SN/A                    0x1: decode LTCOPROC {
4047107SN/A                        0xa, 0xb: WarnUnimpl::Core_to_extension_transfer();
4057107SN/A                        default: decode HTOPCODE_4 {
4067107SN/A                            0x0: WarnUnimpl::mcr(); // mcr2
4077107SN/A                            0x1: WarnUnimpl::mrc(); // mrc2
4087107SN/A                        }
4097107SN/A                    }
4107107SN/A                }
4117107SN/A                0x3: WarnUnimpl::Advanced_SIMD();
4127107SN/A                default: decode LTCOPROC {
4137107SN/A                    0xa, 0xb: decode HTOPCODE_9_4 {
4147107SN/A                        0x00: WarnUnimpl::undefined();
4157107SN/A                        0x04: WarnUnimpl::mcrr(); // mcrr2
4167107SN/A                        0x05: WarnUnimpl::mrrc(); // mrrc2
4177107SN/A                        0x02, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10,
4187107SN/A                        0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e:
4197107SN/A                            WarnUnimpl::stc(); // stc2
4207107SN/A                        0x03, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11,
4217107SN/A                        0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f:
4227107SN/A                            decode HTRN {
4237107SN/A                                0xf: WarnUnimpl::ldc(); // ldc2 (literal)
4247107SN/A                                default: WarnUnimpl::ldc(); // ldc2 (immediate)
4257107SN/A                            }
4267107SN/A                    }
4277107SN/A                    default: decode HTOPCODE_9_5 {
4287107SN/A                        0x00: WarnUnimpl::undefined();
4297107SN/A                        0x02: WarnUnimpl::SIMD_VFP_64_bit_core_extension_transfer();
4307107SN/A                        0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
4317107SN/A                        0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f:
4327107SN/A                            WarnUnimpl::Extension_register_load_store_instruction();
4337107SN/A                    }
4347107SN/A                }
4357107SN/A            }
4367107SN/A        }
4377107SN/A    }
4386268SN/A}
439