m5ops.isa revision 8798:adaa92be9037
12817Sksewell@umich.edu//
22817Sksewell@umich.edu// Copyright (c) 2010 ARM Limited
32817Sksewell@umich.edu// All rights reserved
42817Sksewell@umich.edu//
52817Sksewell@umich.edu// The license below extends only to copyright in the software and shall
62817Sksewell@umich.edu// not be construed as granting a license to any other intellectual
72817Sksewell@umich.edu// property including but not limited to intellectual property relating
82817Sksewell@umich.edu// to a hardware implementation of the functionality of the software
92817Sksewell@umich.edu// licensed hereunder.  You may use the software subject to the license
102817Sksewell@umich.edu// terms below provided that you ensure that this notice is replicated
112817Sksewell@umich.edu// unmodified and in its entirety in all distributions of the software,
122817Sksewell@umich.edu// modified or unmodified, in source code or in binary form.
132817Sksewell@umich.edu//
142817Sksewell@umich.edu// Redistribution and use in source and binary forms, with or without
152817Sksewell@umich.edu// modification, are permitted provided that the following conditions are
162817Sksewell@umich.edu// met: redistributions of source code must retain the above copyright
172817Sksewell@umich.edu// notice, this list of conditions and the following disclaimer;
182817Sksewell@umich.edu// redistributions in binary form must reproduce the above copyright
192817Sksewell@umich.edu// notice, this list of conditions and the following disclaimer in the
202817Sksewell@umich.edu// documentation and/or other materials provided with the distribution;
212817Sksewell@umich.edu// neither the name of the copyright holders nor the names of its
222817Sksewell@umich.edu// contributors may be used to endorse or promote products derived from
232817Sksewell@umich.edu// this software without specific prior written permission.
242817Sksewell@umich.edu//
252817Sksewell@umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
262817Sksewell@umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
272817Sksewell@umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
282817Sksewell@umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
292817Sksewell@umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
302817Sksewell@umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
312817Sksewell@umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
322817Sksewell@umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
332817Sksewell@umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
342935Sksewell@umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
352817Sksewell@umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
362817Sksewell@umich.edu//
372834Sksewell@umich.edu// Authors: Gene Wu
382834Sksewell@umich.edu
392834Sksewell@umich.edu
402834Sksewell@umich.edulet {{
412834Sksewell@umich.edu    header_output = ""
422834Sksewell@umich.edu    decoder_output = '''
432834Sksewell@umich.edu    uint64_t join32to64(uint32_t r1, uint32_t r0)
442817Sksewell@umich.edu    {
452817Sksewell@umich.edu        uint64_t r = r1;
462817Sksewell@umich.edu        r <<= 32;
472817Sksewell@umich.edu        r |= r0;
482817Sksewell@umich.edu        return r;
492817Sksewell@umich.edu    }
502817Sksewell@umich.edu    '''
512817Sksewell@umich.edu    exec_output = '''
522817Sksewell@umich.edu    uint64_t join32to64(uint32_t r1, uint32_t r0);
532817Sksewell@umich.edu    '''
542817Sksewell@umich.edu
552817Sksewell@umich.edu
562817Sksewell@umich.edu    armCode = '''
572817Sksewell@umich.edu    PseudoInst::arm(xc->tcBase());
582817Sksewell@umich.edu    '''
592817Sksewell@umich.edu    armIop = InstObjParams("arm", "Arm", "PredOp",
602817Sksewell@umich.edu                           { "code": armCode,
612817Sksewell@umich.edu                             "predicate_test": predicateTest },
622817Sksewell@umich.edu                             ["IsNonSpeculative"])
632817Sksewell@umich.edu    header_output += BasicDeclare.subst(armIop)
642817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(armIop)
652817Sksewell@umich.edu    exec_output += PredOpExecute.subst(armIop)
662817Sksewell@umich.edu
672817Sksewell@umich.edu    quiesceCode = '''
682817Sksewell@umich.edu    PseudoInst::quiesce(xc->tcBase());
693784Sgblack@eecs.umich.edu    '''
703789Sgblack@eecs.umich.edu    quiesceIop = InstObjParams("quiesce", "Quiesce", "PredOp",
713784Sgblack@eecs.umich.edu                           { "code": quiesceCode,
723784Sgblack@eecs.umich.edu                             "predicate_test": predicateTest },
733789Sgblack@eecs.umich.edu                             ["IsNonSpeculative", "IsQuiesce"])
743784Sgblack@eecs.umich.edu    header_output += BasicDeclare.subst(quiesceIop)
752817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(quiesceIop)
762817Sksewell@umich.edu    exec_output += QuiescePredOpExecute.subst(quiesceIop)
772817Sksewell@umich.edu
782817Sksewell@umich.edu    quiesceNsCode = '''
792817Sksewell@umich.edu    PseudoInst::quiesceNs(xc->tcBase(), join32to64(R1, R0));
802817Sksewell@umich.edu    '''
812817Sksewell@umich.edu
822817Sksewell@umich.edu    quiesceNsIop = InstObjParams("quiesceNs", "QuiesceNs", "PredOp",
832817Sksewell@umich.edu                           { "code": quiesceNsCode,
842817Sksewell@umich.edu                             "predicate_test": predicateTest },
852817Sksewell@umich.edu                             ["IsNonSpeculative", "IsQuiesce"])
862817Sksewell@umich.edu    header_output += BasicDeclare.subst(quiesceNsIop)
872817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(quiesceNsIop)
882817Sksewell@umich.edu    exec_output += QuiescePredOpExecute.subst(quiesceNsIop)
892817Sksewell@umich.edu
902817Sksewell@umich.edu    quiesceCyclesCode = '''
912817Sksewell@umich.edu    PseudoInst::quiesceCycles(xc->tcBase(), join32to64(R1, R0));
923548Sgblack@eecs.umich.edu    '''
932817Sksewell@umich.edu
942817Sksewell@umich.edu    quiesceCyclesIop = InstObjParams("quiesceCycles", "QuiesceCycles", "PredOp",
952817Sksewell@umich.edu                           { "code": quiesceCyclesCode,
962817Sksewell@umich.edu                             "predicate_test": predicateTest },
975499Ssaidi@eecs.umich.edu                             ["IsNonSpeculative", "IsQuiesce", "IsUnverifiable"])
983675Sktlim@umich.edu    header_output += BasicDeclare.subst(quiesceCyclesIop)
995497Ssaidi@eecs.umich.edu    decoder_output += BasicConstructor.subst(quiesceCyclesIop)
1002817Sksewell@umich.edu    exec_output += QuiescePredOpExecute.subst(quiesceCyclesIop)
1012817Sksewell@umich.edu
1022817Sksewell@umich.edu    quiesceTimeCode = '''
1032817Sksewell@umich.edu    uint64_t qt_val = PseudoInst::quiesceTime(xc->tcBase());
1042817Sksewell@umich.edu    R0 = bits(qt_val, 31, 0);
1052817Sksewell@umich.edu    R1 = bits(qt_val, 63, 32);
1062817Sksewell@umich.edu    '''
1072817Sksewell@umich.edu
1082817Sksewell@umich.edu    quiesceTimeIop = InstObjParams("quiesceTime", "QuiesceTime", "PredOp",
1092817Sksewell@umich.edu                           { "code": quiesceTimeCode,
1102817Sksewell@umich.edu                             "predicate_test": predicateTest },
1112817Sksewell@umich.edu                             ["IsNonSpeculative", "IsUnverifiable"])
1122817Sksewell@umich.edu    header_output += BasicDeclare.subst(quiesceTimeIop)
1132817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(quiesceTimeIop)
1142817Sksewell@umich.edu    exec_output += PredOpExecute.subst(quiesceTimeIop)
1152817Sksewell@umich.edu
1162817Sksewell@umich.edu    rpnsCode = '''
1172817Sksewell@umich.edu    uint64_t rpns_val = PseudoInst::rpns(xc->tcBase());
1185250Sksewell@umich.edu    R0 = bits(rpns_val, 31, 0);
1192817Sksewell@umich.edu    R1 = bits(rpns_val, 63, 32);
1202817Sksewell@umich.edu    '''
1212875Sksewell@umich.edu
1222817Sksewell@umich.edu    rpnsIop = InstObjParams("rpns", "Rpns", "PredOp",
1232817Sksewell@umich.edu                           { "code": rpnsCode,
1245250Sksewell@umich.edu                             "predicate_test": predicateTest },
1252817Sksewell@umich.edu                             ["IsNonSpeculative", "IsUnverifiable"])
1262817Sksewell@umich.edu    header_output += BasicDeclare.subst(rpnsIop)
1272817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(rpnsIop)
1282817Sksewell@umich.edu    exec_output += PredOpExecute.subst(rpnsIop)
1292817Sksewell@umich.edu
1302817Sksewell@umich.edu    wakeCpuCode = '''
1312817Sksewell@umich.edu    PseudoInst::wakeCPU(xc->tcBase(), join32to64(R1,R0));
1322817Sksewell@umich.edu    '''
1332817Sksewell@umich.edu
1342817Sksewell@umich.edu    wakeCPUIop = InstObjParams("wakeCPU", "WakeCPU", "PredOp",
1352817Sksewell@umich.edu                   { "code": wakeCpuCode,
1362817Sksewell@umich.edu                     "predicate_test": predicateTest },
1372817Sksewell@umich.edu                     ["IsNonSpeculative", "IsUnverifiable"])
1382817Sksewell@umich.edu    header_output += BasicDeclare.subst(wakeCPUIop)
1392817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(wakeCPUIop)
1402817Sksewell@umich.edu    exec_output += PredOpExecute.subst(wakeCPUIop)
1412817Sksewell@umich.edu
1422817Sksewell@umich.edu    deprecated_ivlbIop = InstObjParams("deprecated_ivlb", "Deprecated_ivlb", "PredOp",
1432817Sksewell@umich.edu                           { "code": '''warn_once("Obsolete M5 ivlb instruction encountered.\\n");''',
1442817Sksewell@umich.edu                             "predicate_test": predicateTest })
1452817Sksewell@umich.edu    header_output += BasicDeclare.subst(deprecated_ivlbIop)
1462817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(deprecated_ivlbIop)
1472817Sksewell@umich.edu    exec_output += PredOpExecute.subst(deprecated_ivlbIop)
1482817Sksewell@umich.edu
1492817Sksewell@umich.edu    deprecated_ivleIop = InstObjParams("deprecated_ivle", "Deprecated_ivle", "PredOp",
1502817Sksewell@umich.edu                           { "code": '''warn_once("Obsolete M5 ivle instruction encountered.\\n");''',
1512817Sksewell@umich.edu                             "predicate_test": predicateTest })
1522817Sksewell@umich.edu    header_output += BasicDeclare.subst(deprecated_ivleIop)
1532817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(deprecated_ivleIop)
1542817Sksewell@umich.edu    exec_output += PredOpExecute.subst(deprecated_ivleIop)
1552817Sksewell@umich.edu
1562817Sksewell@umich.edu    deprecated_exit_code = '''
1572817Sksewell@umich.edu        warn_once("Obsolete M5 exit instruction encountered.\\n");
1582817Sksewell@umich.edu        PseudoInst::m5exit(xc->tcBase(), 0);
1592817Sksewell@umich.edu    '''
1602817Sksewell@umich.edu
1612817Sksewell@umich.edu    deprecated_exitIop = InstObjParams("deprecated_exit", "Deprecated_exit", "PredOp",
1622817Sksewell@umich.edu                           { "code": deprecated_exit_code,
1632817Sksewell@umich.edu                             "predicate_test": predicateTest },
1642817Sksewell@umich.edu                             ["No_OpClass", "IsNonSpeculative"])
1652817Sksewell@umich.edu    header_output += BasicDeclare.subst(deprecated_exitIop)
1662817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(deprecated_exitIop)
1672817Sksewell@umich.edu    exec_output += PredOpExecute.subst(deprecated_exitIop)
1682817Sksewell@umich.edu
1692817Sksewell@umich.edu    m5exit_code = '''
1702817Sksewell@umich.edu        PseudoInst::m5exit(xc->tcBase(), join32to64(R1, R0));
1712817Sksewell@umich.edu    '''
1722817Sksewell@umich.edu    m5exitIop = InstObjParams("m5exit", "M5exit", "PredOp",
1732817Sksewell@umich.edu                                   { "code": m5exit_code,
1742817Sksewell@umich.edu                                     "predicate_test": predicateTest },
1752817Sksewell@umich.edu                                     ["No_OpClass", "IsNonSpeculative"])
1762817Sksewell@umich.edu    header_output += BasicDeclare.subst(m5exitIop)
1772817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(m5exitIop)
1782817Sksewell@umich.edu    exec_output += PredOpExecute.subst(m5exitIop)
1792817Sksewell@umich.edu
1802817Sksewell@umich.edu    loadsymbolCode = '''
1812817Sksewell@umich.edu    PseudoInst::loadsymbol(xc->tcBase());
1822817Sksewell@umich.edu    '''
1832817Sksewell@umich.edu
1842817Sksewell@umich.edu    loadsymbolIop = InstObjParams("loadsymbol", "Loadsymbol", "PredOp",
1852817Sksewell@umich.edu                           { "code": loadsymbolCode,
1862817Sksewell@umich.edu                             "predicate_test": predicateTest },
1872817Sksewell@umich.edu                             ["No_OpClass", "IsNonSpeculative"])
1882817Sksewell@umich.edu    header_output += BasicDeclare.subst(loadsymbolIop)
1892817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(loadsymbolIop)
1902817Sksewell@umich.edu    exec_output += PredOpExecute.subst(loadsymbolIop)
1912817Sksewell@umich.edu
1922817Sksewell@umich.edu    initparamCode = '''
1932817Sksewell@umich.edu    uint64_t ip_val  = PseudoInst::initParam(xc->tcBase());
1942817Sksewell@umich.edu    R0 = bits(ip_val, 31, 0);
1952817Sksewell@umich.edu    R1 = bits(ip_val, 63, 32);
1962817Sksewell@umich.edu    '''
1972817Sksewell@umich.edu
1982817Sksewell@umich.edu    initparamIop = InstObjParams("initparam", "Initparam", "PredOp",
1992817Sksewell@umich.edu                           { "code": initparamCode,
2002817Sksewell@umich.edu                             "predicate_test": predicateTest },
2012817Sksewell@umich.edu                             ["IsNonSpeculative"])
2022817Sksewell@umich.edu    header_output += BasicDeclare.subst(initparamIop)
2032817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(initparamIop)
2045259Sksewell@umich.edu    exec_output += PredOpExecute.subst(initparamIop)
2055259Sksewell@umich.edu
2065259Sksewell@umich.edu    resetstats_code = '''
2075259Sksewell@umich.edu    PseudoInst::resetstats(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2));
2085259Sksewell@umich.edu    '''
2095259Sksewell@umich.edu
2105259Sksewell@umich.edu    resetstatsIop = InstObjParams("resetstats", "Resetstats", "PredOp",
2115259Sksewell@umich.edu                           { "code": resetstats_code,
2125259Sksewell@umich.edu                             "predicate_test": predicateTest },
2135259Sksewell@umich.edu                             ["IsNonSpeculative"])
2142817Sksewell@umich.edu    header_output += BasicDeclare.subst(resetstatsIop)
2154172Ssaidi@eecs.umich.edu    decoder_output += BasicConstructor.subst(resetstatsIop)
2164172Ssaidi@eecs.umich.edu    exec_output += PredOpExecute.subst(resetstatsIop)
2174172Ssaidi@eecs.umich.edu
2184172Ssaidi@eecs.umich.edu    dumpstats_code = '''
2194172Ssaidi@eecs.umich.edu    PseudoInst::dumpstats(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2));
2202817Sksewell@umich.edu    '''
2212817Sksewell@umich.edu    dumpstatsIop = InstObjParams("dumpstats", "Dumpstats", "PredOp",
2222817Sksewell@umich.edu                           { "code": dumpstats_code,
2232817Sksewell@umich.edu                             "predicate_test": predicateTest },
2244172Ssaidi@eecs.umich.edu                             ["IsNonSpeculative"])
2252817Sksewell@umich.edu    header_output += BasicDeclare.subst(dumpstatsIop)
2262817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(dumpstatsIop)
2272817Sksewell@umich.edu    exec_output += PredOpExecute.subst(dumpstatsIop)
2284172Ssaidi@eecs.umich.edu
2292817Sksewell@umich.edu    dumpresetstats_code = '''
2302817Sksewell@umich.edu    PseudoInst::dumpresetstats(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2));
2312817Sksewell@umich.edu    '''
2322817Sksewell@umich.edu    dumpresetstatsIop = InstObjParams("dumpresetstats", "Dumpresetstats", "PredOp",
2332817Sksewell@umich.edu                           { "code": dumpresetstats_code,
2342817Sksewell@umich.edu                             "predicate_test": predicateTest },
2352817Sksewell@umich.edu                             ["IsNonSpeculative"])
2362817Sksewell@umich.edu    header_output += BasicDeclare.subst(dumpresetstatsIop)
2372817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(dumpresetstatsIop)
2382817Sksewell@umich.edu    exec_output += PredOpExecute.subst(dumpresetstatsIop)
2392817Sksewell@umich.edu
2402817Sksewell@umich.edu    m5checkpoint_code = '''
2412817Sksewell@umich.edu    PseudoInst::m5checkpoint(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2));
2422817Sksewell@umich.edu    '''
2432817Sksewell@umich.edu    m5checkpointIop = InstObjParams("m5checkpoint", "M5checkpoint", "PredOp",
2442817Sksewell@umich.edu                           { "code": m5checkpoint_code,
2452817Sksewell@umich.edu                             "predicate_test": predicateTest },
2462817Sksewell@umich.edu                             ["IsNonSpeculative"])
2472817Sksewell@umich.edu    header_output += BasicDeclare.subst(m5checkpointIop)
2482817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(m5checkpointIop)
2492817Sksewell@umich.edu    exec_output += PredOpExecute.subst(m5checkpointIop)
2502817Sksewell@umich.edu
2512817Sksewell@umich.edu    m5readfileCode = '''
2522817Sksewell@umich.edu    int n = 4;
2532817Sksewell@umich.edu    uint64_t offset = getArgument(xc->tcBase(), n, sizeof(uint64_t), false);
2542817Sksewell@umich.edu    R0 = PseudoInst::readfile(xc->tcBase(), R0, join32to64(R3,R2), offset);
2552817Sksewell@umich.edu    '''
2562817Sksewell@umich.edu    m5readfileIop = InstObjParams("m5readfile", "M5readfile", "PredOp",
2572817Sksewell@umich.edu                           { "code": m5readfileCode,
2582817Sksewell@umich.edu                             "predicate_test": predicateTest },
2592817Sksewell@umich.edu                             ["IsNonSpeculative"])
2602817Sksewell@umich.edu    header_output += BasicDeclare.subst(m5readfileIop)
2612817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(m5readfileIop)
2622817Sksewell@umich.edu    exec_output += PredOpExecute.subst(m5readfileIop)
2635595Sgblack@eecs.umich.edu
2645595Sgblack@eecs.umich.edu    m5breakIop = InstObjParams("m5break", "M5break", "PredOp",
2655595Sgblack@eecs.umich.edu                           { "code": "PseudoInst::debugbreak(xc->tcBase());",
2665595Sgblack@eecs.umich.edu                             "predicate_test": predicateTest },
2675595Sgblack@eecs.umich.edu                             ["IsNonSpeculative"])
2685595Sgblack@eecs.umich.edu    header_output += BasicDeclare.subst(m5breakIop)
2692817Sksewell@umich.edu    decoder_output += BasicConstructor.subst(m5breakIop)
2705595Sgblack@eecs.umich.edu    exec_output += PredOpExecute.subst(m5breakIop)
2715595Sgblack@eecs.umich.edu
2725595Sgblack@eecs.umich.edu    m5switchcpuIop = InstObjParams("m5switchcpu", "M5switchcpu", "PredOp",
2735595Sgblack@eecs.umich.edu                           { "code": "PseudoInst::switchcpu(xc->tcBase());",
2745595Sgblack@eecs.umich.edu                             "predicate_test": predicateTest },
2755595Sgblack@eecs.umich.edu                             ["IsNonSpeculative"])
2765595Sgblack@eecs.umich.edu    header_output += BasicDeclare.subst(m5switchcpuIop)
2775595Sgblack@eecs.umich.edu    decoder_output += BasicConstructor.subst(m5switchcpuIop)
2785595Sgblack@eecs.umich.edu    exec_output += PredOpExecute.subst(m5switchcpuIop)
2795595Sgblack@eecs.umich.edu
2805595Sgblack@eecs.umich.edu    m5addsymbolCode = '''
2815595Sgblack@eecs.umich.edu    PseudoInst::addsymbol(xc->tcBase(), join32to64(R1, R0), R2);
2825595Sgblack@eecs.umich.edu    '''
2835595Sgblack@eecs.umich.edu    m5addsymbolIop = InstObjParams("m5addsymbol", "M5addsymbol", "PredOp",
2845595Sgblack@eecs.umich.edu                           { "code": m5addsymbolCode,
2855595Sgblack@eecs.umich.edu                             "predicate_test": predicateTest },
2865595Sgblack@eecs.umich.edu                             ["IsNonSpeculative"])
2875595Sgblack@eecs.umich.edu    header_output += BasicDeclare.subst(m5addsymbolIop)
2885595Sgblack@eecs.umich.edu    decoder_output += BasicConstructor.subst(m5addsymbolIop)
2895595Sgblack@eecs.umich.edu    exec_output += PredOpExecute.subst(m5addsymbolIop)
2905595Sgblack@eecs.umich.edu
2915595Sgblack@eecs.umich.edu    m5panicCode = '''panic("M5 panic instruction called at pc=%#x.",
2925595Sgblack@eecs.umich.edu                     xc->pcState().pc());'''
2935595Sgblack@eecs.umich.edu    m5panicIop = InstObjParams("m5panic", "M5panic", "PredOp",
2945595Sgblack@eecs.umich.edu                     { "code": m5panicCode,
2955595Sgblack@eecs.umich.edu                       "predicate_test": predicateTest },
2965595Sgblack@eecs.umich.edu                       ["IsNonSpeculative"])
2975595Sgblack@eecs.umich.edu    header_output += BasicDeclare.subst(m5panicIop)
2985595Sgblack@eecs.umich.edu    decoder_output += BasicConstructor.subst(m5panicIop)
2995595Sgblack@eecs.umich.edu    exec_output += PredOpExecute.subst(m5panicIop)
3005595Sgblack@eecs.umich.edu
3015595Sgblack@eecs.umich.edu    m5workbeginCode = '''PseudoInst::workbegin(
3025595Sgblack@eecs.umich.edu                          xc->tcBase(),
3035595Sgblack@eecs.umich.edu                          join32to64(R1, R0),
3045595Sgblack@eecs.umich.edu                          join32to64(R3, R2)
3055595Sgblack@eecs.umich.edu                      );'''
3065595Sgblack@eecs.umich.edu    m5workbeginIop = InstObjParams("m5workbegin", "M5workbegin", "PredOp",
3075595Sgblack@eecs.umich.edu                     { "code": m5workbeginCode,
3082817Sksewell@umich.edu                       "predicate_test": predicateTest },
3092817Sksewell@umich.edu                       ["IsNonSpeculative"])
3102817Sksewell@umich.edu    header_output += BasicDeclare.subst(m5workbeginIop)
311    decoder_output += BasicConstructor.subst(m5workbeginIop)
312    exec_output += PredOpExecute.subst(m5workbeginIop)
313
314    m5workendCode = '''PseudoInst::workend(
315                        xc->tcBase(),
316                        join32to64(R1, R0),
317                        join32to64(R3, R2)
318                    );'''
319    m5workendIop = InstObjParams("m5workend", "M5workend", "PredOp",
320                     { "code": m5workendCode,
321                       "predicate_test": predicateTest },
322                       ["IsNonSpeculative"])
323    header_output += BasicDeclare.subst(m5workendIop)
324    decoder_output += BasicConstructor.subst(m5workendIop)
325    exec_output += PredOpExecute.subst(m5workendIop)
326
327}};
328