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