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