aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc
diff options
context:
space:
mode:
authorBabu Moger <babu.moger@oracle.com>2017-08-07 19:52:49 -0400
committerDavid S. Miller <davem@davemloft.net>2017-08-10 17:55:35 -0400
commitde5c073e383d884da391627dbab8e0e7cfe48558 (patch)
treeab356e700f5267b3e6ba8194dd34fe2ec0818048 /arch/sparc
parent061273f9ecdb9e55e80676bbbb8f65ecd3b9699a (diff)
arch/sparc: Separate the exception handlers from NG4memcpy
Separate the exception handlers from NG4memcpy so that it can be used with new memcpy routines. Make a separate file for all these handlers. Signed-off-by: Babu Moger <babu.moger@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc')
-rw-r--r--arch/sparc/lib/Makefile2
-rw-r--r--arch/sparc/lib/Memcpy_utils.S163
-rw-r--r--arch/sparc/lib/NG4memcpy.S149
3 files changed, 165 insertions, 149 deletions
diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile
index 07c03e72d812..37930c0777fe 100644
--- a/arch/sparc/lib/Makefile
+++ b/arch/sparc/lib/Makefile
@@ -36,6 +36,8 @@ lib-$(CONFIG_SPARC64) += NG2patch.o
36lib-$(CONFIG_SPARC64) += NG4memcpy.o NG4copy_from_user.o NG4copy_to_user.o 36lib-$(CONFIG_SPARC64) += NG4memcpy.o NG4copy_from_user.o NG4copy_to_user.o
37lib-$(CONFIG_SPARC64) += NG4patch.o NG4copy_page.o NG4clear_page.o NG4memset.o 37lib-$(CONFIG_SPARC64) += NG4patch.o NG4copy_page.o NG4clear_page.o NG4memset.o
38 38
39lib-$(CONFIG_SPARC64) += Memcpy_utils.o
40
39lib-$(CONFIG_SPARC64) += GENmemcpy.o GENcopy_from_user.o GENcopy_to_user.o 41lib-$(CONFIG_SPARC64) += GENmemcpy.o GENcopy_from_user.o GENcopy_to_user.o
40lib-$(CONFIG_SPARC64) += GENpatch.o GENpage.o GENbzero.o 42lib-$(CONFIG_SPARC64) += GENpatch.o GENpage.o GENbzero.o
41 43
diff --git a/arch/sparc/lib/Memcpy_utils.S b/arch/sparc/lib/Memcpy_utils.S
new file mode 100644
index 000000000000..f7a26e0be94f
--- /dev/null
+++ b/arch/sparc/lib/Memcpy_utils.S
@@ -0,0 +1,163 @@
1#ifndef __ASM_MEMCPY_UTILS
2#define __ASM_MEMCPY_UTILS
3
4#include <linux/linkage.h>
5#include <asm/asi.h>
6#include <asm/visasm.h>
7
8ENTRY(__restore_asi_fp)
9 VISExitHalf
10 retl
11 wr %g0, ASI_AIUS, %asi
12ENDPROC(__restore_asi_fp)
13
14ENTRY(__restore_asi)
15 retl
16 wr %g0, ASI_AIUS, %asi
17ENDPROC(__restore_asi)
18
19ENTRY(NG4_retl_o2)
20 ba,pt %xcc, __restore_asi
21 mov %o2, %o0
22ENDPROC(NG4_retl_o2)
23ENTRY(NG4_retl_o2_plus_1)
24 ba,pt %xcc, __restore_asi
25 add %o2, 1, %o0
26ENDPROC(NG4_retl_o2_plus_1)
27ENTRY(NG4_retl_o2_plus_4)
28 ba,pt %xcc, __restore_asi
29 add %o2, 4, %o0
30ENDPROC(NG4_retl_o2_plus_4)
31ENTRY(NG4_retl_o2_plus_o5)
32 ba,pt %xcc, __restore_asi
33 add %o2, %o5, %o0
34ENDPROC(NG4_retl_o2_plus_o5)
35ENTRY(NG4_retl_o2_plus_o5_plus_4)
36 add %o5, 4, %o5
37 ba,pt %xcc, __restore_asi
38 add %o2, %o5, %o0
39ENDPROC(NG4_retl_o2_plus_o5_plus_4)
40ENTRY(NG4_retl_o2_plus_o5_plus_8)
41 add %o5, 8, %o5
42 ba,pt %xcc, __restore_asi
43 add %o2, %o5, %o0
44ENDPROC(NG4_retl_o2_plus_o5_plus_8)
45ENTRY(NG4_retl_o2_plus_o5_plus_16)
46 add %o5, 16, %o5
47 ba,pt %xcc, __restore_asi
48 add %o2, %o5, %o0
49ENDPROC(NG4_retl_o2_plus_o5_plus_16)
50ENTRY(NG4_retl_o2_plus_o5_plus_24)
51 add %o5, 24, %o5
52 ba,pt %xcc, __restore_asi
53 add %o2, %o5, %o0
54ENDPROC(NG4_retl_o2_plus_o5_plus_24)
55ENTRY(NG4_retl_o2_plus_o5_plus_32)
56 add %o5, 32, %o5
57 ba,pt %xcc, __restore_asi
58 add %o2, %o5, %o0
59ENDPROC(NG4_retl_o2_plus_o5_plus_32)
60ENTRY(NG4_retl_o2_plus_g1)
61 ba,pt %xcc, __restore_asi
62 add %o2, %g1, %o0
63ENDPROC(NG4_retl_o2_plus_g1)
64ENTRY(NG4_retl_o2_plus_g1_plus_1)
65 add %g1, 1, %g1
66 ba,pt %xcc, __restore_asi
67 add %o2, %g1, %o0
68ENDPROC(NG4_retl_o2_plus_g1_plus_1)
69ENTRY(NG4_retl_o2_plus_g1_plus_8)
70 add %g1, 8, %g1
71 ba,pt %xcc, __restore_asi
72 add %o2, %g1, %o0
73ENDPROC(NG4_retl_o2_plus_g1_plus_8)
74ENTRY(NG4_retl_o2_plus_o4)
75 ba,pt %xcc, __restore_asi
76 add %o2, %o4, %o0
77ENDPROC(NG4_retl_o2_plus_o4)
78ENTRY(NG4_retl_o2_plus_o4_plus_8)
79 add %o4, 8, %o4
80 ba,pt %xcc, __restore_asi
81 add %o2, %o4, %o0
82ENDPROC(NG4_retl_o2_plus_o4_plus_8)
83ENTRY(NG4_retl_o2_plus_o4_plus_16)
84 add %o4, 16, %o4
85 ba,pt %xcc, __restore_asi
86 add %o2, %o4, %o0
87ENDPROC(NG4_retl_o2_plus_o4_plus_16)
88ENTRY(NG4_retl_o2_plus_o4_plus_24)
89 add %o4, 24, %o4
90 ba,pt %xcc, __restore_asi
91 add %o2, %o4, %o0
92ENDPROC(NG4_retl_o2_plus_o4_plus_24)
93ENTRY(NG4_retl_o2_plus_o4_plus_32)
94 add %o4, 32, %o4
95 ba,pt %xcc, __restore_asi
96 add %o2, %o4, %o0
97ENDPROC(NG4_retl_o2_plus_o4_plus_32)
98ENTRY(NG4_retl_o2_plus_o4_plus_40)
99 add %o4, 40, %o4
100 ba,pt %xcc, __restore_asi
101 add %o2, %o4, %o0
102ENDPROC(NG4_retl_o2_plus_o4_plus_40)
103ENTRY(NG4_retl_o2_plus_o4_plus_48)
104 add %o4, 48, %o4
105 ba,pt %xcc, __restore_asi
106 add %o2, %o4, %o0
107ENDPROC(NG4_retl_o2_plus_o4_plus_48)
108ENTRY(NG4_retl_o2_plus_o4_plus_56)
109 add %o4, 56, %o4
110 ba,pt %xcc, __restore_asi
111 add %o2, %o4, %o0
112ENDPROC(NG4_retl_o2_plus_o4_plus_56)
113ENTRY(NG4_retl_o2_plus_o4_plus_64)
114 add %o4, 64, %o4
115 ba,pt %xcc, __restore_asi
116 add %o2, %o4, %o0
117ENDPROC(NG4_retl_o2_plus_o4_plus_64)
118ENTRY(NG4_retl_o2_plus_o4_fp)
119 ba,pt %xcc, __restore_asi_fp
120 add %o2, %o4, %o0
121ENDPROC(NG4_retl_o2_plus_o4_fp)
122ENTRY(NG4_retl_o2_plus_o4_plus_8_fp)
123 add %o4, 8, %o4
124 ba,pt %xcc, __restore_asi_fp
125 add %o2, %o4, %o0
126ENDPROC(NG4_retl_o2_plus_o4_plus_8_fp)
127ENTRY(NG4_retl_o2_plus_o4_plus_16_fp)
128 add %o4, 16, %o4
129 ba,pt %xcc, __restore_asi_fp
130 add %o2, %o4, %o0
131ENDPROC(NG4_retl_o2_plus_o4_plus_16_fp)
132ENTRY(NG4_retl_o2_plus_o4_plus_24_fp)
133 add %o4, 24, %o4
134 ba,pt %xcc, __restore_asi_fp
135 add %o2, %o4, %o0
136ENDPROC(NG4_retl_o2_plus_o4_plus_24_fp)
137ENTRY(NG4_retl_o2_plus_o4_plus_32_fp)
138 add %o4, 32, %o4
139 ba,pt %xcc, __restore_asi_fp
140 add %o2, %o4, %o0
141ENDPROC(NG4_retl_o2_plus_o4_plus_32_fp)
142ENTRY(NG4_retl_o2_plus_o4_plus_40_fp)
143 add %o4, 40, %o4
144 ba,pt %xcc, __restore_asi_fp
145 add %o2, %o4, %o0
146ENDPROC(NG4_retl_o2_plus_o4_plus_40_fp)
147ENTRY(NG4_retl_o2_plus_o4_plus_48_fp)
148 add %o4, 48, %o4
149 ba,pt %xcc, __restore_asi_fp
150 add %o2, %o4, %o0
151ENDPROC(NG4_retl_o2_plus_o4_plus_48_fp)
152ENTRY(NG4_retl_o2_plus_o4_plus_56_fp)
153 add %o4, 56, %o4
154 ba,pt %xcc, __restore_asi_fp
155 add %o2, %o4, %o0
156ENDPROC(NG4_retl_o2_plus_o4_plus_56_fp)
157ENTRY(NG4_retl_o2_plus_o4_plus_64_fp)
158 add %o4, 64, %o4
159 ba,pt %xcc, __restore_asi_fp
160 add %o2, %o4, %o0
161ENDPROC(NG4_retl_o2_plus_o4_plus_64_fp)
162
163#endif
diff --git a/arch/sparc/lib/NG4memcpy.S b/arch/sparc/lib/NG4memcpy.S
index 78ea962edcbe..e20d6541fb68 100644
--- a/arch/sparc/lib/NG4memcpy.S
+++ b/arch/sparc/lib/NG4memcpy.S
@@ -94,155 +94,6 @@
94 .text 94 .text
95#ifndef EX_RETVAL 95#ifndef EX_RETVAL
96#define EX_RETVAL(x) x 96#define EX_RETVAL(x) x
97__restore_asi_fp:
98 VISExitHalf
99__restore_asi:
100 retl
101 wr %g0, ASI_AIUS, %asi
102
103ENTRY(NG4_retl_o2)
104 ba,pt %xcc, __restore_asi
105 mov %o2, %o0
106ENDPROC(NG4_retl_o2)
107ENTRY(NG4_retl_o2_plus_1)
108 ba,pt %xcc, __restore_asi
109 add %o2, 1, %o0
110ENDPROC(NG4_retl_o2_plus_1)
111ENTRY(NG4_retl_o2_plus_4)
112 ba,pt %xcc, __restore_asi
113 add %o2, 4, %o0
114ENDPROC(NG4_retl_o2_plus_4)
115ENTRY(NG4_retl_o2_plus_o5)
116 ba,pt %xcc, __restore_asi
117 add %o2, %o5, %o0
118ENDPROC(NG4_retl_o2_plus_o5)
119ENTRY(NG4_retl_o2_plus_o5_plus_4)
120 add %o5, 4, %o5
121 ba,pt %xcc, __restore_asi
122 add %o2, %o5, %o0
123ENDPROC(NG4_retl_o2_plus_o5_plus_4)
124ENTRY(NG4_retl_o2_plus_o5_plus_8)
125 add %o5, 8, %o5
126 ba,pt %xcc, __restore_asi
127 add %o2, %o5, %o0
128ENDPROC(NG4_retl_o2_plus_o5_plus_8)
129ENTRY(NG4_retl_o2_plus_o5_plus_16)
130 add %o5, 16, %o5
131 ba,pt %xcc, __restore_asi
132 add %o2, %o5, %o0
133ENDPROC(NG4_retl_o2_plus_o5_plus_16)
134ENTRY(NG4_retl_o2_plus_o5_plus_24)
135 add %o5, 24, %o5
136 ba,pt %xcc, __restore_asi
137 add %o2, %o5, %o0
138ENDPROC(NG4_retl_o2_plus_o5_plus_24)
139ENTRY(NG4_retl_o2_plus_o5_plus_32)
140 add %o5, 32, %o5
141 ba,pt %xcc, __restore_asi
142 add %o2, %o5, %o0
143ENDPROC(NG4_retl_o2_plus_o5_plus_32)
144ENTRY(NG4_retl_o2_plus_g1)
145 ba,pt %xcc, __restore_asi
146 add %o2, %g1, %o0
147ENDPROC(NG4_retl_o2_plus_g1)
148ENTRY(NG4_retl_o2_plus_g1_plus_1)
149 add %g1, 1, %g1
150 ba,pt %xcc, __restore_asi
151 add %o2, %g1, %o0
152ENDPROC(NG4_retl_o2_plus_g1_plus_1)
153ENTRY(NG4_retl_o2_plus_g1_plus_8)
154 add %g1, 8, %g1
155 ba,pt %xcc, __restore_asi
156 add %o2, %g1, %o0
157ENDPROC(NG4_retl_o2_plus_g1_plus_8)
158ENTRY(NG4_retl_o2_plus_o4)
159 ba,pt %xcc, __restore_asi
160 add %o2, %o4, %o0
161ENDPROC(NG4_retl_o2_plus_o4)
162ENTRY(NG4_retl_o2_plus_o4_plus_8)
163 add %o4, 8, %o4
164 ba,pt %xcc, __restore_asi
165 add %o2, %o4, %o0
166ENDPROC(NG4_retl_o2_plus_o4_plus_8)
167ENTRY(NG4_retl_o2_plus_o4_plus_16)
168 add %o4, 16, %o4
169 ba,pt %xcc, __restore_asi
170 add %o2, %o4, %o0
171ENDPROC(NG4_retl_o2_plus_o4_plus_16)
172ENTRY(NG4_retl_o2_plus_o4_plus_24)
173 add %o4, 24, %o4
174 ba,pt %xcc, __restore_asi
175 add %o2, %o4, %o0
176ENDPROC(NG4_retl_o2_plus_o4_plus_24)
177ENTRY(NG4_retl_o2_plus_o4_plus_32)
178 add %o4, 32, %o4
179 ba,pt %xcc, __restore_asi
180 add %o2, %o4, %o0
181ENDPROC(NG4_retl_o2_plus_o4_plus_32)
182ENTRY(NG4_retl_o2_plus_o4_plus_40)
183 add %o4, 40, %o4
184 ba,pt %xcc, __restore_asi
185 add %o2, %o4, %o0
186ENDPROC(NG4_retl_o2_plus_o4_plus_40)
187ENTRY(NG4_retl_o2_plus_o4_plus_48)
188 add %o4, 48, %o4
189 ba,pt %xcc, __restore_asi
190 add %o2, %o4, %o0
191ENDPROC(NG4_retl_o2_plus_o4_plus_48)
192ENTRY(NG4_retl_o2_plus_o4_plus_56)
193 add %o4, 56, %o4
194 ba,pt %xcc, __restore_asi
195 add %o2, %o4, %o0
196ENDPROC(NG4_retl_o2_plus_o4_plus_56)
197ENTRY(NG4_retl_o2_plus_o4_plus_64)
198 add %o4, 64, %o4
199 ba,pt %xcc, __restore_asi
200 add %o2, %o4, %o0
201ENDPROC(NG4_retl_o2_plus_o4_plus_64)
202ENTRY(NG4_retl_o2_plus_o4_fp)
203 ba,pt %xcc, __restore_asi_fp
204 add %o2, %o4, %o0
205ENDPROC(NG4_retl_o2_plus_o4_fp)
206ENTRY(NG4_retl_o2_plus_o4_plus_8_fp)
207 add %o4, 8, %o4
208 ba,pt %xcc, __restore_asi_fp
209 add %o2, %o4, %o0
210ENDPROC(NG4_retl_o2_plus_o4_plus_8_fp)
211ENTRY(NG4_retl_o2_plus_o4_plus_16_fp)
212 add %o4, 16, %o4
213 ba,pt %xcc, __restore_asi_fp
214 add %o2, %o4, %o0
215ENDPROC(NG4_retl_o2_plus_o4_plus_16_fp)
216ENTRY(NG4_retl_o2_plus_o4_plus_24_fp)
217 add %o4, 24, %o4
218 ba,pt %xcc, __restore_asi_fp
219 add %o2, %o4, %o0
220ENDPROC(NG4_retl_o2_plus_o4_plus_24_fp)
221ENTRY(NG4_retl_o2_plus_o4_plus_32_fp)
222 add %o4, 32, %o4
223 ba,pt %xcc, __restore_asi_fp
224 add %o2, %o4, %o0
225ENDPROC(NG4_retl_o2_plus_o4_plus_32_fp)
226ENTRY(NG4_retl_o2_plus_o4_plus_40_fp)
227 add %o4, 40, %o4
228 ba,pt %xcc, __restore_asi_fp
229 add %o2, %o4, %o0
230ENDPROC(NG4_retl_o2_plus_o4_plus_40_fp)
231ENTRY(NG4_retl_o2_plus_o4_plus_48_fp)
232 add %o4, 48, %o4
233 ba,pt %xcc, __restore_asi_fp
234 add %o2, %o4, %o0
235ENDPROC(NG4_retl_o2_plus_o4_plus_48_fp)
236ENTRY(NG4_retl_o2_plus_o4_plus_56_fp)
237 add %o4, 56, %o4
238 ba,pt %xcc, __restore_asi_fp
239 add %o2, %o4, %o0
240ENDPROC(NG4_retl_o2_plus_o4_plus_56_fp)
241ENTRY(NG4_retl_o2_plus_o4_plus_64_fp)
242 add %o4, 64, %o4
243 ba,pt %xcc, __restore_asi_fp
244 add %o2, %o4, %o0
245ENDPROC(NG4_retl_o2_plus_o4_plus_64_fp)
246#endif 97#endif
247 .align 64 98 .align 64
248 99