+ InterlockedCompareExchangePointer() alias for InterlockedCompareExchange(pointer)

(mantis #29964)

git-svn-id: trunk@34599 -
This commit is contained in:
Jonas Maebe 2016-10-02 12:57:07 +00:00
parent e5a1231931
commit 868370d727
3 changed files with 39 additions and 0 deletions

1
.gitattributes vendored
View File

@ -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

View File

@ -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
View 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.