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