misc.isa revision 7241
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 1497241Sgblack@eecs.umich.edudef template RegRegRegRegOpDeclare {{ 1507241Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1517241Sgblack@eecs.umich.edu{ 1527241Sgblack@eecs.umich.edu protected: 1537241Sgblack@eecs.umich.edu public: 1547241Sgblack@eecs.umich.edu // Constructor 1557241Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1567241Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 1577241Sgblack@eecs.umich.edu IntRegIndex _op2, IntRegIndex _op3); 1587241Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1597241Sgblack@eecs.umich.edu}; 1607241Sgblack@eecs.umich.edu}}; 1617241Sgblack@eecs.umich.edu 1627241Sgblack@eecs.umich.edudef template RegRegRegRegOpConstructor {{ 1637241Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1647241Sgblack@eecs.umich.edu IntRegIndex _dest, 1657241Sgblack@eecs.umich.edu IntRegIndex _op1, 1667241Sgblack@eecs.umich.edu IntRegIndex _op2, 1677241Sgblack@eecs.umich.edu IntRegIndex _op3) 1687241Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 1697241Sgblack@eecs.umich.edu _dest, _op1, _op2, _op3) 1707241Sgblack@eecs.umich.edu { 1717241Sgblack@eecs.umich.edu %(constructor)s; 1727241Sgblack@eecs.umich.edu } 1737241Sgblack@eecs.umich.edu}}; 1747241Sgblack@eecs.umich.edu 1757238Sgblack@eecs.umich.edudef template RegRegRegOpDeclare {{ 1767238Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1777238Sgblack@eecs.umich.edu{ 1787238Sgblack@eecs.umich.edu protected: 1797238Sgblack@eecs.umich.edu public: 1807238Sgblack@eecs.umich.edu // Constructor 1817238Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1827238Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2); 1837238Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1847238Sgblack@eecs.umich.edu}; 1857238Sgblack@eecs.umich.edu}}; 1867238Sgblack@eecs.umich.edu 1877238Sgblack@eecs.umich.edudef template RegRegRegOpConstructor {{ 1887238Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1897238Sgblack@eecs.umich.edu IntRegIndex _dest, 1907238Sgblack@eecs.umich.edu IntRegIndex _op1, 1917238Sgblack@eecs.umich.edu IntRegIndex _op2) 1927238Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 1937238Sgblack@eecs.umich.edu _dest, _op1, _op2) 1947238Sgblack@eecs.umich.edu { 1957238Sgblack@eecs.umich.edu %(constructor)s; 1967238Sgblack@eecs.umich.edu } 1977238Sgblack@eecs.umich.edu}}; 1987238Sgblack@eecs.umich.edu 1997232Sgblack@eecs.umich.edudef template RegImmRegOpDeclare {{ 2007225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2017225Sgblack@eecs.umich.edu{ 2027225Sgblack@eecs.umich.edu protected: 2037225Sgblack@eecs.umich.edu public: 2047225Sgblack@eecs.umich.edu // Constructor 2057225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2067232Sgblack@eecs.umich.edu IntRegIndex _dest, uint32_t _imm, IntRegIndex _op1); 2077225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2087225Sgblack@eecs.umich.edu}; 2097225Sgblack@eecs.umich.edu}}; 2107225Sgblack@eecs.umich.edu 2117232Sgblack@eecs.umich.edudef template RegImmRegOpConstructor {{ 2127225Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2137225Sgblack@eecs.umich.edu IntRegIndex _dest, 2147232Sgblack@eecs.umich.edu uint32_t _imm, 2157225Sgblack@eecs.umich.edu IntRegIndex _op1) 2167225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2177232Sgblack@eecs.umich.edu _dest, _imm, _op1) 2187225Sgblack@eecs.umich.edu { 2197225Sgblack@eecs.umich.edu %(constructor)s; 2207225Sgblack@eecs.umich.edu } 2217225Sgblack@eecs.umich.edu}}; 2227225Sgblack@eecs.umich.edu 2237232Sgblack@eecs.umich.edudef template RegImmRegShiftOpDeclare {{ 2247225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2257225Sgblack@eecs.umich.edu{ 2267225Sgblack@eecs.umich.edu protected: 2277225Sgblack@eecs.umich.edu public: 2287225Sgblack@eecs.umich.edu // Constructor 2297225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2307232Sgblack@eecs.umich.edu IntRegIndex _dest, uint32_t _imm, IntRegIndex _op1, 2317225Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType); 2327225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2337225Sgblack@eecs.umich.edu}; 2347225Sgblack@eecs.umich.edu}}; 2357225Sgblack@eecs.umich.edu 2367232Sgblack@eecs.umich.edudef template RegImmRegShiftOpConstructor {{ 2377225Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2387225Sgblack@eecs.umich.edu IntRegIndex _dest, 2397232Sgblack@eecs.umich.edu uint32_t _imm, 2407225Sgblack@eecs.umich.edu IntRegIndex _op1, 2417225Sgblack@eecs.umich.edu int32_t _shiftAmt, 2427225Sgblack@eecs.umich.edu ArmShiftType _shiftType) 2437225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2447232Sgblack@eecs.umich.edu _dest, _imm, _op1, _shiftAmt, _shiftType) 2457225Sgblack@eecs.umich.edu { 2467225Sgblack@eecs.umich.edu %(constructor)s; 2477225Sgblack@eecs.umich.edu } 2487225Sgblack@eecs.umich.edu}}; 249