RtlpComputeCrcInternal
UINT64 __stdcall RtlpComputeCrcInternal(
VOID *Buffer,
UINT64 Size,
UINT64 InitialCrc,
_CRC_CTRL_TABLE *CrcCtrl,
_CRC_CTRL_TABLE *CrcCtrla){
_CRC_CTRL_TABLE *v5;
UINT64 v6;
__int64 v7;
UINT64 v9;
char *v10;
UINT64 v11;
UINT64 v12;
__int64 v13;
__int64 v14;
__int64 v15;
char *v16;
__int64 v17;
UINT64 v18;
unsigned __int64 v19;
unsigned __int64 v20;
unsigned __int64 v21;
__int64 v22;
__int64 v23;
__int64 v24;
__int64 v25;
__int64 v26;
__int64 v27;
__int64 v28;
__int64 v29;
__int64 v30;
__int64 v31;
__int64 v32;
__int64 v33;
__int64 v34;
__int64 v35;
__int64 v36;
__int64 v37;
__int64 v38;
__int64 v39;
__int64 v40;
__int64 v41;
__int64 v42;
__int64 v43;
__int64 v44;
__int64 v45;
__int64 v46;
__int64 v47;
UINT64 v48;
UINT64 v49;
UINT64 v50;
unsigned __int64 v51;
unsigned __int64 v52;
unsigned __int64 v53;
unsigned __int64 v54;
unsigned __int64 v55;
unsigned __int64 v56;
unsigned __int64 v57;
unsigned __int64 v58;
unsigned __int64 v59;
unsigned __int64 v60;
unsigned __int64 v61;
unsigned __int64 v62;
unsigned __int64 v63;
unsigned __int64 v64;
unsigned __int64 v65;
unsigned __int64 v66;
unsigned __int64 v67;
unsigned __int64 v68;
unsigned __int64 v69;
unsigned __int64 v70;
unsigned __int64 v71;
unsigned __int64 v72;
unsigned __int64 v73;
unsigned __int64 v74;
unsigned __int64 v75;
unsigned __int64 v76;
unsigned __int64 v77;
unsigned __int64 v78;
UINT64 v80;
char v81;
char v82;
__int64 v83;
v5 = CrcCtrl;
v6 = 0i64;
v7 = *((_QWORD *)CrcCtrl + 4);
v83 = v7;
v9 = InitialCrc ^ v7;
v10 = (char *)Buffer;
v11 = -(int)Buffer & 7;
if( (-(int)Buffer & 7) != 0 )
{
v80 = 0i64;
if( v11 > Size )
v11 = Size;
if( v11 )
{
do
{
v81 = *((_BYTE *)Buffer + v80++);
v9 = (v9 >> 8) ^ *(_QWORD *)(*((_QWORD *)v5 + 1) + 8i64 * (unsigned __int8)(v9 ^ v81));
}
while( v80 < v11 );
}
Size -= v11;
v10 = (char *)Buffer + v11;
}
v12 = Size - (Size & 0x1F);
if( v12 >= 0x40 )
{
Size &= 0x1Fu;
v13 = 0i64;
v14 = 0i64;
v15 = 0i64;
v16 = &v10[v12 - 32];
if( v10 < v16 )
{
v17 = *((_QWORD *)v5 + 2);
do
{
_mm_prefetcht1(v10 + 256);
v18 = v9 ^ *(_QWORD *)v10;
v19 = v15 ^ *((_QWORD *)v10 + 1);
v20 = v14 ^ *((_QWORD *)v10 + 2);
v21 = v13 ^ *((_QWORD *)v10 + 3);
v22 = (unsigned __int8)v18;
v18 >>= 8;
v23 = *(_QWORD *)(v17 + 8 * v22 + 14336);
v24 = (unsigned __int8)v19;
v19 >>= 8;
v25 = *(_QWORD *)(v17 + 8 * v24 + 14336);
v26 = (unsigned __int8)v20;
v20 >>= 8;
v27 = *(_QWORD *)(v17 + 8 * v26 + 14336);
v28 = (unsigned __int8)v21;
v21 >>= 8;
v29 = *(_QWORD *)(v17 + 8 * v28 + 14336);
v30 = (unsigned __int8)v18;
v18 >>= 8;
v31 = *(_QWORD *)(v17 + 8 * v30 + 12288) ^ v23;
v32 = (unsigned __int8)v19;
v19 >>= 8;
v33 = *(_QWORD *)(v17 + 8 * v32 + 12288) ^ v25;
v34 = (unsigned __int8)v20;
v20 >>= 8;
v35 = *(_QWORD *)(v17 + 8 * v34 + 12288) ^ v27;
v36 = (unsigned __int8)v21;
v21 >>= 8;
v37 = *(_QWORD *)(v17 + 8 * v36 + 12288) ^ v29;
v38 = (unsigned __int8)v18;
v18 >>= 8;
v39 = *(_QWORD *)(v17 + 8 * v38 + 10240) ^ v31;
v40 = (unsigned __int8)v19;
v19 >>= 8;
v41 = *(_QWORD *)(v17 + 8 * v40 + 10240) ^ v33;
v42 = (unsigned __int8)v20;
v20 >>= 8;
v43 = *(_QWORD *)(v17 + 8 * v42 + 10240) ^ v35;
v44 = (unsigned __int8)v21;
v21 >>= 8;
v45 = *(_QWORD *)(v17 + 8 * v44 + 10240) ^ v37;
v46 = (unsigned __int8)v21;
v21 >>= 8;
v10 += 32;
v9 = *(_QWORD *)(v17 + 8 * HIDWORD(v18)) ^ *(_QWORD *)(v17 + 8i64 * BYTE3(v18) + 2048) ^ *(_QWORD *)(v17 + 8i64 * BYTE2(v18) + 4096) ^ *(_QWORD *)(v17 + 8i64 * BYTE1(v18) + 6144) ^ *(_QWORD *)(v17 + 8i64 * (unsigned __int8)v18 + 0x2000) ^ v39;
v15 = *(_QWORD *)(v17 + 8 * HIDWORD(v19)) ^ *(_QWORD *)(v17 + 8i64 * BYTE3(v19) + 2048) ^ *(_QWORD *)(v17 + 8i64 * BYTE2(v19) + 4096) ^ *(_QWORD *)(v17 + 8i64 * BYTE1(v19) + 6144) ^ *(_QWORD *)(v17 + 8i64 * (unsigned __int8)v19 + 0x2000) ^ v41;
v14 = *(_QWORD *)(v17 + 8 * HIDWORD(v20)) ^ *(_QWORD *)(v17 + 8i64 * BYTE3(v20) + 2048) ^ *(_QWORD *)(v17 + 8i64 * BYTE2(v20) + 4096) ^ *(_QWORD *)(v17 + 8i64 * BYTE1(v20) + 6144) ^ *(_QWORD *)(v17 + 8i64 * (unsigned __int8)v20 + 0x2000) ^ v43;
v13 = *(_QWORD *)(v17 + 8 * (v21 >> 24)) ^ *(_QWORD *)(v17 + 8i64 * BYTE2(v21) + 2048) ^ *(_QWORD *)(v17 + 8i64 * BYTE1(v21) + 4096) ^ *(_QWORD *)(v17 + 8i64 * (unsigned __int8)v21 + 6144) ^ *(_QWORD *)(v17 + 8 * v46 + 0x2000) ^ v45;
}
while( v10 < v16 );
v7 = v83;
v5 = CrcCtrl;
}
v47 = *((_QWORD *)v5 + 1);
v48 = ((v9 ^ *(_QWORD *)v10) >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)(v9 ^ *v10));
v49 = (v48 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v48);
v50 = (v49 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v49);
v51 = (v50 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v50);
v52 = (v51 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v51);
v53 = (v52 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v52);
v54 = (v53 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v53);
v55 = v15 ^ *((_QWORD *)v10 + 1) ^ (v54 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v54);
v56 = (v55 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v55);
v57 = (v56 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v56);
v58 = (v57 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v57);
v59 = (v58 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v58);
v60 = (v59 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v59);
v61 = (v60 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v60);
v62 = (v61 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v61);
v63 = v14 ^ *((_QWORD *)v10 + 2) ^ (v62 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v62);
v64 = (v63 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v63);
v65 = (v64 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v64);
v66 = (v65 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v65);
v67 = (v66 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v66);
v68 = (v67 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v67);
v69 = (v68 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v68);
v70 = (v69 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v69);
v71 = v13 ^ *((_QWORD *)v10 + 3) ^ (v70 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v70);
v72 = (v71 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v71);
v73 = (v72 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v72);
v74 = (v73 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v73);
v75 = (v74 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v74);
v76 = (v75 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v75);
v77 = (v76 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v76);
v78 = (v77 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v77);
v9 = (v78 >> 8) ^ *(_QWORD *)(v47 + 8i64 * (unsigned __int8)v78);
v10 += 32;
}
if( Size )
{
do
{
v82 = v10[v6++];
v9 = (v9 >> 8) ^ *(_QWORD *)(*((_QWORD *)v5 + 1) + 8i64 * (unsigned __int8)(v9 ^ v82));
}
while( v6 < Size );
}
return v9 ^ v7;
}Referenced by:
MdlInvariantPostProcessing1
MdlInvariantPreProcessing1
PopEnsureErratumSubscribed
RtlCrc32
RtlCrc64