diff options
author | Wilco <wdijkstr@arm.com> | 2014-08-07 14:30:31 +0000 |
---|---|---|
committer | Wilco <wdijkstr@arm.com> | 2014-08-07 14:30:31 +0000 |
commit | 538e9e454de75c5528d1a7c8f57ede9ccad39d00 (patch) | |
tree | 6b01d243ec02bd67ca0ff1fb0f1fcdfd3d05c3ab | |
parent | d4795e4a43e6f0c221bc5dc64c612206a21a177b (diff) | |
download | glibc-538e9e454de75c5528d1a7c8f57ede9ccad39d00.tar.gz glibc-538e9e454de75c5528d1a7c8f57ede9ccad39d00.tar.xz glibc-538e9e454de75c5528d1a7c8f57ede9ccad39d00.zip |
Fix performance issue in misaligned strcpy.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/arm/armv6/strcpy.S | 6 |
2 files changed, 8 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index 61f2fcd464..f1c965e321 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-08-07 Wilco Dijkstra <wdijkstr@arm.com> + + * sysdeps/arm/armv6/strcpy.S (strcpy): + Fix performance issue in misaligned cases. + 2014-08-05 Adhemerval Zanella <azanella@linux.vnet.ibm.com> * sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h (struct winsize): diff --git a/sysdeps/arm/armv6/strcpy.S b/sysdeps/arm/armv6/strcpy.S index 833a83c28f..67bd9d8af1 100644 --- a/sysdeps/arm/armv6/strcpy.S +++ b/sysdeps/arm/armv6/strcpy.S @@ -159,7 +159,7 @@ ENTRY (strcpy) @ Prologue to unaligned loop. Seed shifted non-zero bytes. uqsub8 r4, r7, r2 @ Find EOS uqsub8 r5, r7, r3 - mvns r4, r4 @ EOS in first word? + cmp r4, #0 @ EOS in first word? it ne subne r1, r1, #8 bne .Lbyte_loop @@ -179,7 +179,7 @@ ENTRY (strcpy) @ Rotated unaligned copy loop. The tail of the prologue is @ shared with the loop itself. .balign 8 -1: mvns r5, r5 @ EOS in second word? +1: cmp r5, #0 @ EOS in second word? bne 4f @ Combine first and second words orr r2, r2, r3, lsh_gt #(\unalign*8) @@ -194,7 +194,7 @@ ENTRY (strcpy) sfi_pld r1, #128 uqsub8 r5, r7, r3 sfi_pld r0, #128 - mvns r4, r4 @ EOS in first word? + cmp r4, #0 @ EOS in first word? bne 3f @ Combine the leftover and the first word orr r6, r6, r2, lsh_gt #(\unalign*8) |