ref: 8c6c2b7216b6039188e76d26f9a62c4cb8ee4fca
dir: /sys/src/ape/lib/ap/386/memmove.s/
TEXT memmove(SB), $0 MOVL p1+0(FP), DI MOVL p2+4(FP), SI MOVL n+8(FP), BX CMPL BX, $0 JGE ok MOVL $0, SI ok: CLD /* * check and set for backwards */ CMPL SI, DI JLS back /* * copy whole longs */ MOVL BX, CX SHRL $2, CX REP; MOVSL /* * copy the rest, by bytes */ ANDL $3, BX MOVL BX, CX REP; MOVSB MOVL p+0(FP),AX RET /* * whole thing backwards has * adjusted addresses */ back: ADDL BX, DI ADDL BX, SI SUBL $4, DI SUBL $4, SI STD /* * copy whole longs */ MOVL BX, CX SHRL $2, CX ANDL $3, BX REP; MOVSL /* * copy the rest, by bytes */ ADDL $3, DI ADDL $3, SI MOVL BX, CX REP; MOVSB MOVL p+0(FP),AX RET