anchor.diff:      Integer exeSendBypassPort = 0;
       Integer finishSendBypassPort = 1;
   
  +    // train BP in a new cycle
  +    FIFO#(AluExeTrainBP) trainBPQ <- mkFIFO;
  +
   `ifdef PERF_COUNT
       // performance counters
       Count#(Data) exeRedirectBrCnt <- mkCount(0);
  
positive.code: 
  `include "ProcConfig.bsv"
  import Vector::*;
  import BuildVector::*;
  import Cntrs::*;
  import Types::*;
  
negative.code:             // 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
              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);
  