프로그래밍/Delphi

InterlockedExchangeAdd64 for Delphi

ryujt 2014. 7. 1. 17:08

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}


참고자료