1
/* Multiple versions of rawmemchr
2
Copyright (C) 2011 Free Software Foundation, Inc.
3
Contributed by Intel Corporation.
4
This file is part of the GNU C Library.
6
The GNU C Library is free software; you can redistribute it and/or
7
modify it under the terms of the GNU Lesser General Public
8
License as published by the Free Software Foundation; either
9
version 2.1 of the License, or (at your option) any later version.
11
The GNU C Library is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
Lesser General Public License for more details.
16
You should have received a copy of the GNU Lesser General Public
17
License along with the GNU C Library; if not, write to the Free
18
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
22
#include <init-arch.h>
25
.section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
26
.globl __i686.get_pc_thunk.bx
27
.hidden __i686.get_pc_thunk.bx
29
.type __i686.get_pc_thunk.bx,@function
30
__i686.get_pc_thunk.bx:
34
# define CFI_POP(REG) \
35
cfi_adjust_cfa_offset (-4); \
38
# define CFI_PUSH(REG) \
39
cfi_adjust_cfa_offset (4); \
40
cfi_rel_offset (REG, 0)
44
.type __rawmemchr, @gnu_indirect_function
47
call __i686.get_pc_thunk.bx
48
addl $_GLOBAL_OFFSET_TABLE_, %ebx
49
cmpl $0, KIND_OFFSET+__cpu_features@GOTOFF(%ebx)
51
call __init_cpu_features
53
1: testl $bit_SSE2, CPUID_OFFSET+index_SSE2+__cpu_features@GOTOFF(%ebx)
55
testl $bit_Slow_BSF, FEATURE_OFFSET+index_Slow_BSF+__cpu_features@GOTOFF(%ebx)
58
leal __rawmemchr_sse2@GOTOFF(%ebx), %eax
65
2: leal __rawmemchr_ia32@GOTOFF(%ebx), %eax
72
3: leal __rawmemchr_sse2_bsf@GOTOFF(%ebx), %eax
78
weak_alias(__rawmemchr, rawmemchr)
81
# define ENTRY(name) \
82
.type __rawmemchr_ia32, @function; \
83
.globl __rawmemchr_ia32; \
85
__rawmemchr_ia32: cfi_startproc; \
89
cfi_endproc; .size __rawmemchr_ia32, .-__rawmemchr_ia32
91
# undef libc_hidden_def
92
/* IFUNC doesn't work with the hidden functions in shared library since
93
they will be called without setting up EBX needed for PLT which is
95
# define libc_hidden_def(name) \
96
.globl __GI___rawmemchr; __GI___rawmemchr = __rawmemchr_ia32
99
#include "../../rawmemchr.S"