mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 17:47:16 +00:00
libport: Implemented the interlocked_cmpxchg128 function for ARM64.
This commit is contained in:
parent
16954b3a82
commit
c2ef2edf85
|
@ -313,6 +313,28 @@ __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare )
|
||||||
return compare;
|
return compare;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __aarch64__
|
||||||
|
int interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare )
|
||||||
|
{
|
||||||
|
int retv;
|
||||||
|
pthread_mutex_lock( &interlocked_mutex );
|
||||||
|
if (dest[0] == compare[0] && dest[1] == compare[1])
|
||||||
|
{
|
||||||
|
dest[0] = xchg_low;
|
||||||
|
dest[1] = xchg_high;
|
||||||
|
retv = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
compare[0] = dest[0];
|
||||||
|
compare[1] = dest[1];
|
||||||
|
retv = 0;
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock( &interlocked_mutex );
|
||||||
|
return retv;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int interlocked_xchg( int *dest, int val )
|
int interlocked_xchg( int *dest, int val )
|
||||||
{
|
{
|
||||||
int retv;
|
int retv;
|
||||||
|
|
Loading…
Reference in a new issue