mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-18 17:19:32 +02:00
+ InterlockedCompareExchangePointer() alias for InterlockedCompareExchange(pointer)
(mantis #29964) git-svn-id: trunk@34599 -
This commit is contained in:
parent
e5a1231931
commit
868370d727
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -15195,6 +15195,7 @@ tests/webtbs/tw29923.pp svneol=native#text/plain
|
||||
tests/webtbs/tw29930.pp svneol=native#text/plain
|
||||
tests/webtbs/tw29933.pp svneol=native#text/plain
|
||||
tests/webtbs/tw29958.pp svneol=native#text/pascal
|
||||
tests/webtbs/tw29964.pp svneol=native#text/plain
|
||||
tests/webtbs/tw2998.pp svneol=native#text/plain
|
||||
tests/webtbs/tw2999.pp svneol=native#text/plain
|
||||
tests/webtbs/tw29992.pp svneol=native#text/plain
|
||||
|
@ -1396,12 +1396,14 @@ function InterLockedDecrement (var Target: Pointer) : Pointer; external name 'FP
|
||||
function InterLockedExchange (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGE64';
|
||||
function InterLockedExchangeAdd (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGEADD64';
|
||||
function InterlockedCompareExchange(var Target: Pointer; NewValue: Pointer; Comperand: Pointer): Pointer; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE64';
|
||||
function InterlockedCompareExchangePointer(var Target: Pointer; NewValue: Pointer; Comperand: Pointer): Pointer; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE64';
|
||||
{$else cpu64}
|
||||
function InterLockedIncrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDINCREMENT';
|
||||
function InterLockedDecrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDDECREMENT';
|
||||
function InterLockedExchange (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGE';
|
||||
function InterLockedExchangeAdd (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGEADD';
|
||||
function InterlockedCompareExchange(var Target: Pointer; NewValue: Pointer; Comperand: Pointer): Pointer; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
|
||||
function InterlockedCompareExchangePointer(var Target: Pointer; NewValue: Pointer; Comperand: Pointer): Pointer; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
|
||||
{$endif cpu64}
|
||||
{ unsigned overloads }
|
||||
function InterLockedIncrement (var Target: cardinal) : cardinal; external name 'FPC_INTERLOCKEDINCREMENT';
|
||||
|
36
tests/webtbs/tw29964.pp
Normal file
36
tests/webtbs/tw29964.pp
Normal file
@ -0,0 +1,36 @@
|
||||
{$packrecords 1}
|
||||
{$r-}
|
||||
|
||||
var
|
||||
r: record
|
||||
i: int64;
|
||||
p: pointer;
|
||||
w: smallint;
|
||||
end;
|
||||
|
||||
var
|
||||
i: longint;
|
||||
b: byte;
|
||||
orgp,oldp,newp: pointer;
|
||||
begin
|
||||
r.i:=-1;
|
||||
r.w:=-1;
|
||||
b:=$12;
|
||||
ptruint(r.p):=b;
|
||||
for i:=2 to sizeof(r.p) do
|
||||
begin
|
||||
b:=b*3;
|
||||
ptruint(r.p):=ptruint(r.p) shl 8 or b;
|
||||
end;
|
||||
orgp:=r.p;
|
||||
newp:=pointer(not ptruint(orgp));
|
||||
oldp:=InterlockedCompareExchangePointer(r.p,newp,r.p);
|
||||
if oldp<>orgp then
|
||||
halt(1);
|
||||
if r.p<>newp then
|
||||
halt(2);
|
||||
if r.i<>-1 then
|
||||
halt(3);
|
||||
if r.w<>-1 then
|
||||
halt(4);
|
||||
end.
|
Loading…
Reference in New Issue
Block a user