projects
/
musl
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
history
|
raw
|
HEAD
x86_64/memset: avoid performing final store twice
[musl]
/
src
/
string
/
x86_64
/
memset.s
1
.global memset
2
.type memset,@function
3
memset:
4
movzbl %sil,%esi
5
mov $0x101010101010101,%rax
6
# 64-bit imul has 3-7 cycles latency, launch early
7
imul %rsi,%rax
8
9
cmp $16,%rdx
10
jb 1f
11
12
lea -1(%rdx),%rcx
13
mov %rdi,%r8
14
shr $3,%rcx
15
mov %rax,-8(%rdi,%rdx)
16
rep
17
stosq
18
mov %r8,%rax
19
ret
20
21
1: test %edx,%edx
22
jz 1f
23
24
mov %al,(%rdi)
25
mov %al,-1(%rdi,%rdx)
26
cmp $2,%edx
27
jbe 1f
28
29
mov %al,1(%rdi)
30
mov %al,-2(%rdi,%rdx)
31
cmp $4,%edx
32
jbe 1f
33
34
mov %eax,(%rdi)
35
mov %eax,-4(%rdi,%rdx)
36
cmp $8,%edx
37
jbe 1f
38
39
mov %eax,4(%rdi)
40
mov %eax,-8(%rdi,%rdx)
41
42
1: mov %rdi,%rax
43
ret