misc.isa revision 7233:687fa9b9c2b5
15331Sgblack@eecs.umich.edu// -*- mode:c++ -*-
25331Sgblack@eecs.umich.edu
35331Sgblack@eecs.umich.edu// Copyright (c) 2010 ARM Limited
45331Sgblack@eecs.umich.edu// All rights reserved
55331Sgblack@eecs.umich.edu//
65331Sgblack@eecs.umich.edu// The license below extends only to copyright in the software and shall
75331Sgblack@eecs.umich.edu// not be construed as granting a license to any other intellectual
85331Sgblack@eecs.umich.edu// property including but not limited to intellectual property relating
95331Sgblack@eecs.umich.edu// to a hardware implementation of the functionality of the software
105331Sgblack@eecs.umich.edu// licensed hereunder.  You may use the software subject to the license
115331Sgblack@eecs.umich.edu// terms below provided that you ensure that this notice is replicated
125331Sgblack@eecs.umich.edu// unmodified and in its entirety in all distributions of the software,
135331Sgblack@eecs.umich.edu// modified or unmodified, in source code or in binary form.
145331Sgblack@eecs.umich.edu//
155331Sgblack@eecs.umich.edu// Redistribution and use in source and binary forms, with or without
165331Sgblack@eecs.umich.edu// modification, are permitted provided that the following conditions are
175331Sgblack@eecs.umich.edu// met: redistributions of source code must retain the above copyright
185331Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer;
195331Sgblack@eecs.umich.edu// redistributions in binary form must reproduce the above copyright
205331Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer in the
215331Sgblack@eecs.umich.edu// documentation and/or other materials provided with the distribution;
225331Sgblack@eecs.umich.edu// neither the name of the copyright holders nor the names of its
235331Sgblack@eecs.umich.edu// contributors may be used to endorse or promote products derived from
245331Sgblack@eecs.umich.edu// this software without specific prior written permission.
255331Sgblack@eecs.umich.edu//
265331Sgblack@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
275331Sgblack@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
285331Sgblack@eecs.umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
295331Sgblack@eecs.umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
304276Sgblack@eecs.umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
314276Sgblack@eecs.umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
324276Sgblack@eecs.umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
334276Sgblack@eecs.umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
344276Sgblack@eecs.umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
354276Sgblack@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
364276Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
374276Sgblack@eecs.umich.edu//
384276Sgblack@eecs.umich.edu// Authors: Gabe Black
394276Sgblack@eecs.umich.edu
404276Sgblack@eecs.umich.edudef template MrsDeclare {{
414276Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
424276Sgblack@eecs.umich.edu{
434276Sgblack@eecs.umich.edu  protected:
444276Sgblack@eecs.umich.edu    public:
454276Sgblack@eecs.umich.edu        // Constructor
464276Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, IntRegIndex _dest);
474276Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
484276Sgblack@eecs.umich.edu};
494276Sgblack@eecs.umich.edu}};
504276Sgblack@eecs.umich.edu
514276Sgblack@eecs.umich.edudef template MrsConstructor {{
524276Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
534276Sgblack@eecs.umich.edu                                          IntRegIndex _dest)
544276Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest)
554276Sgblack@eecs.umich.edu    {
564276Sgblack@eecs.umich.edu        %(constructor)s;
574276Sgblack@eecs.umich.edu    }
584276Sgblack@eecs.umich.edu}};
594276Sgblack@eecs.umich.edu
604276Sgblack@eecs.umich.edudef template MsrRegDeclare {{
614276Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
624276Sgblack@eecs.umich.edu{
634276Sgblack@eecs.umich.edu  protected:
644276Sgblack@eecs.umich.edu    public:
654276Sgblack@eecs.umich.edu        // Constructor
664276Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, IntRegIndex _op1, uint8_t mask);
674276Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
684276Sgblack@eecs.umich.edu};
694276Sgblack@eecs.umich.edu}};
704276Sgblack@eecs.umich.edu
714276Sgblack@eecs.umich.edudef template MsrRegConstructor {{
724276Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
734276Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
744276Sgblack@eecs.umich.edu                                          uint8_t mask)
754276Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1, mask)
764276Sgblack@eecs.umich.edu    {
774276Sgblack@eecs.umich.edu        %(constructor)s;
784276Sgblack@eecs.umich.edu    }
794276Sgblack@eecs.umich.edu}};
804276Sgblack@eecs.umich.edu
814276Sgblack@eecs.umich.edudef template MsrImmDeclare {{
824276Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
834276Sgblack@eecs.umich.edu{
844276Sgblack@eecs.umich.edu  protected:
854276Sgblack@eecs.umich.edu    public:
864276Sgblack@eecs.umich.edu        // Constructor
874276Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, uint32_t imm, uint8_t mask);
884276Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
894711Sgblack@eecs.umich.edu};
904276Sgblack@eecs.umich.edu}};
914276Sgblack@eecs.umich.edu
925238Sgblack@eecs.umich.edudef template MsrImmConstructor {{
935238Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
945238Sgblack@eecs.umich.edu                                          uint32_t imm,
955238Sgblack@eecs.umich.edu                                          uint8_t mask)
965937Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, imm, mask)
975902Sgblack@eecs.umich.edu    {
985238Sgblack@eecs.umich.edu        %(constructor)s;
995238Sgblack@eecs.umich.edu    }
1005238Sgblack@eecs.umich.edu}};
1015238Sgblack@eecs.umich.edu
1025238Sgblack@eecs.umich.edudef template RevOpDeclare {{
1035238Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1045238Sgblack@eecs.umich.edu{
1055238Sgblack@eecs.umich.edu  protected:
1065238Sgblack@eecs.umich.edu    public:
1075238Sgblack@eecs.umich.edu        // Constructor
1085238Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1095238Sgblack@eecs.umich.edu                       IntRegIndex _dest, IntRegIndex _op1);
1105238Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1115238Sgblack@eecs.umich.edu};
1125238Sgblack@eecs.umich.edu}};
1135238Sgblack@eecs.umich.edu
1145238Sgblack@eecs.umich.edudef template RevOpConstructor {{
1155238Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1165238Sgblack@eecs.umich.edu                                          IntRegIndex _dest, IntRegIndex _op1)
1175238Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _op1)
1185238Sgblack@eecs.umich.edu    {
1195238Sgblack@eecs.umich.edu        %(constructor)s;
1205238Sgblack@eecs.umich.edu    }
1215238Sgblack@eecs.umich.edu}};
1225238Sgblack@eecs.umich.edu
1235238Sgblack@eecs.umich.edudef template RegRegRegImmOpDeclare {{
1245238Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1255238Sgblack@eecs.umich.edu{
1265238Sgblack@eecs.umich.edu  protected:
1275238Sgblack@eecs.umich.edu    public:
1286055Sgblack@eecs.umich.edu        // Constructor
1296054Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1305238Sgblack@eecs.umich.edu                       IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2,
1315683Sgblack@eecs.umich.edu                       uint32_t _imm);
1325238Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1335238Sgblack@eecs.umich.edu};
1345238Sgblack@eecs.umich.edu}};
1355238Sgblack@eecs.umich.edu
1365238Sgblack@eecs.umich.edudef template RegRegRegImmOpConstructor {{
1375238Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1385238Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
1395238Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
1405291Sgblack@eecs.umich.edu                                          IntRegIndex _op2,
1415291Sgblack@eecs.umich.edu                                          uint32_t _imm)
1425291Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
1435291Sgblack@eecs.umich.edu                         _dest, _op1, _op2, _imm)
1445291Sgblack@eecs.umich.edu    {
1455291Sgblack@eecs.umich.edu        %(constructor)s;
1465291Sgblack@eecs.umich.edu    }
1475291Sgblack@eecs.umich.edu}};
1485291Sgblack@eecs.umich.edu
1495292Sgblack@eecs.umich.edudef template RegImmRegOpDeclare {{
1505292Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1515292Sgblack@eecs.umich.edu{
1525292Sgblack@eecs.umich.edu  protected:
1535292Sgblack@eecs.umich.edu    public:
1545292Sgblack@eecs.umich.edu        // Constructor
1555292Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1565292Sgblack@eecs.umich.edu                       IntRegIndex _dest, uint32_t _imm, IntRegIndex _op1);
1575292Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1586055Sgblack@eecs.umich.edu};
1596054Sgblack@eecs.umich.edu}};
1605359Sgblack@eecs.umich.edu
1615238Sgblack@eecs.umich.edudef template RegImmRegOpConstructor {{
1625238Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1635238Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
1644276Sgblack@eecs.umich.edu                                          uint32_t _imm,
1654276Sgblack@eecs.umich.edu                                          IntRegIndex _op1)
1665789Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
1675789Sgblack@eecs.umich.edu                         _dest, _imm, _op1)
1685789Sgblack@eecs.umich.edu    {
1695789Sgblack@eecs.umich.edu        %(constructor)s;
1705789Sgblack@eecs.umich.edu    }
1715789Sgblack@eecs.umich.edu}};
1725789Sgblack@eecs.umich.edu
1735789Sgblack@eecs.umich.edudef template RegImmRegShiftOpDeclare {{
1745789Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1755789Sgblack@eecs.umich.edu{
1765789Sgblack@eecs.umich.edu  protected:
1775789Sgblack@eecs.umich.edu    public:
1785789Sgblack@eecs.umich.edu        // Constructor
1795789Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1805789Sgblack@eecs.umich.edu                       IntRegIndex _dest, uint32_t _imm, IntRegIndex _op1,
1815789Sgblack@eecs.umich.edu                       int32_t _shiftAmt, ArmShiftType _shiftType);
1825789Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1835789Sgblack@eecs.umich.edu};
1845789Sgblack@eecs.umich.edu}};
1855789Sgblack@eecs.umich.edu
1865789Sgblack@eecs.umich.edudef template RegImmRegShiftOpConstructor {{
1875789Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1885789Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
1895789Sgblack@eecs.umich.edu                                          uint32_t _imm,
1905789Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
1915789Sgblack@eecs.umich.edu                                          int32_t _shiftAmt,
1925789Sgblack@eecs.umich.edu                                          ArmShiftType _shiftType)
1935789Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
1945789Sgblack@eecs.umich.edu                         _dest, _imm, _op1, _shiftAmt, _shiftType)
1955789Sgblack@eecs.umich.edu    {
1965789Sgblack@eecs.umich.edu        %(constructor)s;
1975789Sgblack@eecs.umich.edu    }
1985789Sgblack@eecs.umich.edu}};
1995789Sgblack@eecs.umich.edu