# | |
# 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 |