110037SARM gem5 Developers// -*- mode:c++ -*-
210037SARM gem5 Developers
310037SARM gem5 Developers// Copyright (c) 2011 ARM Limited
410037SARM gem5 Developers// All rights reserved
510037SARM gem5 Developers//
610037SARM gem5 Developers// The license below extends only to copyright in the software and shall
710037SARM gem5 Developers// not be construed as granting a license to any other intellectual
810037SARM gem5 Developers// property including but not limited to intellectual property relating
910037SARM gem5 Developers// to a hardware implementation of the functionality of the software
1010037SARM gem5 Developers// licensed hereunder.  You may use the software subject to the license
1110037SARM gem5 Developers// terms below provided that you ensure that this notice is replicated
1210037SARM gem5 Developers// unmodified and in its entirety in all distributions of the software,
1310037SARM gem5 Developers// modified or unmodified, in source code or in binary form.
1410037SARM gem5 Developers//
1510037SARM gem5 Developers// Redistribution and use in source and binary forms, with or without
1610037SARM gem5 Developers// modification, are permitted provided that the following conditions are
1710037SARM gem5 Developers// met: redistributions of source code must retain the above copyright
1810037SARM gem5 Developers// notice, this list of conditions and the following disclaimer;
1910037SARM gem5 Developers// redistributions in binary form must reproduce the above copyright
2010037SARM gem5 Developers// notice, this list of conditions and the following disclaimer in the
2110037SARM gem5 Developers// documentation and/or other materials provided with the distribution;
2210037SARM gem5 Developers// neither the name of the copyright holders nor the names of its
2310037SARM gem5 Developers// contributors may be used to endorse or promote products derived from
2410037SARM gem5 Developers// this software without specific prior written permission.
2510037SARM gem5 Developers//
2610037SARM gem5 Developers// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2710037SARM gem5 Developers// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2810037SARM gem5 Developers// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2910037SARM gem5 Developers// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3010037SARM gem5 Developers// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3110037SARM gem5 Developers// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3210037SARM gem5 Developers// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3310037SARM gem5 Developers// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3410037SARM gem5 Developers// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3510037SARM gem5 Developers// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3610037SARM gem5 Developers// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3710037SARM gem5 Developers//
3810037SARM gem5 Developers// Authors: Gabe Black
3910037SARM gem5 Developers
4010037SARM gem5 Developersdef template DataXImmDeclare {{
4110037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
4210037SARM gem5 Developers{
4310037SARM gem5 Developers    public:
4410037SARM gem5 Developers        // Constructor
4510037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _dest,
4610037SARM gem5 Developers                IntRegIndex _op1, uint64_t _imm);
4712616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
4810037SARM gem5 Developers};
4910037SARM gem5 Developers}};
5010037SARM gem5 Developers
5110037SARM gem5 Developersdef template DataXImmConstructor {{
5210184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
5310037SARM gem5 Developers                                          IntRegIndex _dest,
5410037SARM gem5 Developers                                          IntRegIndex _op1,
5510037SARM gem5 Developers                                          uint64_t _imm)
5610037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
5710037SARM gem5 Developers                         _dest, _op1, _imm)
5810037SARM gem5 Developers    {
5910037SARM gem5 Developers        %(constructor)s;
6010037SARM gem5 Developers    }
6110037SARM gem5 Developers}};
6210037SARM gem5 Developers
6310037SARM gem5 Developersdef template DataXSRegDeclare {{
6410037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
6510037SARM gem5 Developers{
6610037SARM gem5 Developers    public:
6710037SARM gem5 Developers        // Constructor
6810037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _dest,
6910037SARM gem5 Developers                IntRegIndex _op1, IntRegIndex _op2,
7010037SARM gem5 Developers                int32_t _shiftAmt, ArmShiftType _shiftType);
7112616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
7210037SARM gem5 Developers};
7310037SARM gem5 Developers}};
7410037SARM gem5 Developers
7510037SARM gem5 Developersdef template DataXSRegConstructor {{
7610184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
7710037SARM gem5 Developers                                          IntRegIndex _dest,
7810037SARM gem5 Developers                                          IntRegIndex _op1,
7910037SARM gem5 Developers                                          IntRegIndex _op2,
8010037SARM gem5 Developers                                          int32_t _shiftAmt,
8110037SARM gem5 Developers                                          ArmShiftType _shiftType)
8210037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
8310037SARM gem5 Developers                         _dest, _op1, _op2, _shiftAmt, _shiftType)
8410037SARM gem5 Developers    {
8510037SARM gem5 Developers        %(constructor)s;
8610037SARM gem5 Developers    }
8710037SARM gem5 Developers}};
8810037SARM gem5 Developers
8910037SARM gem5 Developersdef template DataXERegDeclare {{
9010037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
9110037SARM gem5 Developers{
9210037SARM gem5 Developers    public:
9310037SARM gem5 Developers        // Constructor
9410037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _dest,
9510037SARM gem5 Developers                IntRegIndex _op1, IntRegIndex _op2,
9610037SARM gem5 Developers                ArmExtendType _extendType, int32_t _shiftAmt);
9712616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
9810037SARM gem5 Developers};
9910037SARM gem5 Developers}};
10010037SARM gem5 Developers
10110037SARM gem5 Developersdef template DataXERegConstructor {{
10210184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
10310037SARM gem5 Developers                                          IntRegIndex _dest,
10410037SARM gem5 Developers                                          IntRegIndex _op1,
10510037SARM gem5 Developers                                          IntRegIndex _op2,
10610037SARM gem5 Developers                                          ArmExtendType _extendType,
10710037SARM gem5 Developers                                          int32_t _shiftAmt)
10810037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
10910037SARM gem5 Developers                         _dest, _op1, _op2, _extendType, _shiftAmt)
11010037SARM gem5 Developers    {
11110037SARM gem5 Developers        %(constructor)s;
11210037SARM gem5 Developers    }
11310037SARM gem5 Developers}};
11410037SARM gem5 Developers
11510037SARM gem5 Developersdef template DataX1RegDeclare {{
11610037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
11710037SARM gem5 Developers{
11810037SARM gem5 Developers    public:
11910037SARM gem5 Developers        // Constructor
12010037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _dest,
12110037SARM gem5 Developers                       IntRegIndex _op1);
12212616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
12310037SARM gem5 Developers};
12410037SARM gem5 Developers}};
12510037SARM gem5 Developers
12610037SARM gem5 Developersdef template DataX1RegConstructor {{
12710184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
12810037SARM gem5 Developers                                          IntRegIndex _dest,
12910037SARM gem5 Developers                                          IntRegIndex _op1)
13010037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _op1)
13110037SARM gem5 Developers    {
13210037SARM gem5 Developers        %(constructor)s;
13310037SARM gem5 Developers    }
13410037SARM gem5 Developers}};
13510037SARM gem5 Developers
13610037SARM gem5 Developersdef template DataX2RegDeclare {{
13710037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
13810037SARM gem5 Developers{
13910037SARM gem5 Developers    public:
14010037SARM gem5 Developers        // Constructor
14110037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _dest,
14210037SARM gem5 Developers                       IntRegIndex _op1, IntRegIndex _op2);
14312616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
14410037SARM gem5 Developers};
14510037SARM gem5 Developers}};
14610037SARM gem5 Developers
14710037SARM gem5 Developersdef template DataX2RegConstructor {{
14810184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
14910037SARM gem5 Developers                                          IntRegIndex _dest,
15010037SARM gem5 Developers                                          IntRegIndex _op1,
15110037SARM gem5 Developers                                          IntRegIndex _op2)
15210037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
15310037SARM gem5 Developers                         _dest, _op1, _op2)
15410037SARM gem5 Developers    {
15510037SARM gem5 Developers        %(constructor)s;
15610037SARM gem5 Developers    }
15710037SARM gem5 Developers}};
15810037SARM gem5 Developers
15910037SARM gem5 Developersdef template DataX2RegImmDeclare {{
16010037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
16110037SARM gem5 Developers{
16210037SARM gem5 Developers    public:
16310037SARM gem5 Developers        // Constructor
16410037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _dest,
16510037SARM gem5 Developers                       IntRegIndex _op1, IntRegIndex _op2, uint64_t _imm);
16612616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
16710037SARM gem5 Developers};
16810037SARM gem5 Developers}};
16910037SARM gem5 Developers
17010037SARM gem5 Developersdef template DataX2RegImmConstructor {{
17110184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
17210037SARM gem5 Developers                                          IntRegIndex _dest,
17310037SARM gem5 Developers                                          IntRegIndex _op1,
17410037SARM gem5 Developers                                          IntRegIndex _op2,
17510037SARM gem5 Developers                                          uint64_t _imm)
17610037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
17710037SARM gem5 Developers                         _dest, _op1, _op2, _imm)
17810037SARM gem5 Developers    {
17910037SARM gem5 Developers        %(constructor)s;
18010037SARM gem5 Developers    }
18110037SARM gem5 Developers}};
18210037SARM gem5 Developers
18310037SARM gem5 Developersdef template DataX3RegDeclare {{
18410037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
18510037SARM gem5 Developers{
18610037SARM gem5 Developers    public:
18710037SARM gem5 Developers        // Constructor
18810037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _dest,
18910037SARM gem5 Developers                       IntRegIndex _op1, IntRegIndex _op2, IntRegIndex _op3);
19012616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
19110037SARM gem5 Developers};
19210037SARM gem5 Developers}};
19310037SARM gem5 Developers
19410037SARM gem5 Developersdef template DataX3RegConstructor {{
19510184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
19610037SARM gem5 Developers                                          IntRegIndex _dest,
19710037SARM gem5 Developers                                          IntRegIndex _op1,
19810037SARM gem5 Developers                                          IntRegIndex _op2,
19910037SARM gem5 Developers                                          IntRegIndex _op3)
20010037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
20110037SARM gem5 Developers                         _dest, _op1, _op2, _op3)
20210037SARM gem5 Developers    {
20310037SARM gem5 Developers        %(constructor)s;
20410037SARM gem5 Developers    }
20510037SARM gem5 Developers}};
20610037SARM gem5 Developers
20710037SARM gem5 Developersdef template DataXCondCompImmDeclare {{
20810037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
20910037SARM gem5 Developers{
21010037SARM gem5 Developers    public:
21110037SARM gem5 Developers        // Constructor
21210037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _op1,
21310037SARM gem5 Developers                       uint64_t _imm, ConditionCode _condCode, uint8_t _defCc);
21412616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
21510037SARM gem5 Developers};
21610037SARM gem5 Developers}};
21710037SARM gem5 Developers
21810037SARM gem5 Developersdef template DataXCondCompImmConstructor {{
21910184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
22010037SARM gem5 Developers                                          IntRegIndex _op1,
22110037SARM gem5 Developers                                          uint64_t _imm,
22210037SARM gem5 Developers                                          ConditionCode _condCode,
22310037SARM gem5 Developers                                          uint8_t _defCc)
22410037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
22510037SARM gem5 Developers                         _op1, _imm, _condCode, _defCc)
22610037SARM gem5 Developers    {
22710037SARM gem5 Developers        %(constructor)s;
22810037SARM gem5 Developers    }
22910037SARM gem5 Developers}};
23010037SARM gem5 Developers
23110037SARM gem5 Developersdef template DataXCondCompRegDeclare {{
23210037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
23310037SARM gem5 Developers{
23410037SARM gem5 Developers    public:
23510037SARM gem5 Developers        // Constructor
23610037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _op1,
23710037SARM gem5 Developers                       IntRegIndex _op2, ConditionCode _condCode,
23810037SARM gem5 Developers                       uint8_t _defCc);
23912616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
24010037SARM gem5 Developers};
24110037SARM gem5 Developers}};
24210037SARM gem5 Developers
24310037SARM gem5 Developersdef template DataXCondCompRegConstructor {{
24410184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
24510037SARM gem5 Developers                                          IntRegIndex _op1,
24610037SARM gem5 Developers                                          IntRegIndex _op2,
24710037SARM gem5 Developers                                          ConditionCode _condCode,
24810037SARM gem5 Developers                                          uint8_t _defCc)
24910037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
25010037SARM gem5 Developers                         _op1, _op2, _condCode, _defCc)
25110037SARM gem5 Developers    {
25210037SARM gem5 Developers        %(constructor)s;
25310037SARM gem5 Developers    }
25410037SARM gem5 Developers}};
25510037SARM gem5 Developers
25610037SARM gem5 Developersdef template DataXCondSelDeclare {{
25710037SARM gem5 Developersclass %(class_name)s : public %(base_class)s
25810037SARM gem5 Developers{
25910037SARM gem5 Developers    public:
26010037SARM gem5 Developers        // Constructor
26110037SARM gem5 Developers        %(class_name)s(ExtMachInst machInst, IntRegIndex _dest,
26210037SARM gem5 Developers                       IntRegIndex _op1, IntRegIndex _op2,
26310037SARM gem5 Developers                       ConditionCode _condCode);
26412616Sgabeblack@google.com        Fault execute(ExecContext *, Trace::InstRecord *) const override;
26510037SARM gem5 Developers};
26610037SARM gem5 Developers}};
26710037SARM gem5 Developers
26810037SARM gem5 Developersdef template DataXCondSelConstructor {{
26910184SCurtis.Dunham@arm.com    %(class_name)s::%(class_name)s(ExtMachInst machInst,
27010037SARM gem5 Developers                                          IntRegIndex _dest,
27110037SARM gem5 Developers                                          IntRegIndex _op1,
27210037SARM gem5 Developers                                          IntRegIndex _op2,
27310037SARM gem5 Developers                                          ConditionCode _condCode)
27410037SARM gem5 Developers        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
27510037SARM gem5 Developers                         _dest, _op1, _op2, _condCode)
27610037SARM gem5 Developers    {
27710037SARM gem5 Developers        %(constructor)s;
27810037SARM gem5 Developers    }
27910037SARM gem5 Developers}};
280