gem5  v20.1.0.0
Classes | Public Types | Public Member Functions | Public Attributes | Static Protected Member Functions | Protected Attributes | List of all members
LSQ< Impl > Class Template Reference

#include <lsq.hh>

Classes

class  DcachePort
 DcachePort class for the load/store queue. More...
 
class  HtmCmdRequest
 
class  LSQRequest
 Memory operation metadata. More...
 
class  LSQSenderState
 Derived class to hold any sender state the LSQ needs. More...
 
class  SingleDataRequest
 
class  SplitDataRequest
 

Public Types

typedef Impl::O3CPU O3CPU
 
typedef Impl::DynInstPtr DynInstPtr
 
typedef Impl::CPUPol::IEW IEW
 
typedef Impl::CPUPol::LSQUnit LSQUnit
 

Public Member Functions

 LSQ (O3CPU *cpu_ptr, IEW *iew_ptr, DerivO3CPUParams *params)
 Constructs an LSQ with the given parameters. More...
 
 ~LSQ ()
 
std::string name () const
 Returns the name of the LSQ. More...
 
void setActiveThreads (std::list< ThreadID > *at_ptr)
 Sets the pointer to the list of active threads. More...
 
void drainSanityCheck () const
 Perform sanity checks after a drain. More...
 
bool isDrained () const
 Has the LSQ drained? More...
 
void takeOverFrom ()
 Takes over execution from another CPU's thread. More...
 
int entryAmount (ThreadID num_threads)
 Number of entries needed for the given amount of threads. More...
 
void tick ()
 Ticks the LSQ. More...
 
void insertLoad (const DynInstPtr &load_inst)
 Inserts a load into the LSQ. More...
 
void insertStore (const DynInstPtr &store_inst)
 Inserts a store into the LSQ. More...
 
Fault executeLoad (const DynInstPtr &inst)
 Executes a load. More...
 
Fault executeStore (const DynInstPtr &inst)
 Executes a store. More...
 
void commitLoads (InstSeqNum &youngest_inst, ThreadID tid)
 Commits loads up until the given sequence number for a specific thread. More...
 
void commitStores (InstSeqNum &youngest_inst, ThreadID tid)
 Commits stores up until the given sequence number for a specific thread. More...
 
void writebackStores ()
 Attempts to write back stores until all cache ports are used or the interface becomes blocked. More...
 
void writebackStores (ThreadID tid)
 Same as above, but only for one thread. More...
 
void squash (const InstSeqNum &squashed_num, ThreadID tid)
 Squash instructions from a thread until the specified sequence number. More...
 
bool violation ()
 Returns whether or not there was a memory ordering violation. More...
 
bool violation (ThreadID tid)
 Returns whether or not there was a memory ordering violation for a specific thread. More...
 
DynInstPtr getMemDepViolator (ThreadID tid)
 Gets the instruction that caused the memory ordering violation. More...
 
int getLoadHead (ThreadID tid)
 Returns the head index of the load queue for a specific thread. More...
 
InstSeqNum getLoadHeadSeqNum (ThreadID tid)
 Returns the sequence number of the head of the load queue. More...
 
int getStoreHead (ThreadID tid)
 Returns the head index of the store queue. More...
 
InstSeqNum getStoreHeadSeqNum (ThreadID tid)
 Returns the sequence number of the head of the store queue. More...
 
int getCount ()
 Returns the number of instructions in all of the queues. More...
 
int getCount (ThreadID tid)
 Returns the number of instructions in the queues of one thread. More...
 
int numLoads ()
 Returns the total number of loads in the load queue. More...
 
int numLoads (ThreadID tid)
 Returns the total number of loads for a single thread. More...
 
int numStores ()
 Returns the total number of stores in the store queue. More...
 
int numStores (ThreadID tid)
 Returns the total number of stores for a single thread. More...
 
int numHtmStarts (ThreadID tid) const
 
