misc.isa revision 7712
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 1217332Sgblack@eecs.umich.edudef template RegImmOpDeclare {{ 1227332Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1237332Sgblack@eecs.umich.edu{ 1247332Sgblack@eecs.umich.edu protected: 1257332Sgblack@eecs.umich.edu public: 1267332Sgblack@eecs.umich.edu // Constructor 1277332Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, IntRegIndex _dest, uint64_t _imm); 1287332Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1297332Sgblack@eecs.umich.edu}; 1307332Sgblack@eecs.umich.edu}}; 1317332Sgblack@eecs.umich.edu 1327332Sgblack@eecs.umich.edudef template RegImmOpConstructor {{ 1337332Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1347332Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm) 1357332Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _imm) 1367332Sgblack@eecs.umich.edu { 1377332Sgblack@eecs.umich.edu %(constructor)s; 1387332Sgblack@eecs.umich.edu } 1397332Sgblack@eecs.umich.edu}}; 1407332Sgblack@eecs.umich.edu 1417261Sgblack@eecs.umich.edudef template RegRegOpDeclare {{ 1427208Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1437208Sgblack@eecs.umich.edu{ 1447208Sgblack@eecs.umich.edu protected: 1457208Sgblack@eecs.umich.edu public: 1467208Sgblack@eecs.umich.edu // Constructor 1477208Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1487208Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1); 1497208Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1507208Sgblack@eecs.umich.edu}; 1517208Sgblack@eecs.umich.edu}}; 1527208Sgblack@eecs.umich.edu 1537261Sgblack@eecs.umich.edudef template RegRegOpConstructor {{ 1547208Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1557208Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1) 1567208Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, _dest, _op1) 1577208Sgblack@eecs.umich.edu { 1587208Sgblack@eecs.umich.edu %(constructor)s; 1597208Sgblack@eecs.umich.edu } 1607208Sgblack@eecs.umich.edu}}; 1617225Sgblack@eecs.umich.edu 1627233Sgblack@eecs.umich.edudef template RegRegRegImmOpDeclare {{ 1637233Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1647233Sgblack@eecs.umich.edu{ 1657233Sgblack@eecs.umich.edu protected: 1667233Sgblack@eecs.umich.edu public: 1677233Sgblack@eecs.umich.edu // Constructor 1687233Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1697233Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 1707330Sgblack@eecs.umich.edu uint64_t _imm); 1717233Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1727233Sgblack@eecs.umich.edu}; 1737233Sgblack@eecs.umich.edu}}; 1747233Sgblack@eecs.umich.edu 1757233Sgblack@eecs.umich.edudef template RegRegRegImmOpConstructor {{ 1767233Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 1777233Sgblack@eecs.umich.edu IntRegIndex _dest, 1787233Sgblack@eecs.umich.edu IntRegIndex _op1, 1797233Sgblack@eecs.umich.edu IntRegIndex _op2, 1807330Sgblack@eecs.umich.edu uint64_t _imm) 1817233Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 1827233Sgblack@eecs.umich.edu _dest, _op1, _op2, _imm) 1837233Sgblack@eecs.umich.edu { 1847233Sgblack@eecs.umich.edu %(constructor)s; 1857233Sgblack@eecs.umich.edu } 1867233Sgblack@eecs.umich.edu}}; 1877233Sgblack@eecs.umich.edu 1887241Sgblack@eecs.umich.edudef template RegRegRegRegOpDeclare {{ 1897241Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 1907241Sgblack@eecs.umich.edu{ 1917241Sgblack@eecs.umich.edu protected: 1927241Sgblack@eecs.umich.edu public: 1937241Sgblack@eecs.umich.edu // Constructor 1947241Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 1957241Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 1967241Sgblack@eecs.umich.edu IntRegIndex _op2, IntRegIndex _op3); 1977241Sgblack@eecs.umich.edu %(BasicExecDeclare)s 1987241Sgblack@eecs.umich.edu}; 1997241Sgblack@eecs.umich.edu}}; 2007241Sgblack@eecs.umich.edu 2017241Sgblack@eecs.umich.edudef template RegRegRegRegOpConstructor {{ 2027241Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2037241Sgblack@eecs.umich.edu IntRegIndex _dest, 2047241Sgblack@eecs.umich.edu IntRegIndex _op1, 2057241Sgblack@eecs.umich.edu IntRegIndex _op2, 2067241Sgblack@eecs.umich.edu IntRegIndex _op3) 2077241Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2087241Sgblack@eecs.umich.edu _dest, _op1, _op2, _op3) 2097241Sgblack@eecs.umich.edu { 2107241Sgblack@eecs.umich.edu %(constructor)s; 2117241Sgblack@eecs.umich.edu } 2127241Sgblack@eecs.umich.edu}}; 2137241Sgblack@eecs.umich.edu 2147238Sgblack@eecs.umich.edudef template RegRegRegOpDeclare {{ 2157238Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2167238Sgblack@eecs.umich.edu{ 2177238Sgblack@eecs.umich.edu protected: 2187238Sgblack@eecs.umich.edu public: 2197238Sgblack@eecs.umich.edu // Constructor 2207238Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2217238Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2); 2227238Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2237238Sgblack@eecs.umich.edu}; 2247238Sgblack@eecs.umich.edu}}; 2257238Sgblack@eecs.umich.edu 2267238Sgblack@eecs.umich.edudef template RegRegRegOpConstructor {{ 2277238Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2287238Sgblack@eecs.umich.edu IntRegIndex _dest, 2297238Sgblack@eecs.umich.edu IntRegIndex _op1, 2307238Sgblack@eecs.umich.edu IntRegIndex _op2) 2317238Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2327238Sgblack@eecs.umich.edu _dest, _op1, _op2) 2337238Sgblack@eecs.umich.edu { 2347238Sgblack@eecs.umich.edu %(constructor)s; 2357238Sgblack@eecs.umich.edu } 2367238Sgblack@eecs.umich.edu}}; 2377238Sgblack@eecs.umich.edu 2387331Sgblack@eecs.umich.edudef template RegRegImmOpDeclare {{ 2397331Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2407331Sgblack@eecs.umich.edu{ 2417331Sgblack@eecs.umich.edu protected: 2427331Sgblack@eecs.umich.edu public: 2437331Sgblack@eecs.umich.edu // Constructor 2447331Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2457331Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2467331Sgblack@eecs.umich.edu uint64_t _imm); 2477331Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2487331Sgblack@eecs.umich.edu}; 2497331Sgblack@eecs.umich.edu}}; 2507331Sgblack@eecs.umich.edu 2517331Sgblack@eecs.umich.edudef template RegRegImmOpConstructor {{ 2527331Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2537331Sgblack@eecs.umich.edu IntRegIndex _dest, 2547331Sgblack@eecs.umich.edu IntRegIndex _op1, 2557331Sgblack@eecs.umich.edu uint64_t _imm) 2567331Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2577331Sgblack@eecs.umich.edu _dest, _op1, _imm) 2587331Sgblack@eecs.umich.edu { 2597331Sgblack@eecs.umich.edu %(constructor)s; 2607331Sgblack@eecs.umich.edu } 2617331Sgblack@eecs.umich.edu}}; 2627331Sgblack@eecs.umich.edu 2637253Sgblack@eecs.umich.edudef template RegRegImmImmOpDeclare {{ 2647253Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2657253Sgblack@eecs.umich.edu{ 2667253Sgblack@eecs.umich.edu protected: 2677253Sgblack@eecs.umich.edu public: 2687253Sgblack@eecs.umich.edu // Constructor 2697253Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2707253Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2717330Sgblack@eecs.umich.edu uint64_t _imm1, uint64_t _imm2); 2727253Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2737253Sgblack@eecs.umich.edu}; 2747253Sgblack@eecs.umich.edu}}; 2757253Sgblack@eecs.umich.edu 2767253Sgblack@eecs.umich.edudef template RegRegImmImmOpConstructor {{ 2777253Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 2787253Sgblack@eecs.umich.edu IntRegIndex _dest, 2797253Sgblack@eecs.umich.edu IntRegIndex _op1, 2807330Sgblack@eecs.umich.edu uint64_t _imm1, 2817330Sgblack@eecs.umich.edu uint64_t _imm2) 2827253Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 2837253Sgblack@eecs.umich.edu _dest, _op1, _imm1, _imm2) 2847253Sgblack@eecs.umich.edu { 2857253Sgblack@eecs.umich.edu %(constructor)s; 2867253Sgblack@eecs.umich.edu } 2877253Sgblack@eecs.umich.edu}}; 2887253Sgblack@eecs.umich.edu 2897232Sgblack@eecs.umich.edudef template RegImmRegOpDeclare {{ 2907225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 2917225Sgblack@eecs.umich.edu{ 2927225Sgblack@eecs.umich.edu protected: 2937225Sgblack@eecs.umich.edu public: 2947225Sgblack@eecs.umich.edu // Constructor 2957225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 2967330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1); 2977225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 2987225Sgblack@eecs.umich.edu}; 2997225Sgblack@eecs.umich.edu}}; 3007225Sgblack@eecs.umich.edu 3017232Sgblack@eecs.umich.edudef template RegImmRegOpConstructor {{ 3027225Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 3037225Sgblack@eecs.umich.edu IntRegIndex _dest, 3047330Sgblack@eecs.umich.edu uint64_t _imm, 3057225Sgblack@eecs.umich.edu IntRegIndex _op1) 3067225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 3077232Sgblack@eecs.umich.edu _dest, _imm, _op1) 3087225Sgblack@eecs.umich.edu { 3097225Sgblack@eecs.umich.edu %(constructor)s; 3107225Sgblack@eecs.umich.edu } 3117225Sgblack@eecs.umich.edu}}; 3127225Sgblack@eecs.umich.edu 3137232Sgblack@eecs.umich.edudef template RegImmRegShiftOpDeclare {{ 3147225Sgblack@eecs.umich.educlass %(class_name)s : public %(base_class)s 3157225Sgblack@eecs.umich.edu{ 3167225Sgblack@eecs.umich.edu protected: 3177225Sgblack@eecs.umich.edu public: 3187225Sgblack@eecs.umich.edu // Constructor 3197225Sgblack@eecs.umich.edu %(class_name)s(ExtMachInst machInst, 3207330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1, 3217225Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType); 3227225Sgblack@eecs.umich.edu %(BasicExecDeclare)s 3237225Sgblack@eecs.umich.edu}; 3247225Sgblack@eecs.umich.edu}}; 3257225Sgblack@eecs.umich.edu 3267232Sgblack@eecs.umich.edudef template RegImmRegShiftOpConstructor {{ 3277225Sgblack@eecs.umich.edu inline %(class_name)s::%(class_name)s(ExtMachInst machInst, 3287225Sgblack@eecs.umich.edu IntRegIndex _dest, 3297330Sgblack@eecs.umich.edu uint64_t _imm, 3307225Sgblack@eecs.umich.edu IntRegIndex _op1, 3317225Sgblack@eecs.umich.edu int32_t _shiftAmt, 3327225Sgblack@eecs.umich.edu ArmShiftType _shiftType) 3337225Sgblack@eecs.umich.edu : %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, 3347232Sgblack@eecs.umich.edu _dest, _imm, _op1, _shiftAmt, _shiftType) 3357225Sgblack@eecs.umich.edu { 3367225Sgblack@eecs.umich.edu %(constructor)s; 3377225Sgblack@eecs.umich.edu } 3387225Sgblack@eecs.umich.edu}}; 3397609SGene.Wu@arm.com 3407609SGene.Wu@arm.comdef template ClrexDeclare {{ 3417609SGene.Wu@arm.com /** 3427609SGene.Wu@arm.com * Static instruction class for "%(mnemonic)s". 3437609SGene.Wu@arm.com */ 3447609SGene.Wu@arm.com class %(class_name)s : public %(base_class)s 3457609SGene.Wu@arm.com { 3467609SGene.Wu@arm.com public: 3477609SGene.Wu@arm.com 3487609SGene.Wu@arm.com /// Constructor. 3497609SGene.Wu@arm.com %(class_name)s(ExtMachInst machInst); 3507609SGene.Wu@arm.com 3517609SGene.Wu@arm.com %(BasicExecDeclare)s 3527609SGene.Wu@arm.com 3537609SGene.Wu@arm.com %(InitiateAccDeclare)s 3547609SGene.Wu@arm.com 3557609SGene.Wu@arm.com %(CompleteAccDeclare)s 3567609SGene.Wu@arm.com }; 3577609SGene.Wu@arm.com}}; 3587609SGene.Wu@arm.com 3597609SGene.Wu@arm.comdef template ClrexInitiateAcc {{ 3607609SGene.Wu@arm.com Fault %(class_name)s::initiateAcc(%(CPU_exec_context)s *xc, 3617609SGene.Wu@arm.com Trace::InstRecord *traceData) const 3627609SGene.Wu@arm.com { 3637609SGene.Wu@arm.com Fault fault = NoFault; 3647609SGene.Wu@arm.com %(op_decl)s; 3657609SGene.Wu@arm.com %(op_rd)s; 3667609SGene.Wu@arm.com 3677609SGene.Wu@arm.com if (%(predicate_test)s) 3687609SGene.Wu@arm.com { 3697609SGene.Wu@arm.com if (fault == NoFault) { 3707705Sgblack@eecs.umich.edu unsigned memAccessFlags = Request::CLEAR_LL | 3717705Sgblack@eecs.umich.edu ArmISA::TLB::AlignWord | Request::LLSC; 3727609SGene.Wu@arm.com fault = xc->read(0, (uint32_t&)Mem, memAccessFlags); 3737609SGene.Wu@arm.com } 3747609SGene.Wu@arm.com } else { 3757609SGene.Wu@arm.com xc->setPredicate(false); 3767609SGene.Wu@arm.com if (fault == NoFault && machInst.itstateMask != 0) { 3777609SGene.Wu@arm.com xc->setMiscReg(MISCREG_ITSTATE, machInst.newItstate); 3787609SGene.Wu@arm.com } 3797609SGene.Wu@arm.com } 3807609SGene.Wu@arm.com 3817609SGene.Wu@arm.com return fault; 3827609SGene.Wu@arm.com } 3837609SGene.Wu@arm.com}}; 3847609SGene.Wu@arm.com 3857609SGene.Wu@arm.comdef template ClrexCompleteAcc {{ 3867609SGene.Wu@arm.com Fault %(class_name)s::completeAcc(PacketPtr pkt, 3877609SGene.Wu@arm.com %(CPU_exec_context)s *xc, 3887609SGene.Wu@arm.com Trace::InstRecord *traceData) const 3897609SGene.Wu@arm.com { 3907712Sgblack@eecs.umich.edu if (machInst.itstateMask != 0) { 3917609SGene.Wu@arm.com xc->setMiscReg(MISCREG_ITSTATE, machInst.newItstate); 3927609SGene.Wu@arm.com } 3937609SGene.Wu@arm.com 3947712Sgblack@eecs.umich.edu return NoFault; 3957609SGene.Wu@arm.com } 3967609SGene.Wu@arm.com}}; 3977609SGene.Wu@arm.com 398