summaryrefslogtreecommitdiff
path: root/src/cpu/minor/lsq.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/minor/lsq.hh')
-rw-r--r--src/cpu/minor/lsq.hh23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/cpu/minor/lsq.hh b/src/cpu/minor/lsq.hh
index 23b47c53c..a7c7cb632 100644
--- a/src/cpu/minor/lsq.hh
+++ b/src/cpu/minor/lsq.hh
@@ -145,9 +145,6 @@ class LSQ : public Named
/** The underlying request of this LSQRequest */
RequestPtr request;
- /** Fault generated performing this request */
- Fault fault;
-
/** Res from pushRequest */
uint64_t *res;
@@ -160,6 +157,9 @@ class LSQ : public Named
* that's visited the memory system */
bool issuedToMemory;
+ /** Address translation is delayed due to table walk */
+ bool isTranslationDelayed;
+
enum LSQRequestState
{
NotIssued, /* Newly created */
@@ -186,9 +186,14 @@ class LSQ : public Named
protected:
/** BaseTLB::Translation interface */
- void markDelayed() { }
+ void markDelayed() { isTranslationDelayed = true; }
+
+ /** Instructions may want to suppress translation faults (e.g.
+ * non-faulting vector loads).*/
+ void tryToSuppressFault();
void disableMemAccess();
+ void completeDisabledMemAccess();
public:
LSQRequest(LSQ &port_, MinorDynInstPtr inst_, bool isLoad_,
@@ -701,11 +706,11 @@ class LSQ : public Named
/** Single interface for readMem/writeMem/amoMem to issue requests into
* the LSQ */
- void pushRequest(MinorDynInstPtr inst, bool isLoad, uint8_t *data,
- unsigned int size, Addr addr, Request::Flags flags,
- uint64_t *res, AtomicOpFunctor *amo_op,
- const std::vector<bool>& byteEnable =
- std::vector<bool>());
+ Fault pushRequest(MinorDynInstPtr inst, bool isLoad, uint8_t *data,
+ unsigned int size, Addr addr, Request::Flags flags,
+ uint64_t *res, AtomicOpFunctor *amo_op,
+ const std::vector<bool>& byteEnable =
+ std::vector<bool>());
/** Push a predicate failed-representing request into the queues just
* to maintain commit order */