Update copyright dates with scripts/update-copyrights.
[glibc.git] / sysdeps / x86_64 / multiarch / memset.S
blobc5f1fb340e6068d4c4d64b9fe66717c3c21adbc6
1 /* Multiple versions of memset
2    All versions must be listed in ifunc-impl-list.c.
3    Copyright (C) 2014-2015 Free Software Foundation, Inc.
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, see
18    <http://www.gnu.org/licenses/>.  */
20 #ifdef HAVE_AVX2_SUPPORT
21 #include <sysdep.h>
22 #include <shlib-compat.h>
23 #include <init-arch.h>
25 /* Define multiple versions only for the definition in lib.  */
26 # if IS_IN (libc)
27 ENTRY(memset)
28         .type   memset, @gnu_indirect_function
29         cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
30         jne     1f
31         call    __init_cpu_features
32 1:      leaq    __memset_sse2(%rip), %rax
33         testl   $bit_AVX2_Usable, __cpu_features+FEATURE_OFFSET+index_AVX2_Usable(%rip)
34         jz      2f
35         leaq    __memset_avx2(%rip), %rax
36 2:      ret
37 END(memset)
38 # endif
40 # if IS_IN (libc)
41 #  undef memset
42 #  define memset __memset_sse2
44 #  undef __memset_chk
45 #  define __memset_chk __memset_chk_sse2
47 #  ifdef SHARED
48 #  undef libc_hidden_builtin_def
49 /* It doesn't make sense to send libc-internal memset calls through a PLT.
50    The speedup we get from using GPR instruction is likely eaten away
51    by the indirect call in the PLT.  */
52 #  define libc_hidden_builtin_def(name) \
53         .globl __GI_memset; __GI_memset = __memset_sse2
54 #  endif
56 #  undef strong_alias
57 #  define strong_alias(original, alias)
58 # endif
59 #endif
61 #include "../memset.S"