RtlpCopyBitMapTailToHeadEx
VOID __stdcall RtlpCopyBitMapTailToHeadEx(INT64 a1, INT64 a2, UINT64 a3, UINT64 a4){
UINT64 v4;
UINT64 v6;
char v7;
UINT64 v8;
UINT64 v9;
unsigned __int64 v10;
__int64 *v11;
unsigned __int64 *v12;
__int64 *v13;
__int64 v14;
char v15;
__int64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
__int64 *v20;
__int64 v21;
char v22;
__int64 v23;
v4 = a3 >> 3;
if( (a3 & 7) != 0 )
{
v7 = a4;
v8 = a4 >> 6;
v9 = a3 & 0x3F;
v10 = v7 & 0x3F;
v11 = (__int64 *)(*(_QWORD *)(a2 + 8) + 8 * (v8 + (a3 >> 6)));
v12 = (unsigned __int64 *)v11;
v13 = (__int64 *)(*(_QWORD *)(a1 + 8) + 8 * v8);
if( v10 )
{
v14 = *v13;
v15 = 64 - v9;
if( v10 > 64 - v9 )
{
v11[1] = v11[1] & ~((1i64 << ((unsigned __int8)v9 + (unsigned __int8)v10 - 64)) - 1) | ((v14 & (unsigned __int64)(((1i64 << ((unsigned __int8)v9 + (unsigned __int8)v10 - 64)) - 1) << v15)) >> v15);
v19 = (*v13 & ((1i64 << v15) - 1)) << v9;
v18 = (1i64 << v9) - 1;
}
else
{
v16 = (1i64 << v10) - 1;
v17 = v14 & v16;
v18 = ~(v16 << v9);
v19 = v17 << v9;
}
*v11 = v19 | *v11 & v18;
}
v20 = v13 - 1;
if( v8 )
{
v21 = *v11;
v22 = 64 - v9;
do
{
*v12-- = ((~((1i64 << v22) - 1) & (unsigned __int64)*v20) >> v22) | v21 & ~((1i64 << v9) - 1);
v23 = *v20--;
v21 = ((((1i64 << v22) - 1) & v23) << v9) | ((1i64 << v9) - 1) & *v12;
*v12 = v21;
--v8;
}
while( v8 );
}
}
else
{
v6 = a4 >> 3;
if( (a4 & 7) != 0 )
*(_BYTE *)(v4 + *(_QWORD *)(a2 + 8) + v6) = ((1 << (a4 & 7)) - 1) & *(_BYTE *)(v6 + *(_QWORD *)(a1 + 8)) | *(_BYTE *)(v4 + *(_QWORD *)(a2 + 8) + v6) & ~((1 << (a4 & 7)) - 1);
if( v6 )
memmove((VOID *)(v4 + *(_QWORD *)(a2 + 8)), *(const VOID **)(a1 + 8), v6);
}
}Referenced by:
RtlCopyBitMapEx