* Added InterlockedCompareExchange64 for i386 (supported over cmpxchg8b instruction)

git-svn-id: trunk@6753 -
This commit is contained in:
ivost 2007-03-09 09:29:17 +00:00
parent c630797934
commit 2c22173534
2 changed files with 23 additions and 0 deletions

View File

@ -1165,6 +1165,26 @@ asm
end;
function InterlockedCompareExchange64(var Target: int64; NewValue: int64; Comperand: int64): int64; assembler;
asm
pushl %ebx
pushl %edi
{$ifdef REGCALL}
movl %eax,%edi
{$else}
movl Target,%edi
{$endif}
movl Comperand+4,%edx
movl Comperand+0,%eax
movl NewValue+4,%ecx
movl NewValue+0,%ebx
lock cmpxchg8b (%edi)
pop %edi
pop %ebx
end;
{****************************************************************************
FPU

View File

@ -716,6 +716,9 @@ function InterLockedDecrement (var Target: longint) : longint; public name 'FPC_
function InterLockedExchange (var Target: longint;Source : longint) : longint; public name 'FPC_INTERLOCKEDEXCHANGE';
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; public name 'FPC_INTERLOCKEDEXCHANGEADD';
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; public name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
{$ifdef cpui386}
function InterlockedCompareExchange64(var Target: int64; NewValue: int64; Comperand: int64): int64; public name 'FPC_INTERLOCKEDCOMPAREEXCHANGE64';
{$endif}
{$ifdef cpu64}
function InterLockedIncrement64 (var Target: int64) : int64; public name 'FPC_INTERLOCKEDINCREMENT64';
function InterLockedDecrement64 (var Target: int64) : int64; public name 'FPC_INTERLOCKEDDECREMENT64';