int numHtmStops (ThreadID tid) const
 
void resetHtmStartsStops (ThreadID tid)
 
uint64_t getLatestHtmUid (ThreadID tid) const
 
void setLastRetiredHtmUid (ThreadID tid, uint64_t htmUid)
 
unsigned numFreeLoadEntries ()
 Returns the number of free load entries. More...
 
unsigned numFreeStoreEntries ()
 Returns the number of free store entries. More...
 
unsigned numFreeEntries (ThreadID tid)
 Returns the number of free entries for a specific thread. More...
 
unsigned numFreeLoadEntries (ThreadID tid)
 Returns the number of free entries in the LQ for a specific thread. More...
 
unsigned numFreeStoreEntries (ThreadID tid)
 Returns the number of free entries in the SQ for a specific thread. More...
 
bool isFull ()
 Returns if the LSQ is full (either LQ or SQ is full). More...
 
bool isFull (ThreadID tid)
 Returns if the LSQ is full for a specific thread (either LQ or SQ is full). More...
 
bool isEmpty () const
 Returns if the LSQ is empty (both LQ and SQ are empty). More...
 
bool lqEmpty () const
 Returns if all of the LQs are empty. More...
 
bool sqEmpty () const
 Returns if all of the SQs are empty. More...
 
bool lqFull ()
 Returns if any of the LQs are full. More...
 
bool lqFull (ThreadID tid)
 Returns if the LQ of a given thread is full. More...
 
bool sqFull ()
 Returns if any of the SQs are full. More...
 
bool sqFull (ThreadID tid)
 Returns if the SQ of a given thread is full. More...
 
bool isStalled ()
 Returns if the LSQ is stalled due to a memory operation that must be replayed. More...
 
bool isStalled (ThreadID tid)
 Returns if the LSQ of a specific thread is stalled due to a memory operation that must be replayed. More...
 
bool hasStoresToWB ()
 Returns whether or not there are any stores to write back to memory. More...
 
bool hasStoresToWB (ThreadID tid)
 Returns whether or not a specific thread has any stores to write back to memory. More...
 
int numStoresToWB (ThreadID tid)
 Returns the number of stores a specific thread has to write back. More...
 
bool willWB ()
 Returns if the LSQ will write back to memory this cycle. More...
 
bool willWB (ThreadID tid)
 Returns if the LSQ of a specific thread will write back to memory this cycle. More...
 
void dumpInsts () const
 Debugging function to print out all instructions. More...
 
void dumpInsts (ThreadID tid) const
 Debugging function to print out instructions from a specific thread. More...
 
Fault read (LSQRequest *req, int load_idx)
 Executes a read operation, using the load specified at the load index. More...
 
Fault write (LSQRequest *req, uint8_t *data, int store_idx)
 Executes a store operation, using the store specified at the store index. More...
 
void recvReqRetry ()
 Retry the previous send that failed. More...
 
void completeDataAccess (PacketPtr pkt)
 
bool recvTimingResp (PacketPtr pkt)
 Handles writing back and completing the load or store that has returned from memory. More...
 
void recvTimingSnoopReq (PacketPtr pkt)
 
Fault pushRequest (const DynInstPtr &inst, bool isLoad, uint8_t *data, unsigned int size, Addr addr, Request::Flags flags, uint64_t *res, AtomicOpFunctorPtr amo_op, const std::vector< bool > &byte_enable)
 
bool cacheBlocked () const
 Is D-cache blocked? More...
 
void cacheBlocked (bool v)
 Set D-cache blocked status. More...
 
bool cachePortAvailable (bool is_load) const
 Is any store port available to use? More...
 
void cachePortBusy (bool is_load)
 Another store port is in use. More...
 
RequestPortgetDataPort ()
 

Public Attributes

O3CPUcpu
 The CPU pointer. More...
 
IEWiewStage
 The IEW stage pointer. More...
 

Static Protected Member Functions

