diff options
Diffstat (limited to 'sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S')
-rw-r--r-- | sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S | 280 |
1 files changed, 0 insertions, 280 deletions
diff --git a/sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S b/sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S deleted file mode 100644 index cbbd0b33d3..0000000000 --- a/sysdeps/x86_64/multiarch/strchr-sse2-no-bsf.S +++ /dev/null @@ -1,280 +0,0 @@ -/* strchr with SSE2 without bsf - Copyright (C) 2011-2017 Free Software Foundation, Inc. - Contributed by Intel Corporation. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#if IS_IN (libc) - -# include <sysdep.h> -# include "asm-syntax.h" - - atom_text_section -ENTRY (__strchr_sse2_no_bsf) - movd %esi, %xmm1 - movq %rdi, %rcx - punpcklbw %xmm1, %xmm1 - andq $~15, %rdi - pxor %xmm2, %xmm2 - punpcklbw %xmm1, %xmm1 - orl $0xffffffff, %esi - movdqa (%rdi), %xmm0 - pshufd $0, %xmm1, %xmm1 - subq %rdi, %rcx - movdqa %xmm0, %xmm3 - leaq 16(%rdi), %rdi - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm3 - shl %cl, %esi - pmovmskb %xmm0, %eax - pmovmskb %xmm3, %edx - andl %esi, %eax - andl %esi, %edx - test %eax, %eax - jnz L(matches) - test %edx, %edx - jnz L(return_null) - -L(loop): - movdqa (%rdi), %xmm0 - leaq 16(%rdi), %rdi - movdqa %xmm0, %xmm3 - pcmpeqb %xmm1, %xmm0 - pcmpeqb %xmm2, %xmm3 - pmovmskb %xmm0, %eax - pmovmskb %xmm3, %edx - or %eax, %edx - jz L(loop) - - pmovmskb %xmm3, %edx - test %eax, %eax - jnz L(matches) - -/* Return NULL. */ - .p2align 4 -L(return_null): - xor %rax, %rax - ret - -L(matches): - /* There is a match. First find where NULL is. */ - leaq -16(%rdi), %rdi - test %edx, %edx - jz L(match_case1) - - .p2align 4 -L(match_case2): - test %al, %al - jz L(match_high_case2) - - mov %al, %cl - and $15, %cl - jnz L(match_case2_4) - - mov %dl, %ch - and $15, %ch - jnz L(return_null) - - test $0x10, %al - jnz L(Exit5) - test $0x10, %dl - jnz L(return_null) - test $0x20, %al - jnz L(Exit6) - test $0x20, %dl - jnz L(return_null) - test $0x40, %al - jnz L(Exit7) - test $0x40, %dl - jnz L(return_null) - lea 7(%rdi), %rax - ret - - .p2align 4 -L(match_case2_4): - test $0x01, %al - jnz L(Exit1) - test $0x01, %dl - jnz L(return_null) - test $0x02, %al - jnz L(Exit2) - test $0x02, %dl - jnz L(return_null) - test $0x04, %al - jnz L(Exit3) - test $0x04, %dl - jnz L(return_null) - lea 3(%rdi), %rax - ret - - .p2align 4 -L(match_high_case2): - test %dl, %dl - jnz L(return_null) - - mov %ah, %cl - and $15, %cl - jnz L(match_case2_12) - - mov %dh, %ch - and $15, %ch - jnz L(return_null) - - test $0x10, %ah - jnz L(Exit13) - test $0x10, %dh - jnz L(return_null) - test $0x20, %ah - jnz L(Exit14) - test $0x20, %dh - jnz L(return_null) - test $0x40, %ah - jnz L(Exit15) - test $0x40, %dh - jnz L(return_null) - lea 15(%rdi), %rax - ret - - .p2align 4 -L(match_case2_12): - test $0x01, %ah - jnz L(Exit9) - test $0x01, %dh - jnz L(return_null) - test $0x02, %ah - jnz L(Exit10) - test $0x02, %dh - jnz L(return_null) - test $0x04, %ah - jnz L(Exit11) - test $0x04, %dh - jnz L(return_null) - lea 11(%rdi), %rax - ret - - .p2align 4 -L(match_case1): - test %al, %al - jz L(match_high_case1) - - test $0x01, %al - jnz L(Exit1) - test $0x02, %al - jnz L(Exit2) - test $0x04, %al - jnz L(Exit3) - test $0x08, %al - jnz L(Exit4) - test $0x10, %al - jnz L(Exit5) - test $0x20, %al - jnz L(Exit6) - test $0x40, %al - jnz L(Exit7) - lea 7(%rdi), %rax - ret - - .p2align 4 -L(match_high_case1): - test $0x01, %ah - jnz L(Exit9) - test $0x02, %ah - jnz L(Exit10) - test $0x04, %ah - jnz L(Exit11) - test $0x08, %ah - jnz L(Exit12) - test $0x10, %ah - jnz L(Exit13) - test $0x20, %ah - jnz L(Exit14) - test $0x40, %ah - jnz L(Exit15) - lea 15(%rdi), %rax - ret - - .p2align 4 -L(Exit1): - lea (%rdi), %rax - ret - - .p2align 4 -L(Exit2): - lea 1(%rdi), %rax - ret - - .p2align 4 -L(Exit3): - lea 2(%rdi), %rax - ret - - .p2align 4 -L(Exit4): - lea 3(%rdi), %rax - ret - - .p2align 4 -L(Exit5): - lea 4(%rdi), %rax - ret - - .p2align 4 -L(Exit6): - lea 5(%rdi), %rax - ret - - .p2align 4 -L(Exit7): - lea 6(%rdi), %rax - ret - - .p2align 4 -L(Exit9): - lea 8(%rdi), %rax - ret - - .p2align 4 -L(Exit10): - lea 9(%rdi), %rax - ret - - .p2align 4 -L(Exit11): - lea 10(%rdi), %rax - ret - - .p2align 4 -L(Exit12): - lea 11(%rdi), %rax - ret - - .p2align 4 -L(Exit13): - lea 12(%rdi), %rax - ret - - .p2align 4 -L(Exit14): - lea 13(%rdi), %rax - ret - - .p2align 4 -L(Exit15): - lea 14(%rdi), %rax - ret - -END (__strchr_sse2_no_bsf) -#endif |