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