InterlockedExchangeAdd64 for Delphi


{$IFDEF CPUX86}
function  InterlockedExchangeAdd64(var Addend: Int64; Value: longword): Int64; register;
asm
          PUSH    EDI
          PUSH    ESI
          PUSH    EBX

          MOV     EDI, EAX
          MOV     ESI, EDX

          MOV     EAX, [EDI]
          MOV     EDX, [EDI+4]
@@1:
          MOV     ECX, EDX
          MOV     EBX, EAX

          ADD     EBX, ESI
          ADC     ECX, 0

LOCK      CMPXCHG8B [EDI]
          JNZ     @@1

          POP     EBX
          POP     ESI
          POP     EDI
end;
{$ENDIF}

{$IFDEF CPUX64}
function  InterlockedExchangeAdd64(var Addend: Int64; Value: longword): Int64; register;
asm
          .NOFRAME
          MOV     RAX, RDX
          LOCK    XADD [RCX], RAX
end;
{$ENDIF}


참고자료


'프로그래밍 > Delphi' 카테고리의 다른 글

A simple IDE for Java Script programming  (0) 2016.04.16
오브젝트 파스칼 입문서  (0) 2014.12.07
InterlockedExchangeAdd64 for Delphi  (0) 2014.07.01
Snappy for Delphi  (0) 2014.02.27
온라인 강의 - UI 분리 개발  (0) 2013.12.06
온라인 강의 - Multi-thread programming  (0) 2013.11.04

Posted by 류종택