From 78be84cd747c2e3965bf6c2fd5f702d6ff2f5525 Mon Sep 17 00:00:00 2001 From: joseph Date: Wed, 8 Feb 2012 16:44:31 +0000 Subject: Merge changes between r16568 and r17050 from /fsf/trunk. git-svn-id: svn://svn.eglibc.org/trunk@17051 7b3dc134-2b1b-0410-93df-9e9f96275f8d --- libc/sysdeps/powerpc/powerpc32/a2/memcpy.S | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'libc/sysdeps/powerpc/powerpc32/a2') diff --git a/libc/sysdeps/powerpc/powerpc32/a2/memcpy.S b/libc/sysdeps/powerpc/powerpc32/a2/memcpy.S index f4c3c1841..0e9d18e08 100644 --- a/libc/sysdeps/powerpc/powerpc32/a2/memcpy.S +++ b/libc/sysdeps/powerpc/powerpc32/a2/memcpy.S @@ -1,5 +1,5 @@ /* Optimized memcpy implementation for PowerPC A2. - Copyright (C) 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Michael Brutman . This file is part of the GNU C Library. @@ -126,8 +126,29 @@ L(dst_aligned): cmplwi cr5, r9, 0 bne+ cr5,L(cachelineset) - li r9,64 +/* __cache_line_size not set: generic byte copy without much optimization */ + andi. r0,r5,1 /* If length is odd copy one byte. */ + beq L(cachelinenotset_align) + lbz r7,0(r4) /* Read one byte from source. */ + addi r5,r5,-1 /* Update length. */ + addi r4,r4,1 /* Update source pointer address. */ + stb r7,0(r6) /* Store one byte on dest. */ + addi r6,r6,1 /* Update dest pointer address. */ +L(cachelinenotset_align): + cmpwi cr7,r5,0 /* If length is 0 return. */ + beqlr cr7 + ori r2,r2,0 /* Force a new dispatch group. */ +L(cachelinenotset_loop): + addic. r5,r5,-2 /* Update length. */ + lbz r7,0(r4) /* Load 2 bytes from source. */ + lbz r8,1(r4) + addi r4,r4,2 /* Update source pointer address. */ + stb r7,0(r6) /* Store 2 bytes on dest. */ + stb r8,1(r6) + addi r6,r6,2 /* Update dest pointer address. */ + bne L(cachelinenotset_loop) + blr L(cachelineset): -- cgit v1.2.1