Hi
 I have problem with function move(src,dest,count)

sometimes they erase value of SRC

if I run


     move(item^,item2^,10);
then
   value of   item (not item^) is set to 0 (nil)

Its hard to debug it for me, only thing I discover is so:

for modified procedure

--------------------------------------------
procedure MoveNN(const source;var dest;count:longint);assembler;
var
  saveesi,saveedi : longint;
asm
        movl    %edi,saveedi
        movl    %esi,saveesi
{$ifdef REGCALL}

        movl    %eax,%esi   {source}
        movl    %edx,%edi   {dest}
        movl    %ecx,%edx
{$else}
(*        movl    dest,%edi
        movl    source,%esi
        movl    count,%edx
*)        
{$endif}
{ Forward Copy }
.LFMove:
        cld
//          std

        movl    %edx,%ecx
        rep
        movsb
        jmp .LMoveEnd
{ Backward Copy }
.LBMove:
(*
*)
.LMoveEnd:
        movl    saveedi,%edi
        movl    saveesi,%esi

end;

------------------------------
bug is present 
I thing that somethis wrong is with CLD (or passing parameters) 
HINT: ITEM is set to 0 when count if >4


please help

Darek

_______________________________________________
fpc-devel maillist  -  [EMAIL PROTECTED]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to