HsaBuildDeviceTableEntry

__int64 __fastcall HsaBuildDeviceTableEntry(
        INT64 a1,
        unsigned __int64 a2,
        char a3,
        __int16 a4,
        int a5,
        __int64 a6,
        __int64 a7,
        INT64 a8,
        INT64 a9){
  unsigned __int64 *v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  __int64 result; 

  v9 = (unsigned __int64 *)a9;
  v10 = 0i64;
  *(_OWORD *)a9 = 0i64;
  *(_OWORD *)(a9 + 16) = 0i64;
  if( a3 )
  {
    *(_QWORD *)(a9 + 8) = 0x100000000i64;
    v10 = *(_QWORD *)a9 & 0xE1FFFFFFFFFFFFFFui64 | ((a2 & 7) << 58) | 0x180000000000000i64;
    *(_WORD *)(a9 + 10) = a2 >> 3;
    v11 = (a2 << 24) ^ (*(_QWORD *)(a9 + 8) ^ (a2 << 24)) & 0x7FFFFFFFFFFi64;
    *(_QWORD *)a9 = v10;
    *(_QWORD *)(a9 + 8) = v11;
  }
  if( a5 )
  {
    *(_WORD *)(a9 + 8) = a4;
    v10 = *(_QWORD *)a9 & 0xFFF00000000009FFui64 | ((a6 & 0xFFFFFFFFFFi64) << 12) | 0x800;
    *(_QWORD *)a9 = v10;
  }
  if( a7 )
  {
    *(_QWORD *)(a9 + 16) = *(_QWORD *)a7;
  }
  else
  {
    HsaBuildInterruptRemappingEntry(a1, a8, a9);
    v10 = *v9;
  }
  v12 = v9[1] & 0xFFFFFDFFFFFFFFFFui64;
  *v9 = v10 | 0x6000000000000003i64;
  v9[1] = v12 | 0x10000000000i64;
  result = 0xC300000000000000ui64;
  v9[2] |= 0xC300000000000000ui64;
  return result;
}

Referenced by:

HsaInitializeIommu
HsaUpdateDeviceTableEntry