thumb.isa revision 7104
12650Ssaidi@eecs.umich.edu// -*- mode:c++ -*-
22650Ssaidi@eecs.umich.edu
32650Ssaidi@eecs.umich.edu// Copyright (c) 2010 ARM Limited
42650Ssaidi@eecs.umich.edu// All rights reserved
52650Ssaidi@eecs.umich.edu//
62650Ssaidi@eecs.umich.edu// The license below extends only to copyright in the software and shall
72650Ssaidi@eecs.umich.edu// not be construed as granting a license to any other intellectual
82650Ssaidi@eecs.umich.edu// property including but not limited to intellectual property relating
92650Ssaidi@eecs.umich.edu// to a hardware implementation of the functionality of the software
102650Ssaidi@eecs.umich.edu// licensed hereunder.  You may use the software subject to the license
112650Ssaidi@eecs.umich.edu// terms below provided that you ensure that this notice is replicated
122650Ssaidi@eecs.umich.edu// unmodified and in its entirety in all distributions of the software,
132650Ssaidi@eecs.umich.edu// modified or unmodified, in source code or in binary form.
142650Ssaidi@eecs.umich.edu//
152650Ssaidi@eecs.umich.edu// Copyright (c) 2009 The Regents of The University of Michigan
162650Ssaidi@eecs.umich.edu// All rights reserved.
172650Ssaidi@eecs.umich.edu//
182650Ssaidi@eecs.umich.edu// Redistribution and use in source and binary forms, with or without
192650Ssaidi@eecs.umich.edu// modification, are permitted provided that the following conditions are
202650Ssaidi@eecs.umich.edu// met: redistributions of source code must retain the above copyright
212650Ssaidi@eecs.umich.edu// notice, this list of conditions and the following disclaimer;
222650Ssaidi@eecs.umich.edu// redistributions in binary form must reproduce the above copyright
232650Ssaidi@eecs.umich.edu// notice, this list of conditions and the following disclaimer in the
242650Ssaidi@eecs.umich.edu// documentation and/or other materials provided with the distribution;
252650Ssaidi@eecs.umich.edu// neither the name of the copyright holders nor the names of its
262650Ssaidi@eecs.umich.edu// contributors may be used to endorse or promote products derived from
272650Ssaidi@eecs.umich.edu// this software without specific prior written permission.
282650Ssaidi@eecs.umich.edu//
296335Sgblack@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
304194Ssaidi@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
316335Sgblack@eecs.umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
323817Ssaidi@eecs.umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
333817Ssaidi@eecs.umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
343817Ssaidi@eecs.umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
353817Ssaidi@eecs.umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
364194Ssaidi@eecs.umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
372650Ssaidi@eecs.umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
383817Ssaidi@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
395946Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
403817Ssaidi@eecs.umich.edu//
414103Ssaidi@eecs.umich.edu// Authors: Gabe Black
424103Ssaidi@eecs.umich.edu
436335Sgblack@eecs.umich.edu1: decode BIGTHUMB {
444103Ssaidi@eecs.umich.edu    // 16 bit thumb instructions.
455531Snate@binkert.org    0: decode TOPCODE_15_13 {
465531Snate@binkert.org        0x0, 0x1: decode TOPCODE_13_11 {
474103Ssaidi@eecs.umich.edu            0x0: WarnUnimpl::lsl(); //immediate
484103Ssaidi@eecs.umich.edu            0x1: WarnUnimpl::lsr(); //immediate
495704Snate@binkert.org            0x2: WarnUnimpl::asr(); //immediate
504103Ssaidi@eecs.umich.edu            0x3: decode TOPCODE_10_9 {
515704Snate@binkert.org                0x0: WarnUnimpl::add(); //register
524103Ssaidi@eecs.umich.edu                0x1: WarnUnimpl::sub(); //register
535704Snate@binkert.org                0x2: WarnUnimpl::add(); //3 bit immediate
544103Ssaidi@eecs.umich.edu                0x3: WarnUnimpl::sub(); //3 bit immediate
555704Snate@binkert.org            }
564103Ssaidi@eecs.umich.edu            0x4: WarnUnimpl::mov(); //immediate
574103Ssaidi@eecs.umich.edu            0x5: WarnUnimpl::cmp(); //immediate
584103Ssaidi@eecs.umich.edu            0x6: WarnUnimpl::add(); //8 bit immediate, thumb
594103Ssaidi@eecs.umich.edu            0x7: WarnUnimpl::sub(); //8 bit immediate, thumb
605704Snate@binkert.org        }
614103Ssaidi@eecs.umich.edu        0x2: decode TOPCODE_12_10 {
625704Snate@binkert.org            // Data processing
634103Ssaidi@eecs.umich.edu            0x0: decode TOPCODE_9_6 {
644103Ssaidi@eecs.umich.edu                0x0: WarnUnimpl::and(); //register
654103Ssaidi@eecs.umich.edu                0x1: WarnUnimpl::eor(); //register
665946Sgblack@eecs.umich.edu                0x2: WarnUnimpl::lsl(); //register
675946Sgblack@eecs.umich.edu                0x3: WarnUnimpl::lsr(); //register
685946Sgblack@eecs.umich.edu                0x4: WarnUnimpl::asr(); //register
695946Sgblack@eecs.umich.edu                0x5: WarnUnimpl::adc(); //register
705946Sgblack@eecs.umich.edu                0x6: WarnUnimpl::sbc(); //register
715946Sgblack@eecs.umich.edu                0x7: WarnUnimpl::ror(); //register
725946Sgblack@eecs.umich.edu                0x8: WarnUnimpl::tst(); //register
735946Sgblack@eecs.umich.edu                0x9: WarnUnimpl::rsb(); //immediate
745946Sgblack@eecs.umich.edu                0xa: WarnUnimpl::cmp(); //register (high registers)
755946Sgblack@eecs.umich.edu                0xb: WarnUnimpl::cmn(); //register
765946Sgblack@eecs.umich.edu                0xc: WarnUnimpl::orr(); //register
775946Sgblack@eecs.umich.edu                0xd: WarnUnimpl::mul();
785946Sgblack@eecs.umich.edu                0xe: WarnUnimpl::bic(); //register
795946Sgblack@eecs.umich.edu                0xf: WarnUnimpl::mvn(); //register
805946Sgblack@eecs.umich.edu            }
815946Sgblack@eecs.umich.edu            // Special data instructions and branch and exchange
825946Sgblack@eecs.umich.edu            0x1: decode TOPCODE_9_6 {
835946Sgblack@eecs.umich.edu                0x0: WarnUnimpl::add(); //register (low registers)
845946Sgblack@eecs.umich.edu                0x1, 0x2, 0x3: WarnUnimpl::add(); //register (high registers)
855946Sgblack@eecs.umich.edu                0x4: WarnUnimpl::unpredictable(); //?
864103Ssaidi@eecs.umich.edu                0x5, 0x6, 0x7: WarnUnimpl::cmp(); //register
873817Ssaidi@eecs.umich.edu                0x8: WarnUnimpl::mov(); //register (low registers)
886335Sgblack@eecs.umich.edu                0x9, 0xa, 0xb: WarnUnimpl::mov(); //register (high registers)
892650Ssaidi@eecs.umich.edu                0xc, 0xd: WarnUnimpl::bx();
905531Snate@binkert.org                0xe, 0xf: WarnUnimpl::blx(); //register
915531Snate@binkert.org            }
922650Ssaidi@eecs.umich.edu            0x2, 0x3: WarnUnimpl::ldr();
932650Ssaidi@eecs.umich.edu            default: decode TOPCODE_11_9 {
942982Sstever@eecs.umich.edu                0x0: WarnUnimpl::str(); //register
953919Shsul@eecs.umich.edu                0x1: WarnUnimpl::strh(); //register
966335Sgblack@eecs.umich.edu                0x2: WarnUnimpl::strb(); //register
974103Ssaidi@eecs.umich.edu                0x3: WarnUnimpl::ldrsb(); //register
983919Shsul@eecs.umich.edu                0x4: WarnUnimpl::ldr(); //register
993919Shsul@eecs.umich.edu                0x5: WarnUnimpl::ldrh(); //register
1006335Sgblack@eecs.umich.edu                0x6: WarnUnimpl::ldrb(); //register
1013919Shsul@eecs.umich.edu                0x7: WarnUnimpl::ldrsh(); //register
1026335Sgblack@eecs.umich.edu            }
1032650Ssaidi@eecs.umich.edu        }
1043919Shsul@eecs.umich.edu        0x3: decode TOPCODE_12_11 {
1053919Shsul@eecs.umich.edu            0x0: WarnUnimpl::str(); //immediate, thumb
1063919Shsul@eecs.umich.edu            0x1: WarnUnimpl::ldr(); //immediate, thumb
1076335Sgblack@eecs.umich.edu            0x2: WarnUnimpl::strb(); //immediate, thumb
1084103Ssaidi@eecs.umich.edu            0x3: WarnUnimpl::ldrb(); //immediate, thumb
1095606Snate@binkert.org        }
1103919Shsul@eecs.umich.edu        0x4: decode TOPCODE_12_11 {
1114103Ssaidi@eecs.umich.edu            0x0: WarnUnimpl::strh(); //immediate, thumb
1124103Ssaidi@eecs.umich.edu            0x1: WarnUnimpl::ldrh(); //immediate, thumb
1135606Snate@binkert.org            0x2: WarnUnimpl::str(); //immediate, thumb
1145606Snate@binkert.org            0x3: WarnUnimpl::ldr(); //immediate, thumb
1154103Ssaidi@eecs.umich.edu        }
1163919Shsul@eecs.umich.edu        0x5: decode TOPCODE_12_11 {
1173919Shsul@eecs.umich.edu            0x0: WarnUnimpl::adr();
1182650Ssaidi@eecs.umich.edu            0x1: WarnUnimpl::add(); //sp, immediate
1193919Shsul@eecs.umich.edu            0x2: decode TOPCODE_10_8 {
1203919Shsul@eecs.umich.edu                0x0: decode TOPCODE_7 {
1213919Shsul@eecs.umich.edu                    0x0: WarnUnimpl::add(); //sp, immediate
1226335Sgblack@eecs.umich.edu                    0x1: WarnUnimpl::sub(); //sp, immediate
1233919Shsul@eecs.umich.edu                }
1245606Snate@binkert.org                0x1, 0x3: WarnUnimpl::cbz(); //cbnz too...
1253919Shsul@eecs.umich.edu                0x2: decode TOPCODE_7_6 {
1265531Snate@binkert.org                    0x0: WarnUnimpl::sxth();
1274103Ssaidi@eecs.umich.edu                    0x1: WarnUnimpl::sxtb();
1284103Ssaidi@eecs.umich.edu                    0x2: WarnUnimpl::uxth();
1295606Snate@binkert.org                    0x3: WarnUnimpl::uxtb();
1305606Snate@binkert.org                }
1314103Ssaidi@eecs.umich.edu                0x4, 0x5: WarnUnimpl::pop();
1323919Shsul@eecs.umich.edu                0x6: decode TOPCODE_7_5 {
1333919Shsul@eecs.umich.edu                    0x2: WarnUnimpl::setend();
1342650Ssaidi@eecs.umich.edu                    0x3: WarnUnimpl::cps();
1353919Shsul@eecs.umich.edu                }
1366335Sgblack@eecs.umich.edu            }
1373827Shsul@eecs.umich.edu            0x3: decode TOPCODE_10_8 {
1383919Shsul@eecs.umich.edu                0x1, 0x3: WarnUnimpl::cbz(); //cbnz too...
1396335Sgblack@eecs.umich.edu                0x2: decode TOPCODE_7_6 {
1404103Ssaidi@eecs.umich.edu                    0x0: WarnUnimpl::rev();
1413919Shsul@eecs.umich.edu                    0x1: WarnUnimpl::rev16();
1422650Ssaidi@eecs.umich.edu                    0x3: WarnUnimpl::revsh();
1433919Shsul@eecs.umich.edu                }
1443919Shsul@eecs.umich.edu                0x4, 0x5: WarnUnimpl::pop();
1452650Ssaidi@eecs.umich.edu                0x6: WarnUnimpl::bkpt();
1463921Shsul@eecs.umich.edu                0x7: decode TOPCODE_3_0 {
1476335Sgblack@eecs.umich.edu                    0x0: WarnUnimpl::it();
1484103Ssaidi@eecs.umich.edu                    default: decode TOPCODE_7_4 {
1495704Snate@binkert.org                        0x0: WarnUnimpl::nop();
1504103Ssaidi@eecs.umich.edu                        0x1: WarnUnimpl::yield();
1515704Snate@binkert.org                        0x2: WarnUnimpl::wfe();
1524103Ssaidi@eecs.umich.edu                        0x3: WarnUnimpl::wfi();
1533921Shsul@eecs.umich.edu                        0x4: WarnUnimpl::sev();
1543919Shsul@eecs.umich.edu                        default: WarnUnimpl::unallocated_hint();
1553919Shsul@eecs.umich.edu                    }
1566335Sgblack@eecs.umich.edu                }
1573919Shsul@eecs.umich.edu            }
1582650Ssaidi@eecs.umich.edu        }
1593919Shsul@eecs.umich.edu        0x6: decode TOPCODE_12_11 {
1603919Shsul@eecs.umich.edu            0x0: WarnUnimpl::stm(); // also stmia, stmea
1616335Sgblack@eecs.umich.edu            0x1: WarnUnimpl::ldm(); // also ldmia, ldmea
1624103Ssaidi@eecs.umich.edu            default: decode TOPCODE_11_8 {
1635704Snate@binkert.org                0xe: WarnUnimpl::undefined(); // permanently undefined
1644103Ssaidi@eecs.umich.edu                0xf: WarnUnimpl::svc(); // formerly swi
1655704Snate@binkert.org                default: WarnUnimpl::b(); // conditional
1664103Ssaidi@eecs.umich.edu            }
1673919Shsul@eecs.umich.edu        }
1683919Shsul@eecs.umich.edu        0x7: decode TOPCODE_12_11 {
1696335Sgblack@eecs.umich.edu            0x0: WarnUnimpl::b(); // unconditional
1704103Ssaidi@eecs.umich.edu        }
1715704Snate@binkert.org    }
1724103Ssaidi@eecs.umich.edu    1: Unknown::unknown();
1735704Snate@binkert.org}
1744103Ssaidi@eecs.umich.edu