/* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. * * %sccs.include.redist.c% */ #if defined(LIBC_SCCS) && !defined(lint) .asciz "@(#)bcopy.s 8.1 (Berkeley) 06/04/93" #endif /* LIBC_SCCS and not lint */ /* bcopy(from, to, size) */ #include "DEFS.h" ENTRY(bcopy, R6) movl 4(ap),r1 movl 8(ap),r3 movl 12(ap),r6 cmpl r1,r3 bgtr 2f # normal forward case blss 3f # overlapping, must do backwards ret # equal, nothing to do 1: subl2 r0,r6 movc3 r0,(r1),(r3) 2: movzwl $65535,r0 cmpl r6,r0 jgtr 1b movc3 r6,(r1),(r3) ret 3: addl2 r6,r1 addl2 r6,r3 movzwl $65535,r0 jbr 5f 4: subl2 r0,r6 subl2 r0,r1 subl2 r0,r3 movc3 r0,(r1),(r3) movzwl $65535,r0 subl2 r0,r1 subl2 r0,r3 5: cmpl r6,r0 jgtr 4b subl2 r6,r1 subl2 r6,r3 movc3 r6,(r1),(r3) ret