x86-64: Fix SSE2 memcmp and SSSE3 memmove for x32
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 22 Apr 2022 17:53:13 +0000 (10:53 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 22 Apr 2022 18:23:15 +0000 (11:23 -0700)
Clear the upper 32 bits in RDX (memory size) for x32 to fix

FAIL: string/tst-size_t-memcmp
FAIL: string/tst-size_t-memcmp-2
FAIL: string/tst-size_t-memcpy
FAIL: wcsmbs/tst-size_t-wmemcmp

on x32 introduced by

8804157ad9 x86: Optimize memcmp SSE2 in memcmp.S
26b2478322 x86: Reduce code size of mem{move|pcpy|cpy}-ssse3

Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
sysdeps/x86_64/memcmp.S
sysdeps/x86_64/multiarch/memmove-ssse3.S

index b153694..5718a7d 100644 (file)
 
        .text
 ENTRY(MEMCMP)
+# ifdef __ILP32__
+       /* Clear the upper 32 bits.  */
+       movl    %edx, %edx
+# endif
 #ifdef USE_AS_WMEMCMP
        /* Use 0xffff to test for mismatches on pmovmskb bitmask. Store
           in ecx for code size. This is preferable to using `incw` as
index 215583e..310ff62 100644 (file)
@@ -27,6 +27,10 @@ ENTRY(MEMMOVE_CHK)
 END(MEMMOVE_CHK)
 
 ENTRY_P2ALIGN(MEMMOVE, 6)
+# ifdef __ILP32__
+       /* Clear the upper 32 bits.  */
+       movl    %edx, %edx
+# endif
        movq    %rdi, %rax
 L(start):
        cmpq    $16, %rdx