anchor.diff:              // train branch predictor if needed 
               // since we can only do 1 training in a cycle, split the rule
               // XXX not training JAL, reduce chance of conflicts
  -            (* split *)
  -            if(x.iType == Jr || x.iType == Br) (* nosplit *) begin
  -                inIfc.fetch_train_predictors(
  -                    x.controlFlow.pc, x.controlFlow.nextPc, x.iType,
  -                    x.controlFlow.taken, x.dpTrain, False
  -                );
  +            if(x.iType == Jr || x.iType == Br) begin
  +                trainBPQ.enq(AluExeTrainBP {
  +                    pc: x.controlFlow.pc,
  +                    nextPc: x.controlFlow.nextPc,
  +                    iType: x.iType,
  +                    taken: x.controlFlow.taken,
  +                    dpTrain: x.dpTrain,
  +                    mispred: False
  +                });
               end
           end
  +    endrule
  +
  +    rule doTrainBP;
  +        let x <- toGet(trainBPQ).get;
  +        inIfc.fetch_train_predictors(
  +            x.pc, x.nextPc, x.iType, x.taken, x.dpTrain, x.mispred
  +        );
       endrule
   
       interface recvBypass = map(getRecvBypassIfc, bypassWire);
  
positive.code:     // speculation
      Maybe#(SpecTag) spec_tag;
  } AluExeToFinish deriving(Bits, Eq, FShow);
  
  // XXX currently ALU/Br should not have any exception, so we don't have cause feild above
  // TODO FIXME In future, if branch target is unaligned to 4 bytes, we may have exception
  
negative.code:             inIfc.redirect_action(x.controlFlow.nextPc, x.spec_tag, x.tag);
              // must be a branch, train branch predictor
              doAssert(x.iType == Jr || x.iType == Br, "only jr and br can mispredict");
              trainBPQ.enq(AluExeTrainBP {
                  pc: x.controlFlow.pc,
                  nextPc: x.controlFlow.nextPc,
                  iType: x.iType,
                  taken: x.controlFlow.taken,
                  dpTrain: x.dpTrain,
                  mispred: True
              });
  `ifdef PERF_COUNT
              // performance counter
              if(inIfc.doStats) begin
  