UINT64 __stdcall RtlAcquireSwapReference(INT64 *a1){
INT64 *v1;
unsigned __int64 v2;
INT64 v3;
unsigned int v5;
v5 = 0;
v1 = a1;
while( 1 )
{
_m_prefetchw(v1);
v2 = *v1 & 1 | ((*v1 & 0xFFFFFFFFFFFFFFFEui64) + 2);
if( v2 < 2 )
__fastfail(0xEu);
v3 = *v1;
if( v3 == _InterlockedCompareExchange64(v1, v2, *v1) )
break;
RtlBackoff(&v5);
}
return v2 & 1;
}