KiSetStandardizedCacheInformation

unsigned __int32 __fastcall KiSetStandardizedCacheInformation(__int64 a1, int a2){
  __int64 v2; 
  __int64 v3; 
  unsigned __int32 result; 
  unsigned __int32 v7; 
  __int64 v8; 
  __int32 v9; 
  int v10; 
  int v11; 
  int v12; 
  int v13; 
  char v14; 
  __int64 v15; 
  unsigned __int32 v16; 
  unsigned int v17; 
  __int64 v18; 
  int v19; 
  int i; 
  __int64 v21; 
  v2 = 0i64;
  v3 = a1 + 33496;
  do
  {
    v8 = __cpuid(a2, v2);
    result = EAX(v8);
    v7 = EBX(v8);
    v9 = ECX(v8);
    v10 = (int)(result << 27) >> 27;
    if( !v10 )
      break;
    v11 = v10 - 1;
    if( !v11 )
    {
      *(_DWORD *)(v3 + 8) = 2;
      goto LABEL_7;
    }
    v12 = v11 - 1;
    if( !v12 )
    {
      *(_DWORD *)(v3 + 8) = 1;
      goto LABEL_7;
    }
    v13 = v12 - 1;
    if( !v13 )
    {
      *(_DWORD *)(v3 + 8) = 0;
LABEL_7:
      if( (result & 0x200) != 0 )
        v14 = -1;
      else
        v14 = (v7 >> 22) + 1;
      *(_BYTE *)(v3 + 1) = v14;
      *(_BYTE *)v3 = (result >> 5) & 7;
      *(_WORD *)(v3 + 2) = (v7 & 0xFFF) + 1;
      *(_DWORD *)(v3 + 4) = (v9 + 1) * ((v7 >> 22) + 1) * ((v7 & 0xFFF) + 1) * (((v7 >> 12) & 0x3FF) + 1);
      v15 = *(_QWORD *)(a1 + 200);
      v16 = (result >> 14) & 0xFFF;
      if( v16 )
      {
        _BitScanReverse(&v17, 2 * v16 + 1);
        v18 = 0i64;
        v19 = ~((unsigned __int8)(1 << v17) - 1);
        for( i = v19 & *(_DWORD *)(a1 + 212);
              (unsigned int)v18 < (unsigned int)KeNumberProcessors_0;
              v18 = (unsigned int)(v18 + 1) )
        {
          v21 = (__int64)*(&KiProcessorBlock + v18);
          if( *(_QWORD *)(v21 + 192) == *(_QWORD *)(a1 + 192) && (v19 & *(_DWORD *)(v21 + 212)) == i )
          {
            v15 |= *(_QWORD *)(v21 + 200);
            *(_QWORD *)(v21 + 8 * v2 + 33904) |= v15;
          }
        }
      }
      v3 += 12i64;
      *(_QWORD *)(a1 + 8 * v2 + 33904) = v15;
      ++*(_DWORD *)(a1 + 33556);
      goto LABEL_16;
    }
    if( v13 == 2 )
    {
      *(_DWORD *)(v3 + 8) = 3;
      goto LABEL_7;
    }
LABEL_16:
    result = *(_DWORD *)(a1 + 33556);
    v2 = (unsigned int)(v2 + 1);
  }
  while( result < 5 );
  return result;
}

Referenced by:

KiSetCacheInformationAmd
KiSetCacheInformationIntel