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.
         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);
     }
 {
     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) {