]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
x86-64: Skip zero length in __mem[pcpy|move|set]_erms
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 23 May 2018 18:25:20 +0000 (11:25 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 23 May 2018 18:25:42 +0000 (11:25 -0700)
This patch skips zero length in __mempcpy_erms, __memmove_erms and
__memset_erms.

Tested on x86-64.

* sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S
(__mempcpy_erms): Skip zero length.
(__memmove_erms): Likewise.
* sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
(__memset_erms): Likewise.

ChangeLog
sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S
sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S

index 8cabe673ab019913eb2a2e895eafcd8efbece358..87c3f3df54ee0d8f5d5eddaf083acbb3bb965be5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2018-05-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S
+       (__mempcpy_erms): Skip zero length.
+       (__memmove_erms): Likewise.
+       * sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
+       (__memset_erms): Likewise.
+
 2018-05-23  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/alpha/Implies: Remove alpha/soft-fp.
index 1404131bb716994f1fb980c31936b5fbec9c2142..e2ede45e9f68791b4d9b91002a77382b21888512 100644 (file)
@@ -156,6 +156,9 @@ END (__mempcpy_chk_erms)
 /* Only used to measure performance of REP MOVSB.  */
 ENTRY (__mempcpy_erms)
        movq    %rdi, %rax
+       /* Skip zero length.  */
+       testq   %rdx, %rdx
+       jz      2f
        addq    %rdx, %rax
        jmp     L(start_movsb)
 END (__mempcpy_erms)
@@ -167,6 +170,9 @@ END (__memmove_chk_erms)
 
 ENTRY (__memmove_erms)
        movq    %rdi, %rax
+       /* Skip zero length.  */
+       testq   %rdx, %rdx
+       jz      2f
 L(start_movsb):
        movq    %rdx, %rcx
        cmpq    %rsi, %rdi
index 0a827f3e47c00754ae2d14b276e144d0ba6c47a3..dc9cb88b37a5477a8e66a8ef25ed4b503fef8a1c 100644 (file)
@@ -128,6 +128,11 @@ END (__memset_chk_erms)
 
 /* Only used to measure performance of REP STOSB.  */
 ENTRY (__memset_erms)
+       /* Skip zero length.  */
+       testq   %rdx, %rdx
+       jnz      L(stosb)
+       movq    %rdi, %rax
+       ret
 # else
 /* Provide a hidden symbol to debugger.  */
        .hidden MEMSET_SYMBOL (__memset, erms)