branch.isa revision 7150
17150Sgblack@eecs.umich.edu// -*- mode:c++ -*-
27150Sgblack@eecs.umich.edu
37150Sgblack@eecs.umich.edu// Copyright (c) 2010 ARM Limited
47150Sgblack@eecs.umich.edu// All rights reserved
57150Sgblack@eecs.umich.edu//
67150Sgblack@eecs.umich.edu// The license below extends only to copyright in the software and shall
77150Sgblack@eecs.umich.edu// not be construed as granting a license to any other intellectual
87150Sgblack@eecs.umich.edu// property including but not limited to intellectual property relating
97150Sgblack@eecs.umich.edu// to a hardware implementation of the functionality of the software
107150Sgblack@eecs.umich.edu// licensed hereunder.  You may use the software subject to the license
117150Sgblack@eecs.umich.edu// terms below provided that you ensure that this notice is replicated
127150Sgblack@eecs.umich.edu// unmodified and in its entirety in all distributions of the software,
137150Sgblack@eecs.umich.edu// modified or unmodified, in source code or in binary form.
147150Sgblack@eecs.umich.edu//
157150Sgblack@eecs.umich.edu// Redistribution and use in source and binary forms, with or without
167150Sgblack@eecs.umich.edu// modification, are permitted provided that the following conditions are
177150Sgblack@eecs.umich.edu// met: redistributions of source code must retain the above copyright
187150Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer;
197150Sgblack@eecs.umich.edu// redistributions in binary form must reproduce the above copyright
207150Sgblack@eecs.umich.edu// notice, this list of conditions and the following disclaimer in the
217150Sgblack@eecs.umich.edu// documentation and/or other materials provided with the distribution;
227150Sgblack@eecs.umich.edu// neither the name of the copyright holders nor the names of its
237150Sgblack@eecs.umich.edu// contributors may be used to endorse or promote products derived from
247150Sgblack@eecs.umich.edu// this software without specific prior written permission.
257150Sgblack@eecs.umich.edu//
267150Sgblack@eecs.umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
277150Sgblack@eecs.umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
287150Sgblack@eecs.umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
297150Sgblack@eecs.umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
307150Sgblack@eecs.umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
317150Sgblack@eecs.umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
327150Sgblack@eecs.umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
337150Sgblack@eecs.umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
347150Sgblack@eecs.umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
357150Sgblack@eecs.umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
367150Sgblack@eecs.umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
377150Sgblack@eecs.umich.edu//
387150Sgblack@eecs.umich.edu// Authors: Gabe Black
397150Sgblack@eecs.umich.edu
407150Sgblack@eecs.umich.edudef template BranchImmDeclare {{
417150Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
427150Sgblack@eecs.umich.edu{
437150Sgblack@eecs.umich.edu    public:
447150Sgblack@eecs.umich.edu        // Constructor
457150Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, int32_t _imm);
467150Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
477150Sgblack@eecs.umich.edu};
487150Sgblack@eecs.umich.edu}};
497150Sgblack@eecs.umich.edu
507150Sgblack@eecs.umich.edudef template BranchImmConstructor {{
517150Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
527150Sgblack@eecs.umich.edu                                          int32_t _imm)
537150Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _imm)
547150Sgblack@eecs.umich.edu    {
557150Sgblack@eecs.umich.edu        %(constructor)s;
567150Sgblack@eecs.umich.edu    }
577150Sgblack@eecs.umich.edu}};
587150Sgblack@eecs.umich.edu
597150Sgblack@eecs.umich.edudef template BranchImmCondDeclare {{
607150Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
617150Sgblack@eecs.umich.edu{
627150Sgblack@eecs.umich.edu    public:
637150Sgblack@eecs.umich.edu        // Constructor
647150Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, int32_t _imm,
657150Sgblack@eecs.umich.edu                       ConditionCode _condCode);
667150Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
677150Sgblack@eecs.umich.edu};
687150Sgblack@eecs.umich.edu}};
697150Sgblack@eecs.umich.edu
707150Sgblack@eecs.umich.edudef template BranchImmCondConstructor {{
717150Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
727150Sgblack@eecs.umich.edu                                          int32_t _imm,
737150Sgblack@eecs.umich.edu                                          ConditionCode _condCode)
747150Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
757150Sgblack@eecs.umich.edu                         _imm, _condCode)
767150Sgblack@eecs.umich.edu    {
777150Sgblack@eecs.umich.edu        %(constructor)s;
787150Sgblack@eecs.umich.edu    }
797150Sgblack@eecs.umich.edu}};
807150Sgblack@eecs.umich.edu
817150Sgblack@eecs.umich.edudef template BranchRegDeclare {{
827150Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
837150Sgblack@eecs.umich.edu{
847150Sgblack@eecs.umich.edu    public:
857150Sgblack@eecs.umich.edu        // Constructor
867150Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, IntRegIndex _op1);
877150Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
887150Sgblack@eecs.umich.edu};
897150Sgblack@eecs.umich.edu}};
907150Sgblack@eecs.umich.edu
917150Sgblack@eecs.umich.edudef template BranchRegConstructor {{
927150Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
937150Sgblack@eecs.umich.edu                                          IntRegIndex _op1)
947150Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1)
957150Sgblack@eecs.umich.edu    {
967150Sgblack@eecs.umich.edu        %(constructor)s;
977150Sgblack@eecs.umich.edu    }
987150Sgblack@eecs.umich.edu}};
997150Sgblack@eecs.umich.edu
1007150Sgblack@eecs.umich.edudef template BranchRegCondDeclare {{
1017150Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1027150Sgblack@eecs.umich.edu{
1037150Sgblack@eecs.umich.edu    public:
1047150Sgblack@eecs.umich.edu        // Constructor
1057150Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, IntRegIndex _op1,
1067150Sgblack@eecs.umich.edu                       ConditionCode _condCode);
1077150Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1087150Sgblack@eecs.umich.edu};
1097150Sgblack@eecs.umich.edu}};
1107150Sgblack@eecs.umich.edu
1117150Sgblack@eecs.umich.edudef template BranchRegCondConstructor {{
1127150Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1137150Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
1147150Sgblack@eecs.umich.edu                                          ConditionCode _condCode)
1157150Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
1167150Sgblack@eecs.umich.edu                         _op1, _condCode)
1177150Sgblack@eecs.umich.edu    {
1187150Sgblack@eecs.umich.edu        %(constructor)s;
1197150Sgblack@eecs.umich.edu    }
1207150Sgblack@eecs.umich.edu}};
1217150Sgblack@eecs.umich.edu
1227150Sgblack@eecs.umich.edudef template BranchRegRegDeclare {{
1237150Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1247150Sgblack@eecs.umich.edu{
1257150Sgblack@eecs.umich.edu    public:
1267150Sgblack@eecs.umich.edu        // Constructor
1277150Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1287150Sgblack@eecs.umich.edu                       IntRegIndex _op1, IntRegIndex _op2);
1297150Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1307150Sgblack@eecs.umich.edu};
1317150Sgblack@eecs.umich.edu}};
1327150Sgblack@eecs.umich.edu
1337150Sgblack@eecs.umich.edudef template BranchTableDeclare {{
1347150Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1357150Sgblack@eecs.umich.edu{
1367150Sgblack@eecs.umich.edu    public:
1377150Sgblack@eecs.umich.edu        // Constructor
1387150Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1397150Sgblack@eecs.umich.edu                       IntRegIndex _op1, IntRegIndex _op2);
1407150Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1417150Sgblack@eecs.umich.edu
1427150Sgblack@eecs.umich.edu        %(InitiateAccDeclare)s
1437150Sgblack@eecs.umich.edu
1447150Sgblack@eecs.umich.edu        %(CompleteAccDeclare)s
1457150Sgblack@eecs.umich.edu};
1467150Sgblack@eecs.umich.edu}};
1477150Sgblack@eecs.umich.edu
1487150Sgblack@eecs.umich.edudef template BranchRegRegConstructor {{
1497150Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1507150Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
1517150Sgblack@eecs.umich.edu                                          IntRegIndex _op2)
1527150Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1, _op2)
1537150Sgblack@eecs.umich.edu    {
1547150Sgblack@eecs.umich.edu        %(constructor)s;
1557150Sgblack@eecs.umich.edu    }
1567150Sgblack@eecs.umich.edu}};
1577150Sgblack@eecs.umich.edu
1587150Sgblack@eecs.umich.edudef template BranchImmRegDeclare {{
1597150Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1607150Sgblack@eecs.umich.edu{
1617150Sgblack@eecs.umich.edu    public:
1627150Sgblack@eecs.umich.edu        // Constructor
1637150Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1647150Sgblack@eecs.umich.edu                       int32_t imm, IntRegIndex _op1);
1657150Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1667150Sgblack@eecs.umich.edu};
1677150Sgblack@eecs.umich.edu}};
1687150Sgblack@eecs.umich.edu
1697150Sgblack@eecs.umich.edudef template BranchImmRegConstructor {{
1707150Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1717150Sgblack@eecs.umich.edu                                          int32_t _imm,
1727150Sgblack@eecs.umich.edu                                          IntRegIndex _op1)
1737150Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _imm, _op1)
1747150Sgblack@eecs.umich.edu    {
1757150Sgblack@eecs.umich.edu        %(constructor)s;
1767150Sgblack@eecs.umich.edu    }
1777150Sgblack@eecs.umich.edu}};
178