HalpNumaSwapP0NodeToFront
VOID __stdcall HalpNumaSwapP0NodeToFront(){
__int64 v0;
INT64 v1;
unsigned int v2;
unsigned int v3;
__int64 v4;
int v5;
int v6;
unsigned int v7;
_DWORD *v8;
unsigned int v9;
__int64 v10;
_DWORD *v11;
int v12;
_DWORD *v13;
int v14;
__int64 v15;
__int64 v16;
__int16 v17;
__int64 v18;
__int64 v19;
__int64 v20;
__int64 v21;
int v22;
__int64 v23;
__int64 v24;
__int16 v25;
UINT64 ChannelCount;
UINT64 MemoryRangeCount;
UINT64 ProcCount;
UINT64 NodeCount;
LODWORD(ChannelCount) = 0;
LODWORD(NodeCount) = 0;
LODWORD(MemoryRangeCount) = 0;
LODWORD(ProcCount) = 0;
if( *(&CmpDummyThreadEvent + 869) )
{
v0 = *(&CmpDummyThreadEvent + 876);
if( *(&CmpDummyThreadEvent + 876) )
{
if( (unsigned __int8)HalpGetNumaProcMemoryCount(&NodeCount, &ProcCount, &MemoryRangeCount, &ChannelCount)
&& (LODWORD(ChannelCount) = 0, HalpInterruptGetIdentifiers(0i64, (INT64)&ChannelCount, 0i64, v1) >= 0) )
{
v2 = *(_DWORD *)(v0 + 60);
v3 = 0;
if( v2 )
{
while( *(_DWORD *)(*(_QWORD *)v0 + 4i64 * v3) != (_DWORD)ChannelCount )
{
if( ++v3 >= v2 )
return;
}
v4 = *(&CmpDummyThreadEvent + 876);
v5 = 0;
v6 = *(_DWORD *)(*(_QWORD *)(*(&CmpDummyThreadEvent + 876) + 16i64) + 4i64 * v3);
v7 = *(_DWORD *)(*(&CmpDummyThreadEvent + 876) + 56i64);
if( v7 )
{
v8 = *(_DWORD **)(*(&CmpDummyThreadEvent + 876) + 24i64);
while( v8[v5] != v6 )
{
if( ++v5 >= v7 )
return;
}
if( v5 )
{
v9 = 1;
v8[v5] = *v8;
**(_DWORD **)(v4 + 24) = v6;
v10 = *(&CmpDummyThreadEvent + 876);
v11 = *(_DWORD **)(*(&CmpDummyThreadEvent + 876) + 32i64);
v12 = v11[v5];
v11[v5] = *v11;
**(_DWORD **)(v10 + 32) = v12;
v13 = *(_DWORD **)(v10 + 40);
v14 = v13[v5];
v13[v5] = *v13;
for( **(_DWORD **)(v10 + 40) = v14; v9 < *(_DWORD *)(v4 + 56); ++v9 )
{
if( v9 != v5 )
{
v15 = *(&CmpDummyThreadEvent + 876);
v16 = *(_QWORD *)(*(&CmpDummyThreadEvent + 876) + 48i64);
v17 = *(_WORD *)(v16 + 2i64 * (v9 + v5 * *(_DWORD *)(*(&CmpDummyThreadEvent + 876) + 64i64)));
*(_WORD *)(v16 + 2i64 * (v9 + v5 * *(_DWORD *)(*(&CmpDummyThreadEvent + 876) + 64i64))) = *(_WORD *)(v16 + 2i64 * v9);
*(_WORD *)(*(_QWORD *)(v15 + 48) + 2i64 * v9) = v17;
v18 = *(_QWORD *)(v15 + 48);
v19 = v9 * *(_DWORD *)(v15 + 64);
LOWORD(v16) = *(_WORD *)(v18 + 2i64 * (unsigned int)(v5 + v19));
*(_WORD *)(v18 + 2i64 * (unsigned int)(v5 + v19)) = *(_WORD *)(v18 + 2 * v19);
*(_WORD *)(*(_QWORD *)(v15 + 48) + 2i64 * v9 * *(_DWORD *)(v15 + 64)) = v16;
}
}
if( (_DWORD)MemoryRangeCount )
{
v20 = 0i64;
v21 = (unsigned int)MemoryRangeCount;
do
{
v22 = *(_DWORD *)(v20 + *(&CmpDummyThreadEvent + 866) + 8);
if( v22 )
{
if( v22 == v5 )
*(_DWORD *)(v20 + *(&CmpDummyThreadEvent + 866) + 8) = 0;
}
else
{
*(_DWORD *)(v20 + *(&CmpDummyThreadEvent + 866) + 8) = v5;
}
v20 += 16i64;
--v21;
}
while( v21 );
}
if( *(&CmpDummyThreadEvent + 1022) )
{
v23 = 0i64;
v24 = *(&CmpDummyThreadEvent + 1022);
do
{
v25 = *(_WORD *)(v23 + *(&CmpDummyThreadEvent + 510) + 10);
if( v25 )
{
if( v25 == (_WORD)v5 )
*(_WORD *)(v23 + *(&CmpDummyThreadEvent + 510) + 10) = 0;
}
else
{
*(_WORD *)(v23 + *(&CmpDummyThreadEvent + 510) + 10) = v5;
}
v23 += 16i64;
--v24;
}
while( v24 );
}
}
}
}
}
else
{
*(&CmpDummyThreadEvent + 876) = 0i64;
}
}
}
}Referenced by:
HalpAcpiInitSystem