86 lines
1.3 KiB
ArmAsm
86 lines
1.3 KiB
ArmAsm
|
.global memchr
|
||
|
memchr:
|
||
|
xchgl 4(%esp), %edi
|
||
|
movl 8(%esp), %eax
|
||
|
movl 12(%esp), %ecx
|
||
|
repne scasb
|
||
|
xorl %eax, %eax
|
||
|
testl %ecx, %ecx
|
||
|
cmovnzl %edi, %eax
|
||
|
movl 4(%esp), %edi
|
||
|
ret
|
||
|
|
||
|
.global memcmp
|
||
|
memcmp:
|
||
|
xchgl 4(%esp), %edi
|
||
|
xchgl 8(%esp), %esi
|
||
|
movl 12(%esp), %ecx
|
||
|
repe cmpsb
|
||
|
jne .memcmp_not_equal
|
||
|
xorl %eax, %eax
|
||
|
jmp .memcmp_done
|
||
|
.memcmp_not_equal:
|
||
|
movzbl -1(%edi), %eax
|
||
|
movzbl -1(%esi), %ecx
|
||
|
subl %ecx, %eax
|
||
|
.memcmp_done:
|
||
|
movl 4(%esp), %edi
|
||
|
movl 8(%esp), %esi
|
||
|
ret
|
||
|
|
||
|
.global memcpy
|
||
|
memcpy:
|
||
|
xchgl 4(%esp), %edi
|
||
|
xchgl 8(%esp), %esi
|
||
|
movl 12(%esp), %ecx
|
||
|
movl %edi, %edx
|
||
|
rep movsb
|
||
|
movl 4(%esp), %edi
|
||
|
movl 8(%esp), %esi
|
||
|
movl %edx, %eax
|
||
|
ret
|
||
|
|
||
|
.global memmove
|
||
|
memmove:
|
||
|
xchgl 4(%esp), %edi
|
||
|
xchgl 8(%esp), %esi
|
||
|
movl 12(%esp), %ecx
|
||
|
movl %edi, %edx
|
||
|
cmpl %edi, %esi
|
||
|
jb .memmove_slow
|
||
|
rep movsb
|
||
|
.memmove_done:
|
||
|
movl 4(%esp), %edi
|
||
|
movl 8(%esp), %esi
|
||
|
movl %edx, %eax
|
||
|
ret
|
||
|
.memmove_slow:
|
||
|
leal -1(%edi, %ecx), %edi
|
||
|
leal -1(%esi, %ecx), %esi
|
||
|
std
|
||
|
rep movsb
|
||
|
cld
|
||
|
jmp .memmove_done
|
||
|
|
||
|
.global memset
|
||
|
memset:
|
||
|
xchgl 4(%esp), %edi
|
||
|
movl 8(%esp), %eax
|
||
|
movl 12(%esp), %ecx
|
||
|
movl %edi, %edx
|
||
|
rep stosb
|
||
|
movl 4(%esp), %edi
|
||
|
movl %edx, %eax
|
||
|
ret
|
||
|
|
||
|
.global strlen
|
||
|
strlen:
|
||
|
xchgl 4(%esp), %edi
|
||
|
xorb %al, %al
|
||
|
movl $-1, %ecx
|
||
|
repne scasb
|
||
|
movl 4(%esp), %edi
|
||
|
movl $-2, %eax
|
||
|
subl %ecx, %eax
|
||
|
ret
|