CPU: Set a default value when readBytes faults.
authorAli Saidi <Ali.Saidi@ARM.com>
Mon, 23 Aug 2010 16:18:39 +0000 (11:18 -0500)
committerAli Saidi <Ali.Saidi@ARM.com>
Mon, 23 Aug 2010 16:18:39 +0000 (11:18 -0500)
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.

src/cpu/base_dyn_inst.hh

index 3ecec0f0cf2dd5e778de5b069fa04403c9e2c7e4..6ea00dd3d664c0b94260e53bf30cee959b2d6c57 100644 (file)
@@ -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) {