HsaUpdateRemappingDestination
UINT64 __fastcall HsaUpdateRemappingDestination(UINT64 *a1, __int64 rdx0){
__m128i a2;
unsigned int v3;
char v4;
__int64 v6;
unsigned int v7;
__m128i *v8;
unsigned __int64 v9;
int v10;
signed __int64 v11;
signed __int64 v12;
__m128i v13;
unsigned __int8 v14;
unsigned int i;
a2.m128i_i64[1] = rdx0;
v3 = 0;
v4 = a2.m128i_i8[8];
for( i = 0; v3 < *(&CmpDummyThreadEvent + 805); i = v3 )
{
HsaGetDeviceAperture(v3 << 9);
v6 = a2.m128i_i64[0];
if( !v3 || *(_QWORD *)(a2.m128i_i64[0] + 16) )
{
v7 = 0;
if( *((_DWORD *)a1 + 45) )
{
do
{
v8 = (__m128i *)(*(_QWORD *)(v6 + 16) + 16i64 * v7);
v9 = v8->m128i_i64[0];
if( (v8->m128i_i64[0] & 1) != 0 && (!v4 || _bittest(*(const signed __int32 **)(v6 + 40), v7)) )
{
v10 = (v8->m128i_u8[15] << 24) | (v9 >> 8) & 0xFFFFFF;
IvtUpdateExtendedDestination(v10, (v9 & 0x40) != 0);
if( v10 != a2.m128i_i32[0] )
{
v11 = ((unsigned __int64)a2.m128i_u32[0] << 32) ^ (_mm_srli_si128(*v8, 8).m128i_u64[0] ^ ((unsigned __int64)a2.m128i_u32[0] << 32)) & 0xFFFFFFFFFFFFFFi64;
v12 = v8->m128i_i64[0] ^ (v8->m128i_i64[0] ^ ((unsigned __int64)a2.m128i_u32[0] << 8)) & 0xFFFFFF00;
a2 = *v8;
do
{
v13 = a2;
v14 = _InterlockedCompareExchange128(v8->m128i_i64, v11, v12, v13.m128i_i64);
a2 = v13;
}
while( !v14 );
}
}
++v7;
}
while( v7 < *((_DWORD *)a1 + 45) );
v3 = i;
}
}
++v3;
}
return HsaInvalidateRemappingTableEntries(a1, a2.m128i_i64[1], 0i64);
}Referenced by:
No references.