1 /* fast SSE2 memrchr with 64 byte loop and pmaxub instruction using
3 Copyright (C) 2011-2018 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/>. */
30 punpcklbw %xmm1, %xmm1
31 punpcklbw %xmm1, %xmm1
34 pshufd $0, %xmm1, %xmm1
39 /* Check if there is a match. */
59 movdqa 48(%rdi), %xmm0
65 movdqa 32(%rdi), %xmm2
71 movdqa 16(%rdi), %xmm3
87 movdqa 48(%rdi), %xmm0
93 movdqa 32(%rdi), %xmm2
99 movdqa 16(%rdi), %xmm3
127 movdqa 16(%rdi), %xmm2
128 movdqa 32(%rdi), %xmm3
129 movdqa 48(%rdi), %xmm4
152 movdqa 16(%rdi), %xmm2
155 pcmpeqb (%rdi), %xmm1
173 movdqa 48(%rdi), %xmm0
179 movdqa 32(%rdi), %xmm2
185 movdqa 16(%rdi), %xmm3
193 pcmpeqb (%rdi), %xmm1
202 movdqa 48(%rdi), %xmm0
210 pcmpeqb 32(%rdi), %xmm1
226 lea 16(%rax, %rdi), %rax
232 lea 32(%rax, %rdi), %rax
238 lea 48(%rax, %rdi), %rax
256 lea 16(%rdi, %rax), %rax
265 lea 32(%rdi, %rax), %rax
274 lea 48(%rdi, %rax), %rax
283 L(length_less16_offset0):
288 pcmpeqb (%rdi), %xmm1
306 punpcklbw %xmm1, %xmm1
307 punpcklbw %xmm1, %xmm1
311 pshufd $0, %xmm1, %xmm1
315 jz L(length_less16_offset0)
323 ja L(length_less16_part2)
325 pcmpeqb (%rdi), %xmm1
345 L(length_less16_part2):
346 movdqa 16(%rdi), %xmm2
358 jnz L(length_less16_part2_return)
360 pcmpeqb (%rdi), %xmm1
374 L(length_less16_part2_return):
376 lea 16(%rax, %rdi), %rax
380 weak_alias (__memrchr, memrchr)