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.