misc.isa revision 7331
17202Sgblack@eecs.umich.edu// -*- mode:c++ -*-
27202Sgblack@eecs.umich.edu
37202Sgblack@eecs.umich.edu// Copyright (c) 2010 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;
577202Sgblack@eecs.umich.edu    }
587202Sgblack@eecs.umich.edu}};
597202Sgblack@eecs.umich.edu
607202Sgblack@eecs.umich.edudef template MsrRegDeclare {{
617202Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
627202Sgblack@eecs.umich.edu{
637202Sgblack@eecs.umich.edu  protected:
647202Sgblack@eecs.umich.edu    public:
657202Sgblack@eecs.umich.edu        // Constructor
667202Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, IntRegIndex _op1, uint8_t mask);
677202Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
687202Sgblack@eecs.umich.edu};
697202Sgblack@eecs.umich.edu}};
707202Sgblack@eecs.umich.edu
717202Sgblack@eecs.umich.edudef template MsrRegConstructor {{
727202Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
737202Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
747202Sgblack@eecs.umich.edu                                          uint8_t mask)
757202Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _op1, mask)
767202Sgblack@eecs.umich.edu    {
777202Sgblack@eecs.umich.edu        %(constructor)s;
787202Sgblack@eecs.umich.edu    }
797202Sgblack@eecs.umich.edu}};
807202Sgblack@eecs.umich.edu
817202Sgblack@eecs.umich.edudef template MsrImmDeclare {{
827202Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
837202Sgblack@eecs.umich.edu{
847202Sgblack@eecs.umich.edu  protected:
857202Sgblack@eecs.umich.edu    public:
867202Sgblack@eecs.umich.edu        // Constructor
877202Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, uint32_t imm, uint8_t mask);
887202Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
897202Sgblack@eecs.umich.edu};
907202Sgblack@eecs.umich.edu}};
917202Sgblack@eecs.umich.edu
927202Sgblack@eecs.umich.edudef template MsrImmConstructor {{
937202Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
947202Sgblack@eecs.umich.edu                                          uint32_t imm,
957202Sgblack@eecs.umich.edu                                          uint8_t mask)
967202Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, imm, mask)
977202Sgblack@eecs.umich.edu    {
987202Sgblack@eecs.umich.edu        %(constructor)s;
997202Sgblack@eecs.umich.edu    }
1007202Sgblack@eecs.umich.edu}};
1017208Sgblack@eecs.umich.edu
1027306Sgblack@eecs.umich.edudef template ImmOpDeclare {{
1037306Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1047306Sgblack@eecs.umich.edu{
1057306Sgblack@eecs.umich.edu  protected:
1067306Sgblack@eecs.umich.edu    public:
1077306Sgblack@eecs.umich.edu        // Constructor
1087330Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst, uint64_t _imm);
1097306Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1107306Sgblack@eecs.umich.edu};
1117306Sgblack@eecs.umich.edu}};
1127306Sgblack@eecs.umich.edu
1137306Sgblack@eecs.umich.edudef template ImmOpConstructor {{
1147330Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst, uint64_t _imm)
1157306Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _imm)
1167306Sgblack@eecs.umich.edu    {
1177306Sgblack@eecs.umich.edu        %(constructor)s;
1187306Sgblack@eecs.umich.edu    }
1197306Sgblack@eecs.umich.edu}};
1207306Sgblack@eecs.umich.edu
1217261Sgblack@eecs.umich.edudef template RegRegOpDeclare {{
1227208Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1237208Sgblack@eecs.umich.edu{
1247208Sgblack@eecs.umich.edu  protected:
1257208Sgblack@eecs.umich.edu    public:
1267208Sgblack@eecs.umich.edu        // Constructor
1277208Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1287208Sgblack@eecs.umich.edu                       IntRegIndex _dest, IntRegIndex _op1);
1297208Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1307208Sgblack@eecs.umich.edu};
1317208Sgblack@eecs.umich.edu}};
1327208Sgblack@eecs.umich.edu
1337261Sgblack@eecs.umich.edudef template RegRegOpConstructor {{
1347208Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1357208Sgblack@eecs.umich.edu                                          IntRegIndex _dest, IntRegIndex _op1)
1367208Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _op1)
1377208Sgblack@eecs.umich.edu    {
1387208Sgblack@eecs.umich.edu        %(constructor)s;
1397208Sgblack@eecs.umich.edu    }
1407208Sgblack@eecs.umich.edu}};
1417225Sgblack@eecs.umich.edu
1427233Sgblack@eecs.umich.edudef template RegRegRegImmOpDeclare {{
1437233Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1447233Sgblack@eecs.umich.edu{
1457233Sgblack@eecs.umich.edu  protected:
1467233Sgblack@eecs.umich.edu    public:
1477233Sgblack@eecs.umich.edu        // Constructor
1487233Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1497233Sgblack@eecs.umich.edu                       IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2,
1507330Sgblack@eecs.umich.edu                       uint64_t _imm);
1517233Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1527233Sgblack@eecs.umich.edu};
1537233Sgblack@eecs.umich.edu}};
1547233Sgblack@eecs.umich.edu
1557233Sgblack@eecs.umich.edudef template RegRegRegImmOpConstructor {{
1567233Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1577233Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
1587233Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
1597233Sgblack@eecs.umich.edu                                          IntRegIndex _op2,
1607330Sgblack@eecs.umich.edu                                          uint64_t _imm)
1617233Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
1627233Sgblack@eecs.umich.edu                         _dest, _op1, _op2, _imm)
1637233Sgblack@eecs.umich.edu    {
1647233Sgblack@eecs.umich.edu        %(constructor)s;
1657233Sgblack@eecs.umich.edu    }
1667233Sgblack@eecs.umich.edu}};
1677233Sgblack@eecs.umich.edu
1687241Sgblack@eecs.umich.edudef template RegRegRegRegOpDeclare {{
1697241Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1707241Sgblack@eecs.umich.edu{
1717241Sgblack@eecs.umich.edu  protected:
1727241Sgblack@eecs.umich.edu    public:
1737241Sgblack@eecs.umich.edu        // Constructor
1747241Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
1757241Sgblack@eecs.umich.edu                       IntRegIndex _dest, IntRegIndex _op1,
1767241Sgblack@eecs.umich.edu                       IntRegIndex _op2, IntRegIndex _op3);
1777241Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
1787241Sgblack@eecs.umich.edu};
1797241Sgblack@eecs.umich.edu}};
1807241Sgblack@eecs.umich.edu
1817241Sgblack@eecs.umich.edudef template RegRegRegRegOpConstructor {{
1827241Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
1837241Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
1847241Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
1857241Sgblack@eecs.umich.edu                                          IntRegIndex _op2,
1867241Sgblack@eecs.umich.edu                                          IntRegIndex _op3)
1877241Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
1887241Sgblack@eecs.umich.edu                         _dest, _op1, _op2, _op3)
1897241Sgblack@eecs.umich.edu    {
1907241Sgblack@eecs.umich.edu        %(constructor)s;
1917241Sgblack@eecs.umich.edu    }
1927241Sgblack@eecs.umich.edu}};
1937241Sgblack@eecs.umich.edu
1947238Sgblack@eecs.umich.edudef template RegRegRegOpDeclare {{
1957238Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
1967238Sgblack@eecs.umich.edu{
1977238Sgblack@eecs.umich.edu  protected:
1987238Sgblack@eecs.umich.edu    public:
1997238Sgblack@eecs.umich.edu        // Constructor
2007238Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
2017238Sgblack@eecs.umich.edu                       IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2);
2027238Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
2037238Sgblack@eecs.umich.edu};
2047238Sgblack@eecs.umich.edu}};
2057238Sgblack@eecs.umich.edu
2067238Sgblack@eecs.umich.edudef template RegRegRegOpConstructor {{
2077238Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
2087238Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
2097238Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
2107238Sgblack@eecs.umich.edu                                          IntRegIndex _op2)
2117238Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
2127238Sgblack@eecs.umich.edu                         _dest, _op1, _op2)
2137238Sgblack@eecs.umich.edu    {
2147238Sgblack@eecs.umich.edu        %(constructor)s;
2157238Sgblack@eecs.umich.edu    }
2167238Sgblack@eecs.umich.edu}};
2177238Sgblack@eecs.umich.edu
2187331Sgblack@eecs.umich.edudef template RegRegImmOpDeclare {{
2197331Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
2207331Sgblack@eecs.umich.edu{
2217331Sgblack@eecs.umich.edu  protected:
2227331Sgblack@eecs.umich.edu    public:
2237331Sgblack@eecs.umich.edu        // Constructor
2247331Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
2257331Sgblack@eecs.umich.edu                       IntRegIndex _dest, IntRegIndex _op1,
2267331Sgblack@eecs.umich.edu                       uint64_t _imm);
2277331Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
2287331Sgblack@eecs.umich.edu};
2297331Sgblack@eecs.umich.edu}};
2307331Sgblack@eecs.umich.edu
2317331Sgblack@eecs.umich.edudef template RegRegImmOpConstructor {{
2327331Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
2337331Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
2347331Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
2357331Sgblack@eecs.umich.edu                                          uint64_t _imm)
2367331Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
2377331Sgblack@eecs.umich.edu                         _dest, _op1, _imm)
2387331Sgblack@eecs.umich.edu    {
2397331Sgblack@eecs.umich.edu        %(constructor)s;
2407331Sgblack@eecs.umich.edu    }
2417331Sgblack@eecs.umich.edu}};
2427331Sgblack@eecs.umich.edu
2437253Sgblack@eecs.umich.edudef template RegRegImmImmOpDeclare {{
2447253Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
2457253Sgblack@eecs.umich.edu{
2467253Sgblack@eecs.umich.edu  protected:
2477253Sgblack@eecs.umich.edu    public:
2487253Sgblack@eecs.umich.edu        // Constructor
2497253Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
2507253Sgblack@eecs.umich.edu                       IntRegIndex _dest, IntRegIndex _op1,
2517330Sgblack@eecs.umich.edu                       uint64_t _imm1, uint64_t _imm2);
2527253Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
2537253Sgblack@eecs.umich.edu};
2547253Sgblack@eecs.umich.edu}};
2557253Sgblack@eecs.umich.edu
2567253Sgblack@eecs.umich.edudef template RegRegImmImmOpConstructor {{
2577253Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
2587253Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
2597253Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
2607330Sgblack@eecs.umich.edu                                          uint64_t _imm1,
2617330Sgblack@eecs.umich.edu                                          uint64_t _imm2)
2627253Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
2637253Sgblack@eecs.umich.edu                         _dest, _op1, _imm1, _imm2)
2647253Sgblack@eecs.umich.edu    {
2657253Sgblack@eecs.umich.edu        %(constructor)s;
2667253Sgblack@eecs.umich.edu    }
2677253Sgblack@eecs.umich.edu}};
2687253Sgblack@eecs.umich.edu
2697232Sgblack@eecs.umich.edudef template RegImmRegOpDeclare {{
2707225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
2717225Sgblack@eecs.umich.edu{
2727225Sgblack@eecs.umich.edu  protected:
2737225Sgblack@eecs.umich.edu    public:
2747225Sgblack@eecs.umich.edu        // Constructor
2757225Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
2767330Sgblack@eecs.umich.edu                       IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1);
2777225Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
2787225Sgblack@eecs.umich.edu};
2797225Sgblack@eecs.umich.edu}};
2807225Sgblack@eecs.umich.edu
2817232Sgblack@eecs.umich.edudef template RegImmRegOpConstructor {{
2827225Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
2837225Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
2847330Sgblack@eecs.umich.edu                                          uint64_t _imm,
2857225Sgblack@eecs.umich.edu                                          IntRegIndex _op1)
2867225Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
2877232Sgblack@eecs.umich.edu                         _dest, _imm, _op1)
2887225Sgblack@eecs.umich.edu    {
2897225Sgblack@eecs.umich.edu        %(constructor)s;
2907225Sgblack@eecs.umich.edu    }
2917225Sgblack@eecs.umich.edu}};
2927225Sgblack@eecs.umich.edu
2937232Sgblack@eecs.umich.edudef template RegImmRegShiftOpDeclare {{
2947225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s
2957225Sgblack@eecs.umich.edu{
2967225Sgblack@eecs.umich.edu  protected:
2977225Sgblack@eecs.umich.edu    public:
2987225Sgblack@eecs.umich.edu        // Constructor
2997225Sgblack@eecs.umich.edu        %(class_name)s(ExtMachInst machInst,
3007330Sgblack@eecs.umich.edu                       IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1,
3017225Sgblack@eecs.umich.edu                       int32_t _shiftAmt, ArmShiftType _shiftType);
3027225Sgblack@eecs.umich.edu        %(BasicExecDeclare)s
3037225Sgblack@eecs.umich.edu};
3047225Sgblack@eecs.umich.edu}};
3057225Sgblack@eecs.umich.edu
3067232Sgblack@eecs.umich.edudef template RegImmRegShiftOpConstructor {{
3077225Sgblack@eecs.umich.edu    inline %(class_name)s::%(class_name)s(ExtMachInst machInst,
3087225Sgblack@eecs.umich.edu                                          IntRegIndex _dest,
3097330Sgblack@eecs.umich.edu                                          uint64_t _imm,
3107225Sgblack@eecs.umich.edu                                          IntRegIndex _op1,
3117225Sgblack@eecs.umich.edu                                          int32_t _shiftAmt,
3127225Sgblack@eecs.umich.edu                                          ArmShiftType _shiftType)
3137225Sgblack@eecs.umich.edu        : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s,
3147232Sgblack@eecs.umich.edu                         _dest, _imm, _op1, _shiftAmt, _shiftType)
3157225Sgblack@eecs.umich.edu    {
3167225Sgblack@eecs.umich.edu        %(constructor)s;
3177225Sgblack@eecs.umich.edu    }
3187225Sgblack@eecs.umich.edu}};
319