1 | /* Aligned copy routines specified by Sparc V9 ABI. |
2 | For 64-bit sparc. |
3 | Copyright (C) 2010-2024 Free Software Foundation, Inc. |
4 | This file is part of the GNU C Library. |
5 | |
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. |
10 | |
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. |
15 | |
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 | <https://www.gnu.org/licenses/>. */ |
19 | |
20 | #include <sysdep.h> |
21 | |
22 | .text |
23 | .align 8 |
24 | ENTRY(__align_cpy_8) |
25 | 10: cmp %o0, %o1 |
26 | be,pn %xcc, 9f |
27 | mov %o0, %o3 |
28 | subcc %o2, 0x08, %o2 |
29 | be,pn %xcc, 8f |
30 | 1: ldx [%o1 + 0x00], %o5 |
31 | ldx [%o1 + 0x08], %o4 |
32 | subcc %o2, 0x10, %o2 |
33 | add %o1, 0x10, %o1 |
34 | stx %o5, [%o3 + 0x00] |
35 | stx %o4, [%o3 + 0x08] |
36 | bg,pt %xcc, 1b |
37 | add %o3, 0x10, %o3 |
38 | bne,pn %xcc, 9f |
39 | nop |
40 | ldx [%o1 + 0x00], %o5 |
41 | 8: stx %o5, [%o3 + 0x00] |
42 | 9: retl |
43 | nop |
44 | END(__align_cpy_8) |
45 | |
46 | .align 8 |
47 | ENTRY(__align_cpy_4) |
48 | 20: cmp %o0, %o1 |
49 | be,pn %xcc, 9f |
50 | mov %o0, %o3 |
51 | subcc %o2, 0x04, %o2 |
52 | be,pn %xcc, 8f |
53 | 1: lduw [%o1 + 0x00], %o5 |
54 | lduw [%o1 + 0x04], %o4 |
55 | subcc %o2, 0x08, %o2 |
56 | add %o1, 0x08, %o1 |
57 | stw %o5, [%o3 + 0x00] |
58 | stw %o4, [%o3 + 0x04] |
59 | bg,pt %xcc, 1b |
60 | add %o3, 0x08, %o3 |
61 | bne,pn %xcc, 9f |
62 | nop |
63 | lduw [%o1 + 0x00], %o5 |
64 | 8: stw %o5, [%o3 + 0x00] |
65 | 9: retl |
66 | nop |
67 | END(__align_cpy_4) |
68 | |
69 | .align 8 |
70 | ENTRY(__align_cpy_2) |
71 | or %o0, %o1, %o3 |
72 | or %o2, %o3, %o3 |
73 | andcc %o3, 0x7, %g0 |
74 | be,pt %xcc, 10b |
75 | andcc %o3, 0x3, %g0 |
76 | be,pt %xcc, 20b |
77 | mov %o7, %g1 |
78 | call HIDDEN_JUMPTARGET(memcpy) |
79 | mov %o7, %g1 |
80 | END(__align_cpy_2) |
81 | |
82 | weak_alias (__align_cpy_8, __align_cpy_16) |
83 | weak_alias (__align_cpy_2, __align_cpy_1) |
84 | |