anchor.diff:    end;
     {$endif}
   
  -  case Length of
  -    3:
  +  if (Length <> 0) then
  +  begin
  +    if (Length and 1 <> 0) then
       begin
  +      P^ := 0;
  +      Inc(P);
  +      if (Length and 2 = 0) then goto done;
  +      goto _2;
  +    end else
  +    begin
  +      _2:
         PWord(P)^ := 0;
  -      Inc(P, SizeOf(Word));
  -      P^ := 0;
       end;
  -    2: PWord(P)^ := 0;
  -    1: P^ := 0;
  -  end;
  -end;
  -{$else}
  -  {$ifdef INLINESUPPORT}inline;{$endif}
  +  end;
  +done:
  +end;
  +{$elseif Defined(INLINESUPPORT)} inline;
   begin
     FillChar(Destination^, Length, 0);
   end;
  +{$else .CPUX86}
  +asm
  +  xor ecx, ecx
  +  jmp System.@FillChar
  +end;
  +{$ifend}
  +
  +{$ifdef CPFLIB}
  +procedure Move(const Source; var Dest; Count: NativeUInt);
  +label
  +  _2, done;
  +var
  +  S, D: PByte;
  +begin
  +  S := @Source;
  +  D := @Dest;
  +
  +  while (Count >= SizeOf(NativeUInt)) do
  +  begin
  +    PNativeUInt(D)^ := PNativeUInt(S)^;
  +
  +    Dec(Count, SizeOf(NativeUInt));
  +    Inc(S, SizeOf(NativeUInt));
  +    Inc(D, SizeOf(NativeUInt));
  +  end;
  +
  +  {$ifdef LARGEINT}
  +  if (Count >= SizeOf(Cardinal)) then
  +  begin
  +    PCardinal(D)^ := PCardinal(S)^;
  +
  +    Dec(Count, SizeOf(Cardinal));
  +    Inc(S, SizeOf(Cardinal));
  +    Inc(D, SizeOf(Cardinal));
  +  end;
  +  {$endif}
  +
  +  if (Count <> 0) then
  +  begin
  +    if (Count and 1 <> 0) then
  +    begin
  +      D^ := S^;
  +      Inc(S);
  +      Inc(D);
  +      if (Count and 2 = 0) then goto done;
  +      goto _2;
  +    end else
  +    begin
  +      _2:
  +      PWord(D)^ := PWord(S)^;
  +    end;
  +  end;
  +
  +done:
  +end;
   {$endif}
  +
  +procedure FillCardinal(Destination: PCardinal; Count, Value: NativeUInt);
  +begin
  +  {$ifdef LARGEINT}
  +    Value := Value or (Value shl 32);
  +
  +    while (Count > 1) do
  +    begin
  +      PNativeUInt(Destination)^ := Value;
  +
  +      Dec(Count, 2);
  +      Inc(Destination, 2);
  +    end;
  +
  +    if (Count <> 0) then
  +      Destination^ := Value;
  +  {$else .SMALLINT}
  +    while (Count <> 0) do
  +    begin
  +      Destination^ := Value;
  +
  +      Dec(Count);
  +      Inc(Destination);
  +    end;
  +  {$endif}
  +end;
   
   
   {$ifdef CPFLIB}
  
positive.code:   // todo
  end;
  
  procedure CopyInfo(var Dest, Src: TPathMapInfo);
  begin
    Dest := Src;
  end;
  
  function TPathMap.DoFindPath(MapSelf: Pointer; StartNode: PPathMapNode): PPathMapNode;
  label
    nextchild_continue, nextchild, child_tobuffer, next_current, current_initialize;
  const
  
negative.code:     Buffer: ^TMapNodeBuffer;
    {$endif}
  begin
    Store.Self := Pointer({$ifdef CPFLIB}@Self{$else}Self{$endif});
    Store.HexagonalFlag := NativeUInt(Self.FKind = mkHexagonal) * 2;
    Move(Self.FInfo, Store.Info,
      (SizeOf(Store.Info) - 32 * SizeOf(Pointer)) +
      (Self.FInfo.NodeStorage.Allocated * SizeOf(Pointer)) );
  
    {$ifNdef CPUX86}
    Buffer := @Store.Buffer;
  