1 /* fast SSE2 memchr with 64 byte loop and pmaxub instruction using
3 Copyright (C) 2011-2015 Free Software Foundation, Inc.
4 Contributed by Intel Corporation.
5 This file is part of the GNU C Library.
7 The GNU C Library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
12 The GNU C Library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public
18 License along with the GNU C Library; if not, see
19 <http://www.gnu.org/licenses/>. */
28 punpcklbw %xmm1, %xmm1
29 punpcklbw %xmm1, %xmm1
32 pshufd $0, %xmm1, %xmm1
39 /* Check if there is a match. */
55 /* Check if there is a match. */
57 /* Remove the leading bytes. */
60 je L(unaligned_no_match)
61 /* Check which byte is a match. */
69 L(unaligned_no_match):
80 movdqa 16(%rdi), %xmm2
86 movdqa 32(%rdi), %xmm3
92 movdqa 48(%rdi), %xmm4
108 movdqa 16(%rdi), %xmm2
114 movdqa 32(%rdi), %xmm3
120 movdqa 48(%rdi), %xmm3
133 movdqa 16(%rdi), %xmm2
134 movdqa 32(%rdi), %xmm3
135 movdqa 48(%rdi), %xmm4
162 movdqa 32(%rdi), %xmm3
165 pcmpeqb 48(%rdi), %xmm1
172 lea 48(%rdi, %rax), %rax
178 lea -16(%rax, %rdi), %rax
190 lea 16(%rax, %rdi), %rax
196 lea 32(%rax, %rdi), %rax
206 weak_alias (__rawmemchr, rawmemchr)
207 libc_hidden_builtin_def (__rawmemchr)