From: Noah Goldstein via Libc-alpha <libc-alpha@sourceware.org>
To: libc-alpha@sourceware.org
Subject: [PATCH v2 2/5] x86_64: Add sse2 optimized bcmp implementation in memcmp.S
Date: Tue, 14 Sep 2021 01:30:36 -0500 [thread overview]
Message-ID: <20210914063039.1126196-2-goldstein.w.n@gmail.com> (raw)
In-Reply-To: <20210914063039.1126196-1-goldstein.w.n@gmail.com>
No bug. This commit does not modify any of the memcmp
implementation. It just adds bcmp ifdefs to skip obvious cases
where computing the proper 1/-1 required by memcmp is not needed.
test-memcmp, test-bcmp, and test-wmemcmp are all passing.
---
sysdeps/x86_64/memcmp.S | 55 ++++++++++++++++++++++++++++++++++++++---
1 file changed, 51 insertions(+), 4 deletions(-)
diff --git a/sysdeps/x86_64/memcmp.S b/sysdeps/x86_64/memcmp.S
index dfd0269db2..21607e7c91 100644
--- a/sysdeps/x86_64/memcmp.S
+++ b/sysdeps/x86_64/memcmp.S
@@ -49,34 +49,63 @@ L(s2b):
movzwl (%rdi), %eax
movzwl (%rdi, %rsi), %edx
subq $2, %r10
+#ifdef USE_AS_BCMP
+ je L(finz1)
+#else
je L(fin2_7)
+#endif
addq $2, %rdi
cmpl %edx, %eax
+#ifdef USE_AS_BCMP
+ jnz L(neq_early)
+#else
jnz L(fin2_7)
+#endif
L(s4b):
testq $4, %r10
jz L(s8b)
movl (%rdi), %eax
movl (%rdi, %rsi), %edx
subq $4, %r10
+#ifdef USE_AS_BCMP
+ je L(finz1)
+#else
je L(fin2_7)
+#endif
addq $4, %rdi
cmpl %edx, %eax
+#ifdef USE_AS_BCMP
+ jnz L(neq_early)
+#else
jnz L(fin2_7)
+#endif
L(s8b):
testq $8, %r10
jz L(s16b)
movq (%rdi), %rax
movq (%rdi, %rsi), %rdx
subq $8, %r10
+#ifdef USE_AS_BCMP
+ je L(sub_return8)
+#else
je L(fin2_7)
+#endif
addq $8, %rdi
cmpq %rdx, %rax
+#ifdef USE_AS_BCMP
+ jnz L(neq_early)
+#else
jnz L(fin2_7)
+#endif
L(s16b):
movdqu (%rdi), %xmm1
movdqu (%rdi, %rsi), %xmm0
pcmpeqb %xmm0, %xmm1
+#ifdef USE_AS_BCMP
+ pmovmskb %xmm1, %eax
+ subl $0xffff, %eax
+ ret
+#else
pmovmskb %xmm1, %edx
xorl %eax, %eax
subl $0xffff, %edx
@@ -86,7 +115,7 @@ L(s16b):
movzbl (%rcx), %eax
movzbl (%rsi, %rcx), %edx
jmp L(finz1)
-
+#endif
.p2align 4,, 4
L(finr1b):
movzbl (%rdi), %eax
@@ -95,7 +124,15 @@ L(finz1):
subl %edx, %eax
L(exit):
ret
-
+#ifdef USE_AS_BCMP
+ .p2align 4,, 4
+L(sub_return8):
+ subq %rdx, %rax
+ movl %eax, %edx
+ shrq $32, %rax
+ orl %edx, %eax
+ ret
+#else
.p2align 4,, 4
L(fin2_7):
cmpq %rdx, %rax
@@ -111,12 +148,17 @@ L(fin2_7):
movzbl %dl, %edx
subl %edx, %eax
ret
-
+#endif
.p2align 4,, 4
L(finz):
xorl %eax, %eax
ret
-
+#ifdef USE_AS_BCMP
+ .p2align 4,, 4
+L(neq_early):
+ movl $1, %eax
+ ret
+#endif
/* For blocks bigger than 32 bytes
1. Advance one of the addr pointer to be 16B aligned.
2. Treat the case of both addr pointers aligned to 16B
@@ -246,11 +288,16 @@ L(mt16):
.p2align 4,, 4
L(neq):
+#ifdef USE_AS_BCMP
+ movl $1, %eax
+ ret
+#else
bsfl %edx, %ecx
movzbl (%rdi, %rcx), %eax
addq %rdi, %rsi
movzbl (%rsi,%rcx), %edx
jmp L(finz1)
+#endif
.p2align 4,, 4
L(ATR):
--
2.25.1
next prev parent reply other threads:[~2021-09-14 6:31 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-13 23:05 [PATCH 1/5] x86_64: Add support for bcmp using sse2, sse4_1, avx2, and evex Noah Goldstein via Libc-alpha
2021-09-13 23:05 ` [PATCH 2/5] x86_64: Add sse2 optimized bcmp implementation in memcmp.S Noah Goldstein via Libc-alpha
2021-09-13 23:05 ` [PATCH 3/5] x86_64: Add sse4_1 optimized bcmp implementation in memcmp-sse4.S Noah Goldstein via Libc-alpha
2021-09-13 23:05 ` [PATCH 4/5] x86_64: Add avx2 optimized bcmp implementation in bcmp-avx2.S Noah Goldstein via Libc-alpha
2021-09-13 23:05 ` [PATCH 5/5] x86_64: Add evex optimized bcmp implementation in bcmp-evex.S Noah Goldstein via Libc-alpha
2021-09-14 1:18 ` Carlos O'Donell via Libc-alpha
2021-09-14 2:05 ` Noah Goldstein via Libc-alpha
2021-09-14 2:35 ` Carlos O'Donell via Libc-alpha
2021-09-14 2:55 ` DJ Delorie via Libc-alpha
2021-09-14 3:24 ` Noah Goldstein via Libc-alpha
2021-09-14 3:40 ` Noah Goldstein via Libc-alpha
2021-09-14 4:21 ` DJ Delorie via Libc-alpha
2021-09-14 5:29 ` Noah Goldstein via Libc-alpha
2021-09-14 5:42 ` DJ Delorie via Libc-alpha
2021-09-14 5:55 ` Noah Goldstein via Libc-alpha
2021-09-13 23:22 ` [PATCH 1/5] x86_64: Add support for bcmp using sse2, sse4_1, avx2, and evex Noah Goldstein via Libc-alpha
2021-09-14 6:30 ` [PATCH v2 " Noah Goldstein via Libc-alpha
2021-09-14 6:30 ` Noah Goldstein via Libc-alpha [this message]
2021-09-14 6:30 ` [PATCH v2 3/5] x86_64: Add sse4_1 optimized bcmp implementation in memcmp-sse4.S Noah Goldstein via Libc-alpha
2021-09-14 6:30 ` [PATCH v2 4/5] x86_64: Add avx2 optimized bcmp implementation in bcmp-avx2.S Noah Goldstein via Libc-alpha
2021-09-14 6:30 ` [PATCH v2 5/5] x86_64: Add evex optimized bcmp implementation in bcmp-evex.S Noah Goldstein via Libc-alpha
2021-09-14 14:40 ` [PATCH v2 1/5] x86_64: Add support for bcmp using sse2, sse4_1, avx2, and evex H.J. Lu via Libc-alpha
2021-09-14 19:23 ` Noah Goldstein via Libc-alpha
2021-09-14 20:30 ` Florian Weimer via Libc-alpha
2021-09-15 0:00 ` [PATCH " Joseph Myers
2021-09-15 13:37 ` Zack Weinberg via Libc-alpha
2021-09-15 14:01 ` Re: [PATCH 1/5] x86_64: Add support for bcmp using sse2, sse 4_1, " Florian Weimer via Libc-alpha
2021-09-15 18:06 ` Noah Goldstein via Libc-alpha
2021-09-15 18:30 ` Joseph Myers
2021-09-27 1:35 ` Noah Goldstein via Libc-alpha
2021-09-27 7:29 ` Florian Weimer via Libc-alpha
2021-09-27 16:49 ` Noah Goldstein via Libc-alpha
2021-09-27 16:54 ` Florian Weimer via Libc-alpha
2021-09-27 17:54 ` Noah Goldstein via Libc-alpha
2021-09-27 17:56 ` Florian Weimer via Libc-alpha
2021-09-27 18:05 ` Noah Goldstein via Libc-alpha
2021-09-27 18:10 ` Florian Weimer via Libc-alpha
2021-09-27 18:15 ` Noah Goldstein via Libc-alpha
2021-09-27 18:22 ` Florian Weimer via Libc-alpha
2021-09-27 18:34 ` Noah Goldstein via Libc-alpha
2021-09-27 18:56 ` Florian Weimer via Libc-alpha
2021-09-27 19:20 ` Noah Goldstein via Libc-alpha
2021-09-27 19:34 ` Florian Weimer via Libc-alpha
2021-09-27 19:43 ` Noah Goldstein via Libc-alpha
2021-09-27 19:59 ` Florian Weimer via Libc-alpha
2021-09-27 20:22 ` Noah Goldstein via Libc-alpha
2021-09-27 20:24 ` Florian Weimer via Libc-alpha
2021-09-27 20:38 ` Noah Goldstein via Libc-alpha
2021-09-28 0:07 ` Noah Goldstein via Libc-alpha
2021-09-27 17:42 ` Joseph Myers
2021-09-27 17:48 ` Noah Goldstein via Libc-alpha
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/libc/involved.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210914063039.1126196-2-goldstein.w.n@gmail.com \
--to=libc-alpha@sourceware.org \
--cc=goldstein.w.n@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).