static uint32_t maxLSQAllocation (SMTQueuePolicy pol, uint32_t entries, uint32_t numThreads, uint32_t SMTThreshold)
 Auxiliary function to calculate per-thread max LSQ allocation limit. More...
 

Protected Attributes

bool _cacheBlocked
 D-cache is blocked. More...
 
int cacheStorePorts
 The number of cache ports available each cycle (stores only). More...
 
int usedStorePorts
 The number of used cache ports in this cycle by stores. More...
 
int cacheLoadPorts
 The number of cache ports available each cycle (loads only). More...
 
int usedLoadPorts
 The number of used cache ports in this cycle by loads. More...
 
SMTQueuePolicy lsqPolicy
 The LSQ policy for SMT mode. More...
 
std::list< ThreadID > * activeThreads
 List of Active Threads in System. More...
 
unsigned LQEntries
 Total Size of LQ Entries. More...
 
unsigned SQEntries
 Total Size of SQ Entries. More...
 
unsigned maxLQEntries
 Max LQ Size - Used to Enforce Sharing Policies. More...
 
unsigned maxSQEntries
 Max SQ Size - Used to Enforce Sharing Policies. More...
 
DcachePort dcachePort
 Data port. More...
 
std::vector< LSQUnitthread
 The LSQ units for individual threads. More...
 
ThreadID numThreads
 Number of Threads. More...
 

Detailed Description

template<class Impl>
class LSQ< Impl >

Definition at line 62 of file lsq.hh.

Member Typedef Documentation

◆ DynInstPtr

template<class Impl >
typedef Impl::DynInstPtr LSQ< Impl >::DynInstPtr

Definition at line 67 of file lsq.hh.

◆ IEW

template<class Impl >
typedef Impl::CPUPol::IEW LSQ< Impl >::IEW

Definition at line 68 of file lsq.hh.

◆ LSQUnit

template<class Impl >
typedef Impl::CPUPol::LSQUnit LSQ< Impl >::LSQUnit

Definition at line 69 of file lsq.hh.

◆ O3CPU

template<class Impl >
typedef Impl::O3CPU LSQ< Impl >::O3CPU

Definition at line 66 of file lsq.hh.

Constructor & Destructor Documentation

◆ LSQ()

template<class Impl >
LSQ< Impl >::LSQ ( O3CPU cpu_ptr,
IEW iew_ptr,
DerivO3CPUParams *  params 
)

◆ ~LSQ()

template<class Impl >
LSQ< Impl >::~LSQ ( )
inline

Definition at line 854 of file lsq.hh.

Member Function Documentation

◆ cacheBlocked() [1/2]

template<class Impl >
bool LSQ< Impl >::cacheBlocked

Is D-cache blocked?

Definition at line 182 of file lsq_impl.hh.

Referenced by LSQUnit< Impl >::trySendPacket().

◆ cacheBlocked() [2/2]

template<class Impl >
void LSQ< Impl >::cacheBlocked ( bool  v)

Set D-cache blocked status.

Definition at line 189 of file lsq_impl.hh.

References ArmISA::v.

◆ cachePortAvailable()

template<class Impl >
bool LSQ< Impl >::cachePortAvailable ( bool  is_load) const

Is any store port available to use?

Definition at line 196 of file lsq_impl.hh.

Referenced by LSQUnit< Impl >::trySendPacket(), and LSQUnit< Impl >::writebackStores().

◆ cachePortBusy()

template<class Impl >
void LSQ< Impl >::cachePortBusy ( bool  is_load)

Another store port is in use.

Definition at line 209 of file lsq_impl.hh.

Referenced by LSQUnit< Impl >::trySendPacket().

◆ commitLoads()

template<class Impl >
void LSQ< Impl >::commitLoads ( InstSeqNum youngest_inst,
ThreadID  tid 
)
inline

Commits loads up until the given sequence number for a specific thread.

Definition at line 889 of file lsq.hh.

