summaryrefslogtreecommitdiff
path: root/src/cpu/base_dyn_inst.hh
diff options
context:
space:
mode:
authorAli Saidi <Ali.Saidi@ARM.com>2010-08-23 11:18:39 -0500
committerAli Saidi <Ali.Saidi@ARM.com>2010-08-23 11:18:39 -0500
commit1d1837ee9855f06af963f96948c33623bf905e7d (patch)
tree3fda014fefbb62f93917dd80bcaa10367aaed60a /src/cpu/base_dyn_inst.hh
parentac575a9d8242d4ff8e40ac25f2fd5862ef551ad7 (diff)
downloadgem5-1d1837ee9855f06af963f96948c33623bf905e7d.tar.xz
CPU: Set a default value when readBytes faults.
This was being done in read(), but if readBytes was called directly it wouldn't happen. Also, instead of setting the memory blob being read to -1 which would (I believe) require using memset with -1 as a parameter, this now uses bzero. It's hoped that it's more specialized behavior will make it slightly faster.
Diffstat (limited to 'src/cpu/base_dyn_inst.hh')
-rw-r--r--src/cpu/base_dyn_inst.hh11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/cpu/base_dyn_inst.hh b/src/cpu/base_dyn_inst.hh
index 3ecec0f0c..6ea00dd3d 100644
--- a/src/cpu/base_dyn_inst.hh
+++ b/src/cpu/base_dyn_inst.hh
@@ -899,6 +899,12 @@ BaseDynInst<Impl>::readBytes(Addr addr, uint8_t *data,
this->setExecuted();
}
+ if (fault != NoFault) {
+ // Return a fixed value to keep simulation deterministic even
+ // along misspeculated paths.
+ bzero(data, size);
+ }
+
if (traceData) {
traceData->setAddr(addr);
}
@@ -913,11 +919,6 @@ BaseDynInst<Impl>::read(Addr addr, T &data, unsigned flags)
{
Fault fault = readBytes(addr, (uint8_t *)&data, sizeof(T), flags);
- if (fault != NoFault) {
- // Return a fixed value to keep simulation deterministic even
- // along misspeculated paths.
- data = (T)-1;
- }
data = TheISA::gtoh(data);
if (traceData) {