cpu: o3: lsq: Fix TSO implementation
authorMarco Elver <marco.elver@ed.ac.uk>
Tue, 25 Mar 2014 18:15:04 +0000 (13:15 -0500)
committerMarco Elver <marco.elver@ed.ac.uk>
Tue, 25 Mar 2014 18:15:04 +0000 (13:15 -0500)
commitb884fcf412f43ae8e1d365f23846f0f8e912ef1a
tree741591b9c7fb8b5bca3773e94d874630936c52a3
parent8b4b1dcb86b0799a8c32056427581a8b6249a3bf
cpu: o3: lsq: Fix TSO implementation
This patch fixes violation of TSO in the O3CPU, as all loads must be
ordered with all other loads. In the LQ, if a snoop is observed, all
subsequent loads need to be squashed if the system is TSO.

Prior to this patch, the following case could be violated:

 P0         | P1          ;
 MOV [x],mail=/usr/spool/mail/nilay | MOV EAX,[y] ;
 MOV [y],mail=/usr/spool/mail/nilay | MOV EBX,[x] ;

exists (1:EAX=1 /\ 1:EBX=0) [is a violation]

The problem was found using litmus [http://diy.inria.fr].

Committed by: Nilay Vaish <nilay@cs.wisc.edu
src/cpu/o3/lsq_unit_impl.hh