repo.or.cz
/
neatlibc.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
blame
|
history
|
raw
|
HEAD
memchr: handle zero length
[neatlibc.git]
/
x86_64
/
string.s
blob
873b7071f91c85e33ae60a2e51185853599783d9
1
format ELF64
2
3
public memcpy
4
memcpy
:
5
mov rax
,
rdi
6
mov rcx
,
rdx
7
cld
8
rep movsb
9
ret
10
11
public memmove
12
memmove
:
13
mov rcx
,
rdx
14
cmp
rdi
,
rsi
15
jng
.usual
16
mov rax
,
rsi
17
add
rax
,
rcx
18
cmp
rdi
,
rax
19
jg
.usual
20
21
mov rax
,
rdi
22
std
23
add
rsi
,
rcx
24
add
rdi
,
rcx
25
dec
rsi
26
dec
rdi
27
rep movsb
28
ret
29
.usual:
30
mov rax
,
rdi
31
cld
32
rep movsb
33
ret
34
35
public memset
36
memset
:
37
mov rcx
,
rdx
38
mov rax
,
rsi
39
mov rdx
,
rdi
40
cld
41
rep stosb
42
mov rax
,
rdx
43
ret
44
45
public memchr
46
memchr
:
47
mov rax
,
rsi
48
mov rcx
,
rdx
49
test rcx
,
rcx
50
jz
.failed
51
cld
52
repnz scasb
53
jne
.failed
54
mov rax
,
rdi
55
dec
rax
56
ret
57
.failed:
58
xor
eax
,
eax
59
ret
60
61
public memcmp
62
memcmp
:
63
xor
eax
,
eax
64
mov rcx
,
rdx
65
jecxz
.ret
66
67
cld
68
rep cmpsb
69
jz
.ret
70
xor
eax
,
eax
71
mov al
, [
rdi
-
1
]
72
xor
ecx
,
ecx
73
mov cl
, [
rsi
-
1
]
74
sub
eax
,
ecx
75
.ret:
76
ret
77
78
public strlen
79
strlen
:
80
xor
eax
,
eax
81
mov rcx
, -
1
82
cld
83
repnz scasb
84
mov rax
,
rcx
85
not
rax
86
dec
rax
87
ret
88
89
public memrchr
90
memrchr
:
91
mov eax
,
esi
92
mov rcx
,
rdx
93
add
rdi
,
rcx
94
dec
rdi
95
test rcx
,
rcx
96
jz
.failed
97
std
98
repnz scasb
99
jne
.failed
100
mov rax
,
rdi
101
inc rax
102
ret
103
.failed:
104
xor
eax
,
eax
105
ret
106
107
public strchr
108
strchr
:
109
.loop:
110
mov al
, [
rdi
]
111
cmp
al
,
sil
112
jz
.done
113
inc rdi
114
test al
,
al
115
jnz
.loop
116
xor
edi
,
edi
117
.done:
118
mov rax
,
rdi
119
ret
120
121
public strcmp
122
strcmp
:
123
xor
eax
,
eax
124
.loop:
125
mov al
, [
rdi
]
126
cmp
al
, [
rsi
]
127
jnz
.ret
128
inc rdi
129
inc rsi
130
test al
,
al
131
jnz
.loop
132
ret
133
.ret:
134
movzx rcx
,
byte
[
rsi
]
135
sub
rax
,
rcx
136
ret
137
138
public strcpy
139
strcpy
:
140
mov rdx
,
rdi
141
cld
142
.loop:
143
lodsb
144
stosb
145
or
al
,
al
146
jnz
.loop
147
mov rax
,
rdx
148
ret
149
150
public strrchr
151
strrchr
:
152
xor
edx
,
edx
153
dec
rdi
154
.loop:
155
inc rdi
156
mov al
, [
rdi
]
157
test al
,
al
158
jz
.done
159
cmp
al
,
sil
160
jnz
.loop
161
mov rdx
,
rdi
162
jmp
.loop
163
.done:
164
mov rax
,
rdx
165
ret
166
167
public strncmp
168
strncmp
:
169
xor
eax
,
eax
170
.loop:
171
test rdx
,
rdx
172
jz
.failed
173
mov al
, [
rdi
]
174
cmp
al
, [
rsi
]
175
jnz
.ret
176
inc rsi
177
inc rdi
178
dec
rdx
179
test al
,
al
180
jnz
.loop
181
.failed:
182
xor
eax
,
eax
183
ret
184
.ret:
185
movzx ecx
,
byte
[
rsi
]
186
sub
eax
,
ecx
187
ret