References LSQ< Impl >::thread.

◆ commitStores()

template<class Impl >
void LSQ< Impl >::commitStores ( InstSeqNum youngest_inst,
ThreadID  tid 
)
inline

Commits stores up until the given sequence number for a specific thread.

Definition at line 895 of file lsq.hh.

References LSQ< Impl >::thread.

◆ completeDataAccess()

template<class Impl >
void LSQ< Impl >::completeDataAccess ( PacketPtr  pkt)

Definition at line 306 of file lsq_impl.hh.

References Packet::senderState.

◆ drainSanityCheck()

template<class Impl >
void LSQ< Impl >::drainSanityCheck

Perform sanity checks after a drain.

Definition at line 129 of file lsq_impl.hh.

◆ dumpInsts() [1/2]

template<class Impl >
void LSQ< Impl >::dumpInsts

Debugging function to print out all instructions.

Definition at line 663 of file lsq_impl.hh.

◆ dumpInsts() [2/2]

template<class Impl >
void LSQ< Impl >::dumpInsts ( ThreadID  tid) const
inline

Debugging function to print out instructions from a specific thread.

Definition at line 1075 of file lsq.hh.

References LSQ< Impl >::thread.

◆ entryAmount()

template<class Impl >
int LSQ< Impl >::entryAmount ( ThreadID  num_threads)

Number of entries needed for the given amount of threads.

◆ executeLoad()

template<class Impl >
Fault LSQ< Impl >::executeLoad ( const DynInstPtr inst)

Executes a load.

Definition at line 239 of file lsq_impl.hh.

◆ executeStore()

template<class Impl >
Fault LSQ< Impl >::executeStore ( const DynInstPtr inst)

Executes a store.

Definition at line 248 of file lsq_impl.hh.

◆ getCount() [1/2]

template<class Impl >
int LSQ< Impl >::getCount

Returns the number of instructions in all of the queues.

Definition at line 370 of file lsq_impl.hh.

References Stats::total.

◆ getCount() [2/2]

template<class Impl >
int LSQ< Impl >::getCount ( ThreadID  tid)
inline

Returns the number of instructions in the queues of one thread.

Definition at line 953 of file lsq.hh.

References LSQ< Impl >::thread.

◆ getDataPort()

template<class Impl >
RequestPort& LSQ< Impl >::getDataPort ( )
inline

Definition at line 1123 of file lsq.hh.

References LSQ< Impl >::dcachePort.

◆ getLatestHtmUid()

template<class Impl >
uint64_t LSQ< Impl >::getLatestHtmUid ( ThreadID  tid) const
inline

Definition at line 989 of file lsq.hh.

References InvalidThreadID, and LSQ< Impl >::thread.

◆ getLoadHead()

template<class Impl >
int LSQ< Impl >::getLoadHead ( ThreadID  tid)
inline

Returns the head index of the load queue for a specific thread.

Definition at line 931 of file lsq.hh.

References LSQ< Impl >::thread.

◆ getLoadHeadSeqNum()

template<class Impl >
InstSeqNum LSQ< Impl >::getLoadHeadSeqNum ( ThreadID  tid)
inline

Returns the sequence number of the head of the load queue.

Definition at line 935 of file lsq.hh.

References LSQ< Impl >::thread.

◆ getMemDepViolator()

template<class Impl >
DynInstPtr LSQ< Impl >::getMemDepViolator ( ThreadID  tid)
inline

Gets the instruction that caused the memory ordering violation.

Definition at line 925 of file lsq.hh.

References LSQ< Impl >::thread.

◆ getStoreHead()

template<class Impl >
int LSQ< Impl >::getStoreHead ( ThreadID  tid)
inline

Returns the head index of the store queue.

Definition at line 941 of file lsq.hh.

References LSQ< Impl >::thread.

◆ getStoreHeadSeqNum()

template<class Impl >
InstSeqNum LSQ< Impl >::getStoreHeadSeqNum ( ThreadID  tid)
inline

