diff options
-rw-r--r-- | lib/libc/i386/string/bcopy.S | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/libc/i386/string/bcopy.S b/lib/libc/i386/string/bcopy.S index aaa701b..0046e57 100644 --- a/lib/libc/i386/string/bcopy.S +++ b/lib/libc/i386/string/bcopy.S @@ -69,10 +69,11 @@ ENTRY(bcopy) cmpl %ecx,%eax /* overlapping? */ jb 1f cld /* nope, copy forwards. */ + movl %ecx, %eax shrl $2,%ecx /* copy by words */ rep movsl - movl 20(%esp),%ecx + movl %eax, %ecx andl $3,%ecx /* any bytes left? */ rep movsb @@ -86,12 +87,13 @@ ENTRY(bcopy) addl %ecx,%edi /* copy backwards. */ addl %ecx,%esi std + movl %ecx, %eax andl $3,%ecx /* any fractional bytes? */ decl %edi decl %esi rep movsb - movl 20(%esp),%ecx /* copy remainder by words */ + movl %eax, %ecx /* copy remainder by words */ shrl $2,%ecx subl $3,%esi subl $3,%edi |