#include <machine/asm.h>
#if defined(APIWARN)
.section .gnu.warning.strcat
.ascii "strcat() is almost always misused, please use strlcat()"
#endif
ENTRY(strcat)
pushl %edi
movl 8(%esp),%edi
movl 12(%esp),%edx
pushl %edi
cld
xorl %eax,%eax
movl $-1,%ecx
repne
scasb
leal -1(%edi),%ecx
.align 2,0x90
L1: movb (%edx),%al
movb %al,(%ecx)
testb %al,%al
jz L2
movb 1(%edx),%al
movb %al,1(%ecx)
testb %al,%al
jz L2
movb 2(%edx),%al
movb %al,2(%ecx)
testb %al,%al
jz L2
movb 3(%edx),%al
movb %al,3(%ecx)
testb %al,%al
jz L2
movb 4(%edx),%al
movb %al,4(%ecx)
testb %al,%al
jz L2
movb 5(%edx),%al
movb %al,5(%ecx)
testb %al,%al
jz L2
movb 6(%edx),%al
movb %al,6(%ecx)
testb %al,%al
jz L2
movb 7(%edx),%al
movb %al,7(%ecx)
addl $8,%edx
addl $8,%ecx
testb %al,%al
jnz L1
L2: popl %eax
popl %edi
ret
END(strcat)