1*02b90beaSjason /* $OpenBSD: fpu_reg.c,v 1.1 2003/07/21 18:41:30 jason Exp $ */
2*02b90beaSjason
3*02b90beaSjason /*
4*02b90beaSjason * Copyright (c) 2003 Jason L. Wright (jason@thought.net)
5*02b90beaSjason * All rights reserved.
6*02b90beaSjason *
7*02b90beaSjason * Redistribution and use in source and binary forms, with or without
8*02b90beaSjason * modification, are permitted provided that the following conditions
9*02b90beaSjason * are met:
10*02b90beaSjason * 1. Redistributions of source code must retain the above copyright
11*02b90beaSjason * notice, this list of conditions and the following disclaimer.
12*02b90beaSjason * 2. Redistributions in binary form must reproduce the above copyright
13*02b90beaSjason * notice, this list of conditions and the following disclaimer in the
14*02b90beaSjason * documentation and/or other materials provided with the distribution.
15*02b90beaSjason *
16*02b90beaSjason * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17*02b90beaSjason * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18*02b90beaSjason * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19*02b90beaSjason * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
20*02b90beaSjason * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21*02b90beaSjason * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22*02b90beaSjason * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23*02b90beaSjason * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24*02b90beaSjason * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25*02b90beaSjason * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*02b90beaSjason * POSSIBILITY OF SUCH DAMAGE.
27*02b90beaSjason */
28*02b90beaSjason #include <sys/types.h>
29*02b90beaSjason #include "fpu_reg.h"
30*02b90beaSjason
31*02b90beaSjason void
__fpu_setreg32(int r,u_int32_t v)32*02b90beaSjason __fpu_setreg32(int r, u_int32_t v)
33*02b90beaSjason {
34*02b90beaSjason switch (r) {
35*02b90beaSjason case 0:
36*02b90beaSjason asm("ld [%0], %%f0" : : "r" (&v));
37*02b90beaSjason break;
38*02b90beaSjason case 1:
39*02b90beaSjason asm("ld [%0], %%f1" : : "r" (&v));
40*02b90beaSjason break;
41*02b90beaSjason case 2:
42*02b90beaSjason asm("ld [%0], %%f2" : : "r" (&v));
43*02b90beaSjason break;
44*02b90beaSjason case 3:
45*02b90beaSjason asm("ld [%0], %%f3" : : "r" (&v));
46*02b90beaSjason break;
47*02b90beaSjason case 4:
48*02b90beaSjason asm("ld [%0], %%f4" : : "r" (&v));
49*02b90beaSjason break;
50*02b90beaSjason case 5:
51*02b90beaSjason asm("ld [%0], %%f5" : : "r" (&v));
52*02b90beaSjason break;
53*02b90beaSjason case 6:
54*02b90beaSjason asm("ld [%0], %%f6" : : "r" (&v));
55*02b90beaSjason break;
56*02b90beaSjason case 7:
57*02b90beaSjason asm("ld [%0], %%f7" : : "r" (&v));
58*02b90beaSjason break;
59*02b90beaSjason case 8:
60*02b90beaSjason asm("ld [%0], %%f8" : : "r" (&v));
61*02b90beaSjason break;
62*02b90beaSjason case 9:
63*02b90beaSjason asm("ld [%0], %%f9" : : "r" (&v));
64*02b90beaSjason break;
65*02b90beaSjason case 10:
66*02b90beaSjason asm("ld [%0], %%f10" : : "r" (&v));
67*02b90beaSjason break;
68*02b90beaSjason case 11:
69*02b90beaSjason asm("ld [%0], %%f11" : : "r" (&v));
70*02b90beaSjason break;
71*02b90beaSjason case 12:
72*02b90beaSjason asm("ld [%0], %%f12" : : "r" (&v));
73*02b90beaSjason break;
74*02b90beaSjason case 13:
75*02b90beaSjason asm("ld [%0], %%f13" : : "r" (&v));
76*02b90beaSjason break;
77*02b90beaSjason case 14:
78*02b90beaSjason asm("ld [%0], %%f14" : : "r" (&v));
79*02b90beaSjason break;
80*02b90beaSjason case 15:
81*02b90beaSjason asm("ld [%0], %%f15" : : "r" (&v));
82*02b90beaSjason break;
83*02b90beaSjason case 16:
84*02b90beaSjason asm("ld [%0], %%f16" : : "r" (&v));
85*02b90beaSjason break;
86*02b90beaSjason case 17:
87*02b90beaSjason asm("ld [%0], %%f17" : : "r" (&v));
88*02b90beaSjason break;
89*02b90beaSjason case 18:
90*02b90beaSjason asm("ld [%0], %%f18" : : "r" (&v));
91*02b90beaSjason break;
92*02b90beaSjason case 19:
93*02b90beaSjason asm("ld [%0], %%f19" : : "r" (&v));
94*02b90beaSjason break;
95*02b90beaSjason case 20:
96*02b90beaSjason asm("ld [%0], %%f20" : : "r" (&v));
97*02b90beaSjason break;
98*02b90beaSjason case 21:
99*02b90beaSjason asm("ld [%0], %%f21" : : "r" (&v));
100*02b90beaSjason break;
101*02b90beaSjason case 22:
102*02b90beaSjason asm("ld [%0], %%f22" : : "r" (&v));
103*02b90beaSjason break;
104*02b90beaSjason case 23:
105*02b90beaSjason asm("ld [%0], %%f23" : : "r" (&v));
106*02b90beaSjason break;
107*02b90beaSjason case 24:
108*02b90beaSjason asm("ld [%0], %%f24" : : "r" (&v));
109*02b90beaSjason break;
110*02b90beaSjason case 25:
111*02b90beaSjason asm("ld [%0], %%f25" : : "r" (&v));
112*02b90beaSjason break;
113*02b90beaSjason case 26:
114*02b90beaSjason asm("ld [%0], %%f26" : : "r" (&v));
115*02b90beaSjason break;
116*02b90beaSjason case 27:
117*02b90beaSjason asm("ld [%0], %%f27" : : "r" (&v));
118*02b90beaSjason break;
119*02b90beaSjason case 28:
120*02b90beaSjason asm("ld [%0], %%f28" : : "r" (&v));
121*02b90beaSjason break;
122*02b90beaSjason case 29:
123*02b90beaSjason asm("ld [%0], %%f29" : : "r" (&v));
124*02b90beaSjason break;
125*02b90beaSjason case 30:
126*02b90beaSjason asm("ld [%0], %%f30" : : "r" (&v));
127*02b90beaSjason break;
128*02b90beaSjason case 31:
129*02b90beaSjason asm("ld [%0], %%f31" : : "r" (&v));
130*02b90beaSjason break;
131*02b90beaSjason case 32:
132*02b90beaSjason asm("ld [%0], %%f32" : : "r" (&v));
133*02b90beaSjason break;
134*02b90beaSjason case 33:
135*02b90beaSjason asm("ld [%0], %%f33" : : "r" (&v));
136*02b90beaSjason break;
137*02b90beaSjason case 34:
138*02b90beaSjason asm("ld [%0], %%f34" : : "r" (&v));
139*02b90beaSjason break;
140*02b90beaSjason case 35:
141*02b90beaSjason asm("ld [%0], %%f35" : : "r" (&v));
142*02b90beaSjason break;
143*02b90beaSjason case 36:
144*02b90beaSjason asm("ld [%0], %%f36" : : "r" (&v));
145*02b90beaSjason break;
146*02b90beaSjason case 37:
147*02b90beaSjason asm("ld [%0], %%f37" : : "r" (&v));
148*02b90beaSjason break;
149*02b90beaSjason case 38:
150*02b90beaSjason asm("ld [%0], %%f38" : : "r" (&v));
151*02b90beaSjason break;
152*02b90beaSjason case 39:
153*02b90beaSjason asm("ld [%0], %%f39" : : "r" (&v));
154*02b90beaSjason break;
155*02b90beaSjason case 40:
156*02b90beaSjason asm("ld [%0], %%f40" : : "r" (&v));
157*02b90beaSjason break;
158*02b90beaSjason case 41:
159*02b90beaSjason asm("ld [%0], %%f41" : : "r" (&v));
160*02b90beaSjason break;
161*02b90beaSjason case 42:
162*02b90beaSjason asm("ld [%0], %%f42" : : "r" (&v));
163*02b90beaSjason break;
164*02b90beaSjason case 43:
165*02b90beaSjason asm("ld [%0], %%f43" : : "r" (&v));
166*02b90beaSjason break;
167*02b90beaSjason case 44:
168*02b90beaSjason asm("ld [%0], %%f44" : : "r" (&v));
169*02b90beaSjason break;
170*02b90beaSjason case 45:
171*02b90beaSjason asm("ld [%0], %%f45" : : "r" (&v));
172*02b90beaSjason break;
173*02b90beaSjason case 46:
174*02b90beaSjason asm("ld [%0], %%f46" : : "r" (&v));
175*02b90beaSjason break;
176*02b90beaSjason case 47:
177*02b90beaSjason asm("ld [%0], %%f47" : : "r" (&v));
178*02b90beaSjason break;
179*02b90beaSjason case 48:
180*02b90beaSjason asm("ld [%0], %%f48" : : "r" (&v));
181*02b90beaSjason break;
182*02b90beaSjason case 49:
183*02b90beaSjason asm("ld [%0], %%f49" : : "r" (&v));
184*02b90beaSjason break;
185*02b90beaSjason case 50:
186*02b90beaSjason asm("ld [%0], %%f50" : : "r" (&v));
187*02b90beaSjason break;
188*02b90beaSjason case 51:
189*02b90beaSjason asm("ld [%0], %%f51" : : "r" (&v));
190*02b90beaSjason break;
191*02b90beaSjason case 52:
192*02b90beaSjason asm("ld [%0], %%f52" : : "r" (&v));
193*02b90beaSjason break;
194*02b90beaSjason case 53:
195*02b90beaSjason asm("ld [%0], %%f53" : : "r" (&v));
196*02b90beaSjason break;
197*02b90beaSjason case 54:
198*02b90beaSjason asm("ld [%0], %%f54" : : "r" (&v));
199*02b90beaSjason break;
200*02b90beaSjason case 55:
201*02b90beaSjason asm("ld [%0], %%f55" : : "r" (&v));
202*02b90beaSjason break;
203*02b90beaSjason case 56:
204*02b90beaSjason asm("ld [%0], %%f56" : : "r" (&v));
205*02b90beaSjason break;
206*02b90beaSjason case 57:
207*02b90beaSjason asm("ld [%0], %%f57" : : "r" (&v));
208*02b90beaSjason break;
209*02b90beaSjason case 58:
210*02b90beaSjason asm("ld [%0], %%f58" : : "r" (&v));
211*02b90beaSjason break;
212*02b90beaSjason case 59:
213*02b90beaSjason asm("ld [%0], %%f59" : : "r" (&v));
214*02b90beaSjason break;
215*02b90beaSjason case 60:
216*02b90beaSjason asm("ld [%0], %%f60" : : "r" (&v));
217*02b90beaSjason break;
218*02b90beaSjason case 61:
219*02b90beaSjason asm("ld [%0], %%f61" : : "r" (&v));
220*02b90beaSjason break;
221*02b90beaSjason case 62:
222*02b90beaSjason asm("ld [%0], %%f62" : : "r" (&v));
223*02b90beaSjason break;
224*02b90beaSjason case 63:
225*02b90beaSjason asm("ld [%0], %%f63" : : "r" (&v));
226*02b90beaSjason break;
227*02b90beaSjason }
228*02b90beaSjason }
229*02b90beaSjason
230*02b90beaSjason void
__fpu_setreg64(int r,u_int64_t v)231*02b90beaSjason __fpu_setreg64(int r, u_int64_t v)
232*02b90beaSjason {
233*02b90beaSjason switch (r) {
234*02b90beaSjason case 0:
235*02b90beaSjason asm("ldd [%0], %%f0" : : "r" (&v));
236*02b90beaSjason break;
237*02b90beaSjason case 2:
238*02b90beaSjason asm("ldd [%0], %%f2" : : "r" (&v));
239*02b90beaSjason break;
240*02b90beaSjason case 4:
241*02b90beaSjason asm("ldd [%0], %%f4" : : "r" (&v));
242*02b90beaSjason break;
243*02b90beaSjason case 6:
244*02b90beaSjason asm("ldd [%0], %%f6" : : "r" (&v));
245*02b90beaSjason break;
246*02b90beaSjason case 8:
247*02b90beaSjason asm("ldd [%0], %%f8" : : "r" (&v));
248*02b90beaSjason break;
249*02b90beaSjason case 10:
250*02b90beaSjason asm("ldd [%0], %%f10" : : "r" (&v));
251*02b90beaSjason break;
252*02b90beaSjason case 12:
253*02b90beaSjason asm("ldd [%0], %%f12" : : "r" (&v));
254*02b90beaSjason break;
255*02b90beaSjason case 14:
256*02b90beaSjason asm("ldd [%0], %%f14" : : "r" (&v));
257*02b90beaSjason break;
258*02b90beaSjason case 16:
259*02b90beaSjason asm("ldd [%0], %%f16" : : "r" (&v));
260*02b90beaSjason break;
261*02b90beaSjason case 18:
262*02b90beaSjason asm("ldd [%0], %%f18" : : "r" (&v));
263*02b90beaSjason break;
264*02b90beaSjason case 20:
265*02b90beaSjason asm("ldd [%0], %%f20" : : "r" (&v));
266*02b90beaSjason break;
267*02b90beaSjason case 22:
268*02b90beaSjason asm("ldd [%0], %%f22" : : "r" (&v));
269*02b90beaSjason break;
270*02b90beaSjason case 24:
271*02b90beaSjason asm("ldd [%0], %%f24" : : "r" (&v));
272*02b90beaSjason break;
273*02b90beaSjason case 26:
274*02b90beaSjason asm("ldd [%0], %%f26" : : "r" (&v));
275*02b90beaSjason break;
276*02b90beaSjason case 28:
277*02b90beaSjason asm("ldd [%0], %%f28" : : "r" (&v));
278*02b90beaSjason break;
279*02b90beaSjason case 30:
280*02b90beaSjason asm("ldd [%0], %%f30" : : "r" (&v));
281*02b90beaSjason break;
282*02b90beaSjason case 32:
283*02b90beaSjason asm("ldd [%0], %%f32" : : "r" (&v));
284*02b90beaSjason break;
285*02b90beaSjason case 34:
286*02b90beaSjason asm("ldd [%0], %%f34" : : "r" (&v));
287*02b90beaSjason break;
288*02b90beaSjason case 36:
289*02b90beaSjason asm("ldd [%0], %%f36" : : "r" (&v));
290*02b90beaSjason break;
291*02b90beaSjason case 38:
292*02b90beaSjason asm("ldd [%0], %%f38" : : "r" (&v));
293*02b90beaSjason break;
294*02b90beaSjason case 40:
295*02b90beaSjason asm("ldd [%0], %%f40" : : "r" (&v));
296*02b90beaSjason break;
297*02b90beaSjason case 42:
298*02b90beaSjason asm("ldd [%0], %%f42" : : "r" (&v));
299*02b90beaSjason break;
300*02b90beaSjason case 44:
301*02b90beaSjason asm("ldd [%0], %%f44" : : "r" (&v));
302*02b90beaSjason break;
303*02b90beaSjason case 46:
304*02b90beaSjason asm("ldd [%0], %%f46" : : "r" (&v));
305*02b90beaSjason break;
306*02b90beaSjason case 48:
307*02b90beaSjason asm("ldd [%0], %%f48" : : "r" (&v));
308*02b90beaSjason break;
309*02b90beaSjason case 50:
310*02b90beaSjason asm("ldd [%0], %%f50" : : "r" (&v));
311*02b90beaSjason break;
312*02b90beaSjason case 52:
313*02b90beaSjason asm("ldd [%0], %%f52" : : "r" (&v));
314*02b90beaSjason break;
315*02b90beaSjason case 54:
316*02b90beaSjason asm("ldd [%0], %%f54" : : "r" (&v));
317*02b90beaSjason break;
318*02b90beaSjason case 56:
319*02b90beaSjason asm("ldd [%0], %%f56" : : "r" (&v));
320*02b90beaSjason break;
321*02b90beaSjason case 58:
322*02b90beaSjason asm("ldd [%0], %%f58" : : "r" (&v));
323*02b90beaSjason break;
324*02b90beaSjason case 60:
325*02b90beaSjason asm("ldd [%0], %%f60" : : "r" (&v));
326*02b90beaSjason break;
327*02b90beaSjason case 62:
328*02b90beaSjason asm("ldd [%0], %%f62" : : "r" (&v));
329*02b90beaSjason break;
330*02b90beaSjason }
331*02b90beaSjason }
332*02b90beaSjason
333*02b90beaSjason u_int32_t
__fpu_getreg32(int r)334*02b90beaSjason __fpu_getreg32(int r)
335*02b90beaSjason {
336*02b90beaSjason u_int32_t v;
337*02b90beaSjason
338*02b90beaSjason switch (r) {
339*02b90beaSjason case 0:
340*02b90beaSjason asm("st %%f0, [%0]" : : "r" (&v));
341*02b90beaSjason break;
342*02b90beaSjason case 1:
343*02b90beaSjason asm("st %%f1, [%0]" : : "r" (&v));
344*02b90beaSjason break;
345*02b90beaSjason case 2:
346*02b90beaSjason asm("st %%f2, [%0]" : : "r" (&v));
347*02b90beaSjason break;
348*02b90beaSjason case 3:
349*02b90beaSjason asm("st %%f3, [%0]" : : "r" (&v));
350*02b90beaSjason break;
351*02b90beaSjason case 4:
352*02b90beaSjason asm("st %%f4, [%0]" : : "r" (&v));
353*02b90beaSjason break;
354*02b90beaSjason case 5:
355*02b90beaSjason asm("st %%f5, [%0]" : : "r" (&v));
356*02b90beaSjason break;
357*02b90beaSjason case 6:
358*02b90beaSjason asm("st %%f6, [%0]" : : "r" (&v));
359*02b90beaSjason break;
360*02b90beaSjason case 7:
361*02b90beaSjason asm("st %%f7, [%0]" : : "r" (&v));
362*02b90beaSjason break;
363*02b90beaSjason case 8:
364*02b90beaSjason asm("st %%f8, [%0]" : : "r" (&v));
365*02b90beaSjason break;
366*02b90beaSjason case 9:
367*02b90beaSjason asm("st %%f9, [%0]" : : "r" (&v));
368*02b90beaSjason break;
369*02b90beaSjason case 10:
370*02b90beaSjason asm("st %%f10, [%0]" : : "r" (&v));
371*02b90beaSjason break;
372*02b90beaSjason case 11:
373*02b90beaSjason asm("st %%f11, [%0]" : : "r" (&v));
374*02b90beaSjason break;
375*02b90beaSjason case 12:
376*02b90beaSjason asm("st %%f12, [%0]" : : "r" (&v));
377*02b90beaSjason break;
378*02b90beaSjason case 13:
379*02b90beaSjason asm("st %%f13, [%0]" : : "r" (&v));
380*02b90beaSjason break;
381*02b90beaSjason case 14:
382*02b90beaSjason asm("st %%f14, [%0]" : : "r" (&v));
383*02b90beaSjason break;
384*02b90beaSjason case 15:
385*02b90beaSjason asm("st %%f15, [%0]" : : "r" (&v));
386*02b90beaSjason break;
387*02b90beaSjason case 16:
388*02b90beaSjason asm("st %%f16, [%0]" : : "r" (&v));
389*02b90beaSjason break;
390*02b90beaSjason case 17:
391*02b90beaSjason asm("st %%f17, [%0]" : : "r" (&v));
392*02b90beaSjason break;
393*02b90beaSjason case 18:
394*02b90beaSjason asm("st %%f18, [%0]" : : "r" (&v));
395*02b90beaSjason break;
396*02b90beaSjason case 19:
397*02b90beaSjason asm("st %%f19, [%0]" : : "r" (&v));
398*02b90beaSjason break;
399*02b90beaSjason case 20:
400*02b90beaSjason asm("st %%f20, [%0]" : : "r" (&v));
401*02b90beaSjason break;
402*02b90beaSjason case 21:
403*02b90beaSjason asm("st %%f21, [%0]" : : "r" (&v));
404*02b90beaSjason break;
405*02b90beaSjason case 22:
406*02b90beaSjason asm("st %%f22, [%0]" : : "r" (&v));
407*02b90beaSjason break;
408*02b90beaSjason case 23:
409*02b90beaSjason asm("st %%f23, [%0]" : : "r" (&v));
410*02b90beaSjason break;
411*02b90beaSjason case 24:
412*02b90beaSjason asm("st %%f24, [%0]" : : "r" (&v));
413*02b90beaSjason break;
414*02b90beaSjason case 25:
415*02b90beaSjason asm("st %%f25, [%0]" : : "r" (&v));
416*02b90beaSjason break;
417*02b90beaSjason case 26:
418*02b90beaSjason asm("st %%f26, [%0]" : : "r" (&v));
419*02b90beaSjason break;
420*02b90beaSjason case 27:
421*02b90beaSjason asm("st %%f27, [%0]" : : "r" (&v));
422*02b90beaSjason break;
423*02b90beaSjason case 28:
424*02b90beaSjason asm("st %%f28, [%0]" : : "r" (&v));
425*02b90beaSjason break;
426*02b90beaSjason case 29:
427*02b90beaSjason asm("st %%f29, [%0]" : : "r" (&v));
428*02b90beaSjason break;
429*02b90beaSjason case 30:
430*02b90beaSjason asm("st %%f30, [%0]" : : "r" (&v));
431*02b90beaSjason break;
432*02b90beaSjason case 31:
433*02b90beaSjason asm("st %%f31, [%0]" : : "r" (&v));
434*02b90beaSjason break;
435*02b90beaSjason case 32:
436*02b90beaSjason asm("st %%f32, [%0]" : : "r" (&v));
437*02b90beaSjason break;
438*02b90beaSjason case 33:
439*02b90beaSjason asm("st %%f33, [%0]" : : "r" (&v));
440*02b90beaSjason break;
441*02b90beaSjason case 34:
442*02b90beaSjason asm("st %%f34, [%0]" : : "r" (&v));
443*02b90beaSjason break;
444*02b90beaSjason case 35:
445*02b90beaSjason asm("st %%f35, [%0]" : : "r" (&v));
446*02b90beaSjason break;
447*02b90beaSjason case 36:
448*02b90beaSjason asm("st %%f36, [%0]" : : "r" (&v));
449*02b90beaSjason break;
450*02b90beaSjason case 37:
451*02b90beaSjason asm("st %%f37, [%0]" : : "r" (&v));
452*02b90beaSjason break;
453*02b90beaSjason case 38:
454*02b90beaSjason asm("st %%f38, [%0]" : : "r" (&v));
455*02b90beaSjason break;
456*02b90beaSjason case 39:
457*02b90beaSjason asm("st %%f39, [%0]" : : "r" (&v));
458*02b90beaSjason break;
459*02b90beaSjason case 40:
460*02b90beaSjason asm("st %%f40, [%0]" : : "r" (&v));
461*02b90beaSjason break;
462*02b90beaSjason case 41:
463*02b90beaSjason asm("st %%f41, [%0]" : : "r" (&v));
464*02b90beaSjason break;
465*02b90beaSjason case 42:
466*02b90beaSjason asm("st %%f42, [%0]" : : "r" (&v));
467*02b90beaSjason break;
468*02b90beaSjason case 43:
469*02b90beaSjason asm("st %%f43, [%0]" : : "r" (&v));
470*02b90beaSjason break;
471*02b90beaSjason case 44:
472*02b90beaSjason asm("st %%f44, [%0]" : : "r" (&v));
473*02b90beaSjason break;
474*02b90beaSjason case 45:
475*02b90beaSjason asm("st %%f45, [%0]" : : "r" (&v));
476*02b90beaSjason break;
477*02b90beaSjason case 46:
478*02b90beaSjason asm("st %%f46, [%0]" : : "r" (&v));
479*02b90beaSjason break;
480*02b90beaSjason case 47:
481*02b90beaSjason asm("st %%f47, [%0]" : : "r" (&v));
482*02b90beaSjason break;
483*02b90beaSjason case 48:
484*02b90beaSjason asm("st %%f48, [%0]" : : "r" (&v));
485*02b90beaSjason break;
486*02b90beaSjason case 49:
487*02b90beaSjason asm("st %%f49, [%0]" : : "r" (&v));
488*02b90beaSjason break;
489*02b90beaSjason case 50:
490*02b90beaSjason asm("st %%f50, [%0]" : : "r" (&v));
491*02b90beaSjason break;
492*02b90beaSjason case 51:
493*02b90beaSjason asm("st %%f51, [%0]" : : "r" (&v));
494*02b90beaSjason break;
495*02b90beaSjason case 52:
496*02b90beaSjason asm("st %%f52, [%0]" : : "r" (&v));
497*02b90beaSjason break;
498*02b90beaSjason case 53:
499*02b90beaSjason asm("st %%f53, [%0]" : : "r" (&v));
500*02b90beaSjason break;
501*02b90beaSjason case 54:
502*02b90beaSjason asm("st %%f54, [%0]" : : "r" (&v));
503*02b90beaSjason break;
504*02b90beaSjason case 55:
505*02b90beaSjason asm("st %%f55, [%0]" : : "r" (&v));
506*02b90beaSjason break;
507*02b90beaSjason case 56:
508*02b90beaSjason asm("st %%f56, [%0]" : : "r" (&v));
509*02b90beaSjason break;
510*02b90beaSjason case 57:
511*02b90beaSjason asm("st %%f57, [%0]" : : "r" (&v));
512*02b90beaSjason break;
513*02b90beaSjason case 58:
514*02b90beaSjason asm("st %%f58, [%0]" : : "r" (&v));
515*02b90beaSjason break;
516*02b90beaSjason case 59:
517*02b90beaSjason asm("st %%f59, [%0]" : : "r" (&v));
518*02b90beaSjason break;
519*02b90beaSjason case 60:
520*02b90beaSjason asm("st %%f60, [%0]" : : "r" (&v));
521*02b90beaSjason break;
522*02b90beaSjason case 61:
523*02b90beaSjason asm("st %%f61, [%0]" : : "r" (&v));
524*02b90beaSjason break;
525*02b90beaSjason case 62:
526*02b90beaSjason asm("st %%f62, [%0]" : : "r" (&v));
527*02b90beaSjason break;
528*02b90beaSjason case 63:
529*02b90beaSjason asm("st %%f63, [%0]" : : "r" (&v));
530*02b90beaSjason break;
531*02b90beaSjason }
532*02b90beaSjason return (v);
533*02b90beaSjason }
534*02b90beaSjason
535*02b90beaSjason u_int64_t
__fpu_getreg64(int r)536*02b90beaSjason __fpu_getreg64(int r)
537*02b90beaSjason {
538*02b90beaSjason u_int64_t v;
539*02b90beaSjason
540*02b90beaSjason switch (r) {
541*02b90beaSjason case 0:
542*02b90beaSjason asm("std %%f0, [%0]" : : "r" (&v));
543*02b90beaSjason break;
544*02b90beaSjason case 2:
545*02b90beaSjason asm("std %%f2, [%0]" : : "r" (&v));
546*02b90beaSjason break;
547*02b90beaSjason case 4:
548*02b90beaSjason asm("std %%f4, [%0]" : : "r" (&v));
549*02b90beaSjason break;
550*02b90beaSjason case 6:
551*02b90beaSjason asm("std %%f6, [%0]" : : "r" (&v));
552*02b90beaSjason break;
553*02b90beaSjason case 8:
554*02b90beaSjason asm("std %%f8, [%0]" : : "r" (&v));
555*02b90beaSjason break;
556*02b90beaSjason case 10:
557*02b90beaSjason asm("std %%f10, [%0]" : : "r" (&v));
558*02b90beaSjason break;
559*02b90beaSjason case 12:
560*02b90beaSjason asm("std %%f12, [%0]" : : "r" (&v));
561*02b90beaSjason break;
562*02b90beaSjason case 14:
563*02b90beaSjason asm("std %%f14, [%0]" : : "r" (&v));
564*02b90beaSjason break;
565*02b90beaSjason case 16:
566*02b90beaSjason asm("std %%f16, [%0]" : : "r" (&v));
567*02b90beaSjason break;
568*02b90beaSjason case 18:
569*02b90beaSjason asm("std %%f18, [%0]" : : "r" (&v));
570*02b90beaSjason break;
571*02b90beaSjason case 20:
572*02b90beaSjason asm("std %%f20, [%0]" : : "r" (&v));
573*02b90beaSjason break;
574*02b90beaSjason case 22:
575*02b90beaSjason asm("std %%f22, [%0]" : : "r" (&v));
576*02b90beaSjason break;
577*02b90beaSjason case 24:
578*02b90beaSjason asm("std %%f24, [%0]" : : "r" (&v));
579*02b90beaSjason break;
580*02b90beaSjason case 26:
581*02b90beaSjason asm("std %%f26, [%0]" : : "r" (&v));
582*02b90beaSjason break;
583*02b90beaSjason case 28:
584*02b90beaSjason asm("std %%f28, [%0]" : : "r" (&v));
585*02b90beaSjason break;
586*02b90beaSjason case 30:
587*02b90beaSjason asm("std %%f30, [%0]" : : "r" (&v));
588*02b90beaSjason break;
589*02b90beaSjason case 32:
590*02b90beaSjason asm("std %%f32, [%0]" : : "r" (&v));
591*02b90beaSjason break;
592*02b90beaSjason case 34:
593*02b90beaSjason asm("std %%f34, [%0]" : : "r" (&v));
594*02b90beaSjason break;
595*02b90beaSjason case 36:
596*02b90beaSjason asm("std %%f36, [%0]" : : "r" (&v));
597*02b90beaSjason break;
598*02b90beaSjason case 38:
599*02b90beaSjason asm("std %%f38, [%0]" : : "r" (&v));
600*02b90beaSjason break;
601*02b90beaSjason case 40:
602*02b90beaSjason asm("std %%f40, [%0]" : : "r" (&v));
603*02b90beaSjason break;
604*02b90beaSjason case 42:
605*02b90beaSjason asm("std %%f42, [%0]" : : "r" (&v));
606*02b90beaSjason break;
607*02b90beaSjason case 44:
608*02b90beaSjason asm("std %%f44, [%0]" : : "r" (&v));
609*02b90beaSjason break;
610*02b90beaSjason case 46:
611*02b90beaSjason asm("std %%f46, [%0]" : : "r" (&v));
612*02b90beaSjason break;
613*02b90beaSjason case 48:
614*02b90beaSjason asm("std %%f48, [%0]" : : "r" (&v));
615*02b90beaSjason break;
616*02b90beaSjason case 50:
617*02b90beaSjason asm("std %%f50, [%0]" : : "r" (&v));
618*02b90beaSjason break;
619*02b90beaSjason case 52:
620*02b90beaSjason asm("std %%f52, [%0]" : : "r" (&v));
621*02b90beaSjason break;
622*02b90beaSjason case 54:
623*02b90beaSjason asm("std %%f54, [%0]" : : "r" (&v));
624*02b90beaSjason break;
625*02b90beaSjason case 56:
626*02b90beaSjason asm("std %%f56, [%0]" : : "r" (&v));
627*02b90beaSjason break;
628*02b90beaSjason case 58:
629*02b90beaSjason asm("std %%f58, [%0]" : : "r" (&v));
630*02b90beaSjason break;
631*02b90beaSjason case 60:
632*02b90beaSjason asm("std %%f60, [%0]" : : "r" (&v));
633*02b90beaSjason break;
634*02b90beaSjason case 62:
635*02b90beaSjason asm("std %%f62, [%0]" : : "r" (&v));
636*02b90beaSjason break;
637*02b90beaSjason }
638*02b90beaSjason return (v);
639*02b90beaSjason }
640