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