misc.isa revision 7331
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 2187331Sgblack@eecs.umich.edudef template RegRegImmOpDeclare {{ 2197331Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2207331Sgblack@eecs.umich.edu{ 2217331Sgblack@eecs.umich.edu protected: 2227331Sgblack@eecs.umich.edu public: 2237331Sgblack@eecs.umich.edu // Constructor 2247331Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2257331Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2267331Sgblack@eecs.umich.edu uint64_t _imm); 2277331Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2287331Sgblack@eecs.umich.edu}; 2297331Sgblack@eecs.umich.edu}}; 2307331Sgblack@eecs.umich.edu 2317331Sgblack@eecs.umich.edudef template RegRegImmOpConstructor {{ 2327331Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2337331Sgblack@eecs.umich.edu IntRegIndex _dest, 2347331Sgblack@eecs.umich.edu IntRegIndex _op1, 2357331Sgblack@eecs.umich.edu uint64_t _imm) 2367331Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2377331Sgblack@eecs.umich.edu _dest, _op1, _imm) 2387331Sgblack@eecs.umich.edu { 2397331Sgblack@eecs.umich.edu %(constructor)s; 2407331Sgblack@eecs.umich.edu } 2417331Sgblack@eecs.umich.edu}}; 2427331Sgblack@eecs.umich.edu 2437253Sgblack@eecs.umich.edudef template RegRegImmImmOpDeclare {{ 2447253Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2457253Sgblack@eecs.umich.edu{ 2467253Sgblack@eecs.umich.edu protected: 2477253Sgblack@eecs.umich.edu public: 2487253Sgblack@eecs.umich.edu // Constructor 2497253Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2507253Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2517330Sgblack@eecs.umich.edu uint64_t _imm1, uint64_t _imm2); 2527253Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2537253Sgblack@eecs.umich.edu}; 2547253Sgblack@eecs.umich.edu}}; 2557253Sgblack@eecs.umich.edu 2567253Sgblack@eecs.umich.edudef template RegRegImmImmOpConstructor {{ 2577253Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2587253Sgblack@eecs.umich.edu IntRegIndex _dest, 2597253Sgblack@eecs.umich.edu IntRegIndex _op1, 2607330Sgblack@eecs.umich.edu uint64_t _imm1, 2617330Sgblack@eecs.umich.edu uint64_t _imm2) 2627253Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2637253Sgblack@eecs.umich.edu _dest, _op1, _imm1, _imm2) 2647253Sgblack@eecs.umich.edu { 2657253Sgblack@eecs.umich.edu %(constructor)s; 2667253Sgblack@eecs.umich.edu } 2677253Sgblack@eecs.umich.edu}}; 2687253Sgblack@eecs.umich.edu 2697232Sgblack@eecs.umich.edudef template RegImmRegOpDeclare {{ 2707225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2717225Sgblack@eecs.umich.edu{ 2727225Sgblack@eecs.umich.edu protected: 2737225Sgblack@eecs.umich.edu public: 2747225Sgblack@eecs.umich.edu // Constructor 2757225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2767330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1); 2777225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2787225Sgblack@eecs.umich.edu}; 2797225Sgblack@eecs.umich.edu}}; 2807225Sgblack@eecs.umich.edu 2817232Sgblack@eecs.umich.edudef template RegImmRegOpConstructor {{ 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 : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2877232Sgblack@eecs.umich.edu _dest, _imm, _op1) 2887225Sgblack@eecs.umich.edu { 2897225Sgblack@eecs.umich.edu %(constructor)s; 2907225Sgblack@eecs.umich.edu } 2917225Sgblack@eecs.umich.edu}}; 2927225Sgblack@eecs.umich.edu 2937232Sgblack@eecs.umich.edudef template RegImmRegShiftOpDeclare {{ 2947225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2957225Sgblack@eecs.umich.edu{ 2967225Sgblack@eecs.umich.edu protected: 2977225Sgblack@eecs.umich.edu public: 2987225Sgblack@eecs.umich.edu // Constructor 2997225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 3007330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1, 3017225Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType); 3027225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 3037225Sgblack@eecs.umich.edu}; 3047225Sgblack@eecs.umich.edu}}; 3057225Sgblack@eecs.umich.edu 3067232Sgblack@eecs.umich.edudef template RegImmRegShiftOpConstructor {{ 3077225Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 3087225Sgblack@eecs.umich.edu IntRegIndex _dest, 3097330Sgblack@eecs.umich.edu uint64_t _imm, 3107225Sgblack@eecs.umich.edu IntRegIndex _op1, 3117225Sgblack@eecs.umich.edu int32_t _shiftAmt, 3127225Sgblack@eecs.umich.edu ArmShiftType _shiftType) 3137225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 3147232Sgblack@eecs.umich.edu _dest, _imm, _op1, _shiftAmt, _shiftType) 3157225Sgblack@eecs.umich.edu { 3167225Sgblack@eecs.umich.edu %(constructor)s; 3177225Sgblack@eecs.umich.edu } 3187225Sgblack@eecs.umich.edu}}; 319