mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-11 19:05:54 +02:00
* Added InterlockedCompareExchange64 for i386 (supported over cmpxchg8b instruction)
git-svn-id: trunk@6753 -
This commit is contained in:
parent
c630797934
commit
2c22173534
@ -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
|
||||
|
@ -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';
|
||||
|
Loading…
Reference in New Issue
Block a user