mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 06:19:28 +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/tw29930.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw29933.pp svneol=native#text/plain
|
tests/webtbs/tw29933.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw29958.pp svneol=native#text/pascal
|
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/tw2998.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw2999.pp svneol=native#text/plain
|
tests/webtbs/tw2999.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw29992.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 InterLockedExchange (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGE64';
|
||||||
function InterLockedExchangeAdd (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGEADD64';
|
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 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}
|
{$else cpu64}
|
||||||
function InterLockedIncrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDINCREMENT';
|
function InterLockedIncrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDINCREMENT';
|
||||||
function InterLockedDecrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDDECREMENT';
|
function InterLockedDecrement (var Target: Pointer) : Pointer; external name 'FPC_INTERLOCKEDDECREMENT';
|
||||||
function InterLockedExchange (var Target: Pointer;Source : Pointer) : Pointer; external name 'FPC_INTERLOCKEDEXCHANGE';
|
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 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 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}
|
{$endif cpu64}
|
||||||
{ unsigned overloads }
|
{ unsigned overloads }
|
||||||
function InterLockedIncrement (var Target: cardinal) : cardinal; external name 'FPC_INTERLOCKEDINCREMENT';
|
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