thumb.isa revision 7123
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();
937104SN/A            default: decode TOPCODE_11_9 {
947104SN/A                0x0: WarnUnimpl::str(); //register
957104SN/A                0x1: WarnUnimpl::strh(); //register
967104SN/A                0x2: WarnUnimpl::strb(); //register
977104SN/A                0x3: WarnUnimpl::ldrsb(); //register
987104SN/A                0x4: WarnUnimpl::ldr(); //register
997104SN/A                0x5: WarnUnimpl::ldrh(); //register
1007104SN/A                0x6: WarnUnimpl::ldrb(); //register
1017104SN/A                0x7: WarnUnimpl::ldrsh(); //register
1027104SN/A            }
1037104SN/A        }
1047104SN/A        0x3: decode TOPCODE_12_11 {
1057104SN/A            0x0: WarnUnimpl::str(); //immediate, thumb
1067104SN/A            0x1: WarnUnimpl::ldr(); //immediate, thumb
1077104SN/A            0x2: WarnUnimpl::strb(); //immediate, thumb
1087104SN/A            0x3: WarnUnimpl::ldrb(); //immediate, thumb
1097104SN/A        }
1107104SN/A        0x4: decode TOPCODE_12_11 {
1117104SN/A            0x0: WarnUnimpl::strh(); //immediate, thumb
1127104SN/A            0x1: WarnUnimpl::ldrh(); //immediate, thumb
1137104SN/A            0x2: WarnUnimpl::str(); //immediate, thumb
1147104SN/A            0x3: WarnUnimpl::ldr(); //immediate, thumb
1157104SN/A        }
1167104SN/A        0x5: decode TOPCODE_12_11 {
1177104SN/A            0x0: WarnUnimpl::adr();
1187104SN/A            0x1: WarnUnimpl::add(); //sp, immediate
1197104SN/A            0x2: decode TOPCODE_10_8 {
1207104SN/A                0x0: decode TOPCODE_7 {
1217104SN/A                    0x0: WarnUnimpl::add(); //sp, immediate
1227104SN/A                    0x1: WarnUnimpl::sub(); //sp, immediate
1237104SN/A                }
1247104SN/A                0x1, 0x3: WarnUnimpl::cbz(); //cbnz too...
1257104SN/A                0x2: decode TOPCODE_7_6 {
1267104SN/A                    0x0: WarnUnimpl::sxth();
1277104SN/A                    0x1: WarnUnimpl::sxtb();
1287104SN/A                    0x2: WarnUnimpl::uxth();
1297104SN/A                    0x3: WarnUnimpl::uxtb();
1307104SN/A                }
1317104SN/A                0x4, 0x5: WarnUnimpl::pop();
1327104SN/A                0x6: decode TOPCODE_7_5 {
1337104SN/A                    0x2: WarnUnimpl::setend();
1347104SN/A                    0x3: WarnUnimpl::cps();
1357104SN/A                }
1367104SN/A            }
1377104SN/A            0x3: decode TOPCODE_10_8 {
1387104SN/A                0x1, 0x3: WarnUnimpl::cbz(); //cbnz too...
1397104SN/A                0x2: decode TOPCODE_7_6 {
1407104SN/A                    0x0: WarnUnimpl::rev();
1417104SN/A                    0x1: WarnUnimpl::rev16();
1427104SN/A                    0x3: WarnUnimpl::revsh();
1437104SN/A                }
1447104SN/A                0x4, 0x5: WarnUnimpl::pop();
1457104SN/A                0x6: WarnUnimpl::bkpt();
1467104SN/A                0x7: decode TOPCODE_3_0 {
1477104SN/A                    0x0: WarnUnimpl::it();
1487104SN/A                    default: decode TOPCODE_7_4 {
1497104SN/A                        0x0: WarnUnimpl::nop();
1507104SN/A                        0x1: WarnUnimpl::yield();
1517104SN/A                        0x2: WarnUnimpl::wfe();
1527104SN/A                        0x3: WarnUnimpl::wfi();
1537104SN/A                        0x4: WarnUnimpl::sev();
1547104SN/A                        default: WarnUnimpl::unallocated_hint();
1557104SN/A                    }
1567104SN/A                }
1577104SN/A            }
1587104SN/A        }
1597104SN/A        0x6: decode TOPCODE_12_11 {
1607104SN/A            0x0: WarnUnimpl::stm(); // also stmia, stmea
1617104SN/A            0x1: WarnUnimpl::ldm(); // also ldmia, ldmea
1627104SN/A            default: decode TOPCODE_11_8 {
1637104SN/A                0xe: WarnUnimpl::undefined(); // permanently undefined
1647104SN/A                0xf: WarnUnimpl::svc(); // formerly swi
1657104SN/A                default: WarnUnimpl::b(); // conditional
1667104SN/A            }
1677104SN/A        }
1687104SN/A        0x7: decode TOPCODE_12_11 {
1697104SN/A            0x0: WarnUnimpl::b(); // unconditional
1707104SN/A        }
1717104SN/A    }
1727107SN/A
1737107SN/A    // 32 bit thumb instructions.
1747107SN/A    1: decode HTOPCODE_12_11 {
1757107SN/A        0x1: decode HTOPCODE_10_9 {
1767107SN/A            0x0: decode HTOPCODE_8_6 {
1777107SN/A                0x0, 0x6: decode HTOPCODE_4 {
1787107SN/A                    0x0: WarnUnimpl::srs();
1797107SN/A                    0x1: WarnUnimpl::rfe();
1807107SN/A                }
1817107SN/A                0x1: decode HTOPCODE_5_4 {
1827107SN/A                    0x0: WarnUnimpl::strex();
1837107SN/A                    0x1: WarnUnimpl::ldrex();
1847107SN/A                    0x2: WarnUnimpl::strd(); // immediate
1857107SN/A                    0x3: decode HTRN {
1867107SN/A                        0xf: WarnUnimpl::ldrd(); // literal
1877107SN/A                        default: WarnUnimpl::ldrd(); // immediate
1887107SN/A                    }
1897107SN/A                }
1907107SN/A                0x2: decode HTOPCODE_4 {
1917107SN/A                    0x0: WarnUnimpl::stm(); // stmia, stmea
1927107SN/A                    0x1: decode HTRN {
1937107SN/A                        0xd: WarnUnimpl::pop();
1947107SN/A                        default: WarnUnimpl::ldm(); // ldmia, ldmfd
1957107SN/A                    }
1967107SN/A                }
1977107SN/A                0x3: decode HTOPCODE_5_4 {
1987107SN/A                    0x0: decode LTOPCODE_7_4 {
1997107SN/A                        0x4: WarnUnimpl::strexb();
2007107SN/A                        0x5: WarnUnimpl::strexh();
2017107SN/A                        0x7: WarnUnimpl::strexd();
2027107SN/A                    }
2037107SN/A                    0x1: decode LTOPCODE_7_4 {
2047107SN/A                        0x0: WarnUnimpl::tbb();
2057107SN/A                        0x1: WarnUnimpl::tbh();
2067107SN/A                        0x4: WarnUnimpl::ldrexb();
2077107SN/A                        0x5: WarnUnimpl::ldrexh();
2087107SN/A                        0x7: WarnUnimpl::ldrexd();
2097107SN/A                    }
2107107SN/A                    0x2: WarnUnimpl::strd(); // immediate
2117107SN/A                    0x3: decode HTRN {
2127107SN/A                        0xf: WarnUnimpl::ldrd(); // literal
2137107SN/A                        default: WarnUnimpl::ldrd(); // immediate
2147107SN/A                    }
2157107SN/A                }
2167107SN/A                0x4: decode HTOPCODE_4 {
2177107SN/A                    0x0: decode HTRN {
2187107SN/A                        0xd: WarnUnimpl::push();
2197107SN/A                        default: WarnUnimpl::stmdb(); // stmfd
2207107SN/A                    }
2217107SN/A                    0x1: WarnUnimpl::ldmdb(); // ldmea
2227107SN/A                }
2237107SN/A                0x5, 0x7: decode HTOPCODE_4 {
2247107SN/A                    0x0: WarnUnimpl::strd(); // immediate
2257107SN/A                    0x1: decode HTRN {
2267107SN/A                        0xf: WarnUnimpl::ldrd(); // literal
2277107SN/A                        default: WarnUnimpl::ldrd(); // immediate
2287107SN/A                    }
2297107SN/A                }
2307107SN/A            }
2317107SN/A            0x1: decode HTOPCODE_8_5 {
2327107SN/A                0x0: decode LTRD {
2337107SN/A                    0xf: decode HTS {
2347107SN/A                        0x1: WarnUnimpl::tst(); // register
2357107SN/A                    }
2367107SN/A                    default: WarnUnimpl::and(); // register
2377107SN/A                }
2387107SN/A                0x1: WarnUnimpl::bic(); // register
2397107SN/A                0x2: decode HTRN {
2407107SN/A                    0xf: WarnUnimpl::mov(); // register
2417107SN/A                    default: WarnUnimpl::orr(); // register
2427107SN/A                }
2437107SN/A                0x3: decode HTRN {
2447107SN/A                    0xf: WarnUnimpl::mvn(); // register
2457107SN/A                    default: WarnUnimpl::orn(); // register
2467107SN/A                }
2477107SN/A                0x4: decode LTRD {
2487107SN/A                    0xf: decode HTS {
2497107SN/A                        0x1: WarnUnimpl::teq(); // register
2507107SN/A                    }
2517107SN/A                    default: WarnUnimpl::eor(); // register
2527107SN/A                }
2537107SN/A                0x6: WarnUnimpl::pkh();
2547107SN/A                0x8: decode LTRD {
2557107SN/A                    0xf: decode HTS {
2567107SN/A                        0x1: WarnUnimpl::cmn(); // register
2577107SN/A                    }
2587107SN/A                    default: WarnUnimpl::add(); // register
2597107SN/A                }
2607107SN/A                0xa: WarnUnimpl::adc(); // register
2617107SN/A                0xb: WarnUnimpl::sbc(); // register
2627107SN/A                0xd: decode LTRD {
2637107SN/A                    0xf: decode HTS {
2647107SN/A                        0x1: WarnUnimpl::cmp(); // register
2657107SN/A                    }
2667107SN/A                    default: WarnUnimpl::sub(); // register
2677107SN/A                }
2687107SN/A                0xe: WarnUnimpl::rsb(); // register
2697107SN/A            }
2707107SN/A            default: decode HTOPCODE_9_8 {
2717107SN/A                0x2: decode LTOPCODE_4 {
2727107SN/A                    0x0: decode LTCOPROC {
2737107SN/A                        0xa, 0xb: decode OPCODE_23_20 {
2747117Sgblack@eecs.umich.edu##include "vfp.isa"
2757107SN/A                        }
2767107SN/A                        default: WarnUnimpl::cdp(); // cdp2
2777107SN/A                    }
2787107SN/A                    0x1: decode LTCOPROC {
2797107SN/A                        0xa, 0xb: WarnUnimpl::Core_to_extension_transfer();
2807107SN/A                        default: decode HTOPCODE_4 {
2817107SN/A                            0x0: WarnUnimpl::mcr(); // mcr2
2827107SN/A                            0x1: WarnUnimpl::mrc(); // mrc2
2837107SN/A                        }
2847107SN/A                    }
2857107SN/A                }
2867107SN/A                0x3: WarnUnimpl::Advanced_SIMD();
2877107SN/A                default: decode LTCOPROC {
2887107SN/A                    0xa, 0xb: decode HTOPCODE_9_4 {
2897107SN/A                        0x00: WarnUnimpl::undefined();
2907107SN/A                        0x04: WarnUnimpl::mcrr(); // mcrr2
2917107SN/A                        0x05: WarnUnimpl::mrrc(); // mrrc2
2927107SN/A                        0x02, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10,
2937107SN/A                        0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e:
2947107SN/A                            WarnUnimpl::stc(); // stc2
2957107SN/A                        0x03, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11,
2967107SN/A                        0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f:
2977107SN/A                            decode HTRN {
2987107SN/A                                0xf: WarnUnimpl::ldc(); // ldc2 (literal)
2997107SN/A                                default: WarnUnimpl::ldc(); // ldc2 (immediate)
3007107SN/A                            }
3017107SN/A                    }
3027107SN/A                    default: decode HTOPCODE_9_5 {
3037107SN/A                        0x00: WarnUnimpl::undefined();
3047107SN/A                        0x02: WarnUnimpl::SIMD_VFP_64_bit_core_extension_transfer();
3057107SN/A                        0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
3067107SN/A                        0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f:
3077107SN/A                            WarnUnimpl::Extension_register_load_store_instruction();
3087107SN/A                    }
3097107SN/A                }
3107107SN/A            }
3117107SN/A        }
3127107SN/A        0x2: decode LTOPCODE_15 {
3137107SN/A            0x0: decode HTOPCODE_9 {
3147108SN/A                0x0: decode HTOPCODE_8_5 {
3157108SN/A                    0x0: decode LTRD {
3167108SN/A                        0xf: decode HTS {
3177112SN/A                            0x1: DataModImmOp::tst({{
3187112SN/A                                resTemp = Rn & rotated_imm;
3197112SN/A                            }});
3207108SN/A                        }
3217112SN/A                        default: DataModImmOp::and({{
3227112SN/A                            Rs = resTemp = Rn & rotated_imm;
3237112SN/A                        }});
3247108SN/A                    }
3257112SN/A                    0x1: DataModImmOp::bic({{
3267112SN/A                        Rs = resTemp = Rn & ~rotated_imm;
3277112SN/A                    }});
3287108SN/A                    0x2: decode HTRN {
3297112SN/A                        0xf: DataModImmOp::mov({{
3307112SN/A                            Rs = resTemp = rotated_imm;
3317112SN/A                        }});
3327112SN/A                        default: DataModImmOp::orr({{
3337112SN/A                            Rs = resTemp = Rn | rotated_imm;
3347112SN/A                        }});
3357108SN/A                    }
3367108SN/A                    0x3: decode HTRN {
3377112SN/A                        0xf: DataModImmOp::mvn({{
3387112SN/A                            Rs = resTemp = ~rotated_imm;
3397112SN/A                        }});
3407112SN/A                        default: DataModImmOp::orn({{
3417112SN/A                            Rs = resTemp = Rn | ~rotated_imm;
3427112SN/A                        }});
3437108SN/A                    }
3447108SN/A                    0x4: decode LTRD {
3457108SN/A                        0xf: decode HTS {
3467112SN/A                            0x1: DataModImmOp::teq({{
3477112SN/A                                resTemp = Rn ^ rotated_imm;
3487112SN/A                            }});
3497108SN/A                        }
3507112SN/A                        default: DataModImmOp::eor({{
3517112SN/A                            Rs = resTemp = Rn ^ rotated_imm;
3527112SN/A                        }});
3537108SN/A                    }
3547108SN/A                    0x8: decode LTRD {
3557108SN/A                        0xf: decode HTS {
3567112SN/A                            0x1: DataModImmOp::cmn({{
3577112SN/A                                resTemp = Rn + rotated_imm;
3587112SN/A                            }}, add);
3597108SN/A                        }
3607112SN/A                        default: DataModImmOp::add({{
3617112SN/A                            Rs = resTemp = Rn + rotated_imm;
3627112SN/A                        }}, add);
3637108SN/A                    }
3647112SN/A                    0xa: DataModImmOp::adc({{
3657112SN/A                        Rs = resTemp = Rn + rotated_imm + CondCodes<29:>;
3667112SN/A                    }}, add);
3677112SN/A                    0xb: DataModImmOp::sbc({{
3687112SN/A                        Rs = resTemp = Rn - rotated_imm - !CondCodes<29:>;
3697112SN/A                    }}, sub);
3707108SN/A                    0xd: decode LTRD {
3717108SN/A                        0xf: decode HTS {
3727112SN/A                            0x1: DataModImmOp::cmp({{
3737112SN/A                                resTemp = Rn - rotated_imm;
3747112SN/A                            }}, sub);
3757108SN/A                        }
3767112SN/A                        default: DataModImmOp::sub({{
3777112SN/A                            Rs = resTemp = Rn - rotated_imm;
3787112SN/A                        }}, sub);
3797108SN/A                    }
3807112SN/A                    0xe: DataModImmOp::rsb({{
3817112SN/A                        Rs = resTemp = rotated_imm - Rn;
3827112SN/A                    }}, rsb);
3837108SN/A                }
3847107SN/A                0x1: WarnUnimpl::Data_processing_plain_binary_immediate();
3857107SN/A            }
3867107SN/A            0x1: WarnUnimpl::Branches_and_miscellaneous_control();
3877107SN/A        }
3887107SN/A        0x3: decode HTOPCODE_10_9 {
3897107SN/A            0x0: decode HTOPCODE_4 {
3907107SN/A                0x0: decode HTOPCODE_8 {
3917123Sgblack@eecs.umich.edu                    0x0: Thumb32StoreSingle::thumb32StoreSingle();
3927107SN/A                    0x1: WarnUnimpl::Advanced_SIMD_or_structure_load_store();
3937107SN/A                }
3947107SN/A                0x1: decode HTOPCODE_6_5 {
3957107SN/A                    0x0: WarnUnimpl::Load_byte_memory_hints();
3967107SN/A                    0x1: WarnUnimpl::Load_halfword_memory_hints();
3977121Sgblack@eecs.umich.edu                    0x2: Thumb32LoadWord::thumb32LoadWord();
3987107SN/A                    0x3: WarnUnimpl::undefined();
3997107SN/A                }
4007107SN/A            }
4017107SN/A            0x1: decode HTOPCODE_8_7 {
4027107SN/A                0x2: WarnUnimpl::Multiply_multiply_accumulate_and_absolute_difference();
4037107SN/A                0x3: WarnUnimpl::Long_multiply_long_multiply_accumulate_and_divide();
4047107SN/A                default: WarnUnimpl::Data_processing_register();
4057107SN/A            }
4067107SN/A            default: decode HTOPCODE_9_8 {
4077107SN/A                0x2: decode LTOPCODE_4 {
4087107SN/A                    0x0: decode LTCOPROC {
4097107SN/A                        0xa, 0xb: WarnUnimpl::VFP_Inst();
4107107SN/A                        default: WarnUnimpl::cdp(); // cdp2
4117107SN/A                    }
4127107SN/A                    0x1: decode LTCOPROC {
4137107SN/A                        0xa, 0xb: WarnUnimpl::Core_to_extension_transfer();
4147107SN/A                        default: decode HTOPCODE_4 {
4157107SN/A                            0x0: WarnUnimpl::mcr(); // mcr2
4167107SN/A                            0x1: WarnUnimpl::mrc(); // mrc2
4177107SN/A                        }
4187107SN/A                    }
4197107SN/A                }
4207107SN/A                0x3: WarnUnimpl::Advanced_SIMD();
4217107SN/A                default: decode LTCOPROC {
4227107SN/A                    0xa, 0xb: decode HTOPCODE_9_4 {
4237107SN/A                        0x00: WarnUnimpl::undefined();
4247107SN/A                        0x04: WarnUnimpl::mcrr(); // mcrr2
4257107SN/A                        0x05: WarnUnimpl::mrrc(); // mrrc2
4267107SN/A                        0x02, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10,
4277107SN/A                        0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e:
4287107SN/A                            WarnUnimpl::stc(); // stc2
4297107SN/A                        0x03, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11,
4307107SN/A                        0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f:
4317107SN/A                            decode HTRN {
4327107SN/A                                0xf: WarnUnimpl::ldc(); // ldc2 (literal)
4337107SN/A                                default: WarnUnimpl::ldc(); // ldc2 (immediate)
4347107SN/A                            }
4357107SN/A                    }
4367107SN/A                    default: decode HTOPCODE_9_5 {
4377107SN/A                        0x00: WarnUnimpl::undefined();
4387107SN/A                        0x02: WarnUnimpl::SIMD_VFP_64_bit_core_extension_transfer();
4397107SN/A                        0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
4407107SN/A                        0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f:
4417107SN/A                            WarnUnimpl::Extension_register_load_store_instruction();
4427107SN/A                    }
4437107SN/A                }
4447107SN/A            }
4457107SN/A        }
4467107SN/A    }
4476268SN/A}
448