anchor.diff:      endfunction
           
       rule doKillLdByLdSt;
  -        // get load to kill from LSQ
           let info <- lsq.getLdKilledByLdSt;
           doKillLd(info, "[doKillLdByLdSt]");
       endrule
  +
  +`ifdef TSO_MM
  +    rule doKillByCache;
  +        let info <- lsq.getLdKilledByCache;
  +        doKillLd(info, "[doKillLdByCache]");
  +    endrule
  +`endif
   
       // issue Ld
       function Action doIssueLd(LSQIssueLdInfo info, String rule_name);
  
positive.code:     endrule
  
      rule doDeqLSQ_Lr_issue(
          lsqDeqLd.memFunc == Lr &&
          waitLrScResp == Invalid &&
          lsqDeqLd.specBits == 0 &&
          stb.noMatchLdQ(lsqDeqLd.paddr, lsqDeqLd.shiftedBE)
      );
          // send to mem
          waitLrScResp <= Lr;
  
negative.code: 
          // print pass & stats
          $fdisplay(stderr, "INFO: pass");
          $fdisplay(stderr, "stats: Ld %d, Lr %d, St %d, Sc %d, kill %d, stall %d",
              ldCnt, lrCnt, stCnt, scCnt, killCnt, stallCnt
          );
          $finish;
      endseq);
  