Update copyright dates with scripts/update-copyrights.
[glibc.git] / sysdeps / sparc / sparc64 / multiarch / memcpy.S
bloba9efc419f81909b8831d656df60f4d6f51827dca
1 /* Multiple versions of memcpy
2    All versions must be listed in ifunc-impl-list.c.
3    Copyright (C) 2010-2015 Free Software Foundation, Inc.
4    Contributed by David S. Miller (davem@davemloft.net)
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, see
19    <http://www.gnu.org/licenses/>.  */
21 #include <sysdep.h>
23 #if IS_IN (libc)
24         .text
25 ENTRY(memcpy)
26         .type   memcpy, @gnu_indirect_function
27 # ifdef SHARED
28         SETUP_PIC_REG_LEAF(o3, o5)
29 # endif
30         set     HWCAP_SPARC_CRYPTO, %o1
31         andcc   %o0, %o1, %g0
32         be      1f
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
42 1:      be      1f
43          andcc  %o0, HWCAP_SPARC_BLKINIT, %g0
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
52 1:      be      1f
53          andcc  %o0, HWCAP_SPARC_ULTRA3, %g0
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
62 1:      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
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
79 10:
80 # ifdef SHARED
81         add     %o3, %o1, %o1
82 # endif
83         retl
84          mov    %o1, %o0
85 END(memcpy)
87 ENTRY(__mempcpy)
88         .type   __mempcpy, @gnu_indirect_function
89 # ifdef SHARED
90         SETUP_PIC_REG_LEAF(o3, o5)
91 # endif
92         set     HWCAP_SPARC_CRYPTO, %o1
93         andcc   %o0, %o1, %g0
94         be      1f
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
104 1:      be      1f
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
114 1:      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
124 1:      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
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
142 # ifdef SHARED
143         add     %o3, %o1, %o1
144 # endif
145         retl
146          mov    %o1, %o0
147 END(__mempcpy)
149 libc_hidden_builtin_def (memcpy)
151 libc_hidden_def (__mempcpy)
152 weak_alias (__mempcpy, mempcpy)
153 libc_hidden_builtin_def (mempcpy)
155 #undef libc_hidden_builtin_def
156 #define libc_hidden_builtin_def(name)
157 #undef weak_alias
158 #define weak_alias(x, y)
159 #undef libc_hidden_def
160 #define libc_hidden_def(name)
162 #define memcpy __memcpy_ultra1
163 #define __mempcpy __mempcpy_ultra1
165 #endif
167 #include "../memcpy.S"