misc.isa revision 10420
17202Sgblack@eecs.umich.edu// -*- mode:c++ -*- 27202Sgblack@eecs.umich.edu 310037SARM gem5 Developers// Copyright (c) 2010-2013 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 {{ 5210184SCurtis.Dunham@arm.com %(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; 577848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 587848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 597848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 607848SAli.Saidi@ARM.com } 617848SAli.Saidi@ARM.com } 627202Sgblack@eecs.umich.edu } 637202Sgblack@eecs.umich.edu}}; 647202Sgblack@eecs.umich.edu 6510037SARM gem5 Developersdef template MrsBankedRegDeclare {{ 6610037SARM gem5 Developersclass %(class_name)s : public %(base_class)s 6710037SARM gem5 Developers{ 6810037SARM gem5 Developers protected: 6910037SARM gem5 Developers uint8_t byteMask; 7010037SARM gem5 Developers bool r; 7110037SARM gem5 Developers 7210037SARM gem5 Developers public: 7310037SARM gem5 Developers // Constructor 7410037SARM gem5 Developers %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, 7510037SARM gem5 Developers uint8_t _sysM, bool _r); 7610037SARM gem5 Developers %(BasicExecDeclare)s 7710037SARM gem5 Developers}; 7810037SARM gem5 Developers}}; 7910037SARM gem5 Developers 8010037SARM gem5 Developersdef template MrsBankedRegConstructor {{ 8110184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 8210037SARM gem5 Developers IntRegIndex _dest, 8310037SARM gem5 Developers uint8_t _sysM, 8410037SARM gem5 Developers bool _r) 8510037SARM gem5 Developers : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest), 8610037SARM gem5 Developers byteMask(_sysM), r(_r) 8710037SARM gem5 Developers { 8810037SARM gem5 Developers %(constructor)s; 8910037SARM gem5 Developers if (!(condCode == COND_AL || condCode == COND_UC)) { 9010037SARM gem5 Developers for (int x = 0; x < _numDestRegs; x++) { 9110037SARM gem5 Developers _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 9210037SARM gem5 Developers } 9310037SARM gem5 Developers } 9410037SARM gem5 Developers } 9510037SARM gem5 Developers}}; 9610037SARM gem5 Developers 9710037SARM gem5 Developersdef template MsrBankedRegDeclare {{ 9810037SARM gem5 Developersclass %(class_name)s : public %(base_class)s 9910037SARM gem5 Developers{ 10010037SARM gem5 Developers protected: 10110037SARM gem5 Developers bool r; 10210037SARM gem5 Developers 10310037SARM gem5 Developers public: 10410037SARM gem5 Developers // Constructor 10510037SARM gem5 Developers %(class_name)s(ExtMachInst machInst, IntRegIndex _op1, 10610037SARM gem5 Developers uint8_t _sysM, bool _r); 10710037SARM gem5 Developers %(BasicExecDeclare)s 10810037SARM gem5 Developers}; 10910037SARM gem5 Developers}}; 11010037SARM gem5 Developers 11110037SARM gem5 Developersdef template MsrBankedRegConstructor {{ 11210184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 11310037SARM gem5 Developers IntRegIndex _op1, 11410037SARM gem5 Developers uint8_t _sysM, 11510037SARM gem5 Developers bool _r) 11610037SARM gem5 Developers : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1, _sysM), 11710037SARM gem5 Developers r(_r) 11810037SARM gem5 Developers { 11910037SARM gem5 Developers %(constructor)s; 12010037SARM gem5 Developers if (!(condCode == COND_AL || condCode == COND_UC)) { 12110037SARM gem5 Developers for (int x = 0; x < _numDestRegs; x++) { 12210037SARM gem5 Developers _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 12310037SARM gem5 Developers } 12410037SARM gem5 Developers } 12510037SARM gem5 Developers } 12610037SARM gem5 Developers}}; 12710037SARM gem5 Developers 1287202Sgblack@eecs.umich.edudef template MsrRegDeclare {{ 1297202Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1307202Sgblack@eecs.umich.edu{ 1317202Sgblack@eecs.umich.edu protected: 1327202Sgblack@eecs.umich.edu public: 1337202Sgblack@eecs.umich.edu // Constructor 1347202Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, IntRegIndex _op1, uint8_t mask); 1357202Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1367202Sgblack@eecs.umich.edu}; 1377202Sgblack@eecs.umich.edu}}; 1387202Sgblack@eecs.umich.edu 1397202Sgblack@eecs.umich.edudef template MsrRegConstructor {{ 14010184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 1417202Sgblack@eecs.umich.edu IntRegIndex _op1, 1427202Sgblack@eecs.umich.edu uint8_t mask) 1437202Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1, mask) 1447202Sgblack@eecs.umich.edu { 1457202Sgblack@eecs.umich.edu %(constructor)s; 1467848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 1477848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 1487848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 1497848SAli.Saidi@ARM.com } 1507848SAli.Saidi@ARM.com } 1517202Sgblack@eecs.umich.edu } 1527202Sgblack@eecs.umich.edu}}; 1537202Sgblack@eecs.umich.edu 1547202Sgblack@eecs.umich.edudef template MsrImmDeclare {{ 1557202Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1567202Sgblack@eecs.umich.edu{ 1577202Sgblack@eecs.umich.edu protected: 1587202Sgblack@eecs.umich.edu public: 1597202Sgblack@eecs.umich.edu // Constructor 1607202Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, uint32_t imm, uint8_t mask); 1617202Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1627202Sgblack@eecs.umich.edu}; 1637202Sgblack@eecs.umich.edu}}; 1647202Sgblack@eecs.umich.edu 1657202Sgblack@eecs.umich.edudef template MsrImmConstructor {{ 16610184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 1677202Sgblack@eecs.umich.edu uint32_t imm, 1687202Sgblack@eecs.umich.edu uint8_t mask) 1697202Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, imm, mask) 1707202Sgblack@eecs.umich.edu { 1717202Sgblack@eecs.umich.edu %(constructor)s; 1727848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 1737848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 1747848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 1757848SAli.Saidi@ARM.com } 1767848SAli.Saidi@ARM.com } 1777202Sgblack@eecs.umich.edu } 1787202Sgblack@eecs.umich.edu}}; 1797208Sgblack@eecs.umich.edu 18010037SARM gem5 Developersdef template MrrcOpDeclare {{ 18110037SARM gem5 Developersclass %(class_name)s : public %(base_class)s 18210037SARM gem5 Developers{ 18310037SARM gem5 Developers protected: 18410037SARM gem5 Developers public: 18510037SARM gem5 Developers // Constructor 18610420Sandreas.hansson@arm.com %(class_name)s(ExtMachInst machInst, MiscRegIndex _op1, 18710037SARM gem5 Developers IntRegIndex _dest, IntRegIndex _dest2, uint32_t imm); 18810037SARM gem5 Developers %(BasicExecDeclare)s 18910037SARM gem5 Developers}; 19010037SARM gem5 Developers}}; 19110037SARM gem5 Developers 19210037SARM gem5 Developersdef template MrrcOpConstructor {{ 19310184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 19410420Sandreas.hansson@arm.com MiscRegIndex op1, 19510037SARM gem5 Developers IntRegIndex dest, 19610037SARM gem5 Developers IntRegIndex dest2, 19710037SARM gem5 Developers uint32_t imm) 19810037SARM gem5 Developers : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, op1, dest, 19910037SARM gem5 Developers dest2, imm) 20010037SARM gem5 Developers { 20110037SARM gem5 Developers %(constructor)s; 20210037SARM gem5 Developers if (!(condCode == COND_AL || condCode == COND_UC)) { 20310037SARM gem5 Developers for (int x = 0; x < _numDestRegs; x++) { 20410037SARM gem5 Developers _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 20510037SARM gem5 Developers } 20610037SARM gem5 Developers } 20710037SARM gem5 Developers } 20810037SARM gem5 Developers}}; 20910037SARM gem5 Developers 21010037SARM gem5 Developersdef template McrrOpDeclare {{ 21110037SARM gem5 Developersclass %(class_name)s : public %(base_class)s 21210037SARM gem5 Developers{ 21310037SARM gem5 Developers protected: 21410037SARM gem5 Developers public: 21510037SARM gem5 Developers // Constructor 21610037SARM gem5 Developers %(class_name)s(ExtMachInst machInst, IntRegIndex _op1, IntRegIndex _op2, 21710420Sandreas.hansson@arm.com MiscRegIndex _dest, uint32_t imm); 21810037SARM gem5 Developers %(BasicExecDeclare)s 21910037SARM gem5 Developers}; 22010037SARM gem5 Developers}}; 22110037SARM gem5 Developers 22210037SARM gem5 Developersdef template McrrOpConstructor {{ 22310184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 22410037SARM gem5 Developers IntRegIndex op1, 22510037SARM gem5 Developers IntRegIndex op2, 22610420Sandreas.hansson@arm.com MiscRegIndex dest, 22710037SARM gem5 Developers uint32_t imm) 22810037SARM gem5 Developers : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, op1, op2, 22910037SARM gem5 Developers dest, imm) 23010037SARM gem5 Developers { 23110037SARM gem5 Developers %(constructor)s; 23210037SARM gem5 Developers if (!(condCode == COND_AL || condCode == COND_UC)) { 23310037SARM gem5 Developers for (int x = 0; x < _numDestRegs; x++) { 23410037SARM gem5 Developers _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 23510037SARM gem5 Developers } 23610037SARM gem5 Developers } 23710037SARM gem5 Developers } 23810037SARM gem5 Developers}}; 23910037SARM gem5 Developers 2407306Sgblack@eecs.umich.edudef template ImmOpDeclare {{ 2417306Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2427306Sgblack@eecs.umich.edu{ 2437306Sgblack@eecs.umich.edu protected: 2447306Sgblack@eecs.umich.edu public: 2457306Sgblack@eecs.umich.edu // Constructor 2467330Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, uint64_t _imm); 2477306Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2487306Sgblack@eecs.umich.edu}; 2497306Sgblack@eecs.umich.edu}}; 2507306Sgblack@eecs.umich.edu 2517306Sgblack@eecs.umich.edudef template ImmOpConstructor {{ 25210184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, uint64_t _imm) 2537306Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _imm) 2547306Sgblack@eecs.umich.edu { 2557306Sgblack@eecs.umich.edu %(constructor)s; 2567848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 2577848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 2587848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 2597848SAli.Saidi@ARM.com } 2607848SAli.Saidi@ARM.com } 2617306Sgblack@eecs.umich.edu } 2627306Sgblack@eecs.umich.edu}}; 2637306Sgblack@eecs.umich.edu 2647332Sgblack@eecs.umich.edudef template RegImmOpDeclare {{ 2657332Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2667332Sgblack@eecs.umich.edu{ 2677332Sgblack@eecs.umich.edu protected: 2687332Sgblack@eecs.umich.edu public: 2697332Sgblack@eecs.umich.edu // Constructor 2707332Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, uint64_t _imm); 2717332Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2727332Sgblack@eecs.umich.edu}; 2737332Sgblack@eecs.umich.edu}}; 2747332Sgblack@eecs.umich.edu 2757332Sgblack@eecs.umich.edudef template RegImmOpConstructor {{ 27610184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 2777332Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm) 2787332Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _imm) 2797332Sgblack@eecs.umich.edu { 2807332Sgblack@eecs.umich.edu %(constructor)s; 2817848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 2827848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 2837848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 2847848SAli.Saidi@ARM.com } 2857848SAli.Saidi@ARM.com } 2867332Sgblack@eecs.umich.edu } 2877332Sgblack@eecs.umich.edu}}; 2887332Sgblack@eecs.umich.edu 2897261Sgblack@eecs.umich.edudef template RegRegOpDeclare {{ 2907208Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2917208Sgblack@eecs.umich.edu{ 2927208Sgblack@eecs.umich.edu protected: 2937208Sgblack@eecs.umich.edu public: 2947208Sgblack@eecs.umich.edu // Constructor 2957208Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2967208Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1); 2977208Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2987208Sgblack@eecs.umich.edu}; 2997208Sgblack@eecs.umich.edu}}; 3007208Sgblack@eecs.umich.edu 3017261Sgblack@eecs.umich.edudef template RegRegOpConstructor {{ 30210184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 3037208Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1) 3047208Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _op1) 3057208Sgblack@eecs.umich.edu { 3067208Sgblack@eecs.umich.edu %(constructor)s; 3077848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 3087848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 3097848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 3107848SAli.Saidi@ARM.com } 3117848SAli.Saidi@ARM.com } 3127208Sgblack@eecs.umich.edu } 3137208Sgblack@eecs.umich.edu}}; 3147225Sgblack@eecs.umich.edu 3157233Sgblack@eecs.umich.edudef template RegRegRegImmOpDeclare {{ 3167233Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 3177233Sgblack@eecs.umich.edu{ 3187233Sgblack@eecs.umich.edu protected: 3197233Sgblack@eecs.umich.edu public: 3207233Sgblack@eecs.umich.edu // Constructor 3217233Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 3227233Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 3237330Sgblack@eecs.umich.edu uint64_t _imm); 3247233Sgblack@eecs.umich.edu %(BasicExecDeclare)s 3257233Sgblack@eecs.umich.edu}; 3267233Sgblack@eecs.umich.edu}}; 3277233Sgblack@eecs.umich.edu 3287233Sgblack@eecs.umich.edudef template RegRegRegImmOpConstructor {{ 32910184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 3307233Sgblack@eecs.umich.edu IntRegIndex _dest, 3317233Sgblack@eecs.umich.edu IntRegIndex _op1, 3327233Sgblack@eecs.umich.edu IntRegIndex _op2, 3337330Sgblack@eecs.umich.edu uint64_t _imm) 3347233Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 3357233Sgblack@eecs.umich.edu _dest, _op1, _op2, _imm) 3367233Sgblack@eecs.umich.edu { 3377233Sgblack@eecs.umich.edu %(constructor)s; 3387848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 3397848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 3407848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 3417848SAli.Saidi@ARM.com } 3427848SAli.Saidi@ARM.com } 3437233Sgblack@eecs.umich.edu } 3447233Sgblack@eecs.umich.edu}}; 3457233Sgblack@eecs.umich.edu 3467241Sgblack@eecs.umich.edudef template RegRegRegRegOpDeclare {{ 3477241Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 3487241Sgblack@eecs.umich.edu{ 3497241Sgblack@eecs.umich.edu protected: 3507241Sgblack@eecs.umich.edu public: 3517241Sgblack@eecs.umich.edu // Constructor 3527241Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 3537241Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 3547241Sgblack@eecs.umich.edu IntRegIndex _op2, IntRegIndex _op3); 3557241Sgblack@eecs.umich.edu %(BasicExecDeclare)s 3567241Sgblack@eecs.umich.edu}; 3577241Sgblack@eecs.umich.edu}}; 3587241Sgblack@eecs.umich.edu 3597241Sgblack@eecs.umich.edudef template RegRegRegRegOpConstructor {{ 36010184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 3617241Sgblack@eecs.umich.edu IntRegIndex _dest, 3627241Sgblack@eecs.umich.edu IntRegIndex _op1, 3637241Sgblack@eecs.umich.edu IntRegIndex _op2, 3647241Sgblack@eecs.umich.edu IntRegIndex _op3) 3657241Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 3667241Sgblack@eecs.umich.edu _dest, _op1, _op2, _op3) 3677241Sgblack@eecs.umich.edu { 3687241Sgblack@eecs.umich.edu %(constructor)s; 3697848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 3707848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 3717848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 3727848SAli.Saidi@ARM.com } 3737848SAli.Saidi@ARM.com } 3747241Sgblack@eecs.umich.edu } 3757241Sgblack@eecs.umich.edu}}; 3767241Sgblack@eecs.umich.edu 3777238Sgblack@eecs.umich.edudef template RegRegRegOpDeclare {{ 3787238Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 3797238Sgblack@eecs.umich.edu{ 3807238Sgblack@eecs.umich.edu protected: 3817238Sgblack@eecs.umich.edu public: 3827238Sgblack@eecs.umich.edu // Constructor 3837238Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 3847238Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2); 3857238Sgblack@eecs.umich.edu %(BasicExecDeclare)s 3867238Sgblack@eecs.umich.edu}; 3877238Sgblack@eecs.umich.edu}}; 3887238Sgblack@eecs.umich.edu 3897238Sgblack@eecs.umich.edudef template RegRegRegOpConstructor {{ 39010184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 3917238Sgblack@eecs.umich.edu IntRegIndex _dest, 3927238Sgblack@eecs.umich.edu IntRegIndex _op1, 3937238Sgblack@eecs.umich.edu IntRegIndex _op2) 3947238Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 3957238Sgblack@eecs.umich.edu _dest, _op1, _op2) 3967238Sgblack@eecs.umich.edu { 3977238Sgblack@eecs.umich.edu %(constructor)s; 3987848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 3997848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 4007848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 4017848SAli.Saidi@ARM.com } 4027848SAli.Saidi@ARM.com } 4037238Sgblack@eecs.umich.edu } 4047238Sgblack@eecs.umich.edu}}; 4057238Sgblack@eecs.umich.edu 4067331Sgblack@eecs.umich.edudef template RegRegImmOpDeclare {{ 4077331Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 4087331Sgblack@eecs.umich.edu{ 4097331Sgblack@eecs.umich.edu protected: 4107331Sgblack@eecs.umich.edu public: 4117331Sgblack@eecs.umich.edu // Constructor 4127331Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 4137331Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 4147331Sgblack@eecs.umich.edu uint64_t _imm); 4157331Sgblack@eecs.umich.edu %(BasicExecDeclare)s 4167331Sgblack@eecs.umich.edu}; 4177331Sgblack@eecs.umich.edu}}; 4187331Sgblack@eecs.umich.edu 4197331Sgblack@eecs.umich.edudef template RegRegImmOpConstructor {{ 42010184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 4217331Sgblack@eecs.umich.edu IntRegIndex _dest, 4227331Sgblack@eecs.umich.edu IntRegIndex _op1, 4237331Sgblack@eecs.umich.edu uint64_t _imm) 4247331Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 4257331Sgblack@eecs.umich.edu _dest, _op1, _imm) 4267331Sgblack@eecs.umich.edu { 4277331Sgblack@eecs.umich.edu %(constructor)s; 4287848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 4297848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 4307848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 4317848SAli.Saidi@ARM.com } 4327848SAli.Saidi@ARM.com } 4337331Sgblack@eecs.umich.edu } 4347331Sgblack@eecs.umich.edu}}; 4357331Sgblack@eecs.umich.edu 43610418Sandreas.hansson@arm.comdef template MiscRegRegImmOpDeclare {{ 43710418Sandreas.hansson@arm.comclass %(class_name)s : public %(base_class)s 43810418Sandreas.hansson@arm.com{ 43910418Sandreas.hansson@arm.com protected: 44010418Sandreas.hansson@arm.com public: 44110418Sandreas.hansson@arm.com // Constructor 44210418Sandreas.hansson@arm.com %(class_name)s(ExtMachInst machInst, 44310418Sandreas.hansson@arm.com MiscRegIndex _dest, IntRegIndex _op1, 44410418Sandreas.hansson@arm.com uint64_t _imm); 44510418Sandreas.hansson@arm.com %(BasicExecDeclare)s 44610418Sandreas.hansson@arm.com}; 44710418Sandreas.hansson@arm.com}}; 44810418Sandreas.hansson@arm.com 44910418Sandreas.hansson@arm.comdef template MiscRegRegImmOpConstructor {{ 45010418Sandreas.hansson@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 45110418Sandreas.hansson@arm.com MiscRegIndex _dest, 45210418Sandreas.hansson@arm.com IntRegIndex _op1, 45310418Sandreas.hansson@arm.com uint64_t _imm) 45410418Sandreas.hansson@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 45510418Sandreas.hansson@arm.com _dest, _op1, _imm) 45610418Sandreas.hansson@arm.com { 45710418Sandreas.hansson@arm.com %(constructor)s; 45810418Sandreas.hansson@arm.com if (!(condCode == COND_AL || condCode == COND_UC)) { 45910418Sandreas.hansson@arm.com for (int x = 0; x < _numDestRegs; x++) { 46010418Sandreas.hansson@arm.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 46110418Sandreas.hansson@arm.com } 46210418Sandreas.hansson@arm.com } 46310418Sandreas.hansson@arm.com } 46410418Sandreas.hansson@arm.com}}; 46510418Sandreas.hansson@arm.com 46610418Sandreas.hansson@arm.comdef template RegMiscRegImmOpDeclare {{ 46710418Sandreas.hansson@arm.comclass %(class_name)s : public %(base_class)s 46810418Sandreas.hansson@arm.com{ 46910418Sandreas.hansson@arm.com protected: 47010418Sandreas.hansson@arm.com public: 47110418Sandreas.hansson@arm.com // Constructor 47210418Sandreas.hansson@arm.com %(class_name)s(ExtMachInst machInst, 47310418Sandreas.hansson@arm.com IntRegIndex _dest, MiscRegIndex _op1, 47410418Sandreas.hansson@arm.com uint64_t _imm); 47510418Sandreas.hansson@arm.com %(BasicExecDeclare)s 47610418Sandreas.hansson@arm.com}; 47710418Sandreas.hansson@arm.com}}; 47810418Sandreas.hansson@arm.com 47910418Sandreas.hansson@arm.comdef template RegMiscRegImmOpConstructor {{ 48010418Sandreas.hansson@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 48110418Sandreas.hansson@arm.com IntRegIndex _dest, 48210418Sandreas.hansson@arm.com MiscRegIndex _op1, 48310418Sandreas.hansson@arm.com uint64_t _imm) 48410418Sandreas.hansson@arm.com : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 48510418Sandreas.hansson@arm.com _dest, _op1, _imm) 48610418Sandreas.hansson@arm.com { 48710418Sandreas.hansson@arm.com %(constructor)s; 48810418Sandreas.hansson@arm.com if (!(condCode == COND_AL || condCode == COND_UC)) { 48910418Sandreas.hansson@arm.com for (int x = 0; x < _numDestRegs; x++) { 49010418Sandreas.hansson@arm.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 49110418Sandreas.hansson@arm.com } 49210418Sandreas.hansson@arm.com } 49310418Sandreas.hansson@arm.com } 49410418Sandreas.hansson@arm.com}}; 49510418Sandreas.hansson@arm.com 49610037SARM gem5 Developersdef template RegImmImmOpDeclare {{ 49710037SARM gem5 Developersclass %(class_name)s : public %(base_class)s 49810037SARM gem5 Developers{ 49910037SARM gem5 Developers protected: 50010037SARM gem5 Developers public: 50110037SARM gem5 Developers // Constructor 50210037SARM gem5 Developers %(class_name)s(ExtMachInst machInst, 50310037SARM gem5 Developers IntRegIndex _dest, uint64_t _imm1, uint64_t _imm2); 50410037SARM gem5 Developers %(BasicExecDeclare)s 50510037SARM gem5 Developers}; 50610037SARM gem5 Developers}}; 50710037SARM gem5 Developers 50810037SARM gem5 Developersdef template RegImmImmOpConstructor {{ 50910184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 51010037SARM gem5 Developers IntRegIndex _dest, 51110037SARM gem5 Developers uint64_t _imm1, 51210037SARM gem5 Developers uint64_t _imm2) 51310037SARM gem5 Developers : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 51410037SARM gem5 Developers _dest, _imm1, _imm2) 51510037SARM gem5 Developers { 51610037SARM gem5 Developers %(constructor)s; 51710037SARM gem5 Developers if (!(condCode == COND_AL || condCode == COND_UC)) { 51810037SARM gem5 Developers for (int x = 0; x < _numDestRegs; x++) { 51910037SARM gem5 Developers _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 52010037SARM gem5 Developers } 52110037SARM gem5 Developers } 52210037SARM gem5 Developers } 52310037SARM gem5 Developers}}; 52410037SARM gem5 Developers 5257253Sgblack@eecs.umich.edudef template RegRegImmImmOpDeclare {{ 5267253Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 5277253Sgblack@eecs.umich.edu{ 5287253Sgblack@eecs.umich.edu protected: 5297253Sgblack@eecs.umich.edu public: 5307253Sgblack@eecs.umich.edu // Constructor 5317253Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 5327253Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 5337330Sgblack@eecs.umich.edu uint64_t _imm1, uint64_t _imm2); 5347253Sgblack@eecs.umich.edu %(BasicExecDeclare)s 5357253Sgblack@eecs.umich.edu}; 5367253Sgblack@eecs.umich.edu}}; 5377253Sgblack@eecs.umich.edu 5387253Sgblack@eecs.umich.edudef template RegRegImmImmOpConstructor {{ 53910184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 5407253Sgblack@eecs.umich.edu IntRegIndex _dest, 5417253Sgblack@eecs.umich.edu IntRegIndex _op1, 5427330Sgblack@eecs.umich.edu uint64_t _imm1, 5437330Sgblack@eecs.umich.edu uint64_t _imm2) 5447253Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 5457253Sgblack@eecs.umich.edu _dest, _op1, _imm1, _imm2) 5467253Sgblack@eecs.umich.edu { 5477253Sgblack@eecs.umich.edu %(constructor)s; 5487848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 5497848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 5507848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 5517848SAli.Saidi@ARM.com } 5527848SAli.Saidi@ARM.com } 5537253Sgblack@eecs.umich.edu } 5547253Sgblack@eecs.umich.edu}}; 5557253Sgblack@eecs.umich.edu 5567232Sgblack@eecs.umich.edudef template RegImmRegOpDeclare {{ 5577225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 5587225Sgblack@eecs.umich.edu{ 5597225Sgblack@eecs.umich.edu protected: 5607225Sgblack@eecs.umich.edu public: 5617225Sgblack@eecs.umich.edu // Constructor 5627225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 5637330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1); 5647225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 5657225Sgblack@eecs.umich.edu}; 5667225Sgblack@eecs.umich.edu}}; 5677225Sgblack@eecs.umich.edu 5687232Sgblack@eecs.umich.edudef template RegImmRegOpConstructor {{ 56910184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 5707225Sgblack@eecs.umich.edu IntRegIndex _dest, 5717330Sgblack@eecs.umich.edu uint64_t _imm, 5727225Sgblack@eecs.umich.edu IntRegIndex _op1) 5737225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 5747232Sgblack@eecs.umich.edu _dest, _imm, _op1) 5757225Sgblack@eecs.umich.edu { 5767225Sgblack@eecs.umich.edu %(constructor)s; 5777848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 5787848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 5797848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 5807848SAli.Saidi@ARM.com } 5817848SAli.Saidi@ARM.com } 5827225Sgblack@eecs.umich.edu } 5837225Sgblack@eecs.umich.edu}}; 5847225Sgblack@eecs.umich.edu 5857232Sgblack@eecs.umich.edudef template RegImmRegShiftOpDeclare {{ 5867225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 5877225Sgblack@eecs.umich.edu{ 5887225Sgblack@eecs.umich.edu protected: 5897225Sgblack@eecs.umich.edu public: 5907225Sgblack@eecs.umich.edu // Constructor 5917225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 5927330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1, 5937225Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType); 5947225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 5957225Sgblack@eecs.umich.edu}; 5967225Sgblack@eecs.umich.edu}}; 5977225Sgblack@eecs.umich.edu 5987232Sgblack@eecs.umich.edudef template RegImmRegShiftOpConstructor {{ 59910184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 6007225Sgblack@eecs.umich.edu IntRegIndex _dest, 6017330Sgblack@eecs.umich.edu uint64_t _imm, 6027225Sgblack@eecs.umich.edu IntRegIndex _op1, 6037225Sgblack@eecs.umich.edu int32_t _shiftAmt, 6047225Sgblack@eecs.umich.edu ArmShiftType _shiftType) 6057225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 6067232Sgblack@eecs.umich.edu _dest, _imm, _op1, _shiftAmt, _shiftType) 6077225Sgblack@eecs.umich.edu { 6087225Sgblack@eecs.umich.edu %(constructor)s; 6097848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 6107848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 6117848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 6127848SAli.Saidi@ARM.com } 6137848SAli.Saidi@ARM.com } 6147225Sgblack@eecs.umich.edu } 6157225Sgblack@eecs.umich.edu}}; 6167609SGene.Wu@arm.com 617