misc.isa revision 10184
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 18610037SARM gem5 Developers %(class_name)s(ExtMachInst machInst, IntRegIndex _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, 19410037SARM gem5 Developers IntRegIndex 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, 21710037SARM gem5 Developers IntRegIndex _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, 22610037SARM gem5 Developers IntRegIndex 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 43610037SARM gem5 Developersdef template RegImmImmOpDeclare {{ 43710037SARM gem5 Developersclass %(class_name)s : public %(base_class)s 43810037SARM gem5 Developers{ 43910037SARM gem5 Developers protected: 44010037SARM gem5 Developers public: 44110037SARM gem5 Developers // Constructor 44210037SARM gem5 Developers %(class_name)s(ExtMachInst machInst, 44310037SARM gem5 Developers IntRegIndex _dest, uint64_t _imm1, uint64_t _imm2); 44410037SARM gem5 Developers %(BasicExecDeclare)s 44510037SARM gem5 Developers}; 44610037SARM gem5 Developers}}; 44710037SARM gem5 Developers 44810037SARM gem5 Developersdef template RegImmImmOpConstructor {{ 44910184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 45010037SARM gem5 Developers IntRegIndex _dest, 45110037SARM gem5 Developers uint64_t _imm1, 45210037SARM gem5 Developers uint64_t _imm2) 45310037SARM gem5 Developers : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 45410037SARM gem5 Developers _dest, _imm1, _imm2) 45510037SARM gem5 Developers { 45610037SARM gem5 Developers %(constructor)s; 45710037SARM gem5 Developers if (!(condCode == COND_AL || condCode == COND_UC)) { 45810037SARM gem5 Developers for (int x = 0; x < _numDestRegs; x++) { 45910037SARM gem5 Developers _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 46010037SARM gem5 Developers } 46110037SARM gem5 Developers } 46210037SARM gem5 Developers } 46310037SARM gem5 Developers}}; 46410037SARM gem5 Developers 4657253Sgblack@eecs.umich.edudef template RegRegImmImmOpDeclare {{ 4667253Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 4677253Sgblack@eecs.umich.edu{ 4687253Sgblack@eecs.umich.edu protected: 4697253Sgblack@eecs.umich.edu public: 4707253Sgblack@eecs.umich.edu // Constructor 4717253Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 4727253Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 4737330Sgblack@eecs.umich.edu uint64_t _imm1, uint64_t _imm2); 4747253Sgblack@eecs.umich.edu %(BasicExecDeclare)s 4757253Sgblack@eecs.umich.edu}; 4767253Sgblack@eecs.umich.edu}}; 4777253Sgblack@eecs.umich.edu 4787253Sgblack@eecs.umich.edudef template RegRegImmImmOpConstructor {{ 47910184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 4807253Sgblack@eecs.umich.edu IntRegIndex _dest, 4817253Sgblack@eecs.umich.edu IntRegIndex _op1, 4827330Sgblack@eecs.umich.edu uint64_t _imm1, 4837330Sgblack@eecs.umich.edu uint64_t _imm2) 4847253Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 4857253Sgblack@eecs.umich.edu _dest, _op1, _imm1, _imm2) 4867253Sgblack@eecs.umich.edu { 4877253Sgblack@eecs.umich.edu %(constructor)s; 4887848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 4897848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 4907848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 4917848SAli.Saidi@ARM.com } 4927848SAli.Saidi@ARM.com } 4937253Sgblack@eecs.umich.edu } 4947253Sgblack@eecs.umich.edu}}; 4957253Sgblack@eecs.umich.edu 4967232Sgblack@eecs.umich.edudef template RegImmRegOpDeclare {{ 4977225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 4987225Sgblack@eecs.umich.edu{ 4997225Sgblack@eecs.umich.edu protected: 5007225Sgblack@eecs.umich.edu public: 5017225Sgblack@eecs.umich.edu // Constructor 5027225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 5037330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1); 5047225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 5057225Sgblack@eecs.umich.edu}; 5067225Sgblack@eecs.umich.edu}}; 5077225Sgblack@eecs.umich.edu 5087232Sgblack@eecs.umich.edudef template RegImmRegOpConstructor {{ 50910184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 5107225Sgblack@eecs.umich.edu IntRegIndex _dest, 5117330Sgblack@eecs.umich.edu uint64_t _imm, 5127225Sgblack@eecs.umich.edu IntRegIndex _op1) 5137225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 5147232Sgblack@eecs.umich.edu _dest, _imm, _op1) 5157225Sgblack@eecs.umich.edu { 5167225Sgblack@eecs.umich.edu %(constructor)s; 5177848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 5187848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 5197848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 5207848SAli.Saidi@ARM.com } 5217848SAli.Saidi@ARM.com } 5227225Sgblack@eecs.umich.edu } 5237225Sgblack@eecs.umich.edu}}; 5247225Sgblack@eecs.umich.edu 5257232Sgblack@eecs.umich.edudef template RegImmRegShiftOpDeclare {{ 5267225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 5277225Sgblack@eecs.umich.edu{ 5287225Sgblack@eecs.umich.edu protected: 5297225Sgblack@eecs.umich.edu public: 5307225Sgblack@eecs.umich.edu // Constructor 5317225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 5327330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1, 5337225Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType); 5347225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 5357225Sgblack@eecs.umich.edu}; 5367225Sgblack@eecs.umich.edu}}; 5377225Sgblack@eecs.umich.edu 5387232Sgblack@eecs.umich.edudef template RegImmRegShiftOpConstructor {{ 53910184SCurtis.Dunham@arm.com %(class_name)s::%(class_name)s(ExtMachInst machInst, 5407225Sgblack@eecs.umich.edu IntRegIndex _dest, 5417330Sgblack@eecs.umich.edu uint64_t _imm, 5427225Sgblack@eecs.umich.edu IntRegIndex _op1, 5437225Sgblack@eecs.umich.edu int32_t _shiftAmt, 5447225Sgblack@eecs.umich.edu ArmShiftType _shiftType) 5457225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 5467232Sgblack@eecs.umich.edu _dest, _imm, _op1, _shiftAmt, _shiftType) 5477225Sgblack@eecs.umich.edu { 5487225Sgblack@eecs.umich.edu %(constructor)s; 5497848SAli.Saidi@ARM.com if (!(condCode == COND_AL || condCode == COND_UC)) { 5507848SAli.Saidi@ARM.com for (int x = 0; x < _numDestRegs; x++) { 5517848SAli.Saidi@ARM.com _srcRegIdx[_numSrcRegs++] = _destRegIdx[x]; 5527848SAli.Saidi@ARM.com } 5537848SAli.Saidi@ARM.com } 5547225Sgblack@eecs.umich.edu } 5557225Sgblack@eecs.umich.edu}}; 5567609SGene.Wu@arm.com 557