misc.isa revision 7238
17202Sgblack@eecs.umich.edu// -*- mode:c++ -*- 27202Sgblack@eecs.umich.edu 37202Sgblack@eecs.umich.edu// Copyright (c) 2010 ARM Limited 47202Sgblack@eecs.umich.edu// All rights reserved 57202Sgblack@eecs.umich.edu// 67202Sgblack@eecs.umich.edu// The license below extends only to copyright in the software and shall 77202Sgblack@eecs.umich.edu// not be construed as granting a license to any other intellectual 87202Sgblack@eecs.umich.edu// property including but not limited to intellectual property relating 97202Sgblack@eecs.umich.edu// to a hardware implementation of the functionality of the software 107202Sgblack@eecs.umich.edu// licensed hereunder. You may use the software subject to the license 117202Sgblack@eecs.umich.edu// terms below provided that you ensure that this notice is replicated 127202Sgblack@eecs.umich.edu// unmodified and in its entirety in all distributions of the software, 137202Sgblack@eecs.umich.edu// modified or unmodified, in source code or in binary form. 147202Sgblack@eecs.umich.edu// 157202Sgblack@eecs.umich.edu// Redistribution and use in source and binary forms, with or without 167202Sgblack@eecs.umich.edu// modification, are permitted provided that the following conditions are 177202Sgblack@eecs.umich.edu// met: redistributions of source code must retain the above copyright 187202Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer; 197202Sgblack@eecs.umich.edu// redistributions in binary form must reproduce the above copyright 207202Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer in the 217202Sgblack@eecs.umich.edu// documentation and/or other materials provided with the distribution; 227202Sgblack@eecs.umich.edu// neither the name of the copyright holders nor the names of its 237202Sgblack@eecs.umich.edu// contributors may be used to endorse or promote products derived from 247202Sgblack@eecs.umich.edu// this software without specific prior written permission. 257202Sgblack@eecs.umich.edu// 267202Sgblack@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 277202Sgblack@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 287202Sgblack@eecs.umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 297202Sgblack@eecs.umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 307202Sgblack@eecs.umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 317202Sgblack@eecs.umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 327202Sgblack@eecs.umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 337202Sgblack@eecs.umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 347202Sgblack@eecs.umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 357202Sgblack@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 367202Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 377202Sgblack@eecs.umich.edu// 387202Sgblack@eecs.umich.edu// Authors: Gabe Black 397202Sgblack@eecs.umich.edu 407202Sgblack@eecs.umich.edudef template MrsDeclare {{ 417202Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 427202Sgblack@eecs.umich.edu{ 437202Sgblack@eecs.umich.edu protected: 447202Sgblack@eecs.umich.edu public: 457202Sgblack@eecs.umich.edu // Constructor 467202Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, IntRegIndex _dest); 477202Sgblack@eecs.umich.edu %(BasicExecDeclare)s 487202Sgblack@eecs.umich.edu}; 497202Sgblack@eecs.umich.edu}}; 507202Sgblack@eecs.umich.edu 517202Sgblack@eecs.umich.edudef template MrsConstructor {{ 527202Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 537202Sgblack@eecs.umich.edu IntRegIndex _dest) 547202Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest) 557202Sgblack@eecs.umich.edu { 567202Sgblack@eecs.umich.edu %(constructor)s; 577202Sgblack@eecs.umich.edu } 587202Sgblack@eecs.umich.edu}}; 597202Sgblack@eecs.umich.edu 607202Sgblack@eecs.umich.edudef template MsrRegDeclare {{ 617202Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 627202Sgblack@eecs.umich.edu{ 637202Sgblack@eecs.umich.edu protected: 647202Sgblack@eecs.umich.edu public: 657202Sgblack@eecs.umich.edu // Constructor 667202Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, IntRegIndex _op1, uint8_t mask); 677202Sgblack@eecs.umich.edu %(BasicExecDeclare)s 687202Sgblack@eecs.umich.edu}; 697202Sgblack@eecs.umich.edu}}; 707202Sgblack@eecs.umich.edu 717202Sgblack@eecs.umich.edudef template MsrRegConstructor {{ 727202Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 737202Sgblack@eecs.umich.edu IntRegIndex _op1, 747202Sgblack@eecs.umich.edu uint8_t mask) 757202Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1, mask) 767202Sgblack@eecs.umich.edu { 777202Sgblack@eecs.umich.edu %(constructor)s; 787202Sgblack@eecs.umich.edu } 797202Sgblack@eecs.umich.edu}}; 807202Sgblack@eecs.umich.edu 817202Sgblack@eecs.umich.edudef template MsrImmDeclare {{ 827202Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 837202Sgblack@eecs.umich.edu{ 847202Sgblack@eecs.umich.edu protected: 857202Sgblack@eecs.umich.edu public: 867202Sgblack@eecs.umich.edu // Constructor 877202Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, uint32_t imm, uint8_t mask); 887202Sgblack@eecs.umich.edu %(BasicExecDeclare)s 897202Sgblack@eecs.umich.edu}; 907202Sgblack@eecs.umich.edu}}; 917202Sgblack@eecs.umich.edu 927202Sgblack@eecs.umich.edudef template MsrImmConstructor {{ 937202Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 947202Sgblack@eecs.umich.edu uint32_t imm, 957202Sgblack@eecs.umich.edu uint8_t mask) 967202Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, imm, mask) 977202Sgblack@eecs.umich.edu { 987202Sgblack@eecs.umich.edu %(constructor)s; 997202Sgblack@eecs.umich.edu } 1007202Sgblack@eecs.umich.edu}}; 1017208Sgblack@eecs.umich.edu 1027208Sgblack@eecs.umich.edudef template RevOpDeclare {{ 1037208Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1047208Sgblack@eecs.umich.edu{ 1057208Sgblack@eecs.umich.edu protected: 1067208Sgblack@eecs.umich.edu public: 1077208Sgblack@eecs.umich.edu // Constructor 1087208Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1097208Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1); 1107208Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1117208Sgblack@eecs.umich.edu}; 1127208Sgblack@eecs.umich.edu}}; 1137208Sgblack@eecs.umich.edu 1147208Sgblack@eecs.umich.edudef template RevOpConstructor {{ 1157208Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1167208Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1) 1177208Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _op1) 1187208Sgblack@eecs.umich.edu { 1197208Sgblack@eecs.umich.edu %(constructor)s; 1207208Sgblack@eecs.umich.edu } 1217208Sgblack@eecs.umich.edu}}; 1227225Sgblack@eecs.umich.edu 1237233Sgblack@eecs.umich.edudef template RegRegRegImmOpDeclare {{ 1247233Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1257233Sgblack@eecs.umich.edu{ 1267233Sgblack@eecs.umich.edu protected: 1277233Sgblack@eecs.umich.edu public: 1287233Sgblack@eecs.umich.edu // Constructor 1297233Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1307233Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 1317233Sgblack@eecs.umich.edu uint32_t _imm); 1327233Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1337233Sgblack@eecs.umich.edu}; 1347233Sgblack@eecs.umich.edu}}; 1357233Sgblack@eecs.umich.edu 1367233Sgblack@eecs.umich.edudef template RegRegRegImmOpConstructor {{ 1377233Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1387233Sgblack@eecs.umich.edu IntRegIndex _dest, 1397233Sgblack@eecs.umich.edu IntRegIndex _op1, 1407233Sgblack@eecs.umich.edu IntRegIndex _op2, 1417233Sgblack@eecs.umich.edu uint32_t _imm) 1427233Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 1437233Sgblack@eecs.umich.edu _dest, _op1, _op2, _imm) 1447233Sgblack@eecs.umich.edu { 1457233Sgblack@eecs.umich.edu %(constructor)s; 1467233Sgblack@eecs.umich.edu } 1477233Sgblack@eecs.umich.edu}}; 1487233Sgblack@eecs.umich.edu 1497238Sgblack@eecs.umich.edudef template RegRegRegOpDeclare {{ 1507238Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1517238Sgblack@eecs.umich.edu{ 1527238Sgblack@eecs.umich.edu protected: 1537238Sgblack@eecs.umich.edu public: 1547238Sgblack@eecs.umich.edu // Constructor 1557238Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1567238Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2); 1577238Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1587238Sgblack@eecs.umich.edu}; 1597238Sgblack@eecs.umich.edu}}; 1607238Sgblack@eecs.umich.edu 1617238Sgblack@eecs.umich.edudef template RegRegRegOpConstructor {{ 1627238Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1637238Sgblack@eecs.umich.edu IntRegIndex _dest, 1647238Sgblack@eecs.umich.edu IntRegIndex _op1, 1657238Sgblack@eecs.umich.edu IntRegIndex _op2) 1667238Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 1677238Sgblack@eecs.umich.edu _dest, _op1, _op2) 1687238Sgblack@eecs.umich.edu { 1697238Sgblack@eecs.umich.edu %(constructor)s; 1707238Sgblack@eecs.umich.edu } 1717238Sgblack@eecs.umich.edu}}; 1727238Sgblack@eecs.umich.edu 1737232Sgblack@eecs.umich.edudef template RegImmRegOpDeclare {{ 1747225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1757225Sgblack@eecs.umich.edu{ 1767225Sgblack@eecs.umich.edu protected: 1777225Sgblack@eecs.umich.edu public: 1787225Sgblack@eecs.umich.edu // Constructor 1797225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1807232Sgblack@eecs.umich.edu IntRegIndex _dest, uint32_t _imm, IntRegIndex _op1); 1817225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1827225Sgblack@eecs.umich.edu}; 1837225Sgblack@eecs.umich.edu}}; 1847225Sgblack@eecs.umich.edu 1857232Sgblack@eecs.umich.edudef template RegImmRegOpConstructor {{ 1867225Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1877225Sgblack@eecs.umich.edu IntRegIndex _dest, 1887232Sgblack@eecs.umich.edu uint32_t _imm, 1897225Sgblack@eecs.umich.edu IntRegIndex _op1) 1907225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 1917232Sgblack@eecs.umich.edu _dest, _imm, _op1) 1927225Sgblack@eecs.umich.edu { 1937225Sgblack@eecs.umich.edu %(constructor)s; 1947225Sgblack@eecs.umich.edu } 1957225Sgblack@eecs.umich.edu}}; 1967225Sgblack@eecs.umich.edu 1977232Sgblack@eecs.umich.edudef template RegImmRegShiftOpDeclare {{ 1987225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1997225Sgblack@eecs.umich.edu{ 2007225Sgblack@eecs.umich.edu protected: 2017225Sgblack@eecs.umich.edu public: 2027225Sgblack@eecs.umich.edu // Constructor 2037225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2047232Sgblack@eecs.umich.edu IntRegIndex _dest, uint32_t _imm, IntRegIndex _op1, 2057225Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType); 2067225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2077225Sgblack@eecs.umich.edu}; 2087225Sgblack@eecs.umich.edu}}; 2097225Sgblack@eecs.umich.edu 2107232Sgblack@eecs.umich.edudef template RegImmRegShiftOpConstructor {{ 2117225Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2127225Sgblack@eecs.umich.edu IntRegIndex _dest, 2137232Sgblack@eecs.umich.edu uint32_t _imm, 2147225Sgblack@eecs.umich.edu IntRegIndex _op1, 2157225Sgblack@eecs.umich.edu int32_t _shiftAmt, 2167225Sgblack@eecs.umich.edu ArmShiftType _shiftType) 2177225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2187232Sgblack@eecs.umich.edu _dest, _imm, _op1, _shiftAmt, _shiftType) 2197225Sgblack@eecs.umich.edu { 2207225Sgblack@eecs.umich.edu %(constructor)s; 2217225Sgblack@eecs.umich.edu } 2227225Sgblack@eecs.umich.edu}}; 223