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