blob: 1ab2cb236b8ebb5518881a3a7752ebb8a0e86ff5 [file] [log] [blame]
#
# 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