anchor.diff:    case Instruction^.IndexAndOpcode and $ff of
      opSINGLECHAR:begin
       if byte(ansichar(CurrentChar))=Instruction^.Value then begin
  -     DFAAddInstructionThread(@DFANewState,Instruction^.Next);
  +     DFAFastAddInstructionThread(@DFANewState,Instruction^.Next);
       end;
      end;
      opCHAR:begin
       if CurrentChar in PFLRECharClass(pointer(ptruint(Instruction^.Value)))^ then begin
  -     DFAAddInstructionThread(@DFANewState,Instruction^.Next);
  +     DFAFastAddInstructionThread(@DFANewState,Instruction^.Next);
       end;
      end;
      opANY:begin
  -    DFAAddInstructionThread(@DFANewState,Instruction^.Next);
  +    DFAFastAddInstructionThread(@DFANewState,Instruction^.Next);
      end;
      opMATCH:begin
       if not ((rfLONGEST in Instance.Flags) or Reversed) then begin
  
positive.code:   inc(Generation);
    GetMem(DFAUnanchoredStartState,DFAStateSize);
    FillChar(DFAUnanchoredStartState^,DFAStateSize,AnsiChar(#0));
    DFAAddInstructionThread(DFAUnanchoredStartState,Instance.UnanchoredStartInstruction);
    DFAUnanchoredStartState^.Flags:=DFAUnanchoredStartState^.Flags or sfDFAStart;
    DFAStateCache.Add(DFAUnanchoredStartState);
    inc(DFACountStatesCached);
  
negative.code:   LastState:=State;
    State:=State^.NextStates[LocalByteMap[byte(ansichar(LocalInput[Position]))]];
    if not assigned(State) then begin
     State:=DFAFastProcessNextState(LastState,LocalInput[Position],true);
     if not assigned(State) then begin
      result:=DFAError;
      exit;
  