misc.isa revision 10037
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 {{
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;
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 {{
8110037SARM gem5 Developers    inline %(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 {{
11210037SARM gem5 Developers    inline %(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 {{
1407202Sgblack@eecs.umich.edu    inline %(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 {{
1667202Sgblack@eecs.umich.edu    inline %(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 {{
19310037SARM gem5 Developers    inline %(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 {{
22310037SARM gem5 Developers    inline %(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 {{
2527330Sgblack@eecs.umich.edu    inline %(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 {{
2767332Sgblack@eecs.umich.edu    inline %(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 {{
3027208Sgblack@eecs.umich.edu    inline %(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 {{
3297233Sgblack@eecs.umich.edu    inline %(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 {{
3607241Sgblack@eecs.umich.edu    inline %(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 {{
3907238Sgblack@eecs.umich.edu    inline %(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 {{
4207331Sgblack@eecs.umich.edu    inline %(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 {{
44910037SARM gem5 Developers    inline %(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 {{
4797253Sgblack@eecs.umich.edu    inline %(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 {{
5097225Sgblack@eecs.umich.edu    inline %(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 {{
5397225Sgblack@eecs.umich.edu    inline %(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