anchor.diff:    result:=PtrPosChar(SearchChar0,Text,TextLength,Index);
     if result<0 then begin
      exit;
  +  end else if result>=(TextLength-1) then begin
  +   break;
  +  end else if Text[result+1]=SearchChar1 then begin
  +   exit;
     end else begin
  -   if Text[result+1]=SearchChar1 then begin
  -    exit;
  -   end;
  +   Index:=result+1;
  +  end;
  + end;
  + result:=-1;
  +end;
  +
  +function PtrPosCharSetOf2Of2(const SearchChar0,SearchChar1:TFLRERawByteChar;const Text:PFLRERawByteChar;TextLength:longint;Offset:longint=0):ptrint;
  +var Index:longint;
  +    CurrentChar:TFLRERawByteChar;
  +begin
  + Index:=Offset;
  + while Index<(TextLength-1) do begin
  +  result:=PtrPosCharSetOf2(SearchChar0,SearchChar1,Text,TextLength,Index);
  +  if result<0 then begin
  +   exit;
  +  end else if result>=(TextLength-1) then begin
  +   break;
  +  end else if (Text[result+1]=SearchChar0) or (Text[result+1]=SearchChar1) then begin
  +   exit;
  +  end else begin
  +   Index:=result+1;
  +  end;
  + end;
  + result:=-1;
  +end;
  +
  +function PtrPosCharSetOf2Of3(const SearchChar0,SearchChar1:TFLRERawByteChar;const Text:PFLRERawByteChar;TextLength:longint;Offset:longint=0):ptrint;
  +var Index:longint;
  +    CurrentChar:TFLRERawByteChar;
  +begin
  + Index:=Offset;
  + while Index<(TextLength-2) do begin
  +  result:=PtrPosCharSetOf2(SearchChar0,SearchChar1,Text,TextLength,Index);
  +  if result<0 then begin
  +   exit;
  +  end else if result>=(TextLength-2) then begin
  +   break;
  +  end else if ((Text[result+1]=SearchChar0) or (Text[result+1]=SearchChar1)) and
  +              ((Text[result+2]=SearchChar0) or (Text[result+2]=SearchChar1)) then begin
  +   exit;
  +  end else begin
  +   Index:=result+1;
  +  end;
  + end;
  + result:=-1;
  +end;
  +
  +function PtrPosCharSetOf2Of4(const SearchChar0,SearchChar1:TFLRERawByteChar;const Text:PFLRERawByteChar;TextLength:longint;Offset:longint=0):ptrint;
  +var Index:longint;
  +    CurrentChar:TFLRERawByteChar;
  +begin
  + Index:=Offset;
  + while Index<(TextLength-3) do begin
  +  result:=PtrPosCharSetOf2(SearchChar0,SearchChar1,Text,TextLength,Index);
  +  if result<0 then begin
  +   exit;
  +  end else if result>=(TextLength-3) then begin
  +   break;
  +  end else if ((Text[result+1]=SearchChar0) or (Text[result+1]=SearchChar1)) and
  +              ((Text[result+2]=SearchChar0) or (Text[result+2]=SearchChar1)) and
  +              ((Text[result+3]=SearchChar0) or (Text[result+3]=SearchChar1)) then begin
  +   exit;
  +  end else begin
  +   Index:=result+1;
     end;
    end;
    result:=-1;
  
positive.code:  end;
  end;
  
  function PtrPosCharRangeSearch(const p:pointer;const v:TFLREQWord;const pEnd:pointer):ptrint; assembler; register;
  const XMM1Constant:array[0..1] of TFLREQWord=(TFLREQWord($0101010101010101),TFLREQWord($0101010101010101));
        XMM126Constant:array[0..1] of TFLREQWord=(TFLREQWord($7e7e7e7e7e7e7e7e),TFLREQWord($7e7e7e7e7e7e7e7e));
  
negative.code:        result:=PtrPosChar(FirstPrefixCharClassChars[0],Input,InputLength,0);
        end;
        2:begin
         case FirstPrefixCharClassRepeatedCount of
          1:begin
           result:=PtrPosCharSetOf2(FirstPrefixCharClassChars[0],
                                    FirstPrefixCharClassChars[1],
                                    Input,
                                    InputLength,
                                    0);
          end;
          2:begin
           result:=PtrPosCharSetOf2Of2(FirstPrefixCharClassChars[0],
                                       FirstPrefixCharClassChars[1],
                                       Input,
                                       InputLength,
                                       0);
          end;
          3:begin
           result:=PtrPosCharSetOf2Of3(FirstPrefixCharClassChars[0],
                                       FirstPrefixCharClassChars[1],
                                       Input,
                                       InputLength,
                                       0);
          end;
          4:begin
           result:=PtrPosCharSetOf2Of4(FirstPrefixCharClassChars[0],
                                       FirstPrefixCharClassChars[1],
                                       Input,
                                       InputLength,
                                       0);
          end;
          else begin
           result:=0;
          end;
         end;
        end;
        3:begin
         result:=PtrPosCharSetOf3(FirstPrefixCharClassChars[0],
  