Returns the sequence number of the head of the store queue.

Definition at line 945 of file lsq.hh.

References LSQ< Impl >::thread.

◆ hasStoresToWB() [1/2]

template<class Impl >
bool LSQ< Impl >::hasStoresToWB

Returns whether or not there are any stores to write back to memory.

Definition at line 629 of file lsq_impl.hh.

Referenced by DefaultIEW< Impl >::hasStoresToWB().

◆ hasStoresToWB() [2/2]

template<class Impl >
bool LSQ< Impl >::hasStoresToWB ( ThreadID  tid)
inline

Returns whether or not a specific thread has any stores to write back to memory.

Definition at line 1060 of file lsq.hh.

References LSQ< Impl >::thread.

◆ insertLoad()

template<class Impl >
void LSQ< Impl >::insertLoad ( const DynInstPtr load_inst)

Inserts a load into the LSQ.

Definition at line 221 of file lsq_impl.hh.

◆ insertStore()

template<class Impl >
void LSQ< Impl >::insertStore ( const DynInstPtr store_inst)

Inserts a store into the LSQ.

Definition at line 230 of file lsq_impl.hh.

◆ isDrained()

template<class Impl >
bool LSQ< Impl >::isDrained

Has the LSQ drained?

Definition at line 139 of file lsq_impl.hh.

References DPRINTF.

◆ isEmpty()

template<class Impl >
bool LSQ< Impl >::isEmpty

Returns if the LSQ is empty (both LQ and SQ are empty).

Definition at line 503 of file lsq_impl.hh.

◆ isFull() [1/2]

template<class Impl >
bool LSQ< Impl >::isFull

Returns if the LSQ is full (either LQ or SQ is full).

Definition at line 474 of file lsq_impl.hh.

◆ isFull() [2/2]

template<class Impl >
bool LSQ< Impl >::isFull ( ThreadID  tid)

Returns if the LSQ is full for a specific thread (either LQ or SQ is full).

Definition at line 491 of file lsq_impl.hh.

◆ isStalled() [1/2]

template<class Impl >
bool LSQ< Impl >::isStalled

Returns if the LSQ is stalled due to a memory operation that must be replayed.

Definition at line 602 of file lsq_impl.hh.

◆ isStalled() [2/2]

template<class Impl >
bool LSQ< Impl >::isStalled ( ThreadID  tid)

Returns if the LSQ of a specific thread is stalled due to a memory operation that must be replayed.

Definition at line 619 of file lsq_impl.hh.

◆ lqEmpty()

template<class Impl >
bool LSQ< Impl >::lqEmpty

Returns if all of the LQs are empty.

Definition at line 510 of file lsq_impl.hh.

◆ lqFull() [1/2]

template<class Impl >
bool LSQ< Impl >::lqFull

Returns if any of the LQs are full.

Definition at line 544 of file lsq_impl.hh.

◆ lqFull() [2/2]

template<class Impl >
bool LSQ< Impl >::lqFull ( ThreadID  tid)

Returns if the LQ of a given thread is full.

Definition at line 561 of file lsq_impl.hh.

◆ maxLSQAllocation()

template<class Impl >
static uint32_t LSQ< Impl >::maxLSQAllocation ( SMTQueuePolicy  pol,
uint32_t  entries,
uint32_t  numThreads,
uint32_t  SMTThreshold 
)
inlinestaticprotected

Auxiliary function to calculate per-thread max LSQ allocation limit.

Depending on a policy, number of entries and possibly number of threads and threshold, this function calculates how many resources each thread can occupy at most.

Definition at line 1147 of file lsq.hh.

References LSQ< Impl >::numThreads.

◆ name()

template<class Impl >
std::string LSQ< Impl >::name

Returns the name of the LSQ.

Definition at line 114 of file lsq_impl.hh.

◆ numFreeEntries()

