]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgcc/config/rs6000/darwin-vecsave.S
Update copyright years.
[thirdparty/gcc.git] / libgcc / config / rs6000 / darwin-vecsave.S
CommitLineData
efdc5d91
AP
1/* This file contains the vector save and restore routines.
2 *
a5544970 3 * Copyright (C) 2004-2019 Free Software Foundation, Inc.
efdc5d91
AP
4 *
5 * This file is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
748086b7 7 * Free Software Foundation; either version 3, or (at your option) any
efdc5d91
AP
8 * later version.
9 *
efdc5d91
AP
10 * This file is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
748086b7
JJ
15 * Under Section 7 of GPL version 3, you are granted additional
16 * permissions described in the GCC Runtime Library Exception, version
17 * 3.1, as published by the Free Software Foundation.
18 *
19 * You should have received a copy of the GNU General Public License and
20 * a copy of the GCC Runtime Library Exception along with this program;
21 * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
62c49b83 22 * <http://www.gnu.org/licenses/>.
efdc5d91
AP
23 */
24
25/* Vector save/restore routines for Darwin. Note that each vector
26 save/restore requires 2 instructions (8 bytes.)
27
28 THE SAVE AND RESTORE ROUTINES CAN HAVE ONLY ONE GLOBALLY VISIBLE
29 ENTRY POINT - callers have to jump to "saveFP+60" to save f29..f31,
30 for example. For FP reg saves/restores, it takes one instruction
31 (4 bytes) to do the operation; for Vector regs, 2 instructions are
32 required (8 bytes.). */
33
c4e18b1c 34 .machine ppc7400
efdc5d91
AP
35.text
36 .align 2
37
38.private_extern saveVEC
39saveVEC:
40 li r11,-192
41 stvx v20,r11,r0
42 li r11,-176
43 stvx v21,r11,r0
44 li r11,-160
45 stvx v22,r11,r0
46 li r11,-144
47 stvx v23,r11,r0
48 li r11,-128
49 stvx v24,r11,r0
50 li r11,-112
51 stvx v25,r11,r0
52 li r11,-96
53 stvx v26,r11,r0
54 li r11,-80
55 stvx v27,r11,r0
56 li r11,-64
57 stvx v28,r11,r0
58 li r11,-48
59 stvx v29,r11,r0
60 li r11,-32
61 stvx v30,r11,r0
62 li r11,-16
63 stvx v31,r11,r0
64 blr
65
66.private_extern restVEC
67restVEC:
68 li r11,-192
69 lvx v20,r11,r0
70 li r11,-176
71 lvx v21,r11,r0
72 li r11,-160
73 lvx v22,r11,r0
74 li r11,-144
75 lvx v23,r11,r0
76 li r11,-128
77 lvx v24,r11,r0
78 li r11,-112
79 lvx v25,r11,r0
80 li r11,-96
81 lvx v26,r11,r0
82 li r11,-80
83 lvx v27,r11,r0
84 li r11,-64
85 lvx v28,r11,r0
86 li r11,-48
87 lvx v29,r11,r0
88 li r11,-32
89 lvx v30,r11,r0
90 li r11,-16
91 lvx v31,r11,r0
92 blr
93
94/* saveVEC_vr11 -- as saveVEC but VRsave is returned in R11. */
95
96.private_extern saveVEC_vr11
97saveVEC_vr11:
98 li r11,-192
99 stvx v20,r11,r0
100 li r11,-176
101 stvx v21,r11,r0
102 li r11,-160
103 stvx v22,r11,r0
104 li r11,-144
105 stvx v23,r11,r0
106 li r11,-128
107 stvx v24,r11,r0
108 li r11,-112
109 stvx v25,r11,r0
110 li r11,-96
111 stvx v26,r11,r0
112 li r11,-80
113 stvx v27,r11,r0
114 li r11,-64
115 stvx v28,r11,r0
116 li r11,-48
117 stvx v29,r11,r0
118 li r11,-32
119 stvx v30,r11,r0
120 li r11,-16
121 stvx v31,r11,r0
122 mfspr r11,VRsave
123 blr
124
125/* As restVec, but the original VRsave value passed in R10. */
126
127.private_extern restVEC_vr10
128restVEC_vr10:
129 li r11,-192
130 lvx v20,r11,r0
131 li r11,-176
132 lvx v21,r11,r0
133 li r11,-160
134 lvx v22,r11,r0
135 li r11,-144
136 lvx v23,r11,r0
137 li r11,-128
138 lvx v24,r11,r0
139 li r11,-112
140 lvx v25,r11,r0
141 li r11,-96
142 lvx v26,r11,r0
143 li r11,-80
144 lvx v27,r11,r0
145 li r11,-64
146 lvx v28,r11,r0
147 li r11,-48
148 lvx v29,r11,r0
149 li r11,-32
150 lvx v30,r11,r0
151 li r11,-16
152 lvx v31,r11,r0
153 /* restore VRsave from R10. */
154 mtspr VRsave,r10
155 blr