]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/sparc/sparc64/multiarch/memcpy.S
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / sparc / sparc64 / multiarch / memcpy.S
CommitLineData
3afd5a3b 1/* Multiple versions of memcpy
f303f97c 2 All versions must be listed in ifunc-impl-list.c.
b168057a 3 Copyright (C) 2010-2015 Free Software Foundation, Inc.
3afd5a3b
DM
4 Contributed by David S. Miller (davem@davemloft.net)
5 This file is part of the GNU C Library.
6
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.
11
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.
16
17 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
18 License along with the GNU C Library; if not, see
19 <http://www.gnu.org/licenses/>. */
3afd5a3b
DM
20
21#include <sysdep.h>
3afd5a3b 22
4f41c682 23#if IS_IN (libc)
3afd5a3b
DM
24 .text
25ENTRY(memcpy)
26 .type memcpy, @gnu_indirect_function
27# ifdef SHARED
3d2b3019 28 SETUP_PIC_REG_LEAF(o3, o5)
3afd5a3b 29# endif
1d9a6d96
DM
30 set HWCAP_SPARC_CRYPTO, %o1
31 andcc %o0, %o1, %g0
3afd5a3b 32 be 1f
1d9a6d96
DM
33 andcc %o0, HWCAP_SPARC_N2, %g0
34# ifdef SHARED
35 sethi %gdop_hix22(__memcpy_niagara4), %o1
36 xor %o1, %gdop_lox10(__memcpy_niagara4), %o1
37# else
38 set __memcpy_niagara4, %o1
39# endif
40 ba 10f
41 nop
421: be 1f
5f4318d1 43 andcc %o0, HWCAP_SPARC_BLKINIT, %g0
3afd5a3b
DM
44# ifdef SHARED
45 sethi %gdop_hix22(__memcpy_niagara2), %o1
46 xor %o1, %gdop_lox10(__memcpy_niagara2), %o1
47# else
48 set __memcpy_niagara2, %o1
49# endif
50 ba 10f
51 nop
521: be 1f
5f4318d1 53 andcc %o0, HWCAP_SPARC_ULTRA3, %g0
3afd5a3b
DM
54# ifdef SHARED
55 sethi %gdop_hix22(__memcpy_niagara1), %o1
56 xor %o1, %gdop_lox10(__memcpy_niagara1), %o1
57# else
58 set __memcpy_niagara1, %o1
59# endif
60 ba 10f
61 nop
621: be 9f
63 nop
64# ifdef SHARED
65 sethi %gdop_hix22(__memcpy_ultra3), %o1
66 xor %o1, %gdop_lox10(__memcpy_ultra3), %o1
67# else
68 set __memcpy_ultra3, %o1
69# endif
70 ba 10f
71 nop
729:
73# ifdef SHARED
74 sethi %gdop_hix22(__memcpy_ultra1), %o1
75 xor %o1, %gdop_lox10(__memcpy_ultra1), %o1
76# else
77 set __memcpy_ultra1, %o1
78# endif
7910:
80# ifdef SHARED
81 add %o3, %o1, %o1
82# endif
83 retl
84 mov %o1, %o0
85END(memcpy)
86
88d85d4f
DM
87ENTRY(__mempcpy)
88 .type __mempcpy, @gnu_indirect_function
89# ifdef SHARED
90 SETUP_PIC_REG_LEAF(o3, o5)
91# endif
1d9a6d96
DM
92 set HWCAP_SPARC_CRYPTO, %o1
93 andcc %o0, %o1, %g0
88d85d4f 94 be 1f
1d9a6d96
DM
95 andcc %o0, HWCAP_SPARC_N2, %g0
96# ifdef SHARED
97 sethi %gdop_hix22(__mempcpy_niagara4), %o1
98 xor %o1, %gdop_lox10(__mempcpy_niagara4), %o1
99# else
100 set __mempcpy_niagara4, %o1
101# endif
102 ba 10f
103 nop
1041: be 1f
88d85d4f
DM
105 andcc %o0, HWCAP_SPARC_BLKINIT, %g0
106# ifdef SHARED
107 sethi %gdop_hix22(__mempcpy_niagara2), %o1
108 xor %o1, %gdop_lox10(__mempcpy_niagara2), %o1
109# else
110 set __mempcpy_niagara2, %o1
111# endif
112 ba 10f
113 nop
1141: be 1f
115 andcc %o0, HWCAP_SPARC_ULTRA3, %g0
116# ifdef SHARED
117 sethi %gdop_hix22(__mempcpy_niagara1), %o1
118 xor %o1, %gdop_lox10(__mempcpy_niagara1), %o1
119# else
120 set __mempcpy_niagara1, %o1
121# endif
122 ba 10f
123 nop
1241: be 9f
125 nop
126# ifdef SHARED
127 sethi %gdop_hix22(__mempcpy_ultra3), %o1
128 xor %o1, %gdop_lox10(__mempcpy_ultra3), %o1
129# else
130 set __mempcpy_ultra3, %o1
131# endif
132 ba 10f
133 nop
1349:
135# ifdef SHARED
136 sethi %gdop_hix22(__mempcpy_ultra1), %o1
137 xor %o1, %gdop_lox10(__mempcpy_ultra1), %o1
138# else
139 set __mempcpy_ultra1, %o1
140# endif
14110:
142# ifdef SHARED
143 add %o3, %o1, %o1
144# endif
145 retl
146 mov %o1, %o0
147END(__mempcpy)
148
e5aa83e1
DM
149libc_hidden_builtin_def (memcpy)
150
88d85d4f
DM
151libc_hidden_def (__mempcpy)
152weak_alias (__mempcpy, mempcpy)
153libc_hidden_builtin_def (mempcpy)
154
e5aa83e1
DM
155#undef libc_hidden_builtin_def
156#define libc_hidden_builtin_def(name)
88d85d4f
DM
157#undef weak_alias
158#define weak_alias(x, y)
159#undef libc_hidden_def
160#define libc_hidden_def(name)
3afd5a3b
DM
161
162#define memcpy __memcpy_ultra1
88d85d4f 163#define __mempcpy __mempcpy_ultra1
3afd5a3b
DM
164
165#endif
166
167#include "../memcpy.S"