From d827c2679c9b13216743c4f7261c369190ba6f20 Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Mon, 26 Sep 1983 04:18:31 -0800 Subject: [PATCH] fix to insure that overlapping strings are properly handled SCCS-vsn: lib/libc/vax/string/bcopy.s 4.4 --- usr/src/lib/libc/vax/string/bcopy.s | 41 ++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/usr/src/lib/libc/vax/string/bcopy.s b/usr/src/lib/libc/vax/string/bcopy.s index dea0e1b1ef..ec495e3a8d 100644 --- a/usr/src/lib/libc/vax/string/bcopy.s +++ b/usr/src/lib/libc/vax/string/bcopy.s @@ -1,18 +1,47 @@ -/* @(#)bcopy.s 4.3 %G% */ +/* @(#)bcopy.s 4.4 %G% */ /* bcopy(from, to, size) */ #include "DEFS.h" -ENTRY(bcopy) + .globl _bcopy +_bcopy: + .word 0x0040 +#ifdef PROF + .data; 1:; .long 0; .text; moval 1b,r0; jsb mcount +#endif PROF movl 4(ap),r1 movl 8(ap),r3 - jbr 2f + 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,12(ap) + subl2 r0,r6 movc3 r0,(r1),(r3) 2: movzwl $65535,r0 - cmpl 12(ap),r0 + cmpl r6,r0 jgtr 1b - movc3 12(ap),(r1),(r3) + 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 -- 2.20.1