misc.isa revision 7330
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 1027306Sgblack@eecs.umich.edudef template ImmOpDeclare {{ 1037306Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1047306Sgblack@eecs.umich.edu{ 1057306Sgblack@eecs.umich.edu protected: 1067306Sgblack@eecs.umich.edu public: 1077306Sgblack@eecs.umich.edu // Constructor 1087330Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, uint64_t _imm); 1097306Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1107306Sgblack@eecs.umich.edu}; 1117306Sgblack@eecs.umich.edu}}; 1127306Sgblack@eecs.umich.edu 1137306Sgblack@eecs.umich.edudef template ImmOpConstructor {{ 1147330Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, uint64_t _imm) 1157306Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _imm) 1167306Sgblack@eecs.umich.edu { 1177306Sgblack@eecs.umich.edu %(constructor)s; 1187306Sgblack@eecs.umich.edu } 1197306Sgblack@eecs.umich.edu}}; 1207306Sgblack@eecs.umich.edu 1217261Sgblack@eecs.umich.edudef template RegRegOpDeclare {{ 1227208Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1237208Sgblack@eecs.umich.edu{ 1247208Sgblack@eecs.umich.edu protected: 1257208Sgblack@eecs.umich.edu public: 1267208Sgblack@eecs.umich.edu // Constructor 1277208Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1287208Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1); 1297208Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1307208Sgblack@eecs.umich.edu}; 1317208Sgblack@eecs.umich.edu}}; 1327208Sgblack@eecs.umich.edu 1337261Sgblack@eecs.umich.edudef template RegRegOpConstructor {{ 1347208Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1357208Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1) 1367208Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _op1) 1377208Sgblack@eecs.umich.edu { 1387208Sgblack@eecs.umich.edu %(constructor)s; 1397208Sgblack@eecs.umich.edu } 1407208Sgblack@eecs.umich.edu}}; 1417225Sgblack@eecs.umich.edu 1427233Sgblack@eecs.umich.edudef template RegRegRegImmOpDeclare {{ 1437233Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1447233Sgblack@eecs.umich.edu{ 1457233Sgblack@eecs.umich.edu protected: 1467233Sgblack@eecs.umich.edu public: 1477233Sgblack@eecs.umich.edu // Constructor 1487233Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1497233Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 1507330Sgblack@eecs.umich.edu uint64_t _imm); 1517233Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1527233Sgblack@eecs.umich.edu}; 1537233Sgblack@eecs.umich.edu}}; 1547233Sgblack@eecs.umich.edu 1557233Sgblack@eecs.umich.edudef template RegRegRegImmOpConstructor {{ 1567233Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1577233Sgblack@eecs.umich.edu IntRegIndex _dest, 1587233Sgblack@eecs.umich.edu IntRegIndex _op1, 1597233Sgblack@eecs.umich.edu IntRegIndex _op2, 1607330Sgblack@eecs.umich.edu uint64_t _imm) 1617233Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 1627233Sgblack@eecs.umich.edu _dest, _op1, _op2, _imm) 1637233Sgblack@eecs.umich.edu { 1647233Sgblack@eecs.umich.edu %(constructor)s; 1657233Sgblack@eecs.umich.edu } 1667233Sgblack@eecs.umich.edu}}; 1677233Sgblack@eecs.umich.edu 1687241Sgblack@eecs.umich.edudef template RegRegRegRegOpDeclare {{ 1697241Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1707241Sgblack@eecs.umich.edu{ 1717241Sgblack@eecs.umich.edu protected: 1727241Sgblack@eecs.umich.edu public: 1737241Sgblack@eecs.umich.edu // Constructor 1747241Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1757241Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 1767241Sgblack@eecs.umich.edu IntRegIndex _op2, IntRegIndex _op3); 1777241Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1787241Sgblack@eecs.umich.edu}; 1797241Sgblack@eecs.umich.edu}}; 1807241Sgblack@eecs.umich.edu 1817241Sgblack@eecs.umich.edudef template RegRegRegRegOpConstructor {{ 1827241Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1837241Sgblack@eecs.umich.edu IntRegIndex _dest, 1847241Sgblack@eecs.umich.edu IntRegIndex _op1, 1857241Sgblack@eecs.umich.edu IntRegIndex _op2, 1867241Sgblack@eecs.umich.edu IntRegIndex _op3) 1877241Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 1887241Sgblack@eecs.umich.edu _dest, _op1, _op2, _op3) 1897241Sgblack@eecs.umich.edu { 1907241Sgblack@eecs.umich.edu %(constructor)s; 1917241Sgblack@eecs.umich.edu } 1927241Sgblack@eecs.umich.edu}}; 1937241Sgblack@eecs.umich.edu 1947238Sgblack@eecs.umich.edudef template RegRegRegOpDeclare {{ 1957238Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1967238Sgblack@eecs.umich.edu{ 1977238Sgblack@eecs.umich.edu protected: 1987238Sgblack@eecs.umich.edu public: 1997238Sgblack@eecs.umich.edu // Constructor 2007238Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2017238Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2); 2027238Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2037238Sgblack@eecs.umich.edu}; 2047238Sgblack@eecs.umich.edu}}; 2057238Sgblack@eecs.umich.edu 2067238Sgblack@eecs.umich.edudef template RegRegRegOpConstructor {{ 2077238Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2087238Sgblack@eecs.umich.edu IntRegIndex _dest, 2097238Sgblack@eecs.umich.edu IntRegIndex _op1, 2107238Sgblack@eecs.umich.edu IntRegIndex _op2) 2117238Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2127238Sgblack@eecs.umich.edu _dest, _op1, _op2) 2137238Sgblack@eecs.umich.edu { 2147238Sgblack@eecs.umich.edu %(constructor)s; 2157238Sgblack@eecs.umich.edu } 2167238Sgblack@eecs.umich.edu}}; 2177238Sgblack@eecs.umich.edu 2187253Sgblack@eecs.umich.edudef template RegRegImmImmOpDeclare {{ 2197253Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2207253Sgblack@eecs.umich.edu{ 2217253Sgblack@eecs.umich.edu protected: 2227253Sgblack@eecs.umich.edu public: 2237253Sgblack@eecs.umich.edu // Constructor 2247253Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2257253Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2267330Sgblack@eecs.umich.edu uint64_t _imm1, uint64_t _imm2); 2277253Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2287253Sgblack@eecs.umich.edu}; 2297253Sgblack@eecs.umich.edu}}; 2307253Sgblack@eecs.umich.edu 2317253Sgblack@eecs.umich.edudef template RegRegImmImmOpConstructor {{ 2327253Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2337253Sgblack@eecs.umich.edu IntRegIndex _dest, 2347253Sgblack@eecs.umich.edu IntRegIndex _op1, 2357330Sgblack@eecs.umich.edu uint64_t _imm1, 2367330Sgblack@eecs.umich.edu uint64_t _imm2) 2377253Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2387253Sgblack@eecs.umich.edu _dest, _op1, _imm1, _imm2) 2397253Sgblack@eecs.umich.edu { 2407253Sgblack@eecs.umich.edu %(constructor)s; 2417253Sgblack@eecs.umich.edu } 2427253Sgblack@eecs.umich.edu}}; 2437253Sgblack@eecs.umich.edu 2447232Sgblack@eecs.umich.edudef template RegImmRegOpDeclare {{ 2457225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2467225Sgblack@eecs.umich.edu{ 2477225Sgblack@eecs.umich.edu protected: 2487225Sgblack@eecs.umich.edu public: 2497225Sgblack@eecs.umich.edu // Constructor 2507225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2517330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1); 2527225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2537225Sgblack@eecs.umich.edu}; 2547225Sgblack@eecs.umich.edu}}; 2557225Sgblack@eecs.umich.edu 2567232Sgblack@eecs.umich.edudef template RegImmRegOpConstructor {{ 2577225Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2587225Sgblack@eecs.umich.edu IntRegIndex _dest, 2597330Sgblack@eecs.umich.edu uint64_t _imm, 2607225Sgblack@eecs.umich.edu IntRegIndex _op1) 2617225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2627232Sgblack@eecs.umich.edu _dest, _imm, _op1) 2637225Sgblack@eecs.umich.edu { 2647225Sgblack@eecs.umich.edu %(constructor)s; 2657225Sgblack@eecs.umich.edu } 2667225Sgblack@eecs.umich.edu}}; 2677225Sgblack@eecs.umich.edu 2687232Sgblack@eecs.umich.edudef template RegImmRegShiftOpDeclare {{ 2697225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2707225Sgblack@eecs.umich.edu{ 2717225Sgblack@eecs.umich.edu protected: 2727225Sgblack@eecs.umich.edu public: 2737225Sgblack@eecs.umich.edu // Constructor 2747225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2757330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1, 2767225Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType); 2777225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2787225Sgblack@eecs.umich.edu}; 2797225Sgblack@eecs.umich.edu}}; 2807225Sgblack@eecs.umich.edu 2817232Sgblack@eecs.umich.edudef template RegImmRegShiftOpConstructor {{ 2827225Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2837225Sgblack@eecs.umich.edu IntRegIndex _dest, 2847330Sgblack@eecs.umich.edu uint64_t _imm, 2857225Sgblack@eecs.umich.edu IntRegIndex _op1, 2867225Sgblack@eecs.umich.edu int32_t _shiftAmt, 2877225Sgblack@eecs.umich.edu ArmShiftType _shiftType) 2887225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2897232Sgblack@eecs.umich.edu _dest, _imm, _op1, _shiftAmt, _shiftType) 2907225Sgblack@eecs.umich.edu { 2917225Sgblack@eecs.umich.edu %(constructor)s; 2927225Sgblack@eecs.umich.edu } 2937225Sgblack@eecs.umich.edu}}; 294