]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/ia64/ia64/context.S
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / ia64 / ia64 / context.S
1 /*-
2  * Copyright (c) 2003 Marcel Moolenaar
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  */
28
29 #include <machine/asm.h>
30 #include <assym.s>
31
32         .text
33
34 /*
35  * void restorectx(struct pcb *)
36  */
37 ENTRY(restorectx, 1)
38 {       .mmi
39         invala
40         mov             ar.rsc=0
41         add             r31=8,r32
42         ;;
43 }
44 {       .mmi
45         ld8             r12=[r32]               // sp
46         ld8             r16=[r31],16            // unat (before)
47         add             r30=16,r32
48         ;;
49 }
50 {       .mmi
51         ld8             r17=[r30],16            // rp
52         ld8             r18=[r31],16            // pr
53         add             r14=SIZEOF_SPECIAL,r32
54         ;;
55 }
56 {       .mmi
57         ld8             r19=[r30],16            // pfs
58         ld8             r20=[r31],16            // bspstore
59         mov             rp=r17
60         ;;
61 }
62 {       .mmi
63         loadrs
64         ld8             r21=[r30],16            // rnat
65         mov             pr=r18,0x1fffe
66         ;;
67 }
68 {       .mmi
69         ld8             r17=[r14],8             // unat (after)
70         mov             ar.bspstore=r20
71         mov             ar.pfs=r19
72         ;;
73 }
74 {       .mmi
75         mov             ar.unat=r17
76         mov             ar.rnat=r21
77         add             r15=8,r14
78         ;;
79 }
80 {       .mmi
81         ld8.fill        r4=[r14],16             // r4
82         ld8.fill        r5=[r15],16             // r5
83         nop             0
84         ;;
85 }
86 {       .mmi
87         ld8.fill        r6=[r14],16             // r6
88         ld8.fill        r7=[r15],16             // r7
89         nop             0
90         ;;
91 }
92 {       .mmi
93         mov             ar.unat=r16
94         mov             ar.rsc=3
95         nop             0
96 }
97 {       .mmi
98         ld8             r17=[r14],16            // b1
99         ld8             r18=[r15],16            // b2
100         nop             0
101         ;;
102 }
103 {       .mmi
104         ld8             r19=[r14],16            // b3
105         ld8             r20=[r15],16            // b4
106         mov             b1=r17
107         ;;
108 }
109 {       .mmi
110         ld8             r16=[r14],24            // b5
111         ld8             r17=[r15],32            // lc
112         mov             b2=r18
113         ;;
114 }
115 {       .mmi
116         ldf.fill        f2=[r14],32
117         ldf.fill        f3=[r15],32
118         mov             b3=r19
119         ;;
120 }
121 {       .mmi
122         ldf.fill        f4=[r14],32
123         ldf.fill        f5=[r15],32
124         mov             b4=r20
125         ;;
126 }
127 {       .mmi
128         ldf.fill        f16=[r14],32
129         ldf.fill        f17=[r15],32
130         mov             b5=r16
131         ;;
132 }
133 {       .mmi
134         ldf.fill        f18=[r14],32
135         ldf.fill        f19=[r15],32
136         mov             ar.lc=r17
137         ;;
138 }
139         ldf.fill        f20=[r14],32
140         ldf.fill        f21=[r15],32
141         ;;
142         ldf.fill        f22=[r14],32
143         ldf.fill        f23=[r15],32
144         ;;
145         ldf.fill        f24=[r14],32
146         ldf.fill        f25=[r15],32
147         ;;
148         ldf.fill        f26=[r14],32
149         ldf.fill        f27=[r15],32
150         ;;
151 {       .mmi
152         ldf.fill        f28=[r14],32
153         ldf.fill        f29=[r15],32
154         add             r8=1,r0
155         ;;
156 }
157 {       .mmb
158         ldf.fill        f30=[r14]
159         ldf.fill        f31=[r15]
160         br.ret.sptk     rp
161         ;;
162 }
163 END(restorectx)
164
165 /*
166  * void swapctx(struct pcb *old, struct pcb *new)
167  */
168
169 ENTRY(swapctx, 2)
170 {       .mmi
171         mov             ar.rsc=0
172         mov             r16=ar.unat
173         add             r31=8,r32
174         ;;
175 }
176 {       .mmi
177         flushrs
178         st8             [r32]=sp,16             // sp
179         mov             r17=rp
180         ;;
181 }
182 {       .mmi
183         st8             [r31]=r16,16            // unat (before)
184         st8             [r32]=r17,16            // rp
185         mov             r16=pr
186         ;;
187 }
188 {       .mmi
189         st8             [r31]=r16,16            // pr
190         mov             r17=ar.bsp
191         mov             r16=ar.pfs
192         ;;
193 }
194 {       .mmi
195         st8             [r32]=r16,16            // pfs
196         st8             [r31]=r17,16            // bspstore
197         cmp.eq          p15,p0=0,r33
198         ;;
199 }
200 {       .mmi
201         mov             r16=ar.rnat
202 (p15)   mov             ar.rsc=3
203         add             r30=SIZEOF_SPECIAL-(6*8),r32
204         ;;
205 }
206 {       .mmi
207         st8             [r32]=r16,SIZEOF_SPECIAL-(4*8)          // rnat
208         st8             [r31]=r0,SIZEOF_SPECIAL-(6*8)           // __spare
209         mov             r16=b1
210         ;;
211 }
212         /* callee_saved */
213 {       .mmi
214         .mem.offset     8,0
215         st8.spill       [r31]=r4,16             // r4
216         .mem.offset     16,0
217         st8.spill       [r32]=r5,16             // r5
218         mov             r17=b2
219         ;;
220 }
221 {       .mmi
222         .mem.offset     24,0
223         st8.spill       [r31]=r6,16             // r6
224         .mem.offset     32,0
225         st8.spill       [r32]=r7,16             // r7
226         mov             r18=b3
227         ;;
228 }
229 {       .mmi
230         st8             [r31]=r16,16            // b1
231         mov             r16=ar.unat
232         mov             r19=b4
233         ;;
234 }
235 {       .mmi
236         st8             [r30]=r16               // unat (after)
237         st8             [r32]=r17,16            // b2
238         mov             r16=b5
239         ;;
240 }
241 {       .mmi
242         st8             [r31]=r18,16            // b3
243         st8             [r32]=r19,16            // b4
244         mov             r17=ar.lc
245         ;;
246 }
247         st8             [r31]=r16,16            // b5
248         st8             [r32]=r17,16            // lc
249         ;;
250         st8             [r31]=r0,24             // __spare
251         stf.spill       [r32]=f2,32
252         ;;
253         stf.spill       [r31]=f3,32
254         stf.spill       [r32]=f4,32
255         ;;
256         stf.spill       [r31]=f5,32
257         stf.spill       [r32]=f16,32
258         ;;
259         stf.spill       [r31]=f17,32
260         stf.spill       [r32]=f18,32
261         ;;
262         stf.spill       [r31]=f19,32
263         stf.spill       [r32]=f20,32
264         ;;
265         stf.spill       [r31]=f21,32
266         stf.spill       [r32]=f22,32
267         ;;
268         stf.spill       [r31]=f23,32
269         stf.spill       [r32]=f24,32
270         ;;
271         stf.spill       [r31]=f25,32
272         stf.spill       [r32]=f26,32
273         ;;
274         stf.spill       [r31]=f27,32
275         stf.spill       [r32]=f28,32
276         ;;
277 {       .mmi
278         stf.spill       [r31]=f29,32
279         stf.spill       [r32]=f30
280 (p15)   add             r8=0,r0
281         ;;
282 }
283 {       .mmb
284         stf.spill       [r31]=f31
285         mf
286 (p15)   br.ret.sptk     rp
287         ;;
288 }
289 {       .mib
290         mov             r32=r33
291         nop             0
292         br.sptk         restorectx
293         ;;
294 }
295 END(swapctx)
296
297 /*
298  * save_callee_saved(struct _callee_saved *)
299  */
300 ENTRY(save_callee_saved, 1)
301 {       .mii
302         nop             0
303         add             r14=8,r32
304         add             r15=16,r32
305         ;;
306 }
307 {       .mmi
308         .mem.offset     8,0
309         st8.spill       [r14]=r4,16             // r4
310         .mem.offset     16,0
311         st8.spill       [r15]=r5,16             // r5
312         mov             r16=b1
313         ;;
314 }
315 {       .mmi
316         .mem.offset     24,0
317         st8.spill       [r14]=r6,16             // r6
318         .mem.offset     32,0
319         st8.spill       [r15]=r7,16             // r7
320         mov             r17=b2
321         ;;
322 }
323 {       .mmi
324         st8             [r14]=r16,16            // b1
325         mov             r18=ar.unat
326         mov             r19=b3
327         ;;
328 }
329 {       .mmi
330         st8             [r32]=r18               // nat (after)
331         st8             [r15]=r17,16            // b2
332         mov             r16=b4
333         ;;
334 }
335 {       .mmi
336         st8             [r14]=r19,16            // b3
337         st8             [r15]=r16,16            // b4
338         mov             r17=b5
339         ;;
340 }
341 {       .mii
342         st8             [r14]=r17,16            // b5
343         mov             r16=ar.lc
344         nop             0
345         ;;
346 }
347 {       .mmb
348         st8             [r15]=r16               // ar.lc
349         st8             [r14]=r0                // __spare
350         br.ret.sptk     rp
351         ;;
352 }
353 END(save_callee_saved)
354
355 /*
356  * restore_callee_saved(struct _callee_saved *)
357  */
358 ENTRY(restore_callee_saved, 1)
359 {       .mmi
360         ld8             r30=[r32],16            // nat (after)
361         ;;
362         mov             ar.unat=r30
363         add             r31=-8,r32
364         ;;
365 }
366 {       .mmi
367         ld8.fill        r4=[r31],16             // r4
368         ld8.fill        r5=[r32],16             // r5
369         nop             0
370         ;;
371 }
372 {       .mmi
373         ld8.fill        r6=[r31],16             // r6
374         ld8.fill        r7=[r32],16             // r7
375         nop             0
376         ;;
377 }
378 {       .mmi
379         ld8             r30=[r31],16            // b1
380         ld8             r29=[r32],16            // b2
381         nop             0
382         ;;
383 }
384 {       .mmi
385         ld8             r28=[r31],16            // b3
386         ld8             r27=[r32],16            // b4
387         mov             b1=r30
388         ;;
389 }
390 {       .mii
391         ld8             r26=[r31]               // b5
392         mov             b2=r29
393         mov             b3=r28
394         ;;
395 }
396 {       .mii
397         ld8             r25=[r32]               // lc
398         mov             b4=r27
399         mov             b5=r26
400         ;;
401 }
402 {       .mib
403         nop             0
404         mov             ar.lc=r25
405         br.ret.sptk     rp
406         ;;
407 }
408 END(restore_callee_saved)
409
410 /*
411  * save_callee_saved_fp(struct _callee_saved_fp *)
412  */
413 ENTRY(save_callee_saved_fp, 1)
414         add             r31=16,r32
415         stf.spill       [r32]=f2,32
416         ;;
417         stf.spill       [r31]=f3,32
418         stf.spill       [r32]=f4,32
419         ;;
420         stf.spill       [r31]=f5,32
421         stf.spill       [r32]=f16,32
422         ;;
423         stf.spill       [r31]=f17,32
424         stf.spill       [r32]=f18,32
425         ;;
426         stf.spill       [r31]=f19,32
427         stf.spill       [r32]=f20,32
428         ;;
429         stf.spill       [r31]=f21,32
430         stf.spill       [r32]=f22,32
431         ;;
432         stf.spill       [r31]=f23,32
433         stf.spill       [r32]=f24,32
434         ;;
435         stf.spill       [r31]=f25,32
436         stf.spill       [r32]=f26,32
437         ;;
438         stf.spill       [r31]=f27,32
439         stf.spill       [r32]=f28,32
440         ;;
441         stf.spill       [r31]=f29,32
442         stf.spill       [r32]=f30
443         ;;
444         stf.spill       [r31]=f31
445         br.ret.sptk     rp
446         ;;
447 END(save_callee_saved_fp)
448
449 /*
450  * restore_callee_saved_fp(struct _callee_saved_fp *)
451  */
452 ENTRY(restore_callee_saved_fp, 1)
453         add             r31=16,r32
454         ldf.fill        f2=[r32],32
455         ;;
456         ldf.fill        f3=[r31],32
457         ldf.fill        f4=[r32],32
458         ;;
459         ldf.fill        f5=[r31],32
460         ldf.fill        f16=[r32],32
461         ;;
462         ldf.fill        f17=[r31],32
463         ldf.fill        f18=[r32],32
464         ;;
465         ldf.fill        f19=[r31],32
466         ldf.fill        f20=[r32],32
467         ;;
468         ldf.fill        f21=[r31],32
469         ldf.fill        f22=[r32],32
470         ;;
471         ldf.fill        f23=[r31],32
472         ldf.fill        f24=[r32],32
473         ;;
474         ldf.fill        f25=[r31],32
475         ldf.fill        f26=[r32],32
476         ;;
477         ldf.fill        f27=[r31],32
478         ldf.fill        f28=[r32],32
479         ;;
480         ldf.fill        f29=[r31],32
481         ldf.fill        f30=[r32]
482         ;;
483         ldf.fill        f31=[r31]
484         br.ret.sptk     rp
485         ;;
486 END(restore_callee_saved_fp)
487
488 /*
489  * save_high_fp(struct _high_fp *)
490  */
491 ENTRY(save_high_fp, 1)
492         rsm             psr.dfh
493         ;;
494         srlz.d
495         add             r31=16,r32
496         stf.spill       [r32]=f32,32
497         ;;
498         stf.spill       [r31]=f33,32
499         stf.spill       [r32]=f34,32
500         ;;
501         stf.spill       [r31]=f35,32
502         stf.spill       [r32]=f36,32
503         ;;
504         stf.spill       [r31]=f37,32
505         stf.spill       [r32]=f38,32
506         ;;
507         stf.spill       [r31]=f39,32
508         stf.spill       [r32]=f40,32
509         ;;
510         stf.spill       [r31]=f41,32
511         stf.spill       [r32]=f42,32
512         ;;
513         stf.spill       [r31]=f43,32
514         stf.spill       [r32]=f44,32
515         ;;
516         stf.spill       [r31]=f45,32
517         stf.spill       [r32]=f46,32
518         ;;
519         stf.spill       [r31]=f47,32
520         stf.spill       [r32]=f48,32
521         ;;
522         stf.spill       [r31]=f49,32
523         stf.spill       [r32]=f50,32
524         ;;
525         stf.spill       [r31]=f51,32
526         stf.spill       [r32]=f52,32
527         ;;
528         stf.spill       [r31]=f53,32
529         stf.spill       [r32]=f54,32
530         ;;
531         stf.spill       [r31]=f55,32
532         stf.spill       [r32]=f56,32
533         ;;
534         stf.spill       [r31]=f57,32
535         stf.spill       [r32]=f58,32
536         ;;
537         stf.spill       [r31]=f59,32
538         stf.spill       [r32]=f60,32
539         ;;
540         stf.spill       [r31]=f61,32
541         stf.spill       [r32]=f62,32
542         ;;
543         stf.spill       [r31]=f63,32
544         stf.spill       [r32]=f64,32
545         ;;
546         stf.spill       [r31]=f65,32
547         stf.spill       [r32]=f66,32
548         ;;
549         stf.spill       [r31]=f67,32
550         stf.spill       [r32]=f68,32
551         ;;
552         stf.spill       [r31]=f69,32
553         stf.spill       [r32]=f70,32
554         ;;
555         stf.spill       [r31]=f71,32
556         stf.spill       [r32]=f72,32
557         ;;
558         stf.spill       [r31]=f73,32
559         stf.spill       [r32]=f74,32
560         ;;
561         stf.spill       [r31]=f75,32
562         stf.spill       [r32]=f76,32
563         ;;
564         stf.spill       [r31]=f77,32
565         stf.spill       [r32]=f78,32
566         ;;
567         stf.spill       [r31]=f79,32
568         stf.spill       [r32]=f80,32
569         ;;
570         stf.spill       [r31]=f81,32
571         stf.spill       [r32]=f82,32
572         ;;
573         stf.spill       [r31]=f83,32
574         stf.spill       [r32]=f84,32
575         ;;
576         stf.spill       [r31]=f85,32
577         stf.spill       [r32]=f86,32
578         ;;
579         stf.spill       [r31]=f87,32
580         stf.spill       [r32]=f88,32
581         ;;
582         stf.spill       [r31]=f89,32
583         stf.spill       [r32]=f90,32
584         ;;
585         stf.spill       [r31]=f91,32
586         stf.spill       [r32]=f92,32
587         ;;
588         stf.spill       [r31]=f93,32
589         stf.spill       [r32]=f94,32
590         ;;
591         stf.spill       [r31]=f95,32
592         stf.spill       [r32]=f96,32
593         ;;
594         stf.spill       [r31]=f97,32
595         stf.spill       [r32]=f98,32
596         ;;
597         stf.spill       [r31]=f99,32
598         stf.spill       [r32]=f100,32
599         ;;
600         stf.spill       [r31]=f101,32
601         stf.spill       [r32]=f102,32
602         ;;
603         stf.spill       [r31]=f103,32
604         stf.spill       [r32]=f104,32
605         ;;
606         stf.spill       [r31]=f105,32
607         stf.spill       [r32]=f106,32
608         ;;
609         stf.spill       [r31]=f107,32
610         stf.spill       [r32]=f108,32
611         ;;
612         stf.spill       [r31]=f109,32
613         stf.spill       [r32]=f110,32
614         ;;
615         stf.spill       [r31]=f111,32
616         stf.spill       [r32]=f112,32
617         ;;
618         stf.spill       [r31]=f113,32
619         stf.spill       [r32]=f114,32
620         ;;
621         stf.spill       [r31]=f115,32
622         stf.spill       [r32]=f116,32
623         ;;
624         stf.spill       [r31]=f117,32
625         stf.spill       [r32]=f118,32
626         ;;
627         stf.spill       [r31]=f119,32
628         stf.spill       [r32]=f120,32
629         ;;
630         stf.spill       [r31]=f121,32
631         stf.spill       [r32]=f122,32
632         ;;
633         stf.spill       [r31]=f123,32
634         stf.spill       [r32]=f124,32
635         ;;
636         stf.spill       [r31]=f125,32
637         stf.spill       [r32]=f126
638         ;;
639         stf.spill       [r31]=f127
640         ssm             psr.dfh
641         ;;
642         srlz.d
643         br.ret.sptk     rp
644         ;;
645 END(save_high_fp)
646
647 /*
648  * restore_high_fp(struct _high_fp *)
649  */
650 ENTRY(restore_high_fp, 1)
651         rsm             psr.dfh
652         ;;
653         srlz.d
654         add             r31=16,r32
655         ldf.fill        f32=[r32],32
656         ;;
657         ldf.fill        f33=[r31],32
658         ldf.fill        f34=[r32],32    
659         ;;
660         ldf.fill        f35=[r31],32
661         ldf.fill        f36=[r32],32
662         ;;
663         ldf.fill        f37=[r31],32
664         ldf.fill        f38=[r32],32
665         ;;
666         ldf.fill        f39=[r31],32
667         ldf.fill        f40=[r32],32
668         ;;
669         ldf.fill        f41=[r31],32
670         ldf.fill        f42=[r32],32
671         ;;
672         ldf.fill        f43=[r31],32
673         ldf.fill        f44=[r32],32
674         ;;
675         ldf.fill        f45=[r31],32
676         ldf.fill        f46=[r32],32
677         ;;
678         ldf.fill        f47=[r31],32
679         ldf.fill        f48=[r32],32
680         ;;
681         ldf.fill        f49=[r31],32
682         ldf.fill        f50=[r32],32
683         ;;
684         ldf.fill        f51=[r31],32
685         ldf.fill        f52=[r32],32
686         ;;
687         ldf.fill        f53=[r31],32
688         ldf.fill        f54=[r32],32
689         ;;
690         ldf.fill        f55=[r31],32
691         ldf.fill        f56=[r32],32
692         ;;
693         ldf.fill        f57=[r31],32
694         ldf.fill        f58=[r32],32
695         ;;
696         ldf.fill        f59=[r31],32
697         ldf.fill        f60=[r32],32
698         ;;
699         ldf.fill        f61=[r31],32
700         ldf.fill        f62=[r32],32
701         ;;
702         ldf.fill        f63=[r31],32
703         ldf.fill        f64=[r32],32
704         ;;
705         ldf.fill        f65=[r31],32
706         ldf.fill        f66=[r32],32
707         ;;
708         ldf.fill        f67=[r31],32
709         ldf.fill        f68=[r32],32
710         ;;
711         ldf.fill        f69=[r31],32
712         ldf.fill        f70=[r32],32
713         ;;
714         ldf.fill        f71=[r31],32
715         ldf.fill        f72=[r32],32
716         ;;
717         ldf.fill        f73=[r31],32
718         ldf.fill        f74=[r32],32
719         ;;
720         ldf.fill        f75=[r31],32
721         ldf.fill        f76=[r32],32
722         ;;
723         ldf.fill        f77=[r31],32
724         ldf.fill        f78=[r32],32
725         ;;
726         ldf.fill        f79=[r31],32
727         ldf.fill        f80=[r32],32
728         ;;
729         ldf.fill        f81=[r31],32
730         ldf.fill        f82=[r32],32
731         ;;
732         ldf.fill        f83=[r31],32
733         ldf.fill        f84=[r32],32
734         ;;
735         ldf.fill        f85=[r31],32
736         ldf.fill        f86=[r32],32
737         ;;
738         ldf.fill        f87=[r31],32
739         ldf.fill        f88=[r32],32
740         ;;
741         ldf.fill        f89=[r31],32
742         ldf.fill        f90=[r32],32
743         ;;
744         ldf.fill        f91=[r31],32
745         ldf.fill        f92=[r32],32
746         ;;
747         ldf.fill        f93=[r31],32
748         ldf.fill        f94=[r32],32
749         ;;
750         ldf.fill        f95=[r31],32
751         ldf.fill        f96=[r32],32
752         ;;
753         ldf.fill        f97=[r31],32
754         ldf.fill        f98=[r32],32
755         ;;
756         ldf.fill        f99=[r31],32
757         ldf.fill        f100=[r32],32
758         ;;
759         ldf.fill        f101=[r31],32
760         ldf.fill        f102=[r32],32
761         ;;
762         ldf.fill        f103=[r31],32
763         ldf.fill        f104=[r32],32
764         ;;
765         ldf.fill        f105=[r31],32
766         ldf.fill        f106=[r32],32
767         ;;
768         ldf.fill        f107=[r31],32
769         ldf.fill        f108=[r32],32
770         ;;
771         ldf.fill        f109=[r31],32
772         ldf.fill        f110=[r32],32
773         ;;
774         ldf.fill        f111=[r31],32
775         ldf.fill        f112=[r32],32
776         ;;
777         ldf.fill        f113=[r31],32
778         ldf.fill        f114=[r32],32
779         ;;
780         ldf.fill        f115=[r31],32
781         ldf.fill        f116=[r32],32
782         ;;
783         ldf.fill        f117=[r31],32
784         ldf.fill        f118=[r32],32
785         ;;
786         ldf.fill        f119=[r31],32
787         ldf.fill        f120=[r32],32
788         ;;
789         ldf.fill        f121=[r31],32
790         ldf.fill        f122=[r32],32
791         ;;
792         ldf.fill        f123=[r31],32
793         ldf.fill        f124=[r32],32
794         ;;
795         ldf.fill        f125=[r31],32
796         ldf.fill        f126=[r32]
797         ;;
798         ldf.fill        f127=[r31]
799         ssm             psr.dfh
800         ;;
801         srlz.d
802         br.ret.sptk     rp
803         ;;
804 END(restore_high_fp)