thread_context.hh revision 12406
12330SN/A/* 212109SRekai.GonzalezAlberquilla@arm.com * Copyright (c) 2011-2012, 2016 ARM Limited 39920Syasuko.eckert@amd.com * Copyright (c) 2013 Advanced Micro Devices, Inc. 48733Sgeoffrey.blake@arm.com * All rights reserved 58733Sgeoffrey.blake@arm.com * 68733Sgeoffrey.blake@arm.com * The license below extends only to copyright in the software and shall 78733Sgeoffrey.blake@arm.com * not be construed as granting a license to any other intellectual 88733Sgeoffrey.blake@arm.com * property including but not limited to intellectual property relating 98733Sgeoffrey.blake@arm.com * to a hardware implementation of the functionality of the software 108733Sgeoffrey.blake@arm.com * licensed hereunder. You may use the software subject to the license 118733Sgeoffrey.blake@arm.com * terms below provided that you ensure that this notice is replicated 128733Sgeoffrey.blake@arm.com * unmodified and in its entirety in all distributions of the software, 138733Sgeoffrey.blake@arm.com * modified or unmodified, in source code or in binary form. 148733Sgeoffrey.blake@arm.com * 152330SN/A * Copyright (c) 2006 The Regents of The University of Michigan 162330SN/A * All rights reserved. 172330SN/A * 182330SN/A * Redistribution and use in source and binary forms, with or without 192330SN/A * modification, are permitted provided that the following conditions are 202330SN/A * met: redistributions of source code must retain the above copyright 212330SN/A * notice, this list of conditions and the following disclaimer; 222330SN/A * redistributions in binary form must reproduce the above copyright 232330SN/A * notice, this list of conditions and the following disclaimer in the 242330SN/A * documentation and/or other materials provided with the distribution; 252330SN/A * neither the name of the copyright holders nor the names of its 262330SN/A * contributors may be used to endorse or promote products derived from 272330SN/A * this software without specific prior written permission. 282330SN/A * 292330SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 302330SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 312330SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 322330SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 332330SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 342330SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 352330SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 362330SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 372330SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 382330SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 392330SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 402689Sktlim@umich.edu * 412689Sktlim@umich.edu * Authors: Kevin Lim 422330SN/A */ 432330SN/A 442683Sktlim@umich.edu#ifndef __CPU_CHECKER_THREAD_CONTEXT_HH__ 452683Sktlim@umich.edu#define __CPU_CHECKER_THREAD_CONTEXT_HH__ 462315SN/A 472972Sgblack@eecs.umich.edu#include "arch/types.hh" 486658Snate@binkert.org#include "config/the_isa.hh" 492315SN/A#include "cpu/checker/cpu.hh" 502683Sktlim@umich.edu#include "cpu/simple_thread.hh" 512680SN/A#include "cpu/thread_context.hh" 528733Sgeoffrey.blake@arm.com#include "debug/Checker.hh" 532315SN/A 542315SN/Aclass EndQuiesceEvent; 553548Sgblack@eecs.umich.edunamespace TheISA { 563548Sgblack@eecs.umich.edu namespace Kernel { 573548Sgblack@eecs.umich.edu class Statistics; 583548Sgblack@eecs.umich.edu }; 599020Sgblack@eecs.umich.edu class Decoder; 602330SN/A}; 612315SN/A 622350SN/A/** 632680SN/A * Derived ThreadContext class for use with the Checker. The template 642680SN/A * parameter is the ThreadContext class used by the specific CPU being 652683Sktlim@umich.edu * verified. This CheckerThreadContext is then used by the main CPU 662683Sktlim@umich.edu * in place of its usual ThreadContext class. It handles updating the 672683Sktlim@umich.edu * checker's state any time state is updated externally through the 682683Sktlim@umich.edu * ThreadContext. 692350SN/A */ 702680SN/Atemplate <class TC> 712680SN/Aclass CheckerThreadContext : public ThreadContext 722315SN/A{ 732315SN/A public: 742680SN/A CheckerThreadContext(TC *actual_tc, 752683Sktlim@umich.edu CheckerCPU *checker_cpu) 762683Sktlim@umich.edu : actualTC(actual_tc), checkerTC(checker_cpu->thread), 772330SN/A checkerCPU(checker_cpu) 782315SN/A { } 792315SN/A 802315SN/A private: 812683Sktlim@umich.edu /** The main CPU's ThreadContext, or class that implements the 822683Sktlim@umich.edu * ThreadContext interface. */ 832680SN/A TC *actualTC; 842683Sktlim@umich.edu /** The checker's own SimpleThread. Will be updated any time 852683Sktlim@umich.edu * anything uses this ThreadContext to externally update a 862683Sktlim@umich.edu * thread's state. */ 872683Sktlim@umich.edu SimpleThread *checkerTC; 882683Sktlim@umich.edu /** Pointer to the checker CPU. */ 892315SN/A CheckerCPU *checkerCPU; 902315SN/A 912315SN/A public: 922315SN/A 932680SN/A BaseCPU *getCpuPtr() { return actualTC->getCpuPtr(); } 942315SN/A 9510190Sakash.bagdia@arm.com uint32_t socketId() const { return actualTC->socketId(); } 9610190Sakash.bagdia@arm.com 9710110Sandreas.hansson@arm.com int cpuId() const { return actualTC->cpuId(); } 988733Sgeoffrey.blake@arm.com 9911005Sandreas.sandberg@arm.com ContextID contextId() const { return actualTC->contextId(); } 1008733Sgeoffrey.blake@arm.com 10111005Sandreas.sandberg@arm.com void setContextId(ContextID id) 1022315SN/A { 1038733Sgeoffrey.blake@arm.com actualTC->setContextId(id); 1048733Sgeoffrey.blake@arm.com checkerTC->setContextId(id); 1052315SN/A } 1062315SN/A 1078733Sgeoffrey.blake@arm.com /** Returns this thread's ID number. */ 10810110Sandreas.hansson@arm.com int threadId() const { return actualTC->threadId(); } 1098733Sgeoffrey.blake@arm.com void setThreadId(int id) 1108733Sgeoffrey.blake@arm.com { 1118733Sgeoffrey.blake@arm.com checkerTC->setThreadId(id); 1128733Sgeoffrey.blake@arm.com actualTC->setThreadId(id); 1138733Sgeoffrey.blake@arm.com } 1142315SN/A 11512406Sgabeblack@google.com BaseTLB *getITBPtr() { return actualTC->getITBPtr(); } 1164997Sgblack@eecs.umich.edu 11712406Sgabeblack@google.com BaseTLB *getDTBPtr() { return actualTC->getDTBPtr(); } 1184997Sgblack@eecs.umich.edu 1198887Sgeoffrey.blake@arm.com CheckerCPU *getCheckerCpuPtr() 1208887Sgeoffrey.blake@arm.com { 1218887Sgeoffrey.blake@arm.com return checkerCPU; 1228887Sgeoffrey.blake@arm.com } 1238733Sgeoffrey.blake@arm.com 1249020Sgblack@eecs.umich.edu TheISA::Decoder *getDecoderPtr() { return actualTC->getDecoderPtr(); } 1258733Sgeoffrey.blake@arm.com 1262680SN/A System *getSystemPtr() { return actualTC->getSystemPtr(); } 1272315SN/A 1283548Sgblack@eecs.umich.edu TheISA::Kernel::Statistics *getKernelStats() 1293548Sgblack@eecs.umich.edu { return actualTC->getKernelStats(); } 1302690Sktlim@umich.edu 1317679Sgblack@eecs.umich.edu Process *getProcessPtr() { return actualTC->getProcessPtr(); } 1327679Sgblack@eecs.umich.edu 13311886Sbrandon.potter@amd.com void setProcessPtr(Process *p) { actualTC->setProcessPtr(p); } 13411886Sbrandon.potter@amd.com 1358852Sandreas.hansson@arm.com PortProxy &getPhysProxy() { return actualTC->getPhysProxy(); } 1362690Sktlim@umich.edu 1378852Sandreas.hansson@arm.com FSTranslatingPortProxy &getVirtProxy() 1388706Sandreas.hansson@arm.com { return actualTC->getVirtProxy(); } 1398733Sgeoffrey.blake@arm.com 1408733Sgeoffrey.blake@arm.com void initMemProxies(ThreadContext *tc) 1418733Sgeoffrey.blake@arm.com { actualTC->initMemProxies(tc); } 1428733Sgeoffrey.blake@arm.com 1438733Sgeoffrey.blake@arm.com void connectMemPorts(ThreadContext *tc) 1448733Sgeoffrey.blake@arm.com { 1458733Sgeoffrey.blake@arm.com actualTC->connectMemPorts(tc); 1468733Sgeoffrey.blake@arm.com } 1478809Sgblack@eecs.umich.edu 1488852Sandreas.hansson@arm.com SETranslatingPortProxy &getMemProxy() { return actualTC->getMemProxy(); } 1492690Sktlim@umich.edu 1508733Sgeoffrey.blake@arm.com /** Executes a syscall in SE mode. */ 15111877Sbrandon.potter@amd.com void syscall(int64_t callnum, Fault *fault) 15211877Sbrandon.potter@amd.com { return actualTC->syscall(callnum, fault); } 1532315SN/A 1542680SN/A Status status() const { return actualTC->status(); } 1552315SN/A 1562315SN/A void setStatus(Status new_status) 1572330SN/A { 1582680SN/A actualTC->setStatus(new_status); 1592680SN/A checkerTC->setStatus(new_status); 1602330SN/A } 1612315SN/A 16210407Smitch.hayenga@arm.com /// Set the status to Active. 16310407Smitch.hayenga@arm.com void activate() { actualTC->activate(); } 1642315SN/A 1652315SN/A /// Set the status to Suspended. 16610407Smitch.hayenga@arm.com void suspend() { actualTC->suspend(); } 1672315SN/A 1682315SN/A /// Set the status to Halted. 16910407Smitch.hayenga@arm.com void halt() { actualTC->halt(); } 1702315SN/A 1712680SN/A void dumpFuncProfile() { actualTC->dumpFuncProfile(); } 1722315SN/A 1732680SN/A void takeOverFrom(ThreadContext *oldContext) 1742315SN/A { 1752680SN/A actualTC->takeOverFrom(oldContext); 1763225Sktlim@umich.edu checkerTC->copyState(oldContext); 1772315SN/A } 1782315SN/A 1798733Sgeoffrey.blake@arm.com void regStats(const std::string &name) 1808733Sgeoffrey.blake@arm.com { 1818733Sgeoffrey.blake@arm.com actualTC->regStats(name); 1828733Sgeoffrey.blake@arm.com checkerTC->regStats(name); 1838733Sgeoffrey.blake@arm.com } 1842315SN/A 1852680SN/A EndQuiesceEvent *getQuiesceEvent() { return actualTC->getQuiesceEvent(); } 1862315SN/A 1872680SN/A Tick readLastActivate() { return actualTC->readLastActivate(); } 1882680SN/A Tick readLastSuspend() { return actualTC->readLastSuspend(); } 1892315SN/A 1902680SN/A void profileClear() { return actualTC->profileClear(); } 1912680SN/A void profileSample() { return actualTC->profileSample(); } 1922315SN/A 1932315SN/A // @todo: Do I need this? 1942680SN/A void copyArchRegs(ThreadContext *tc) 1952315SN/A { 1962680SN/A actualTC->copyArchRegs(tc); 1972680SN/A checkerTC->copyArchRegs(tc); 1982315SN/A } 1992315SN/A 2002315SN/A void clearArchRegs() 2012315SN/A { 2022680SN/A actualTC->clearArchRegs(); 2032680SN/A checkerTC->clearArchRegs(); 2042315SN/A } 2052315SN/A 2062315SN/A // 2072315SN/A // New accessors for new decoder. 2082315SN/A // 2092315SN/A uint64_t readIntReg(int reg_idx) 2102680SN/A { return actualTC->readIntReg(reg_idx); } 2112315SN/A 2122669SN/A FloatReg readFloatReg(int reg_idx) 2132680SN/A { return actualTC->readFloatReg(reg_idx); } 2142315SN/A 2152669SN/A FloatRegBits readFloatRegBits(int reg_idx) 2162680SN/A { return actualTC->readFloatRegBits(reg_idx); } 2172315SN/A 21812109SRekai.GonzalezAlberquilla@arm.com const VecRegContainer& readVecReg(const RegId& reg) const 21912109SRekai.GonzalezAlberquilla@arm.com { return actualTC->readVecReg(reg); } 22012109SRekai.GonzalezAlberquilla@arm.com 22112109SRekai.GonzalezAlberquilla@arm.com /** 22212109SRekai.GonzalezAlberquilla@arm.com * Read vector register for modification, hierarchical indexing. 22312109SRekai.GonzalezAlberquilla@arm.com */ 22412109SRekai.GonzalezAlberquilla@arm.com VecRegContainer& getWritableVecReg(const RegId& reg) 22512109SRekai.GonzalezAlberquilla@arm.com { return actualTC->getWritableVecReg(reg); } 22612109SRekai.GonzalezAlberquilla@arm.com 22712109SRekai.GonzalezAlberquilla@arm.com /** Vector Register Lane Interfaces. */ 22812109SRekai.GonzalezAlberquilla@arm.com /** @{ */ 22912109SRekai.GonzalezAlberquilla@arm.com /** Reads source vector 8bit operand. */ 23012109SRekai.GonzalezAlberquilla@arm.com ConstVecLane8 23112109SRekai.GonzalezAlberquilla@arm.com readVec8BitLaneReg(const RegId& reg) const 23212109SRekai.GonzalezAlberquilla@arm.com { return actualTC->readVec8BitLaneReg(reg); } 23312109SRekai.GonzalezAlberquilla@arm.com 23412109SRekai.GonzalezAlberquilla@arm.com /** Reads source vector 16bit operand. */ 23512109SRekai.GonzalezAlberquilla@arm.com ConstVecLane16 23612109SRekai.GonzalezAlberquilla@arm.com readVec16BitLaneReg(const RegId& reg) const 23712109SRekai.GonzalezAlberquilla@arm.com { return actualTC->readVec16BitLaneReg(reg); } 23812109SRekai.GonzalezAlberquilla@arm.com 23912109SRekai.GonzalezAlberquilla@arm.com /** Reads source vector 32bit operand. */ 24012109SRekai.GonzalezAlberquilla@arm.com ConstVecLane32 24112109SRekai.GonzalezAlberquilla@arm.com readVec32BitLaneReg(const RegId& reg) const 24212109SRekai.GonzalezAlberquilla@arm.com { return actualTC->readVec32BitLaneReg(reg); } 24312109SRekai.GonzalezAlberquilla@arm.com 24412109SRekai.GonzalezAlberquilla@arm.com /** Reads source vector 64bit operand. */ 24512109SRekai.GonzalezAlberquilla@arm.com ConstVecLane64 24612109SRekai.GonzalezAlberquilla@arm.com readVec64BitLaneReg(const RegId& reg) const 24712109SRekai.GonzalezAlberquilla@arm.com { return actualTC->readVec64BitLaneReg(reg); } 24812109SRekai.GonzalezAlberquilla@arm.com 24912109SRekai.GonzalezAlberquilla@arm.com /** Write a lane of the destination vector register. */ 25012109SRekai.GonzalezAlberquilla@arm.com virtual void setVecLane(const RegId& reg, 25112109SRekai.GonzalezAlberquilla@arm.com const LaneData<LaneSize::Byte>& val) 25212109SRekai.GonzalezAlberquilla@arm.com { return actualTC->setVecLane(reg, val); } 25312109SRekai.GonzalezAlberquilla@arm.com virtual void setVecLane(const RegId& reg, 25412109SRekai.GonzalezAlberquilla@arm.com const LaneData<LaneSize::TwoByte>& val) 25512109SRekai.GonzalezAlberquilla@arm.com { return actualTC->setVecLane(reg, val); } 25612109SRekai.GonzalezAlberquilla@arm.com virtual void setVecLane(const RegId& reg, 25712109SRekai.GonzalezAlberquilla@arm.com const LaneData<LaneSize::FourByte>& val) 25812109SRekai.GonzalezAlberquilla@arm.com { return actualTC->setVecLane(reg, val); } 25912109SRekai.GonzalezAlberquilla@arm.com virtual void setVecLane(const RegId& reg, 26012109SRekai.GonzalezAlberquilla@arm.com const LaneData<LaneSize::EightByte>& val) 26112109SRekai.GonzalezAlberquilla@arm.com { return actualTC->setVecLane(reg, val); } 26212109SRekai.GonzalezAlberquilla@arm.com /** @} */ 26312109SRekai.GonzalezAlberquilla@arm.com 26412109SRekai.GonzalezAlberquilla@arm.com const VecElem& readVecElem(const RegId& reg) const 26512109SRekai.GonzalezAlberquilla@arm.com { return actualTC->readVecElem(reg); } 26612109SRekai.GonzalezAlberquilla@arm.com 2679920Syasuko.eckert@amd.com CCReg readCCReg(int reg_idx) 2689920Syasuko.eckert@amd.com { return actualTC->readCCReg(reg_idx); } 2699920Syasuko.eckert@amd.com 2702315SN/A void setIntReg(int reg_idx, uint64_t val) 2712315SN/A { 2722680SN/A actualTC->setIntReg(reg_idx, val); 2732680SN/A checkerTC->setIntReg(reg_idx, val); 2742315SN/A } 2752315SN/A 2762669SN/A void setFloatReg(int reg_idx, FloatReg val) 2772315SN/A { 2782680SN/A actualTC->setFloatReg(reg_idx, val); 2792680SN/A checkerTC->setFloatReg(reg_idx, val); 2802315SN/A } 2812315SN/A 2822669SN/A void setFloatRegBits(int reg_idx, FloatRegBits val) 2832669SN/A { 2842680SN/A actualTC->setFloatRegBits(reg_idx, val); 2852680SN/A checkerTC->setFloatRegBits(reg_idx, val); 2862315SN/A } 2872315SN/A 28812109SRekai.GonzalezAlberquilla@arm.com void setVecReg(const RegId& reg, const VecRegContainer& val) 28912109SRekai.GonzalezAlberquilla@arm.com { 29012109SRekai.GonzalezAlberquilla@arm.com actualTC->setVecReg(reg, val); 29112109SRekai.GonzalezAlberquilla@arm.com checkerTC->setVecReg(reg, val); 29212109SRekai.GonzalezAlberquilla@arm.com } 29312109SRekai.GonzalezAlberquilla@arm.com 29412109SRekai.GonzalezAlberquilla@arm.com void setVecElem(const RegId& reg, const VecElem& val) 29512109SRekai.GonzalezAlberquilla@arm.com { 29612109SRekai.GonzalezAlberquilla@arm.com actualTC->setVecElem(reg, val); 29712109SRekai.GonzalezAlberquilla@arm.com checkerTC->setVecElem(reg, val); 29812109SRekai.GonzalezAlberquilla@arm.com } 29912109SRekai.GonzalezAlberquilla@arm.com 3009920Syasuko.eckert@amd.com void setCCReg(int reg_idx, CCReg val) 3019920Syasuko.eckert@amd.com { 3029920Syasuko.eckert@amd.com actualTC->setCCReg(reg_idx, val); 3039920Syasuko.eckert@amd.com checkerTC->setCCReg(reg_idx, val); 3049920Syasuko.eckert@amd.com } 3059920Syasuko.eckert@amd.com 3068733Sgeoffrey.blake@arm.com /** Reads this thread's PC state. */ 3078733Sgeoffrey.blake@arm.com TheISA::PCState pcState() 3088733Sgeoffrey.blake@arm.com { return actualTC->pcState(); } 3092315SN/A 3108733Sgeoffrey.blake@arm.com /** Sets this thread's PC state. */ 3118733Sgeoffrey.blake@arm.com void pcState(const TheISA::PCState &val) 3122315SN/A { 3138733Sgeoffrey.blake@arm.com DPRINTF(Checker, "Changing PC to %s, old PC %s\n", 3148733Sgeoffrey.blake@arm.com val, checkerTC->pcState()); 3158733Sgeoffrey.blake@arm.com checkerTC->pcState(val); 3162315SN/A checkerCPU->recordPCChange(val); 3178733Sgeoffrey.blake@arm.com return actualTC->pcState(val); 3182315SN/A } 3192315SN/A 32011886Sbrandon.potter@amd.com void setNPC(Addr val) 32111886Sbrandon.potter@amd.com { 32211886Sbrandon.potter@amd.com checkerTC->setNPC(val); 32311886Sbrandon.potter@amd.com actualTC->setNPC(val); 32411886Sbrandon.potter@amd.com } 32511886Sbrandon.potter@amd.com 3268733Sgeoffrey.blake@arm.com void pcStateNoRecord(const TheISA::PCState &val) 3272315SN/A { 3288733Sgeoffrey.blake@arm.com return actualTC->pcState(val); 3292315SN/A } 3302315SN/A 3318733Sgeoffrey.blake@arm.com /** Reads this thread's PC. */ 3328733Sgeoffrey.blake@arm.com Addr instAddr() 3338733Sgeoffrey.blake@arm.com { return actualTC->instAddr(); } 3342669SN/A 3358733Sgeoffrey.blake@arm.com /** Reads this thread's next PC. */ 3368733Sgeoffrey.blake@arm.com Addr nextInstAddr() 3378733Sgeoffrey.blake@arm.com { return actualTC->nextInstAddr(); } 3388733Sgeoffrey.blake@arm.com 3398733Sgeoffrey.blake@arm.com /** Reads this thread's next PC. */ 3408733Sgeoffrey.blake@arm.com MicroPC microPC() 3418733Sgeoffrey.blake@arm.com { return actualTC->microPC(); } 3422669SN/A 34310698Sandreas.hansson@arm.com MiscReg readMiscRegNoEffect(int misc_reg) const 3444172Ssaidi@eecs.umich.edu { return actualTC->readMiscRegNoEffect(misc_reg); } 3454172Ssaidi@eecs.umich.edu 3462315SN/A MiscReg readMiscReg(int misc_reg) 3472680SN/A { return actualTC->readMiscReg(misc_reg); } 3482315SN/A 3494172Ssaidi@eecs.umich.edu void setMiscRegNoEffect(int misc_reg, const MiscReg &val) 3504172Ssaidi@eecs.umich.edu { 3518733Sgeoffrey.blake@arm.com DPRINTF(Checker, "Setting misc reg with no effect: %d to both Checker" 3528733Sgeoffrey.blake@arm.com " and O3..\n", misc_reg); 3534172Ssaidi@eecs.umich.edu checkerTC->setMiscRegNoEffect(misc_reg, val); 3544172Ssaidi@eecs.umich.edu actualTC->setMiscRegNoEffect(misc_reg, val); 3554172Ssaidi@eecs.umich.edu } 3562315SN/A 3573468Sgblack@eecs.umich.edu void setMiscReg(int misc_reg, const MiscReg &val) 3582315SN/A { 3598733Sgeoffrey.blake@arm.com DPRINTF(Checker, "Setting misc reg with effect: %d to both Checker" 3608733Sgeoffrey.blake@arm.com " and O3..\n", misc_reg); 3612680SN/A checkerTC->setMiscReg(misc_reg, val); 3623468Sgblack@eecs.umich.edu actualTC->setMiscReg(misc_reg, val); 3632315SN/A } 3642315SN/A 36512106SRekai.GonzalezAlberquilla@arm.com RegId flattenRegId(const RegId& regId) const { 36612106SRekai.GonzalezAlberquilla@arm.com return actualTC->flattenRegId(regId); 36712106SRekai.GonzalezAlberquilla@arm.com } 3688733Sgeoffrey.blake@arm.com 3692315SN/A unsigned readStCondFailures() 3702680SN/A { return actualTC->readStCondFailures(); } 3712315SN/A 3722315SN/A void setStCondFailures(unsigned sc_failures) 3732315SN/A { 3742680SN/A actualTC->setStCondFailures(sc_failures); 3752315SN/A } 3762315SN/A 3772680SN/A Counter readFuncExeInst() { return actualTC->readFuncExeInst(); } 3789426SAndreas.Sandberg@ARM.com 3799426SAndreas.Sandberg@ARM.com uint64_t readIntRegFlat(int idx) 3809426SAndreas.Sandberg@ARM.com { return actualTC->readIntRegFlat(idx); } 3819426SAndreas.Sandberg@ARM.com 3829426SAndreas.Sandberg@ARM.com void setIntRegFlat(int idx, uint64_t val) 3839426SAndreas.Sandberg@ARM.com { actualTC->setIntRegFlat(idx, val); } 3849426SAndreas.Sandberg@ARM.com 3859426SAndreas.Sandberg@ARM.com FloatReg readFloatRegFlat(int idx) 3869426SAndreas.Sandberg@ARM.com { return actualTC->readFloatRegFlat(idx); } 3879426SAndreas.Sandberg@ARM.com 3889426SAndreas.Sandberg@ARM.com void setFloatRegFlat(int idx, FloatReg val) 3899426SAndreas.Sandberg@ARM.com { actualTC->setFloatRegFlat(idx, val); } 3909426SAndreas.Sandberg@ARM.com 3919426SAndreas.Sandberg@ARM.com FloatRegBits readFloatRegBitsFlat(int idx) 3929426SAndreas.Sandberg@ARM.com { return actualTC->readFloatRegBitsFlat(idx); } 3939426SAndreas.Sandberg@ARM.com 3949426SAndreas.Sandberg@ARM.com void setFloatRegBitsFlat(int idx, FloatRegBits val) 3959426SAndreas.Sandberg@ARM.com { actualTC->setFloatRegBitsFlat(idx, val); } 3969920Syasuko.eckert@amd.com 39712109SRekai.GonzalezAlberquilla@arm.com const VecRegContainer& readVecRegFlat(int idx) const 39812109SRekai.GonzalezAlberquilla@arm.com { return actualTC->readVecRegFlat(idx); } 39912109SRekai.GonzalezAlberquilla@arm.com 40012109SRekai.GonzalezAlberquilla@arm.com /** 40112109SRekai.GonzalezAlberquilla@arm.com * Read vector register for modification, flat indexing. 40212109SRekai.GonzalezAlberquilla@arm.com */ 40312109SRekai.GonzalezAlberquilla@arm.com VecRegContainer& getWritableVecRegFlat(int idx) 40412109SRekai.GonzalezAlberquilla@arm.com { return actualTC->getWritableVecRegFlat(idx); } 40512109SRekai.GonzalezAlberquilla@arm.com 40612109SRekai.GonzalezAlberquilla@arm.com void setVecRegFlat(int idx, const VecRegContainer& val) 40712109SRekai.GonzalezAlberquilla@arm.com { actualTC->setVecRegFlat(idx, val); } 40812109SRekai.GonzalezAlberquilla@arm.com 40912109SRekai.GonzalezAlberquilla@arm.com const VecElem& readVecElemFlat(const RegIndex& idx, 41012109SRekai.GonzalezAlberquilla@arm.com const ElemIndex& elem_idx) const 41112109SRekai.GonzalezAlberquilla@arm.com { return actualTC->readVecElemFlat(idx, elem_idx); } 41212109SRekai.GonzalezAlberquilla@arm.com 41312109SRekai.GonzalezAlberquilla@arm.com void setVecElemFlat(const RegIndex& idx, 41412109SRekai.GonzalezAlberquilla@arm.com const ElemIndex& elem_idx, const VecElem& val) 41512109SRekai.GonzalezAlberquilla@arm.com { actualTC->setVecElemFlat(idx, elem_idx, val); } 41612109SRekai.GonzalezAlberquilla@arm.com 4179920Syasuko.eckert@amd.com CCReg readCCRegFlat(int idx) 4189920Syasuko.eckert@amd.com { return actualTC->readCCRegFlat(idx); } 4199920Syasuko.eckert@amd.com 4209920Syasuko.eckert@amd.com void setCCRegFlat(int idx, CCReg val) 4219920Syasuko.eckert@amd.com { actualTC->setCCRegFlat(idx, val); } 4222315SN/A}; 4232315SN/A 4242315SN/A#endif // __CPU_CHECKER_EXEC_CONTEXT_HH__ 425