arch-arm: Fix tracing code for SVE gather
authorGabor Dozsa <gabor.dozsa@arm.com>
Tue, 18 Dec 2018 15:11:05 +0000 (15:11 +0000)
committerGiacomo Gabrielli <giacomo.gabrielli@arm.com>
Sat, 27 Jul 2019 20:51:31 +0000 (20:51 +0000)
Printing the entire contents of the dest vecreg for each gather
microop is suboptimal as it creates false positive differences
between Atomic and O3 traces. This fix prints only the memory
data which a microop loads from memory.

Change-Id: Idd8e0b26a96f9c9cc0b69360174bedf6a9f6dcb5
Signed-off-by: Gabor Dozsa <gabor.dozsa@arm.com>
Reviewed-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19171
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/arch/arm/isa/templates/sve_mem.isa

index dced5f4a59be4840e5f3f52c505e7eac82246c7b..3085eca6d7912fc785089c83e971d3bf3f522bc4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2018 ARM Limited
+// Copyright (c) 2017-2019 ARM Limited
 // All rights reserved
 //
 // The license below extends only to copyright in the software and shall
@@ -560,7 +560,9 @@ def template SveGatherLoadMicroopExecute {{
         if (fault == NoFault) {
             %(fault_status_reset_code)s;
             %(memacc_code)s;
-            %(op_wb)s;
+            if (traceData) {
+                traceData->setData(memData);
+            }
         } else {
             %(fault_status_set_code)s;
             if (firstFault) {
@@ -572,7 +574,9 @@ def template SveGatherLoadMicroopExecute {{
                   fault = NoFault;
                   memData = 0;
                   %(memacc_code)s;
-                  %(op_wb)s;
+                  if (traceData) {
+                      traceData->setData(memData);
+                  }
                }
             }
         }
@@ -638,7 +642,9 @@ def template SveGatherLoadMicroopCompleteAcc {{
         }
 
         %(memacc_code)s;
-        %(op_wb)s;
+        if (traceData) {
+            traceData->setData(memData);
+        }
 
         return NoFault;
     }