template<class Impl >
unsigned LSQ< Impl >::numFreeEntries ( ThreadID  tid)

Returns the number of free entries for a specific thread.

◆ numFreeLoadEntries() [1/2]

template<class Impl >
unsigned LSQ< Impl >::numFreeLoadEntries

Returns the number of free load entries.

Definition at line 424 of file lsq_impl.hh.

References Stats::total.

◆ numFreeLoadEntries() [2/2]

template<class Impl >
unsigned LSQ< Impl >::numFreeLoadEntries ( ThreadID  tid)

Returns the number of free entries in the LQ for a specific thread.

Definition at line 460 of file lsq_impl.hh.

◆ numFreeStoreEntries() [1/2]

template<class Impl >
unsigned LSQ< Impl >::numFreeStoreEntries

Returns the number of free store entries.

Definition at line 442 of file lsq_impl.hh.

References Stats::total.

◆ numFreeStoreEntries() [2/2]

template<class Impl >
unsigned LSQ< Impl >::numFreeStoreEntries ( ThreadID  tid)

Returns the number of free entries in the SQ for a specific thread.

Definition at line 467 of file lsq_impl.hh.

◆ numHtmStarts()

template<class Impl >
int LSQ< Impl >::numHtmStarts ( ThreadID  tid) const
inline

Definition at line 968 of file lsq.hh.

References InvalidThreadID, and LSQ< Impl >::thread.

◆ numHtmStops()

template<class Impl >
int LSQ< Impl >::numHtmStops ( ThreadID  tid) const
inline

Definition at line 975 of file lsq.hh.

References InvalidThreadID, and LSQ< Impl >::thread.

◆ numLoads() [1/2]

template<class Impl >
int LSQ< Impl >::numLoads

Returns the total number of loads in the load queue.

Definition at line 388 of file lsq_impl.hh.

References Stats::total.

◆ numLoads() [2/2]

template<class Impl >
int LSQ< Impl >::numLoads ( ThreadID  tid)
inline

Returns the total number of loads for a single thread.

Definition at line 958 of file lsq.hh.

References LSQ< Impl >::thread.

◆ numStores() [1/2]

template<class Impl >
int LSQ< Impl >::numStores

Returns the total number of stores in the store queue.

Definition at line 406 of file lsq_impl.hh.

References Stats::total.

◆ numStores() [2/2]

template<class Impl >
int LSQ< Impl >::numStores ( ThreadID  tid)
inline

Returns the total number of stores for a single thread.

Definition at line 963 of file lsq.hh.

References LSQ< Impl >::thread.

◆ numStoresToWB()

template<class Impl >
int LSQ< Impl >::numStoresToWB ( ThreadID  tid)
inline

Returns the number of stores a specific thread has to write back.

Definition at line 1063 of file lsq.hh.

References LSQ< Impl >::thread.

◆ pushRequest()

template<class Impl >
Fault LSQ< Impl >::pushRequest ( const DynInstPtr inst,
bool  isLoad,
uint8_t *  data,
unsigned int  size,
Addr  addr,
Request::Flags  flags,
uint64_t *  res,
AtomicOpFunctorPtr  amo_op,
const std::vector< bool > &  byte_enable 
)

◆ read()

template<class Impl >
Fault LSQ< Impl >::read ( LSQRequest req,
int  load_idx 
)

Executes a read operation, using the load specified at the load index.

Definition at line 1190 of file lsq.hh.

References LSQ< Impl >::LSQRequest::request().

◆ recvReqRetry()

template<class Impl >
void LSQ< Impl >::recvReqRetry

Retry the previous send that failed.

Definition at line 294 of file lsq_impl.hh.

◆ recvTimingResp()

template<class Impl >
bool LSQ< Impl >::recvTimingResp ( PacketPtr  pkt)

Handles writing back and completing the load or store that has returned from memory.

Parameters
pktResponse packet from the memory sub-system

Definition at line 315 of file lsq_impl.hh.

