tcpxsum
VOID __fastcall tcpxsum(struct KPRCB *a1){
_BYTE *v1;
unsigned int v2;
_QWORD *v3;
unsigned int v4;
__int64 v5;
__int64 v6;
unsigned int v7;
bool v8;
unsigned int v9;
__int64 v10;
_BOOL8 v11;
__int64 v12;
_BOOL8 v13;
__int64 v14;
_BOOL8 v15;
__int64 v16;
_BOOL8 v17;
__int64 v18;
_BOOL8 v19;
__int64 v20;
_BOOL8 v21;
__int64 v22;
_BOOL8 v23;
__int64 v24;
_BOOL8 v25;
__int64 v26;
_BOOL8 v27;
__int64 v28;
_BOOL8 v29;
__int64 v30;
_BOOL8 v31;
__int64 v32;
_BOOL8 v33;
__int64 v34;
_BOOL8 v35;
__int64 v36;
_BOOL8 v37;
__int64 v38;
_BOOL8 v39;
__int64 v40;
_BOOL8 v41;
int i;
_mm_prefetchnta(v1);
_mm_prefetchnta(v1 + 64);
_mm_prefetchnta(v1 + 127);
v3 = v1;
v4 = v2;
v5 = 0i64;
if( v2 )
{
if( ((unsigned __int8)v1 & 1) == 0 || (BYTE1(v5) = *v1, v3 = v1 + 1, v4 = v2 - 1, v2 != 1) )
{
v8 = v4 & 1;
v6 = v4 >> 1;
if( !v8 || (LOBYTE(v5) = *((_BYTE *)v3 + 2 * (unsigned int)v6), (_DWORD)v6) )
{
if( ((unsigned __int8)v3 & 6) != 0 )
{
while( 1 )
{
v8 = __CFADD__(*(_WORD *)v3, (_WORD)v5);
LOWORD(v5) = *(_WORD *)v3 + v5;
v5 = v8 + (unsigned int)v5;
v3 = (_QWORD *)((char *)v3 + 2);
v6 = (unsigned int)(v6 - 1);
if( !(_DWORD)v6 )
break;
if( ((unsigned __int8)v3 & 6) == 0 )
goto LABEL_9;
}
}
else
{
LABEL_9:
if( (unsigned int)v6 >> 2 )
{
v7 = (unsigned int)v6 >> 6;
v9 = ((unsigned int)v6 >> 2) & 0xF;
v8 = 0;
if( v9 )
{
((void(__fastcall *)(__int64, __int64, _QWORD))((char *)&tcpxsum_start + 4 * (16i64 - v9)))(
v6,
16i64 - v9,
v7 + 1);
return;
}
do
{
_mm_prefetchnta(v3 + 8);
_mm_prefetchnta((char *)v3 + 127);
v11 = v8;
v8 = __CFADD__(v8, v5);
v10 = v11 + v5;
v8 |= __CFADD__(*v3, v10);
v10 += *v3;
v13 = v8;
v8 = __CFADD__(v8, v10);
v12 = v13 + v10;
v8 |= __CFADD__(v3[1], v12);
v12 += v3[1];
v15 = v8;
v8 = __CFADD__(v8, v12);
v14 = v15 + v12;
v8 |= __CFADD__(v3[2], v14);
v14 += v3[2];
v17 = v8;
v8 = __CFADD__(v8, v14);
v16 = v17 + v14;
v8 |= __CFADD__(v3[3], v16);
v16 += v3[3];
v19 = v8;
v8 = __CFADD__(v8, v16);
v18 = v19 + v16;
v8 |= __CFADD__(v3[4], v18);
v18 += v3[4];
v21 = v8;
v8 = __CFADD__(v8, v18);
v20 = v21 + v18;
v8 |= __CFADD__(v3[5], v20);
v20 += v3[5];
v23 = v8;
v8 = __CFADD__(v8, v20);
v22 = v23 + v20;
v8 |= __CFADD__(v3[6], v22);
v22 += v3[6];
v25 = v8;
v8 = __CFADD__(v8, v22);
v24 = v25 + v22;
v8 |= __CFADD__(v3[7], v24);
v24 += v3[7];
v27 = v8;
v8 = __CFADD__(v8, v24);
v26 = v27 + v24;
v8 |= __CFADD__(v3[8], v26);
v26 += v3[8];
v29 = v8;
v8 = __CFADD__(v8, v26);
v28 = v29 + v26;
v8 |= __CFADD__(v3[9], v28);
v28 += v3[9];
v31 = v8;
v8 = __CFADD__(v8, v28);
v30 = v31 + v28;
v8 |= __CFADD__(v3[10], v30);
v30 += v3[10];
v33 = v8;
v8 = __CFADD__(v8, v30);
v32 = v33 + v30;
v8 |= __CFADD__(v3[11], v32);
v32 += v3[11];
v35 = v8;
v8 = __CFADD__(v8, v32);
v34 = v35 + v32;
v8 |= __CFADD__(v3[12], v34);
v34 += v3[12];
v37 = v8;
v8 = __CFADD__(v8, v34);
v36 = v37 + v34;
v8 |= __CFADD__(v3[13], v36);
v36 += v3[13];
v39 = v8;
v8 = __CFADD__(v8, v36);
v38 = v39 + v36;
v8 |= __CFADD__(v3[14], v38);
v38 += v3[14];
v41 = v8;
v8 = __CFADD__(v8, v38);
v40 = v41 + v38;
v8 |= __CFADD__(v3[15], v40);
v5 = v3[15] + v40;
v3 += 16;
--v7;
}
while( v7 );
LOWORD(v5) = v8 + (_WORD)v5;
}
for( i = v6 & 3; i; --i )
{
LOWORD(v5) = __CFADD__(*(_WORD *)v3, (_WORD)v5) + *(_WORD *)v3 + v5;
v3 = (_QWORD *)((char *)v3 + 2);
}
}
}
}
}
}Referenced by:
PopHiberChecksumHiberFileData
PopWriteHeaderPages
PopWriteImageHeader