63 lines
806 B
ArmAsm
63 lines
806 B
ArmAsm
|
.global memchr
|
||
|
memchr:
|
||
|
movb %sil, %al
|
||
|
movq %rdx, %rcx
|
||
|
repne scasb
|
||
|
xorq %rax, %rax
|
||
|
testq %rcx, %rcx
|
||
|
cmovnzq %rdi, %rax
|
||
|
ret
|
||
|
|
||
|
.global memcmp
|
||
|
memcmp:
|
||
|
movq %rdx, %rcx
|
||
|
repe cmpsb
|
||
|
jne .memcmp_not_equal
|
||
|
xorq %rax, %rax
|
||
|
ret
|
||
|
.memcmp_not_equal:
|
||
|
movzbl -1(%rdi), %eax
|
||
|
movzbl -1(%rsi), %ecx
|
||
|
subq %rcx, %rax
|
||
|
ret
|
||
|
|
||
|
.global memcpy
|
||
|
memcpy:
|
||
|
movq %rdi, %rax
|
||
|
movq %rdx, %rcx
|
||
|
movq %rdi, %rdx
|
||
|
rep movsb
|
||
|
movq %rdx, %rax
|
||
|
ret
|
||
|
|
||
|
.global memmove
|
||
|
memmove:
|
||
|
cmpq %rdi, %rsi
|
||
|
jae memcpy
|
||
|
leaq -1(%rdi, %rdx), %rdi
|
||
|
leaq -1(%rsi, %rdx), %rsi
|
||
|
movq %rdx, %rcx
|
||
|
std
|
||
|
rep movsb
|
||
|
cld
|
||
|
leaq 1(%rdi), %rax
|
||
|
ret
|
||
|
|
||
|
.global memset
|
||
|
memset:
|
||
|
movq %rdi, %r8
|
||
|
movb %sil, %al
|
||
|
movq %rdx, %rcx
|
||
|
rep stosb
|
||
|
movq %r8, %rax
|
||
|
ret
|
||
|
|
||
|
.global strlen
|
||
|
strlen:
|
||
|
xorb %al, %al
|
||
|
movq $-1, %rcx
|
||
|
repne scasb
|
||
|
movq $-2, %rax
|
||
|
subq %rcx, %rax
|
||
|
ret
|