mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 16:09:31 +02:00
+ implemented InterLockedExchangeAdd for i8086
git-svn-id: trunk@27406 -
This commit is contained in:
parent
d6cb55297c
commit
6cac29e1b5
@ -274,10 +274,28 @@ asm
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
{TODO: implement}
|
||||
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint;
|
||||
begin
|
||||
runerror(304);
|
||||
{TODO: use smallint?}
|
||||
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint;nostackframe;assembler;
|
||||
asm
|
||||
mov si, sp
|
||||
{$ifdef FPC_X86_DATA_NEAR}
|
||||
mov bx, ss:[si + 6 + extra_param_offset] // Target
|
||||
{$else FPC_X86_DATA_NEAR}
|
||||
mov cx, ds
|
||||
lds bx, ss:[si + 6 + extra_param_offset] // Target
|
||||
{$endif FPC_X86_DATA_NEAR}
|
||||
mov di, ss:[si + 2 + extra_param_offset] // Lo(Source)
|
||||
mov si, ss:[si + 4 + extra_param_offset] // Hi(Source)
|
||||
pushf
|
||||
cli
|
||||
mov ax, [bx]
|
||||
mov dx, [bx+2]
|
||||
add word [bx], di
|
||||
adc word [bx+2], si
|
||||
popf
|
||||
{$if defined(FPC_X86_DATA_FAR) or defined(FPC_X86_DATA_HUGE)}
|
||||
mov ds, cx
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
{TODO: implement}
|
||||
|
Loading…
Reference in New Issue
Block a user