KiAssignFixedNodes
char __fastcall KiAssignFixedNodes(__int64 *a1, __int64 a2, unsigned __int16 a3, char a4, int *a5, __m128 *a6){
unsigned __int16 v7;
__int64 v8;
int v9;
__m128 v10;
int *v11;
__int64 *v12;
__int64 v13;
unsigned __int16 i;
__int64 v15;
char v16;
unsigned int v17;
unsigned __int16 v18;
unsigned __int16 v19;
__m128 *v20;
int *v21;
int v22;
__int64 v23;
__int64 v24;
v7 = a2;
v8 = 20i64;
v9 = KiMaximumGroupSize;
v10 = _mm_movelh_ps((__m128)0i64, (__m128)0i64);
*a6 = v10;
a6[1] = v10;
a6[2].m128_u64[0] = 0i64;
v11 = a5;
while( v8 )
{
*v11++ = v9;
--v8;
}
if( (_WORD)a2 )
{
v12 = a1;
a2 = (unsigned __int16)a2;
do
{
v13 = *v12++;
*(_WORD *)(v13 + 144) = -1;
*(_BYTE *)(v13 + 181) &= ~2u;
--a2;
}
while( a2 );
}
for( i = 0; i < v7; ++i )
{
v15 = a1[i];
v16 = *(_BYTE *)(v15 + 181);
if( (v16 & 8) != 0 )
{
if( i >= a3 )
{
v17 = KiMaximumGroupSize;
v18 = 20;
v19 = 0;
if( !a3 )
goto LABEL_19;
v20 = a6;
v21 = a5;
do
{
if( *v21 >= (unsigned int)*(unsigned __int8 *)(v15 + 180) && v20->m128_u16[0] < v17 )
{
v17 = v20->m128_u16[0];
v18 = v19;
}
++v19;
++v21;
v20 = (__m128 *)((char *)v20 + 2);
}
while( v19 < a3 );
if( v18 == 20 )
{
LABEL_19:
if( !a4 )
return 0;
if( !*(_WORD *)(v15 + 146) )
{
if( (v16 & 2) == 0 )
{
do
--i;
while( (*(_BYTE *)(a1[i] + 181) & 2) == 0 );
}
v23 = a1[i];
v24 = *(unsigned __int16 *)(v23 + 144);
*(_WORD *)(v23 + 144) = -1;
*(_BYTE *)(v23 + 181) &= ~2u;
--a6->m128_i16[v24];
a5[v24] += *(unsigned __int8 *)(v23 + 180);
}
}
else
{
*(_WORD *)(v15 + 144) = v18;
*(_BYTE *)(v15 + 181) |= 2u;
v22 = *(unsigned __int8 *)(v15 + 180);
++a6->m128_i16[v18];
a5[v18] -= v22;
}
}
else
{
++a6->m128_i16[i];
*(_WORD *)(v15 + 144) = i;
*(_BYTE *)(v15 + 181) |= 2u;
a5[i] -= *(unsigned __int8 *)(v15 + 180);
}
}
}
return 1;
}Referenced by:
KiPerformGroupConfiguration