m5ops.isa revision 9687
17732SAli.Saidi@ARM.com// 27732SAli.Saidi@ARM.com// Copyright (c) 2010 ARM Limited 37732SAli.Saidi@ARM.com// All rights reserved 47732SAli.Saidi@ARM.com// 57732SAli.Saidi@ARM.com// The license below extends only to copyright in the software and shall 67732SAli.Saidi@ARM.com// not be construed as granting a license to any other intellectual 77732SAli.Saidi@ARM.com// property including but not limited to intellectual property relating 87732SAli.Saidi@ARM.com// to a hardware implementation of the functionality of the software 97732SAli.Saidi@ARM.com// licensed hereunder. You may use the software subject to the license 107732SAli.Saidi@ARM.com// terms below provided that you ensure that this notice is replicated 117732SAli.Saidi@ARM.com// unmodified and in its entirety in all distributions of the software, 127732SAli.Saidi@ARM.com// modified or unmodified, in source code or in binary form. 137732SAli.Saidi@ARM.com// 147732SAli.Saidi@ARM.com// Redistribution and use in source and binary forms, with or without 157732SAli.Saidi@ARM.com// modification, are permitted provided that the following conditions are 167732SAli.Saidi@ARM.com// met: redistributions of source code must retain the above copyright 177732SAli.Saidi@ARM.com// notice, this list of conditions and the following disclaimer; 187732SAli.Saidi@ARM.com// redistributions in binary form must reproduce the above copyright 197732SAli.Saidi@ARM.com// notice, this list of conditions and the following disclaimer in the 207732SAli.Saidi@ARM.com// documentation and/or other materials provided with the distribution; 217732SAli.Saidi@ARM.com// neither the name of the copyright holders nor the names of its 227732SAli.Saidi@ARM.com// contributors may be used to endorse or promote products derived from 237732SAli.Saidi@ARM.com// this software without specific prior written permission. 247732SAli.Saidi@ARM.com// 257732SAli.Saidi@ARM.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 267732SAli.Saidi@ARM.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 277732SAli.Saidi@ARM.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 287732SAli.Saidi@ARM.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 297732SAli.Saidi@ARM.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 307732SAli.Saidi@ARM.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 317732SAli.Saidi@ARM.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 327732SAli.Saidi@ARM.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 337732SAli.Saidi@ARM.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 347732SAli.Saidi@ARM.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 357732SAli.Saidi@ARM.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 367732SAli.Saidi@ARM.com// 377732SAli.Saidi@ARM.com// Authors: Gene Wu 387732SAli.Saidi@ARM.com 397732SAli.Saidi@ARM.com 407732SAli.Saidi@ARM.comlet {{ 419554Sandreas.hansson@arm.com header_output = ''' 429554Sandreas.hansson@arm.com uint64_t join32to64(uint32_t r1, uint32_t r0); 439554Sandreas.hansson@arm.com ''' 448204SAli.Saidi@ARM.com decoder_output = ''' 458204SAli.Saidi@ARM.com uint64_t join32to64(uint32_t r1, uint32_t r0) 468204SAli.Saidi@ARM.com { 478204SAli.Saidi@ARM.com uint64_t r = r1; 488204SAli.Saidi@ARM.com r <<= 32; 498204SAli.Saidi@ARM.com r |= r0; 508204SAli.Saidi@ARM.com return r; 518204SAli.Saidi@ARM.com } 528204SAli.Saidi@ARM.com ''' 538204SAli.Saidi@ARM.com exec_output = ''' 548204SAli.Saidi@ARM.com uint64_t join32to64(uint32_t r1, uint32_t r0); 558204SAli.Saidi@ARM.com ''' 568204SAli.Saidi@ARM.com 577732SAli.Saidi@ARM.com 587732SAli.Saidi@ARM.com armCode = ''' 597732SAli.Saidi@ARM.com PseudoInst::arm(xc->tcBase()); 607732SAli.Saidi@ARM.com ''' 617732SAli.Saidi@ARM.com armIop = InstObjParams("arm", "Arm", "PredOp", 627732SAli.Saidi@ARM.com { "code": armCode, 637732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 647732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 657732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(armIop) 667732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(armIop) 677732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(armIop) 687732SAli.Saidi@ARM.com 697732SAli.Saidi@ARM.com quiesceCode = ''' 708204SAli.Saidi@ARM.com PseudoInst::quiesce(xc->tcBase()); 717732SAli.Saidi@ARM.com ''' 727732SAli.Saidi@ARM.com quiesceIop = InstObjParams("quiesce", "Quiesce", "PredOp", 737732SAli.Saidi@ARM.com { "code": quiesceCode, 747732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 757732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsQuiesce"]) 767732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(quiesceIop) 777732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(quiesceIop) 788142SAli.Saidi@ARM.com exec_output += QuiescePredOpExecute.subst(quiesceIop) 797732SAli.Saidi@ARM.com 807732SAli.Saidi@ARM.com quiesceNsCode = ''' 818204SAli.Saidi@ARM.com PseudoInst::quiesceNs(xc->tcBase(), join32to64(R1, R0)); 827732SAli.Saidi@ARM.com ''' 837732SAli.Saidi@ARM.com 847732SAli.Saidi@ARM.com quiesceNsIop = InstObjParams("quiesceNs", "QuiesceNs", "PredOp", 857732SAli.Saidi@ARM.com { "code": quiesceNsCode, 867732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 877732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsQuiesce"]) 887732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(quiesceNsIop) 897732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(quiesceNsIop) 908142SAli.Saidi@ARM.com exec_output += QuiescePredOpExecute.subst(quiesceNsIop) 917732SAli.Saidi@ARM.com 927732SAli.Saidi@ARM.com quiesceCyclesCode = ''' 938204SAli.Saidi@ARM.com PseudoInst::quiesceCycles(xc->tcBase(), join32to64(R1, R0)); 947732SAli.Saidi@ARM.com ''' 957732SAli.Saidi@ARM.com 967732SAli.Saidi@ARM.com quiesceCyclesIop = InstObjParams("quiesceCycles", "QuiesceCycles", "PredOp", 977732SAli.Saidi@ARM.com { "code": quiesceCyclesCode, 987732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 997732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsQuiesce", "IsUnverifiable"]) 1007732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(quiesceCyclesIop) 1017732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(quiesceCyclesIop) 1028142SAli.Saidi@ARM.com exec_output += QuiescePredOpExecute.subst(quiesceCyclesIop) 1037732SAli.Saidi@ARM.com 1047732SAli.Saidi@ARM.com quiesceTimeCode = ''' 1058204SAli.Saidi@ARM.com uint64_t qt_val = PseudoInst::quiesceTime(xc->tcBase()); 1068204SAli.Saidi@ARM.com R0 = bits(qt_val, 31, 0); 1078204SAli.Saidi@ARM.com R1 = bits(qt_val, 63, 32); 1087732SAli.Saidi@ARM.com ''' 1097732SAli.Saidi@ARM.com 1107732SAli.Saidi@ARM.com quiesceTimeIop = InstObjParams("quiesceTime", "QuiesceTime", "PredOp", 1117732SAli.Saidi@ARM.com { "code": quiesceTimeCode, 1127732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 1137732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsUnverifiable"]) 1147732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(quiesceTimeIop) 1157732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(quiesceTimeIop) 1167732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(quiesceTimeIop) 1177732SAli.Saidi@ARM.com 1188204SAli.Saidi@ARM.com rpnsCode = ''' 1198204SAli.Saidi@ARM.com uint64_t rpns_val = PseudoInst::rpns(xc->tcBase()); 1208204SAli.Saidi@ARM.com R0 = bits(rpns_val, 31, 0); 1218204SAli.Saidi@ARM.com R1 = bits(rpns_val, 63, 32); 1228204SAli.Saidi@ARM.com ''' 1238204SAli.Saidi@ARM.com 1247732SAli.Saidi@ARM.com rpnsIop = InstObjParams("rpns", "Rpns", "PredOp", 1258204SAli.Saidi@ARM.com { "code": rpnsCode, 1267732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 1277732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsUnverifiable"]) 1287732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(rpnsIop) 1297732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(rpnsIop) 1307732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(rpnsIop) 1317732SAli.Saidi@ARM.com 1328204SAli.Saidi@ARM.com wakeCpuCode = ''' 1338204SAli.Saidi@ARM.com PseudoInst::wakeCPU(xc->tcBase(), join32to64(R1,R0)); 1348204SAli.Saidi@ARM.com ''' 1358204SAli.Saidi@ARM.com 1367732SAli.Saidi@ARM.com wakeCPUIop = InstObjParams("wakeCPU", "WakeCPU", "PredOp", 1378204SAli.Saidi@ARM.com { "code": wakeCpuCode, 1388204SAli.Saidi@ARM.com "predicate_test": predicateTest }, 1398204SAli.Saidi@ARM.com ["IsNonSpeculative", "IsUnverifiable"]) 1407732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(wakeCPUIop) 1417732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(wakeCPUIop) 1427732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(wakeCPUIop) 1437732SAli.Saidi@ARM.com 1447732SAli.Saidi@ARM.com deprecated_ivlbIop = InstObjParams("deprecated_ivlb", "Deprecated_ivlb", "PredOp", 1457732SAli.Saidi@ARM.com { "code": '''warn_once("Obsolete M5 ivlb instruction encountered.\\n");''', 1467732SAli.Saidi@ARM.com "predicate_test": predicateTest }) 1477732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(deprecated_ivlbIop) 1487732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(deprecated_ivlbIop) 1497732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(deprecated_ivlbIop) 1507732SAli.Saidi@ARM.com 1517732SAli.Saidi@ARM.com deprecated_ivleIop = InstObjParams("deprecated_ivle", "Deprecated_ivle", "PredOp", 1527732SAli.Saidi@ARM.com { "code": '''warn_once("Obsolete M5 ivle instruction encountered.\\n");''', 1537732SAli.Saidi@ARM.com "predicate_test": predicateTest }) 1547732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(deprecated_ivleIop) 1557732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(deprecated_ivleIop) 1567732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(deprecated_ivleIop) 1577732SAli.Saidi@ARM.com 1587732SAli.Saidi@ARM.com deprecated_exit_code = ''' 1597732SAli.Saidi@ARM.com warn_once("Obsolete M5 exit instruction encountered.\\n"); 1607732SAli.Saidi@ARM.com PseudoInst::m5exit(xc->tcBase(), 0); 1617732SAli.Saidi@ARM.com ''' 1627732SAli.Saidi@ARM.com 1637732SAli.Saidi@ARM.com deprecated_exitIop = InstObjParams("deprecated_exit", "Deprecated_exit", "PredOp", 1647732SAli.Saidi@ARM.com { "code": deprecated_exit_code, 1657732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 1667732SAli.Saidi@ARM.com ["No_OpClass", "IsNonSpeculative"]) 1677732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(deprecated_exitIop) 1687732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(deprecated_exitIop) 1697732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(deprecated_exitIop) 1707732SAli.Saidi@ARM.com 1718204SAli.Saidi@ARM.com m5exit_code = ''' 1728204SAli.Saidi@ARM.com PseudoInst::m5exit(xc->tcBase(), join32to64(R1, R0)); 1738204SAli.Saidi@ARM.com ''' 1747732SAli.Saidi@ARM.com m5exitIop = InstObjParams("m5exit", "M5exit", "PredOp", 1758204SAli.Saidi@ARM.com { "code": m5exit_code, 1768204SAli.Saidi@ARM.com "predicate_test": predicateTest }, 1778204SAli.Saidi@ARM.com ["No_OpClass", "IsNonSpeculative"]) 1787732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5exitIop) 1797732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5exitIop) 1807732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5exitIop) 1817732SAli.Saidi@ARM.com 1829687Sandreas@sandberg.pp.se m5fail_code = ''' 1839687Sandreas@sandberg.pp.se PseudoInst::m5fail(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 1849687Sandreas@sandberg.pp.se ''' 1859687Sandreas@sandberg.pp.se m5failIop = InstObjParams("m5fail", "M5fail", "PredOp", 1869687Sandreas@sandberg.pp.se { "code": m5fail_code, 1879687Sandreas@sandberg.pp.se "predicate_test": predicateTest }, 1889687Sandreas@sandberg.pp.se ["No_OpClass", "IsNonSpeculative"]) 1899687Sandreas@sandberg.pp.se header_output += BasicDeclare.subst(m5failIop) 1909687Sandreas@sandberg.pp.se decoder_output += BasicConstructor.subst(m5failIop) 1919687Sandreas@sandberg.pp.se exec_output += PredOpExecute.subst(m5failIop) 1929687Sandreas@sandberg.pp.se 1937732SAli.Saidi@ARM.com loadsymbolCode = ''' 1947732SAli.Saidi@ARM.com PseudoInst::loadsymbol(xc->tcBase()); 1957732SAli.Saidi@ARM.com ''' 1967732SAli.Saidi@ARM.com 1977732SAli.Saidi@ARM.com loadsymbolIop = InstObjParams("loadsymbol", "Loadsymbol", "PredOp", 1987732SAli.Saidi@ARM.com { "code": loadsymbolCode, 1997732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2007732SAli.Saidi@ARM.com ["No_OpClass", "IsNonSpeculative"]) 2017732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(loadsymbolIop) 2027732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(loadsymbolIop) 2037732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(loadsymbolIop) 2047732SAli.Saidi@ARM.com 2057732SAli.Saidi@ARM.com initparamCode = ''' 2068659SAli.Saidi@ARM.com uint64_t ip_val = PseudoInst::initParam(xc->tcBase()); 2078659SAli.Saidi@ARM.com R0 = bits(ip_val, 31, 0); 2088659SAli.Saidi@ARM.com R1 = bits(ip_val, 63, 32); 2097732SAli.Saidi@ARM.com ''' 2107732SAli.Saidi@ARM.com 2117732SAli.Saidi@ARM.com initparamIop = InstObjParams("initparam", "Initparam", "PredOp", 2127732SAli.Saidi@ARM.com { "code": initparamCode, 2138659SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2148659SAli.Saidi@ARM.com ["IsNonSpeculative"]) 2157732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(initparamIop) 2167732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(initparamIop) 2177732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(initparamIop) 2187732SAli.Saidi@ARM.com 2198204SAli.Saidi@ARM.com resetstats_code = ''' 2208204SAli.Saidi@ARM.com PseudoInst::resetstats(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 2218204SAli.Saidi@ARM.com ''' 2228204SAli.Saidi@ARM.com 2237732SAli.Saidi@ARM.com resetstatsIop = InstObjParams("resetstats", "Resetstats", "PredOp", 2248204SAli.Saidi@ARM.com { "code": resetstats_code, 2257732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2267732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 2277732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(resetstatsIop) 2287732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(resetstatsIop) 2297732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(resetstatsIop) 2307732SAli.Saidi@ARM.com 2318204SAli.Saidi@ARM.com dumpstats_code = ''' 2328204SAli.Saidi@ARM.com PseudoInst::dumpstats(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 2338204SAli.Saidi@ARM.com ''' 2347732SAli.Saidi@ARM.com dumpstatsIop = InstObjParams("dumpstats", "Dumpstats", "PredOp", 2358204SAli.Saidi@ARM.com { "code": dumpstats_code, 2367732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2377732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 2387732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(dumpstatsIop) 2397732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(dumpstatsIop) 2407732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(dumpstatsIop) 2417732SAli.Saidi@ARM.com 2428204SAli.Saidi@ARM.com dumpresetstats_code = ''' 2438204SAli.Saidi@ARM.com PseudoInst::dumpresetstats(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 2448204SAli.Saidi@ARM.com ''' 2457732SAli.Saidi@ARM.com dumpresetstatsIop = InstObjParams("dumpresetstats", "Dumpresetstats", "PredOp", 2468204SAli.Saidi@ARM.com { "code": dumpresetstats_code, 2477732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2487732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 2497732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(dumpresetstatsIop) 2507732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(dumpresetstatsIop) 2517732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(dumpresetstatsIop) 2527732SAli.Saidi@ARM.com 2538204SAli.Saidi@ARM.com m5checkpoint_code = ''' 2548204SAli.Saidi@ARM.com PseudoInst::m5checkpoint(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 2558204SAli.Saidi@ARM.com ''' 2567732SAli.Saidi@ARM.com m5checkpointIop = InstObjParams("m5checkpoint", "M5checkpoint", "PredOp", 2578204SAli.Saidi@ARM.com { "code": m5checkpoint_code, 2587732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2598733Sgeoffrey.blake@arm.com ["IsNonSpeculative", "IsUnverifiable"]) 2607732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5checkpointIop) 2617732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5checkpointIop) 2627732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5checkpointIop) 2637732SAli.Saidi@ARM.com 2647732SAli.Saidi@ARM.com m5readfileCode = ''' 2658204SAli.Saidi@ARM.com int n = 4; 2668204SAli.Saidi@ARM.com uint64_t offset = getArgument(xc->tcBase(), n, sizeof(uint64_t), false); 2678204SAli.Saidi@ARM.com R0 = PseudoInst::readfile(xc->tcBase(), R0, join32to64(R3,R2), offset); 2687732SAli.Saidi@ARM.com ''' 2697732SAli.Saidi@ARM.com m5readfileIop = InstObjParams("m5readfile", "M5readfile", "PredOp", 2707732SAli.Saidi@ARM.com { "code": m5readfileCode, 2717732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2728733Sgeoffrey.blake@arm.com ["IsNonSpeculative", "IsUnverifiable"]) 2737732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5readfileIop) 2747732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5readfileIop) 2757732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5readfileIop) 2767732SAli.Saidi@ARM.com 2778734Sdam.sunwoo@arm.com m5writefileCode = ''' 2788734Sdam.sunwoo@arm.com int n = 4; 2798734Sdam.sunwoo@arm.com uint64_t offset = getArgument(xc->tcBase(), n, sizeof(uint64_t), false); 2808734Sdam.sunwoo@arm.com n = 6; 2818734Sdam.sunwoo@arm.com Addr filenameAddr = getArgument(xc->tcBase(), n, sizeof(Addr), false); 2828734Sdam.sunwoo@arm.com R0 = PseudoInst::writefile(xc->tcBase(), R0, join32to64(R3,R2), offset, 2838734Sdam.sunwoo@arm.com filenameAddr); 2848734Sdam.sunwoo@arm.com ''' 2858734Sdam.sunwoo@arm.com m5writefileIop = InstObjParams("m5writefile", "M5writefile", "PredOp", 2868734Sdam.sunwoo@arm.com { "code": m5writefileCode, 2878734Sdam.sunwoo@arm.com "predicate_test": predicateTest }, 2888734Sdam.sunwoo@arm.com ["IsNonSpeculative"]) 2898734Sdam.sunwoo@arm.com header_output += BasicDeclare.subst(m5writefileIop) 2908734Sdam.sunwoo@arm.com decoder_output += BasicConstructor.subst(m5writefileIop) 2918734Sdam.sunwoo@arm.com exec_output += PredOpExecute.subst(m5writefileIop) 2928734Sdam.sunwoo@arm.com 2937732SAli.Saidi@ARM.com m5breakIop = InstObjParams("m5break", "M5break", "PredOp", 2947732SAli.Saidi@ARM.com { "code": "PseudoInst::debugbreak(xc->tcBase());", 2957732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2967732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 2977732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5breakIop) 2987732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5breakIop) 2997732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5breakIop) 3007732SAli.Saidi@ARM.com 3017732SAli.Saidi@ARM.com m5switchcpuIop = InstObjParams("m5switchcpu", "M5switchcpu", "PredOp", 3027732SAli.Saidi@ARM.com { "code": "PseudoInst::switchcpu(xc->tcBase());", 3037732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 3047732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 3057732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5switchcpuIop) 3067732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5switchcpuIop) 3077732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5switchcpuIop) 3087732SAli.Saidi@ARM.com 3097732SAli.Saidi@ARM.com m5addsymbolCode = ''' 3108204SAli.Saidi@ARM.com PseudoInst::addsymbol(xc->tcBase(), join32to64(R1, R0), R2); 3117732SAli.Saidi@ARM.com ''' 3127732SAli.Saidi@ARM.com m5addsymbolIop = InstObjParams("m5addsymbol", "M5addsymbol", "PredOp", 3137732SAli.Saidi@ARM.com { "code": m5addsymbolCode, 3147732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 3157732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 3167732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5addsymbolIop) 3177732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5addsymbolIop) 3187732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5addsymbolIop) 3197732SAli.Saidi@ARM.com 3207732SAli.Saidi@ARM.com m5panicCode = '''panic("M5 panic instruction called at pc=%#x.", 3217732SAli.Saidi@ARM.com xc->pcState().pc());''' 3227732SAli.Saidi@ARM.com m5panicIop = InstObjParams("m5panic", "M5panic", "PredOp", 3237732SAli.Saidi@ARM.com { "code": m5panicCode, 3247732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 3257732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 3267732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5panicIop) 3277732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5panicIop) 3287732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5panicIop) 3297732SAli.Saidi@ARM.com 3308354Sgedare@gwmail.gwu.edu m5workbeginCode = '''PseudoInst::workbegin( 3318354Sgedare@gwmail.gwu.edu xc->tcBase(), 3328354Sgedare@gwmail.gwu.edu join32to64(R1, R0), 3338354Sgedare@gwmail.gwu.edu join32to64(R3, R2) 3348354Sgedare@gwmail.gwu.edu );''' 3358354Sgedare@gwmail.gwu.edu m5workbeginIop = InstObjParams("m5workbegin", "M5workbegin", "PredOp", 3368354Sgedare@gwmail.gwu.edu { "code": m5workbeginCode, 3378354Sgedare@gwmail.gwu.edu "predicate_test": predicateTest }, 3388354Sgedare@gwmail.gwu.edu ["IsNonSpeculative"]) 3398354Sgedare@gwmail.gwu.edu header_output += BasicDeclare.subst(m5workbeginIop) 3408354Sgedare@gwmail.gwu.edu decoder_output += BasicConstructor.subst(m5workbeginIop) 3418354Sgedare@gwmail.gwu.edu exec_output += PredOpExecute.subst(m5workbeginIop) 3428354Sgedare@gwmail.gwu.edu 3438354Sgedare@gwmail.gwu.edu m5workendCode = '''PseudoInst::workend( 3448354Sgedare@gwmail.gwu.edu xc->tcBase(), 3458354Sgedare@gwmail.gwu.edu join32to64(R1, R0), 3468354Sgedare@gwmail.gwu.edu join32to64(R3, R2) 3478354Sgedare@gwmail.gwu.edu );''' 3488354Sgedare@gwmail.gwu.edu m5workendIop = InstObjParams("m5workend", "M5workend", "PredOp", 3498354Sgedare@gwmail.gwu.edu { "code": m5workendCode, 3508354Sgedare@gwmail.gwu.edu "predicate_test": predicateTest }, 3518354Sgedare@gwmail.gwu.edu ["IsNonSpeculative"]) 3528354Sgedare@gwmail.gwu.edu header_output += BasicDeclare.subst(m5workendIop) 3538354Sgedare@gwmail.gwu.edu decoder_output += BasicConstructor.subst(m5workendIop) 3548354Sgedare@gwmail.gwu.edu exec_output += PredOpExecute.subst(m5workendIop) 3558354Sgedare@gwmail.gwu.edu 3567732SAli.Saidi@ARM.com}}; 357