blob: 1ab2cb236b8ebb5518881a3a7752ebb8a0e86ff5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#
# memmove.S
#
# Simple 16-bit memmove() implementation
#
.text
.code16gcc
.globl memmove
.type memmove, @function
memmove:
pushw %di
pushw %si
movw %ax,%di
movw %dx,%si
cmpw %si,%di
ja 1f
# The third argument is already in cx
cld
rep ; movsb
2:
popw %si
popw %di
ret
1: /* si <= di, need reverse copy */
add %cx,%di
add %cx,%si
dec %di
dec %si
std
rep ; movsb
cld
jmp 2b
.size memmove,.-memmove
|