References DPRINTF, Packet::getAddr(), Packet::isError(), Packet::isInvalidate(), panic_if, and Packet::senderState.

◆ recvTimingSnoopReq()

template<class Impl >
void LSQ< Impl >::recvTimingSnoopReq ( PacketPtr  pkt)

Definition at line 353 of file lsq_impl.hh.

References Packet::cmdString(), DPRINTF, Packet::getAddr(), and Packet::isInvalidate().

◆ resetHtmStartsStops()

template<class Impl >
void LSQ< Impl >::resetHtmStartsStops ( ThreadID  tid)
inline

Definition at line 983 of file lsq.hh.

References InvalidThreadID, and LSQ< Impl >::thread.

◆ setActiveThreads()

template<class Impl >
void LSQ< Impl >::setActiveThreads ( std::list< ThreadID > *  at_ptr)

Sets the pointer to the list of active threads.

Definition at line 121 of file lsq_impl.hh.

◆ setLastRetiredHtmUid()

template<class Impl >
void LSQ< Impl >::setLastRetiredHtmUid ( ThreadID  tid,
uint64_t  htmUid 
)
inline

Definition at line 997 of file lsq.hh.

References InvalidThreadID, and LSQ< Impl >::thread.

Referenced by DefaultIEW< Impl >::setLastRetiredHtmUid().

◆ sqEmpty()

template<class Impl >
bool LSQ< Impl >::sqEmpty

Returns if all of the SQs are empty.

Definition at line 527 of file lsq_impl.hh.

◆ sqFull() [1/2]

template<class Impl >
bool LSQ< Impl >::sqFull

Returns if any of the SQs are full.

Definition at line 573 of file lsq_impl.hh.

◆ sqFull() [2/2]

template<class Impl >
bool LSQ< Impl >::sqFull ( ThreadID  tid)

Returns if the SQ of a given thread is full.

Definition at line 590 of file lsq_impl.hh.

◆ squash()

template<class Impl >
void LSQ< Impl >::squash ( const InstSeqNum squashed_num,
ThreadID  tid 
)
inline

Squash instructions from a thread until the specified sequence number.

Definition at line 910 of file lsq.hh.

References LSQ< Impl >::thread.

◆ takeOverFrom()

template<class Impl >
void LSQ< Impl >::takeOverFrom

Takes over execution from another CPU's thread.

Definition at line 158 of file lsq_impl.hh.

◆ tick()

template<class Impl >
void LSQ< Impl >::tick

Ticks the LSQ.

Definition at line 170 of file lsq_impl.hh.

◆ violation() [1/2]

template<class Impl >
bool LSQ< Impl >::violation

Returns whether or not there was a memory ordering violation.

Definition at line 276 of file lsq_impl.hh.

◆ violation() [2/2]

template<class Impl >
bool LSQ< Impl >::violation ( ThreadID  tid)
inline

Returns whether or not there was a memory ordering violation for a specific thread.

Definition at line 921 of file lsq.hh.

References LSQ< Impl >::thread.

◆ willWB() [1/2]

template<class Impl >
bool LSQ< Impl >::willWB

Returns if the LSQ will write back to memory this cycle.

Definition at line 646 of file lsq_impl.hh.

◆ willWB() [2/2]

template<class Impl >
bool LSQ< Impl >::willWB ( ThreadID  tid)
inline

Returns if the LSQ of a specific thread will write back to memory this cycle.

Definition at line 1070 of file lsq.hh.

References LSQ< Impl >::thread.

◆ write()

template<class Impl >
Fault LSQ< Impl >::write ( LSQRequest req,
uint8_t *  data,
int  store_idx 
)

Executes a store operation, using the store specified at the store index.

Definition at line 1199 of file lsq.hh.

References data, and LSQ< Impl >::LSQRequest::request().

◆ writebackStores() [1/2]

template<class Impl >
void LSQ< Impl >::writebackStores

