SMKM_STORE_MGR::SmFeEvictUpdatePass

__int64 __fastcall SMKM_STORE_MGR::SmFeEvictUpdatePass(
        __int64 a1,
        unsigned int *a2,
        unsigned int *a3,
        _DWORD *a4,
        __int64 a5){
  unsigned int v5; 
  unsigned int v6; 
  int v7; 
  unsigned int v8; 
  unsigned int v9; 
  int v10; 
  unsigned int v11; 
  __m128i *v12; 
  __int64 v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  unsigned int v17; 
  int v19; 
  int v20; 
  unsigned int v21; 
  v5 = *a2;
  v6 = 0;
  v7 = 0;
  v8 = *a3;
  v9 = 1024;
  v10 = *(_DWORD *)(a5 + 24);
  v11 = *a3 + *a2 - 1;
  v21 = *a3;
  if( v10 == -1 || !v10 )
    v12 = (__m128i *)(a5 + 8);
  else
    v12 = (__m128i *)(*(_QWORD *)a5 + 16i64 * (unsigned int)(v10 - 1));
  v13 = v12->m128i_i64[0];
  v14 = _mm_srli_si128(*v12, 8).m128i_u64[0] - 8;
  while( 1 )
  {
    if( !v13 )
    {
      v15 = 0i64;
LABEL_27:
      v17 = v11;
      v19 = 1;
      goto LABEL_28;
    }
    v14 += 8i64;
    v15 = v14;
    if( v14 >= v13 + 8 * ((unsigned __int64)(unsigned __int16)*(_DWORD *)v13 + 2) )
    {
      v16 = *(_QWORD *)(v13 + 8);
      if( v16 )
      {
        v13 = *(_QWORD *)(v13 + 8);
        v14 = v16 + 16;
      }
      v15 = (v16 + 16) & -(__int64)(v16 != 0);
    }
    if( !v15 )
      goto LABEL_27;
    v17 = *(_DWORD *)v15;
    if( v5 >= *(_DWORD *)v15 && (*(_BYTE *)(v15 + 7) & 1) == 0 )
      goto LABEL_13;
    if( v11 < v17 )
      goto LABEL_27;
    v19 = 0;
LABEL_28:
    v7 += v17 - v5;
    v20 = v7;
    if( v6 )
      break;
    if( v19 )
    {
LABEL_23:
      ++v7;
      goto LABEL_24;
    }
    v6 = v17 - v5;
    v5 = v17;
    if( (*(_BYTE *)(v15 + 7) & 1) == 0 )
    {
LABEL_13:
      if( v9 != 1024 && v9 != *(unsigned __int16 *)(v15 + 4) )
        goto LABEL_24;
      if( *(_BYTE *)(v15 + 6) == 2 )
      {
        if( v9 != 1024 )
          goto LABEL_24;
      }
      else
      {
        if( v6 )
        {
          if( v9 == 1024 )
            goto LABEL_24;
        }
        else
        {
          if( !SmKmStoreReferenceEx((INT64)&SmGlobals, *(unsigned __int16 *)(v15 + 4)) )
            goto LABEL_23;
          v9 = *(unsigned __int16 *)(v15 + 4);
          v8 = v21;
        }
        *(_BYTE *)(v15 + 6) = 2;
      }
    }
    ++v6;
    ++v7;
    if( v6 == v8 )
      goto LABEL_24;
    ++v5;
  }
  ++v7;
  if( !v19 )
    v7 = v20;
LABEL_24:
  *a3 = v6;
  *a4 = v7;
  return v9;
}

Referenced by:

No references.