[fpc-devel]problem with MOVE
    Darek Mazur 
    darekm at emadar.com
       
    Sat Mar 20 22:06:45 CET 2004
    
    
  
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
    
    
More information about the fpc-devel
mailing list