m5ops.isa revision 11634
17732SAli.Saidi@ARM.com// 210037SARM gem5 Developers// Copyright (c) 2010, 2012-2013 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 ''' 6110037SARM gem5 Developers 627732SAli.Saidi@ARM.com armIop = InstObjParams("arm", "Arm", "PredOp", 637732SAli.Saidi@ARM.com { "code": armCode, 647732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 657732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 667732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(armIop) 677732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(armIop) 687732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(armIop) 697732SAli.Saidi@ARM.com 707732SAli.Saidi@ARM.com quiesceCode = ''' 718204SAli.Saidi@ARM.com PseudoInst::quiesce(xc->tcBase()); 727732SAli.Saidi@ARM.com ''' 7310037SARM gem5 Developers 747732SAli.Saidi@ARM.com quiesceIop = InstObjParams("quiesce", "Quiesce", "PredOp", 757732SAli.Saidi@ARM.com { "code": quiesceCode, 767732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 777732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsQuiesce"]) 787732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(quiesceIop) 797732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(quiesceIop) 808142SAli.Saidi@ARM.com exec_output += QuiescePredOpExecute.subst(quiesceIop) 817732SAli.Saidi@ARM.com 827732SAli.Saidi@ARM.com quiesceNsCode = ''' 838204SAli.Saidi@ARM.com PseudoInst::quiesceNs(xc->tcBase(), join32to64(R1, R0)); 847732SAli.Saidi@ARM.com ''' 857732SAli.Saidi@ARM.com 8610037SARM gem5 Developers quiesceNsCode64 = ''' 8710037SARM gem5 Developers PseudoInst::quiesceNs(xc->tcBase(), X0); 8810037SARM gem5 Developers ''' 8910037SARM gem5 Developers 907732SAli.Saidi@ARM.com quiesceNsIop = InstObjParams("quiesceNs", "QuiesceNs", "PredOp", 917732SAli.Saidi@ARM.com { "code": quiesceNsCode, 927732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 937732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsQuiesce"]) 947732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(quiesceNsIop) 957732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(quiesceNsIop) 968142SAli.Saidi@ARM.com exec_output += QuiescePredOpExecute.subst(quiesceNsIop) 977732SAli.Saidi@ARM.com 9810037SARM gem5 Developers quiesceNsIop = InstObjParams("quiesceNs", "QuiesceNs64", "PredOp", 9910037SARM gem5 Developers { "code": quiesceNsCode64, 10010037SARM gem5 Developers "predicate_test": predicateTest }, 10110037SARM gem5 Developers ["IsNonSpeculative", "IsQuiesce"]) 10210037SARM gem5 Developers header_output += BasicDeclare.subst(quiesceNsIop) 10310037SARM gem5 Developers decoder_output += BasicConstructor.subst(quiesceNsIop) 10410037SARM gem5 Developers exec_output += QuiescePredOpExecute.subst(quiesceNsIop) 10510037SARM gem5 Developers 1067732SAli.Saidi@ARM.com quiesceCyclesCode = ''' 1078204SAli.Saidi@ARM.com PseudoInst::quiesceCycles(xc->tcBase(), join32to64(R1, R0)); 1087732SAli.Saidi@ARM.com ''' 1097732SAli.Saidi@ARM.com 11010037SARM gem5 Developers quiesceCyclesCode64 = ''' 11110037SARM gem5 Developers PseudoInst::quiesceCycles(xc->tcBase(), X0); 11210037SARM gem5 Developers ''' 11310037SARM gem5 Developers 1147732SAli.Saidi@ARM.com quiesceCyclesIop = InstObjParams("quiesceCycles", "QuiesceCycles", "PredOp", 1157732SAli.Saidi@ARM.com { "code": quiesceCyclesCode, 1167732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 1177732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsQuiesce", "IsUnverifiable"]) 1187732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(quiesceCyclesIop) 1197732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(quiesceCyclesIop) 1208142SAli.Saidi@ARM.com exec_output += QuiescePredOpExecute.subst(quiesceCyclesIop) 1217732SAli.Saidi@ARM.com 12210037SARM gem5 Developers quiesceCyclesIop = InstObjParams("quiesceCycles", "QuiesceCycles64", "PredOp", 12310037SARM gem5 Developers { "code": quiesceCyclesCode64, 12410037SARM gem5 Developers "predicate_test": predicateTest }, 12510037SARM gem5 Developers ["IsNonSpeculative", "IsQuiesce", "IsUnverifiable"]) 12610037SARM gem5 Developers header_output += BasicDeclare.subst(quiesceCyclesIop) 12710037SARM gem5 Developers decoder_output += BasicConstructor.subst(quiesceCyclesIop) 12810037SARM gem5 Developers exec_output += QuiescePredOpExecute.subst(quiesceCyclesIop) 12910037SARM gem5 Developers 1307732SAli.Saidi@ARM.com quiesceTimeCode = ''' 1318204SAli.Saidi@ARM.com uint64_t qt_val = PseudoInst::quiesceTime(xc->tcBase()); 1328204SAli.Saidi@ARM.com R0 = bits(qt_val, 31, 0); 1338204SAli.Saidi@ARM.com R1 = bits(qt_val, 63, 32); 1347732SAli.Saidi@ARM.com ''' 1357732SAli.Saidi@ARM.com 13610037SARM gem5 Developers quiesceTimeCode64 = ''' 13710037SARM gem5 Developers X0 = PseudoInst::quiesceTime(xc->tcBase()); 13810037SARM gem5 Developers ''' 1397732SAli.Saidi@ARM.com quiesceTimeIop = InstObjParams("quiesceTime", "QuiesceTime", "PredOp", 1407732SAli.Saidi@ARM.com { "code": quiesceTimeCode, 1417732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 1427732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsUnverifiable"]) 1437732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(quiesceTimeIop) 1447732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(quiesceTimeIop) 1457732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(quiesceTimeIop) 1467732SAli.Saidi@ARM.com 14710037SARM gem5 Developers quiesceTimeIop = InstObjParams("quiesceTime", "QuiesceTime64", "PredOp", 14810037SARM gem5 Developers { "code": quiesceTimeCode64, 14910037SARM gem5 Developers "predicate_test": predicateTest }, 15010037SARM gem5 Developers ["IsNonSpeculative", "IsUnverifiable"]) 15110037SARM gem5 Developers header_output += BasicDeclare.subst(quiesceTimeIop) 15210037SARM gem5 Developers decoder_output += BasicConstructor.subst(quiesceTimeIop) 15310037SARM gem5 Developers exec_output += PredOpExecute.subst(quiesceTimeIop) 15410037SARM gem5 Developers 1558204SAli.Saidi@ARM.com rpnsCode = ''' 1568204SAli.Saidi@ARM.com uint64_t rpns_val = PseudoInst::rpns(xc->tcBase()); 1578204SAli.Saidi@ARM.com R0 = bits(rpns_val, 31, 0); 1588204SAli.Saidi@ARM.com R1 = bits(rpns_val, 63, 32); 1598204SAli.Saidi@ARM.com ''' 1608204SAli.Saidi@ARM.com 16110037SARM gem5 Developers rpnsCode64 = ''' 16210037SARM gem5 Developers X0 = PseudoInst::rpns(xc->tcBase()); 16310037SARM gem5 Developers ''' 1647732SAli.Saidi@ARM.com rpnsIop = InstObjParams("rpns", "Rpns", "PredOp", 1658204SAli.Saidi@ARM.com { "code": rpnsCode, 1667732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 1677732SAli.Saidi@ARM.com ["IsNonSpeculative", "IsUnverifiable"]) 1687732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(rpnsIop) 1697732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(rpnsIop) 1707732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(rpnsIop) 1717732SAli.Saidi@ARM.com 17210037SARM gem5 Developers rpnsIop = InstObjParams("rpns", "Rpns64", "PredOp", 17310037SARM gem5 Developers { "code": rpnsCode64, 17410037SARM gem5 Developers "predicate_test": predicateTest }, 17510037SARM gem5 Developers ["IsNonSpeculative", "IsUnverifiable"]) 17610037SARM gem5 Developers header_output += BasicDeclare.subst(rpnsIop) 17710037SARM gem5 Developers decoder_output += BasicConstructor.subst(rpnsIop) 17810037SARM gem5 Developers exec_output += PredOpExecute.subst(rpnsIop) 17910037SARM gem5 Developers 1808204SAli.Saidi@ARM.com wakeCpuCode = ''' 1818204SAli.Saidi@ARM.com PseudoInst::wakeCPU(xc->tcBase(), join32to64(R1,R0)); 1828204SAli.Saidi@ARM.com ''' 1838204SAli.Saidi@ARM.com 18410037SARM gem5 Developers wakeCpuCode64 = ''' 18510037SARM gem5 Developers PseudoInst::wakeCPU(xc->tcBase(), X0); 18610037SARM gem5 Developers ''' 18710037SARM gem5 Developers 1887732SAli.Saidi@ARM.com wakeCPUIop = InstObjParams("wakeCPU", "WakeCPU", "PredOp", 1898204SAli.Saidi@ARM.com { "code": wakeCpuCode, 1908204SAli.Saidi@ARM.com "predicate_test": predicateTest }, 1918204SAli.Saidi@ARM.com ["IsNonSpeculative", "IsUnverifiable"]) 1927732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(wakeCPUIop) 1937732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(wakeCPUIop) 1947732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(wakeCPUIop) 1957732SAli.Saidi@ARM.com 19610037SARM gem5 Developers wakeCPUIop = InstObjParams("wakeCPU", "WakeCPU64", "PredOp", 19710037SARM gem5 Developers { "code": wakeCpuCode64, 19810037SARM gem5 Developers "predicate_test": predicateTest }, 19910037SARM gem5 Developers ["IsNonSpeculative", "IsUnverifiable"]) 20010037SARM gem5 Developers header_output += BasicDeclare.subst(wakeCPUIop) 20110037SARM gem5 Developers decoder_output += BasicConstructor.subst(wakeCPUIop) 20210037SARM gem5 Developers exec_output += PredOpExecute.subst(wakeCPUIop) 20310037SARM gem5 Developers 2047732SAli.Saidi@ARM.com deprecated_ivlbIop = InstObjParams("deprecated_ivlb", "Deprecated_ivlb", "PredOp", 2057732SAli.Saidi@ARM.com { "code": '''warn_once("Obsolete M5 ivlb instruction encountered.\\n");''', 2067732SAli.Saidi@ARM.com "predicate_test": predicateTest }) 2077732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(deprecated_ivlbIop) 2087732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(deprecated_ivlbIop) 2097732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(deprecated_ivlbIop) 2107732SAli.Saidi@ARM.com 2117732SAli.Saidi@ARM.com deprecated_ivleIop = InstObjParams("deprecated_ivle", "Deprecated_ivle", "PredOp", 2127732SAli.Saidi@ARM.com { "code": '''warn_once("Obsolete M5 ivle instruction encountered.\\n");''', 2137732SAli.Saidi@ARM.com "predicate_test": predicateTest }) 2147732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(deprecated_ivleIop) 2157732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(deprecated_ivleIop) 2167732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(deprecated_ivleIop) 2177732SAli.Saidi@ARM.com 2187732SAli.Saidi@ARM.com deprecated_exit_code = ''' 2197732SAli.Saidi@ARM.com warn_once("Obsolete M5 exit instruction encountered.\\n"); 2207732SAli.Saidi@ARM.com PseudoInst::m5exit(xc->tcBase(), 0); 2217732SAli.Saidi@ARM.com ''' 2227732SAli.Saidi@ARM.com 2237732SAli.Saidi@ARM.com deprecated_exitIop = InstObjParams("deprecated_exit", "Deprecated_exit", "PredOp", 2247732SAli.Saidi@ARM.com { "code": deprecated_exit_code, 2257732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2267732SAli.Saidi@ARM.com ["No_OpClass", "IsNonSpeculative"]) 2277732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(deprecated_exitIop) 2287732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(deprecated_exitIop) 2297732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(deprecated_exitIop) 2307732SAli.Saidi@ARM.com 2318204SAli.Saidi@ARM.com m5exit_code = ''' 2328204SAli.Saidi@ARM.com PseudoInst::m5exit(xc->tcBase(), join32to64(R1, R0)); 2338204SAli.Saidi@ARM.com ''' 23410037SARM gem5 Developers 23510037SARM gem5 Developers m5exit_code64 = ''' 23610037SARM gem5 Developers PseudoInst::m5exit(xc->tcBase(), X0); 23710037SARM gem5 Developers ''' 23810037SARM gem5 Developers 2397732SAli.Saidi@ARM.com m5exitIop = InstObjParams("m5exit", "M5exit", "PredOp", 2408204SAli.Saidi@ARM.com { "code": m5exit_code, 2418204SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2428204SAli.Saidi@ARM.com ["No_OpClass", "IsNonSpeculative"]) 2437732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5exitIop) 2447732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5exitIop) 2457732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5exitIop) 2467732SAli.Saidi@ARM.com 2479687Sandreas@sandberg.pp.se m5fail_code = ''' 2489687Sandreas@sandberg.pp.se PseudoInst::m5fail(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 2499687Sandreas@sandberg.pp.se ''' 25011634Sricardo.alves@arm.com 25111634Sricardo.alves@arm.com m5fail_code64 = ''' 25211634Sricardo.alves@arm.com PseudoInst::m5fail(xc->tcBase(), X0, X1); 25311634Sricardo.alves@arm.com ''' 25411634Sricardo.alves@arm.com 2559687Sandreas@sandberg.pp.se m5failIop = InstObjParams("m5fail", "M5fail", "PredOp", 2569687Sandreas@sandberg.pp.se { "code": m5fail_code, 2579687Sandreas@sandberg.pp.se "predicate_test": predicateTest }, 2589687Sandreas@sandberg.pp.se ["No_OpClass", "IsNonSpeculative"]) 2599687Sandreas@sandberg.pp.se header_output += BasicDeclare.subst(m5failIop) 2609687Sandreas@sandberg.pp.se decoder_output += BasicConstructor.subst(m5failIop) 2619687Sandreas@sandberg.pp.se exec_output += PredOpExecute.subst(m5failIop) 2629687Sandreas@sandberg.pp.se 26311634Sricardo.alves@arm.com m5failIop = InstObjParams("m5fail", "M5fail64", "PredOp", 26411634Sricardo.alves@arm.com { "code": m5fail_code64, 26511634Sricardo.alves@arm.com "predicate_test": predicateTest }, 26611634Sricardo.alves@arm.com ["No_OpClass", "IsNonSpeculative"]) 26711634Sricardo.alves@arm.com header_output += BasicDeclare.subst(m5failIop) 26811634Sricardo.alves@arm.com decoder_output += BasicConstructor.subst(m5failIop) 26911634Sricardo.alves@arm.com exec_output += PredOpExecute.subst(m5failIop) 27011634Sricardo.alves@arm.com 27111634Sricardo.alves@arm.com 27210037SARM gem5 Developers m5exitIop = InstObjParams("m5exit", "M5exit64", "PredOp", 27310037SARM gem5 Developers { "code": m5exit_code64, 27410037SARM gem5 Developers "predicate_test": predicateTest }, 27510037SARM gem5 Developers ["No_OpClass", "IsNonSpeculative"]) 27610037SARM gem5 Developers header_output += BasicDeclare.subst(m5exitIop) 27710037SARM gem5 Developers decoder_output += BasicConstructor.subst(m5exitIop) 27810037SARM gem5 Developers exec_output += PredOpExecute.subst(m5exitIop) 27910037SARM gem5 Developers 2807732SAli.Saidi@ARM.com loadsymbolCode = ''' 2817732SAli.Saidi@ARM.com PseudoInst::loadsymbol(xc->tcBase()); 2827732SAli.Saidi@ARM.com ''' 2837732SAli.Saidi@ARM.com 2847732SAli.Saidi@ARM.com loadsymbolIop = InstObjParams("loadsymbol", "Loadsymbol", "PredOp", 2857732SAli.Saidi@ARM.com { "code": loadsymbolCode, 2867732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 2877732SAli.Saidi@ARM.com ["No_OpClass", "IsNonSpeculative"]) 2887732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(loadsymbolIop) 2897732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(loadsymbolIop) 2907732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(loadsymbolIop) 2917732SAli.Saidi@ARM.com 2927732SAli.Saidi@ARM.com initparamCode = ''' 29311289Sgabor.dozsa@arm.com uint64_t ip_val = PseudoInst::initParam(xc->tcBase(), join32to64(R1, R0), 29411289Sgabor.dozsa@arm.com join32to64(R3, R2)); 2958659SAli.Saidi@ARM.com R0 = bits(ip_val, 31, 0); 2968659SAli.Saidi@ARM.com R1 = bits(ip_val, 63, 32); 2977732SAli.Saidi@ARM.com ''' 2987732SAli.Saidi@ARM.com 29910037SARM gem5 Developers initparamCode64 = ''' 30011289Sgabor.dozsa@arm.com X0 = PseudoInst::initParam(xc->tcBase(), X0, X1); 30110037SARM gem5 Developers ''' 30210037SARM gem5 Developers 3037732SAli.Saidi@ARM.com initparamIop = InstObjParams("initparam", "Initparam", "PredOp", 3047732SAli.Saidi@ARM.com { "code": initparamCode, 3058659SAli.Saidi@ARM.com "predicate_test": predicateTest }, 3068659SAli.Saidi@ARM.com ["IsNonSpeculative"]) 3077732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(initparamIop) 3087732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(initparamIop) 3097732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(initparamIop) 3107732SAli.Saidi@ARM.com 31110037SARM gem5 Developers initparamIop = InstObjParams("initparam", "Initparam64", "PredOp", 31210037SARM gem5 Developers { "code": initparamCode64, 31310037SARM gem5 Developers "predicate_test": predicateTest }, 31410037SARM gem5 Developers ["IsNonSpeculative"]) 31510037SARM gem5 Developers header_output += BasicDeclare.subst(initparamIop) 31610037SARM gem5 Developers decoder_output += BasicConstructor.subst(initparamIop) 31710037SARM gem5 Developers exec_output += PredOpExecute.subst(initparamIop) 31810037SARM gem5 Developers 3198204SAli.Saidi@ARM.com resetstats_code = ''' 3208204SAli.Saidi@ARM.com PseudoInst::resetstats(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 3218204SAli.Saidi@ARM.com ''' 3228204SAli.Saidi@ARM.com 32310037SARM gem5 Developers resetstats_code64 = ''' 32410037SARM gem5 Developers PseudoInst::resetstats(xc->tcBase(), X0, X1); 32510037SARM gem5 Developers ''' 3267732SAli.Saidi@ARM.com resetstatsIop = InstObjParams("resetstats", "Resetstats", "PredOp", 3278204SAli.Saidi@ARM.com { "code": resetstats_code, 3287732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 3297732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 3307732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(resetstatsIop) 3317732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(resetstatsIop) 3327732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(resetstatsIop) 3337732SAli.Saidi@ARM.com 33410037SARM gem5 Developers resetstatsIop = InstObjParams("resetstats", "Resetstats64", "PredOp", 33510037SARM gem5 Developers { "code": resetstats_code64, 33610037SARM gem5 Developers "predicate_test": predicateTest }, 33710037SARM gem5 Developers ["IsNonSpeculative"]) 33810037SARM gem5 Developers header_output += BasicDeclare.subst(resetstatsIop) 33910037SARM gem5 Developers decoder_output += BasicConstructor.subst(resetstatsIop) 34010037SARM gem5 Developers exec_output += PredOpExecute.subst(resetstatsIop) 34110037SARM gem5 Developers 3428204SAli.Saidi@ARM.com dumpstats_code = ''' 3438204SAli.Saidi@ARM.com PseudoInst::dumpstats(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 3448204SAli.Saidi@ARM.com ''' 34510037SARM gem5 Developers 34610037SARM gem5 Developers dumpstats_code64 = ''' 34710037SARM gem5 Developers PseudoInst::dumpstats(xc->tcBase(), X0, X1); 34810037SARM gem5 Developers ''' 34910037SARM gem5 Developers 3507732SAli.Saidi@ARM.com dumpstatsIop = InstObjParams("dumpstats", "Dumpstats", "PredOp", 3518204SAli.Saidi@ARM.com { "code": dumpstats_code, 3527732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 3537732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 3547732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(dumpstatsIop) 3557732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(dumpstatsIop) 3567732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(dumpstatsIop) 3577732SAli.Saidi@ARM.com 35810037SARM gem5 Developers dumpstatsIop = InstObjParams("dumpstats", "Dumpstats64", "PredOp", 35910037SARM gem5 Developers { "code": dumpstats_code64, 36010037SARM gem5 Developers "predicate_test": predicateTest }, 36110037SARM gem5 Developers ["IsNonSpeculative"]) 36210037SARM gem5 Developers header_output += BasicDeclare.subst(dumpstatsIop) 36310037SARM gem5 Developers decoder_output += BasicConstructor.subst(dumpstatsIop) 36410037SARM gem5 Developers exec_output += PredOpExecute.subst(dumpstatsIop) 36510037SARM gem5 Developers 3668204SAli.Saidi@ARM.com dumpresetstats_code = ''' 3678204SAli.Saidi@ARM.com PseudoInst::dumpresetstats(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 3688204SAli.Saidi@ARM.com ''' 36910037SARM gem5 Developers 37010037SARM gem5 Developers dumpresetstats_code64 = ''' 37110037SARM gem5 Developers PseudoInst::dumpresetstats(xc->tcBase(), X0, X1); 37210037SARM gem5 Developers ''' 37310037SARM gem5 Developers 3747732SAli.Saidi@ARM.com dumpresetstatsIop = InstObjParams("dumpresetstats", "Dumpresetstats", "PredOp", 3758204SAli.Saidi@ARM.com { "code": dumpresetstats_code, 3767732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 3777732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 3787732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(dumpresetstatsIop) 3797732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(dumpresetstatsIop) 3807732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(dumpresetstatsIop) 3817732SAli.Saidi@ARM.com 38210037SARM gem5 Developers dumpresetstatsIop = InstObjParams("dumpresetstats", "Dumpresetstats64", "PredOp", 38310037SARM gem5 Developers { "code": dumpresetstats_code64, 38410037SARM gem5 Developers "predicate_test": predicateTest }, 38510037SARM gem5 Developers ["IsNonSpeculative"]) 38610037SARM gem5 Developers header_output += BasicDeclare.subst(dumpresetstatsIop) 38710037SARM gem5 Developers decoder_output += BasicConstructor.subst(dumpresetstatsIop) 38810037SARM gem5 Developers exec_output += PredOpExecute.subst(dumpresetstatsIop) 38910037SARM gem5 Developers 3908204SAli.Saidi@ARM.com m5checkpoint_code = ''' 3918204SAli.Saidi@ARM.com PseudoInst::m5checkpoint(xc->tcBase(), join32to64(R1, R0), join32to64(R3, R2)); 3928204SAli.Saidi@ARM.com ''' 39310037SARM gem5 Developers 39410037SARM gem5 Developers m5checkpoint_code64 = ''' 39510037SARM gem5 Developers PseudoInst::m5checkpoint(xc->tcBase(), X0, X1); 39610037SARM gem5 Developers ''' 39710037SARM gem5 Developers 3987732SAli.Saidi@ARM.com m5checkpointIop = InstObjParams("m5checkpoint", "M5checkpoint", "PredOp", 3998204SAli.Saidi@ARM.com { "code": m5checkpoint_code, 4007732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 4018733Sgeoffrey.blake@arm.com ["IsNonSpeculative", "IsUnverifiable"]) 4027732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5checkpointIop) 4037732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5checkpointIop) 4047732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5checkpointIop) 4057732SAli.Saidi@ARM.com 40610037SARM gem5 Developers m5checkpointIop = InstObjParams("m5checkpoint", "M5checkpoint64", "PredOp", 40710037SARM gem5 Developers { "code": m5checkpoint_code64, 40810037SARM gem5 Developers "predicate_test": predicateTest }, 40910037SARM gem5 Developers ["IsNonSpeculative", "IsUnverifiable"]) 41010037SARM gem5 Developers header_output += BasicDeclare.subst(m5checkpointIop) 41110037SARM gem5 Developers decoder_output += BasicConstructor.subst(m5checkpointIop) 41210037SARM gem5 Developers exec_output += PredOpExecute.subst(m5checkpointIop) 41310037SARM gem5 Developers 4147732SAli.Saidi@ARM.com m5readfileCode = ''' 4158204SAli.Saidi@ARM.com int n = 4; 4168204SAli.Saidi@ARM.com uint64_t offset = getArgument(xc->tcBase(), n, sizeof(uint64_t), false); 4178204SAli.Saidi@ARM.com R0 = PseudoInst::readfile(xc->tcBase(), R0, join32to64(R3,R2), offset); 4187732SAli.Saidi@ARM.com ''' 41910037SARM gem5 Developers 42010037SARM gem5 Developers m5readfileCode64 = ''' 42110126Seric.vanhensbergen@arm.com int n = 2; 42210037SARM gem5 Developers uint64_t offset = getArgument(xc->tcBase(), n, sizeof(uint64_t), false); 42310126Seric.vanhensbergen@arm.com n = 3; 42410126Seric.vanhensbergen@arm.com X0 = PseudoInst::readfile(xc->tcBase(), X0, X1, offset); 42510037SARM gem5 Developers ''' 42610037SARM gem5 Developers 4277732SAli.Saidi@ARM.com m5readfileIop = InstObjParams("m5readfile", "M5readfile", "PredOp", 4287732SAli.Saidi@ARM.com { "code": m5readfileCode, 4297732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 4308733Sgeoffrey.blake@arm.com ["IsNonSpeculative", "IsUnverifiable"]) 4317732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5readfileIop) 4327732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5readfileIop) 4337732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5readfileIop) 4347732SAli.Saidi@ARM.com 43510037SARM gem5 Developers m5readfileIop = InstObjParams("m5readfile", "M5readfile64", "PredOp", 43610037SARM gem5 Developers { "code": m5readfileCode64, 43710037SARM gem5 Developers "predicate_test": predicateTest }, 43810037SARM gem5 Developers ["IsNonSpeculative", "IsUnverifiable"]) 43910037SARM gem5 Developers header_output += BasicDeclare.subst(m5readfileIop) 44010037SARM gem5 Developers decoder_output += BasicConstructor.subst(m5readfileIop) 44110037SARM gem5 Developers exec_output += PredOpExecute.subst(m5readfileIop) 44210037SARM gem5 Developers 4438734Sdam.sunwoo@arm.com m5writefileCode = ''' 4448734Sdam.sunwoo@arm.com int n = 4; 4458734Sdam.sunwoo@arm.com uint64_t offset = getArgument(xc->tcBase(), n, sizeof(uint64_t), false); 4468734Sdam.sunwoo@arm.com n = 6; 4478734Sdam.sunwoo@arm.com Addr filenameAddr = getArgument(xc->tcBase(), n, sizeof(Addr), false); 4488734Sdam.sunwoo@arm.com R0 = PseudoInst::writefile(xc->tcBase(), R0, join32to64(R3,R2), offset, 4498734Sdam.sunwoo@arm.com filenameAddr); 4508734Sdam.sunwoo@arm.com ''' 45110037SARM gem5 Developers 45210037SARM gem5 Developers m5writefileCode64 = ''' 45310126Seric.vanhensbergen@arm.com int n = 2; 45410037SARM gem5 Developers uint64_t offset = getArgument(xc->tcBase(), n, sizeof(uint64_t), false); 45510126Seric.vanhensbergen@arm.com n = 3; 45610037SARM gem5 Developers Addr filenameAddr = getArgument(xc->tcBase(), n, sizeof(Addr), false); 45710126Seric.vanhensbergen@arm.com X0 = PseudoInst::writefile(xc->tcBase(), X0, X1, offset, 45810037SARM gem5 Developers filenameAddr); 45910037SARM gem5 Developers ''' 46010037SARM gem5 Developers 4618734Sdam.sunwoo@arm.com m5writefileIop = InstObjParams("m5writefile", "M5writefile", "PredOp", 4628734Sdam.sunwoo@arm.com { "code": m5writefileCode, 4638734Sdam.sunwoo@arm.com "predicate_test": predicateTest }, 4648734Sdam.sunwoo@arm.com ["IsNonSpeculative"]) 4658734Sdam.sunwoo@arm.com header_output += BasicDeclare.subst(m5writefileIop) 4668734Sdam.sunwoo@arm.com decoder_output += BasicConstructor.subst(m5writefileIop) 4678734Sdam.sunwoo@arm.com exec_output += PredOpExecute.subst(m5writefileIop) 4688734Sdam.sunwoo@arm.com 46910037SARM gem5 Developers m5writefileIop = InstObjParams("m5writefile", "M5writefile64", "PredOp", 47010037SARM gem5 Developers { "code": m5writefileCode64, 47110037SARM gem5 Developers "predicate_test": predicateTest }, 47210037SARM gem5 Developers ["IsNonSpeculative"]) 47310037SARM gem5 Developers header_output += BasicDeclare.subst(m5writefileIop) 47410037SARM gem5 Developers decoder_output += BasicConstructor.subst(m5writefileIop) 47510037SARM gem5 Developers exec_output += PredOpExecute.subst(m5writefileIop) 47610037SARM gem5 Developers 4777732SAli.Saidi@ARM.com m5breakIop = InstObjParams("m5break", "M5break", "PredOp", 4787732SAli.Saidi@ARM.com { "code": "PseudoInst::debugbreak(xc->tcBase());", 4797732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 4807732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 4817732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5breakIop) 4827732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5breakIop) 4837732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5breakIop) 4847732SAli.Saidi@ARM.com 4857732SAli.Saidi@ARM.com m5switchcpuIop = InstObjParams("m5switchcpu", "M5switchcpu", "PredOp", 4867732SAli.Saidi@ARM.com { "code": "PseudoInst::switchcpu(xc->tcBase());", 4877732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 4887732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 4897732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5switchcpuIop) 4907732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5switchcpuIop) 4917732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5switchcpuIop) 4927732SAli.Saidi@ARM.com 4937732SAli.Saidi@ARM.com m5addsymbolCode = ''' 4948204SAli.Saidi@ARM.com PseudoInst::addsymbol(xc->tcBase(), join32to64(R1, R0), R2); 4957732SAli.Saidi@ARM.com ''' 49610037SARM gem5 Developers m5addsymbolCode64 = ''' 49710126Seric.vanhensbergen@arm.com PseudoInst::addsymbol(xc->tcBase(), X0, X1); 49810037SARM gem5 Developers ''' 4997732SAli.Saidi@ARM.com m5addsymbolIop = InstObjParams("m5addsymbol", "M5addsymbol", "PredOp", 5007732SAli.Saidi@ARM.com { "code": m5addsymbolCode, 5017732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 5027732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 5037732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5addsymbolIop) 5047732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5addsymbolIop) 5057732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5addsymbolIop) 5067732SAli.Saidi@ARM.com 50710037SARM gem5 Developers m5addsymbolIop = InstObjParams("m5addsymbol", "M5addsymbol64", "PredOp", 50810037SARM gem5 Developers { "code": m5addsymbolCode64, 50910037SARM gem5 Developers "predicate_test": predicateTest }, 51010037SARM gem5 Developers ["IsNonSpeculative"]) 51110037SARM gem5 Developers header_output += BasicDeclare.subst(m5addsymbolIop) 51210037SARM gem5 Developers decoder_output += BasicConstructor.subst(m5addsymbolIop) 51310037SARM gem5 Developers exec_output += PredOpExecute.subst(m5addsymbolIop) 51410037SARM gem5 Developers 5157732SAli.Saidi@ARM.com m5panicCode = '''panic("M5 panic instruction called at pc=%#x.", 5167732SAli.Saidi@ARM.com xc->pcState().pc());''' 51710037SARM gem5 Developers 5187732SAli.Saidi@ARM.com m5panicIop = InstObjParams("m5panic", "M5panic", "PredOp", 5197732SAli.Saidi@ARM.com { "code": m5panicCode, 5207732SAli.Saidi@ARM.com "predicate_test": predicateTest }, 5217732SAli.Saidi@ARM.com ["IsNonSpeculative"]) 5227732SAli.Saidi@ARM.com header_output += BasicDeclare.subst(m5panicIop) 5237732SAli.Saidi@ARM.com decoder_output += BasicConstructor.subst(m5panicIop) 5247732SAli.Saidi@ARM.com exec_output += PredOpExecute.subst(m5panicIop) 5257732SAli.Saidi@ARM.com 5268354Sgedare@gwmail.gwu.edu m5workbeginCode = '''PseudoInst::workbegin( 5278354Sgedare@gwmail.gwu.edu xc->tcBase(), 5288354Sgedare@gwmail.gwu.edu join32to64(R1, R0), 5298354Sgedare@gwmail.gwu.edu join32to64(R3, R2) 5308354Sgedare@gwmail.gwu.edu );''' 53110037SARM gem5 Developers 53210037SARM gem5 Developers m5workbeginCode64 = '''PseudoInst::workbegin( 53310037SARM gem5 Developers xc->tcBase(), 53410037SARM gem5 Developers X0, 53510037SARM gem5 Developers X1 53610037SARM gem5 Developers );''' 53710037SARM gem5 Developers 5388354Sgedare@gwmail.gwu.edu m5workbeginIop = InstObjParams("m5workbegin", "M5workbegin", "PredOp", 5398354Sgedare@gwmail.gwu.edu { "code": m5workbeginCode, 5408354Sgedare@gwmail.gwu.edu "predicate_test": predicateTest }, 5418354Sgedare@gwmail.gwu.edu ["IsNonSpeculative"]) 5428354Sgedare@gwmail.gwu.edu header_output += BasicDeclare.subst(m5workbeginIop) 5438354Sgedare@gwmail.gwu.edu decoder_output += BasicConstructor.subst(m5workbeginIop) 5448354Sgedare@gwmail.gwu.edu exec_output += PredOpExecute.subst(m5workbeginIop) 5458354Sgedare@gwmail.gwu.edu 54610037SARM gem5 Developers m5workbeginIop = InstObjParams("m5workbegin", "M5workbegin64", "PredOp", 54710037SARM gem5 Developers { "code": m5workbeginCode64, 54810037SARM gem5 Developers "predicate_test": predicateTest }, 54910037SARM gem5 Developers ["IsNonSpeculative"]) 55010037SARM gem5 Developers header_output += BasicDeclare.subst(m5workbeginIop) 55110037SARM gem5 Developers decoder_output += BasicConstructor.subst(m5workbeginIop) 55210037SARM gem5 Developers exec_output += PredOpExecute.subst(m5workbeginIop) 55310037SARM gem5 Developers 5548354Sgedare@gwmail.gwu.edu m5workendCode = '''PseudoInst::workend( 5558354Sgedare@gwmail.gwu.edu xc->tcBase(), 5568354Sgedare@gwmail.gwu.edu join32to64(R1, R0), 5578354Sgedare@gwmail.gwu.edu join32to64(R3, R2) 5588354Sgedare@gwmail.gwu.edu );''' 55910037SARM gem5 Developers 56010037SARM gem5 Developers m5workendCode64 = '''PseudoInst::workend( 56110037SARM gem5 Developers xc->tcBase(), 56210037SARM gem5 Developers X0, 56310037SARM gem5 Developers X1 56410037SARM gem5 Developers );''' 56510037SARM gem5 Developers 5668354Sgedare@gwmail.gwu.edu m5workendIop = InstObjParams("m5workend", "M5workend", "PredOp", 5678354Sgedare@gwmail.gwu.edu { "code": m5workendCode, 5688354Sgedare@gwmail.gwu.edu "predicate_test": predicateTest }, 5698354Sgedare@gwmail.gwu.edu ["IsNonSpeculative"]) 5708354Sgedare@gwmail.gwu.edu header_output += BasicDeclare.subst(m5workendIop) 5718354Sgedare@gwmail.gwu.edu decoder_output += BasicConstructor.subst(m5workendIop) 5728354Sgedare@gwmail.gwu.edu exec_output += PredOpExecute.subst(m5workendIop) 5738354Sgedare@gwmail.gwu.edu 57410037SARM gem5 Developers m5workendIop = InstObjParams("m5workend", "M5workend64", "PredOp", 57510037SARM gem5 Developers { "code": m5workendCode64, 57610037SARM gem5 Developers "predicate_test": predicateTest }, 57710037SARM gem5 Developers ["IsNonSpeculative"]) 57810037SARM gem5 Developers header_output += BasicDeclare.subst(m5workendIop) 57910037SARM gem5 Developers decoder_output += BasicConstructor.subst(m5workendIop) 58010037SARM gem5 Developers exec_output += PredOpExecute.subst(m5workendIop) 5817732SAli.Saidi@ARM.com}}; 582