Attempts to write back stores until all cache ports are used or the interface becomes blocked.

Definition at line 257 of file lsq_impl.hh.

References DPRINTF.

◆ writebackStores() [2/2]

template<class Impl >
void LSQ< Impl >::writebackStores ( ThreadID  tid)

Same as above, but only for one thread.

Member Data Documentation

◆ _cacheBlocked

template<class Impl >
bool LSQ< Impl >::_cacheBlocked
protected

D-cache is blocked.

Definition at line 1127 of file lsq.hh.

◆ activeThreads

template<class Impl >
std::list<ThreadID>* LSQ< Impl >::activeThreads
protected

List of Active Threads in System.

Definition at line 1165 of file lsq.hh.

◆ cacheLoadPorts

template<class Impl >
int LSQ< Impl >::cacheLoadPorts
protected

The number of cache ports available each cycle (loads only).

Definition at line 1133 of file lsq.hh.

◆ cacheStorePorts

template<class Impl >
int LSQ< Impl >::cacheStorePorts
protected

The number of cache ports available each cycle (stores only).

Definition at line 1129 of file lsq.hh.

◆ cpu

template<class Impl >
O3CPU* LSQ< Impl >::cpu

The CPU pointer.

Definition at line 1109 of file lsq.hh.

Referenced by LSQ< Impl >::LSQ(), and LSQ< Impl >::DcachePort::recvTimingSnoopReq().

◆ dcachePort

template<class Impl >
DcachePort LSQ< Impl >::dcachePort
protected

Data port.

Definition at line 1179 of file lsq.hh.

Referenced by LSQ< Impl >::getDataPort(), and LSQ< Impl >::LSQ().

◆ iewStage

template<class Impl >
IEW* LSQ< Impl >::iewStage

The IEW stage pointer.

Definition at line 1112 of file lsq.hh.

◆ LQEntries

template<class Impl >
unsigned LSQ< Impl >::LQEntries
protected

Total Size of LQ Entries.

Definition at line 1168 of file lsq.hh.

◆ lsqPolicy

template<class Impl >
SMTQueuePolicy LSQ< Impl >::lsqPolicy
protected

The LSQ policy for SMT mode.

Definition at line 1139 of file lsq.hh.

Referenced by LSQ< Impl >::LSQ().

◆ maxLQEntries

template<class Impl >
unsigned LSQ< Impl >::maxLQEntries
protected

Max LQ Size - Used to Enforce Sharing Policies.

Definition at line 1173 of file lsq.hh.

Referenced by LSQ< Impl >::LSQ().

◆ maxSQEntries

template<class Impl >
unsigned LSQ< Impl >::maxSQEntries
protected

Max SQ Size - Used to Enforce Sharing Policies.

Definition at line 1176 of file lsq.hh.

Referenced by LSQ< Impl >::LSQ().

◆ numThreads

template<class Impl >
ThreadID LSQ< Impl >::numThreads
protected

Number of Threads.

Definition at line 1185 of file lsq.hh.

Referenced by LSQ< Impl >::LSQ(), and LSQ< Impl >::maxLSQAllocation().

◆ SQEntries

template<class Impl >
unsigned LSQ< Impl >::SQEntries
protected

Total Size of SQ Entries.

Definition at line 1170 of file lsq.hh.

◆ thread

template<class Impl >
std::vector<LSQUnit> LSQ< Impl >::thread
protected

◆ usedLoadPorts

template<class Impl >
int LSQ< Impl >::usedLoadPorts
protected

The number of used cache ports in this cycle by loads.

Definition at line 1135 of file lsq.hh.

◆ usedStorePorts

template<class Impl >
int LSQ< Impl >::usedStorePorts
protected

The number of used cache ports in this cycle by stores.

Definition at line 1131 of file lsq.hh.


The documentation for this class was generated from the following files:

Generated on Wed Sep 30 2020 14:02:27 for gem5 by doxygen 1.8.17