1
/* fast SSE2 memrchr with 64 byte loop and pmaxub instruction using
3
Copyright (C) 2011 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, write to the Free
19
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
31
punpcklbw %xmm1, %xmm1
32
punpcklbw %xmm1, %xmm1
35
pshufd $0, %xmm1, %xmm1
40
/* Check if there is a match. */
60
movdqa 48(%rdi), %xmm0
66
movdqa 32(%rdi), %xmm2
72
movdqa 16(%rdi), %xmm3
88
movdqa 48(%rdi), %xmm0
94
movdqa 32(%rdi), %xmm2
100
movdqa 16(%rdi), %xmm3
128
movdqa 16(%rdi), %xmm2
129
movdqa 32(%rdi), %xmm3
130
movdqa 48(%rdi), %xmm4
153
movdqa 16(%rdi), %xmm2
156
pcmpeqb (%rdi), %xmm1
174
movdqa 48(%rdi), %xmm0
180
movdqa 32(%rdi), %xmm2
186
movdqa 16(%rdi), %xmm3
194
pcmpeqb (%rdi), %xmm1
203
movdqa 48(%rdi), %xmm0
211
pcmpeqb 32(%rdi), %xmm1
227
lea 16(%rax, %rdi), %rax
233
lea 32(%rax, %rdi), %rax
239
lea 48(%rax, %rdi), %rax
257
lea 16(%rdi, %rax), %rax
266
lea 32(%rdi, %rax), %rax
275
lea 48(%rdi, %rax), %rax
284
L(length_less16_offset0):
289
pcmpeqb (%rdi), %xmm1
307
punpcklbw %xmm1, %xmm1
308
punpcklbw %xmm1, %xmm1
312
pshufd $0, %xmm1, %xmm1
316
jz L(length_less16_offset0)
326
ja L(length_less16_part2)
328
pcmpeqb (%rdi), %xmm1
348
L(length_less16_part2):
349
movdqa 16(%rdi), %xmm2
361
jnz L(length_less16_part2_return)
363
pcmpeqb (%rdi), %xmm1
377
L(length_less16_part2_return):
379
lea 16(%rax, %rdi), %rax
383
strong_alias (memrchr, __memrchr)