char *__fastcall sub_6100(char *dst_1, char *src, unsigned __int64 n8)
{
char *dst; // rdi
unsigned __int64 count_2; // rcx
char v10; // dl
unsigned __int64 n8_1; // rax
unsigned __int64 count; // rax
__int64 count_1; // rbx
char count_3; // al
unsigned __int64 v15; // rcx
unsigned __int64 count_4; // rax
__asm { pushf } /*0x6103*/
dst = dst_1; /*0x6109*/
count_2 = n8; /*0x610c*/
v10 = 0; /*0x610f*/
n8_1 = src - dst; /*0x6114*/
if ( src < dst ) /*0x6117*/
{
n8_1 = dst - src; /*0x611d*/
if ( &src[n8] >= dst ) /*0x6123*/
{
src += n8; /*0x6125*/
dst += n8; /*0x6128*/
v10 = 1; /*0x612c*/
}
}
if ( n8 < 8 || n8_1 < 8 ) /*0x6139*/
goto LABEL_19; /*0x6139*/
count = (unsigned __int8)src & 7; /*0x6141*/
count_1 = (unsigned __int8)dst & 7; /*0x6145*/
if ( v10 ) /*0x614b*/
{
--src; /*0x614d*/
--dst; /*0x6150*/
}
if ( count == count_1 && count ) /*0x615b*/
{
if ( !v10 ) /*0x615f*/
count = 8 - count; /*0x6164*/
qmemcpy(dst, src, count); /*0x616d*/
src += count; /*0x616d*/
dst += count; /*0x616d*/
count_2 = n8 - count; /*0x616f*/
}
if ( v10 ) /*0x6174*/
{
src -= 7; /*0x6176*/
dst -= 7; /*0x617a*/
}
count_3 = count_2; /*0x617e*/
v15 = count_2 >> 3; /*0x6181*/
qmemcpy(dst, src, 8 * v15); /*0x6185*/
src += 8 * v15; /*0x6185*/
dst += 8 * v15; /*0x6185*/
count_4 = count_3 & 7; /*0x6188*/
if ( count_4 ) /*0x618c*/
{
if ( v10 ) /*0x6190*/
{
src += 8; /*0x6192*/
dst += 8; /*0x6196*/
}
count_2 = count_4; /*0x619a*/
LABEL_19:
if ( v10 ) /*0x619f*/
{
--src; /*0x61a1*/
--dst; /*0x61a4*/
}
qmemcpy(dst, src, count_2); /*0x61a7*/
}
__asm { popf } /*0x61a9*/
return dst_1; /*0x61ac*/
}