cpu-o3: fix atomic instructions non-speculative
authorJordi Vaquero <jordi.vaquero@metempsy.com>
Tue, 6 Aug 2019 01:45:06 +0000 (03:45 +0200)
committerJordi Vaquero <jordi.vaquero@metempsy.com>
Wed, 7 Aug 2019 17:39:51 +0000 (17:39 +0000)
Fix problem with O3 and AMO instructions. At initial stages amo
instruction is considered a type of non-speculative store. After
the instruction has been commited and during the squash step,
acquire_release version of the AMO operation is considered speculative,
that differents results in an assert fault. This fix ensures that AMO
instructions are always considered non-speculative, during early stages
and during squas/removal of the instruction.

Change-Id: Ia0c5fbb9dc44a9991337b57eb759b1ed08e4149e
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19815
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/cpu/o3/inst_queue_impl.hh

index c3e3fdf32c7a1dfe36d9d2807c70a52d301cfa48..f3362f2164783ab45db31d293cfda1fa01b813f7 100644 (file)
@@ -1262,7 +1262,6 @@ InstructionQueue<Impl>::doSquash(ThreadID tid)
 
             bool is_acq_rel = squashed_inst->isMemBarrier() &&
                          (squashed_inst->isLoad() ||
-                          squashed_inst->isAtomic() ||
                           (squashed_inst->isStore() &&
                              !squashed_inst->isStoreConditional()));