direct-io.hg

view xen/arch/ia64/vmx/optvfault.S @ 12411:622bb65e2011

[IA64] Accelerate RSM, SSM and MOV_TO_PSR

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
author awilliam@xenbuild.aw
date Sun Oct 29 11:18:17 2006 -0700 (2006-10-29)
parents ee7799388ab1
children 5ebc7ee315cc
line source
1 /*
2 * arch/ia64/vmx/optvfault.S
3 * optimize virtualization fault handler
4 *
5 * Copyright (C) 2006 Intel Co
6 * Xuefei Xu (Anthony Xu) <anthony.xu@intel.com>
7 */
9 #include <linux/config.h>
10 #include <asm/asmmacro.h>
11 #include <asm/kregs.h>
12 #include <asm/offsets.h>
13 #include <asm/percpu.h>
14 #include <asm/processor.h>
15 #include <asm/vmx_vpd.h>
16 #include <asm/vmx_pal_vsa.h>
17 #include <asm/asm-offsets.h>
19 #define ACCE_MOV_FROM_AR
20 #define ACCE_MOV_FROM_RR
21 #define ACCE_MOV_TO_RR
22 #define ACCE_RSM
23 #define ACCE_SSM
24 #define ACCE_MOV_TO_PSR
26 //mov r1=ar3
27 GLOBAL_ENTRY(vmx_asm_mov_from_ar)
28 #ifndef ACCE_MOV_FROM_AR
29 br.many vmx_virtualization_fault_back
30 #endif
31 add r18=VCPU_VTM_OFFSET_OFS,r21
32 mov r19=ar.itc
33 extr.u r17=r25,6,7
34 ;;
35 ld8 r18=[r18]
36 movl r20=asm_mov_to_reg
37 ;;
38 adds r30=vmx_resume_to_guest-asm_mov_to_reg,r20
39 shladd r17=r17,4,r20
40 mov r24=b0
41 ;;
42 add r19=r19,r18
43 mov b0=r17
44 br.sptk.few b0
45 ;;
46 END(vmx_asm_mov_from_ar)
49 // mov r1=rr[r3]
50 GLOBAL_ENTRY(vmx_asm_mov_from_rr)
51 #ifndef ACCE_MOV_FROM_RR
52 br.many vmx_virtualization_fault_back
53 #endif
54 extr.u r16=r25,20,7
55 extr.u r17=r25,6,7
56 movl r20=asm_mov_from_reg
57 ;;
58 adds r30=vmx_asm_mov_from_rr_back_1-asm_mov_from_reg,r20
59 shladd r16=r16,4,r20
60 mov r24=b0
61 ;;
62 add r27=VCPU_VRR0_OFS,r21
63 mov b0=r16
64 br.many b0
65 ;;
66 vmx_asm_mov_from_rr_back_1:
67 adds r30=vmx_resume_to_guest-asm_mov_from_reg,r20
68 adds r22=asm_mov_to_reg-asm_mov_from_reg,r20
69 shr.u r26=r19,61
70 ;;
71 shladd r17=r17,4,r22
72 shladd r27=r26,3,r27
73 ;;
74 ld8 r19=[r27]
75 mov b0=r17
76 br.many b0
77 END(vmx_asm_mov_from_rr)
80 // mov rr[r3]=r2
81 GLOBAL_ENTRY(vmx_asm_mov_to_rr)
82 #ifndef ACCE_MOV_TO_RR
83 br.many vmx_virtualization_fault_back
84 #endif
85 extr.u r16=r25,20,7
86 extr.u r17=r25,13,7
87 movl r20=asm_mov_from_reg
88 ;;
89 adds r30=vmx_asm_mov_to_rr_back_1-asm_mov_from_reg,r20
90 shladd r16=r16,4,r20
91 mov r22=b0
92 ;;
93 add r27=VCPU_VRR0_OFS,r21
94 mov b0=r16
95 br.many b0
96 ;;
97 vmx_asm_mov_to_rr_back_1:
98 adds r30=vmx_asm_mov_to_rr_back_2-asm_mov_from_reg,r20
99 shr.u r23=r19,61
100 shladd r17=r17,4,r20
101 ;;
102 //if rr7, go back
103 cmp.eq p6,p0=7,r23
104 mov b0=r22
105 (p6) br.cond.dpnt.many vmx_virtualization_fault_back
106 ;;
107 mov r28=r19
108 mov b0=r17
109 br.many b0
110 vmx_asm_mov_to_rr_back_2:
111 adds r30=vmx_resume_to_guest-asm_mov_from_reg,r20
112 shladd r27=r23,3,r27
113 ;; // +starting_rid
114 st8 [r27]=r19
115 mov b0=r30
116 ;;
117 adds r16=IA64_VCPU_STARTING_RID_OFFSET,r21
118 ;;
119 ld4 r16=[r16]
120 ;;
121 shl r16=r16,8
122 ;;
123 add r19=r19,r16
124 ;; //mangling rid 1 and 3
125 extr.u r16=r19,8,8
126 extr.u r17=r19,24,8
127 extr.u r18=r19,2,6
128 ;;
129 dep r19=r16,r19,24,8
130 ;;
131 dep r19=r17,r19,8,8
132 ;; //set ve 1
133 dep r19=-1,r19,0,1
134 cmp.lt p6,p0=14,r18
135 ;;
136 (p6) mov r18=14
137 ;;
138 (p6) dep r19=r18,r19,2,6
139 ;;
140 cmp.eq p6,p0=0,r23
141 ;;
142 cmp.eq.or p6,p0=4,r23
143 ;;
144 adds r16=IA64_VCPU_MODE_FLAGS_OFFSET,r21
145 (p6) adds r17=IA64_VCPU_META_SAVED_RR0_OFFSET,r21
146 ;;
147 ld4 r16=[r16]
148 cmp.eq p7,p0=r0,r0
149 (p6) shladd r17=r23,1,r17
150 ;;
151 (p6) st8 [r17]=r19
152 (p6) tbit.nz p6,p7=r16,0
153 ;;
154 (p7) mov rr[r28]=r19
155 mov r24=r22
156 br.many b0
157 END(vmx_asm_mov_to_rr)
160 //rsm
161 GLOBAL_ENTRY(vmx_asm_rsm)
162 #ifndef ACCE_RSM
163 br.many vmx_virtualization_fault_back
164 #endif
165 add r16=IA64_VPD_BASE_OFFSET,r21
166 extr.u r26=r25,6,21
167 extr.u r27=r25,31,2
168 ;;
169 ld8 r16=[r16]
170 extr.u r28=r25,36,1
171 dep r26=r27,r26,21,2
172 ;;
173 add r17=VPD_VPSR_START_OFFSET,r16
174 add r22=IA64_VCPU_MODE_FLAGS_OFFSET,r21
175 //r26 is imm24
176 dep r26=r28,r26,23,1
177 ;;
178 ld8 r18=[r17]
179 movl r28=IA64_PSR_IC+IA64_PSR_I+IA64_PSR_DT+IA64_PSR_SI
180 ld8 r23=[r22]
181 sub r27=-1,r26
182 mov r24=b0
183 ;;
184 mov r20=cr.ipsr
185 or r28=r27,r28
186 and r19=r18,r27
187 ;;
188 st8 [r17]=r19
189 and r20=r20,r28
190 ;;
191 mov cr.ipsr=r20
192 tbit.nz p6,p0=r23,0
193 ;;
194 tbit.z.or p6,p0=r26,IA64_PSR_DT_BIT
195 (p6) br.dptk vmx_resume_to_guest
196 ;;
197 add r26=IA64_VCPU_META_RR0_OFFSET,r21
198 add r27=IA64_VCPU_META_RR0_OFFSET+8,r21
199 dep r23=-1,r23,0,1
200 ;;
201 ld8 r26=[r26]
202 ld8 r27=[r27]
203 st8 [r22]=r23
204 dep.z r28=4,61,3
205 ;;
206 mov rr[r0]=r26
207 mov rr[r28]=r27
208 br.many vmx_resume_to_guest
209 END(vmx_asm_rsm)
212 //ssm
213 GLOBAL_ENTRY(vmx_asm_ssm)
214 #ifndef ACCE_SSM
215 br.many vmx_virtualization_fault_back
216 #endif
217 add r16=IA64_VPD_BASE_OFFSET,r21
218 extr.u r26=r25,6,21
219 extr.u r27=r25,31,2
220 ;;
221 ld8 r16=[r16]
222 extr.u r28=r25,36,1
223 dep r26=r27,r26,21,2
224 ;; //r26 is imm24
225 add r27=VPD_VPSR_START_OFFSET,r16
226 dep r26=r28,r26,23,1
227 ;; //r19 vpsr
228 ld8 r29=[r27]
229 mov r24=b0
230 ;;
231 add r22=IA64_VCPU_MODE_FLAGS_OFFSET,r21
232 mov r20=cr.ipsr
233 or r19=r29,r26
234 ;;
235 ld8 r23=[r22]
236 st8 [r27]=r19
237 or r20=r20,r26
238 ;;
239 mov cr.ipsr=r20
240 movl r28=IA64_PSR_DT+IA64_PSR_RT+IA64_PSR_IT
241 ;;
242 and r19=r28,r19
243 tbit.z p6,p0=r23,0
244 ;;
245 cmp.ne.or p6,p0=r28,r19
246 (p6) br.dptk vmx_asm_ssm_1
247 ;;
248 add r26=IA64_VCPU_META_SAVED_RR0_OFFSET,r21
249 add r27=IA64_VCPU_META_SAVED_RR0_OFFSET+8,r21
250 dep r23=0,r23,0,1
251 ;;
252 ld8 r26=[r26]
253 ld8 r27=[r27]
254 st8 [r22]=r23
255 dep.z r28=4,61,3
256 ;;
257 mov rr[r0]=r26
258 mov rr[r28]=r27
259 ;;
260 srlz.i
261 ;;
262 vmx_asm_ssm_1:
263 tbit.nz p6,p0=r29,IA64_PSR_I_BIT
264 ;;
265 tbit.z.or p6,p0=r19,IA64_PSR_I_BIT
266 (p6) br.dptk vmx_resume_to_guest
267 ;;
268 add r29=VPD_VTPR_START_OFFSET,r16
269 add r30=VPD_VHPI_START_OFFSET,r16
270 ;;
271 ld8 r29=[r29]
272 ld8 r30=[r30]
273 ;;
274 extr.u r17=r29,4,4
275 extr.u r18=r29,16,1
276 ;;
277 dep r17=r18,r17,4,1
278 ;;
279 cmp.gt p6,p0=r30,r17
280 (p6) br.dpnt.few vmx_asm_dispatch_vexirq
281 br.many vmx_resume_to_guest
282 END(vmx_asm_ssm)
285 //mov psr.l=r2
286 GLOBAL_ENTRY(vmx_asm_mov_to_psr)
287 #ifndef ACCE_MOV_TO_PSR
288 br.many vmx_virtualization_fault_back
289 #endif
290 add r16=IA64_VPD_BASE_OFFSET,r21
291 extr.u r26=r25,13,7 //r2
292 ;;
293 ld8 r16=[r16]
294 movl r20=asm_mov_from_reg
295 ;;
296 adds r30=vmx_asm_mov_to_psr_back-asm_mov_from_reg,r20
297 shladd r26=r26,4,r20
298 mov r24=b0
299 ;;
300 add r27=VPD_VPSR_START_OFFSET,r16
301 mov b0=r26
302 br.many b0
303 ;;
304 vmx_asm_mov_to_psr_back:
305 ld8 r17=[r27]
306 add r22=IA64_VCPU_MODE_FLAGS_OFFSET,r21
307 dep r19=0,r19,32,32
308 ;;
309 ld8 r23=[r22]
310 dep r18=0,r17,0,32
311 ;;
312 add r30=r18,r19
313 movl r28=IA64_PSR_DT+IA64_PSR_RT+IA64_PSR_IT
314 ;;
315 st8 [r27]=r30
316 and r27=r28,r30
317 and r29=r28,r17
318 ;;
319 cmp.eq p5,p0=r29,r27
320 cmp.eq p6,p7=r28,r27
321 (p5) br.many vmx_asm_mov_to_psr_1
322 ;;
323 //virtual to physical
324 (p7) add r26=IA64_VCPU_META_RR0_OFFSET,r21
325 (p7) add r27=IA64_VCPU_META_RR0_OFFSET+8,r21
326 (p7) dep r23=-1,r23,0,1
327 ;;
328 //physical to virtual
329 (p6) add r26=IA64_VCPU_META_SAVED_RR0_OFFSET,r21
330 (p6) add r27=IA64_VCPU_META_SAVED_RR0_OFFSET+8,r21
331 (p6) dep r23=0,r23,0,1
332 ;;
333 ld8 r26=[r26]
334 ld8 r27=[r27]
335 st8 [r22]=r23
336 dep.z r28=4,61,3
337 ;;
338 mov rr[r0]=r26
339 mov rr[r28]=r27
340 ;;
341 srlz.i
342 ;;
343 vmx_asm_mov_to_psr_1:
344 mov r20=cr.ipsr
345 movl r28=IA64_PSR_IC+IA64_PSR_I+IA64_PSR_DT+IA64_PSR_SI+IA64_PSR_RT
346 ;;
347 or r19=r19,r28
348 dep r20=0,r20,0,32
349 ;;
350 add r20=r19,r20
351 mov b0=r24
352 ;;
353 mov cr.ipsr=r20
354 cmp.ne p6,p0=r0,r0
355 ;;
356 tbit.nz.or p6,p0=r17,IA64_PSR_I_BIT
357 tbit.z.or p6,p0=r30,IA64_PSR_I_BIT
358 (p6) br.dpnt.few vmx_resume_to_guest
359 ;;
360 add r29=VPD_VTPR_START_OFFSET,r16
361 add r30=VPD_VHPI_START_OFFSET,r16
362 ;;
363 ld8 r29=[r29]
364 ld8 r30=[r30]
365 ;;
366 extr.u r17=r29,4,4
367 extr.u r18=r29,16,1
368 ;;
369 dep r17=r18,r17,4,1
370 ;;
371 cmp.gt p6,p0=r30,r17
372 (p6) br.dpnt.few vmx_asm_dispatch_vexirq
373 br.many vmx_resume_to_guest
374 END(vmx_asm_mov_to_psr)
377 ENTRY(vmx_asm_dispatch_vexirq)
378 //increment iip
379 mov r16=cr.ipsr
380 ;;
381 extr.u r17=r16,IA64_PSR_RI_BIT,2
382 tbit.nz p6,p7=r16,IA64_PSR_RI_BIT+1
383 ;;
384 (p6) mov r18=cr.iip
385 (p6) mov r17=r0
386 (p7) add r17=1,r17
387 ;;
388 (p6) add r18=0x10,r18
389 dep r16=r17,r16,IA64_PSR_RI_BIT,2
390 ;;
391 (p6) mov cr.iip=r18
392 mov cr.ipsr=r16
393 br.many vmx_dispatch_vexirq
394 END(vmx_asm_dispatch_vexirq)
397 #define MOV_TO_REG0 \
398 {; \
399 nop.b 0x0; \
400 nop.b 0x0; \
401 nop.b 0x0; \
402 ;; \
403 };
406 #define MOV_TO_REG(n) \
407 {; \
408 mov r##n##=r19; \
409 mov b0=r30; \
410 br.sptk.many b0; \
411 ;; \
412 };
415 #define MOV_FROM_REG(n) \
416 {; \
417 mov r19=r##n##; \
418 mov b0=r30; \
419 br.sptk.many b0; \
420 ;; \
421 };
424 #define MOV_TO_BANK0_REG(n) \
425 ENTRY_MIN_ALIGN(asm_mov_to_bank0_reg##n##); \
426 {; \
427 mov r26=r2; \
428 mov r2=r19; \
429 bsw.1; \
430 ;; \
431 }; \
432 {; \
433 mov r##n##=r2; \
434 nop.b 0x0; \
435 bsw.0; \
436 ;; \
437 }; \
438 {; \
439 mov r2=r26; \
440 mov b0=r30; \
441 br.sptk.many b0; \
442 ;; \
443 }; \
444 END(asm_mov_to_bank0_reg##n##)
447 #define MOV_FROM_BANK0_REG(n) \
448 ENTRY_MIN_ALIGN(asm_mov_from_bank0_reg##n##); \
449 {; \
450 mov r26=r2; \
451 nop.b 0x0; \
452 bsw.1; \
453 ;; \
454 }; \
455 {; \
456 mov r2=r##n##; \
457 nop.b 0x0; \
458 bsw.0; \
459 ;; \
460 }; \
461 {; \
462 mov r19=r2; \
463 mov r2=r26; \
464 mov b0=r30; \
465 }; \
466 {; \
467 nop.b 0x0; \
468 nop.b 0x0; \
469 br.sptk.many b0; \
470 ;; \
471 }; \
472 END(asm_mov_from_bank0_reg##n##)
475 #define JMP_TO_MOV_TO_BANK0_REG(n) \
476 {; \
477 nop.b 0x0; \
478 nop.b 0x0; \
479 br.sptk.many asm_mov_to_bank0_reg##n##; \
480 ;; \
481 }
484 #define JMP_TO_MOV_FROM_BANK0_REG(n) \
485 {; \
486 nop.b 0x0; \
487 nop.b 0x0; \
488 br.sptk.many asm_mov_from_bank0_reg##n##; \
489 ;; \
490 }
493 MOV_FROM_BANK0_REG(16)
494 MOV_FROM_BANK0_REG(17)
495 MOV_FROM_BANK0_REG(18)
496 MOV_FROM_BANK0_REG(19)
497 MOV_FROM_BANK0_REG(20)
498 MOV_FROM_BANK0_REG(21)
499 MOV_FROM_BANK0_REG(22)
500 MOV_FROM_BANK0_REG(23)
501 MOV_FROM_BANK0_REG(24)
502 MOV_FROM_BANK0_REG(25)
503 MOV_FROM_BANK0_REG(26)
504 MOV_FROM_BANK0_REG(27)
505 MOV_FROM_BANK0_REG(28)
506 MOV_FROM_BANK0_REG(29)
507 MOV_FROM_BANK0_REG(30)
508 MOV_FROM_BANK0_REG(31)
511 // mov from reg table
512 ENTRY(asm_mov_from_reg)
513 MOV_FROM_REG(0)
514 MOV_FROM_REG(1)
515 MOV_FROM_REG(2)
516 MOV_FROM_REG(3)
517 MOV_FROM_REG(4)
518 MOV_FROM_REG(5)
519 MOV_FROM_REG(6)
520 MOV_FROM_REG(7)
521 MOV_FROM_REG(8)
522 MOV_FROM_REG(9)
523 MOV_FROM_REG(10)
524 MOV_FROM_REG(11)
525 MOV_FROM_REG(12)
526 MOV_FROM_REG(13)
527 MOV_FROM_REG(14)
528 MOV_FROM_REG(15)
529 JMP_TO_MOV_FROM_BANK0_REG(16)
530 JMP_TO_MOV_FROM_BANK0_REG(17)
531 JMP_TO_MOV_FROM_BANK0_REG(18)
532 JMP_TO_MOV_FROM_BANK0_REG(19)
533 JMP_TO_MOV_FROM_BANK0_REG(20)
534 JMP_TO_MOV_FROM_BANK0_REG(21)
535 JMP_TO_MOV_FROM_BANK0_REG(22)
536 JMP_TO_MOV_FROM_BANK0_REG(23)
537 JMP_TO_MOV_FROM_BANK0_REG(24)
538 JMP_TO_MOV_FROM_BANK0_REG(25)
539 JMP_TO_MOV_FROM_BANK0_REG(26)
540 JMP_TO_MOV_FROM_BANK0_REG(27)
541 JMP_TO_MOV_FROM_BANK0_REG(28)
542 JMP_TO_MOV_FROM_BANK0_REG(29)
543 JMP_TO_MOV_FROM_BANK0_REG(30)
544 JMP_TO_MOV_FROM_BANK0_REG(31)
545 MOV_FROM_REG(32)
546 MOV_FROM_REG(33)
547 MOV_FROM_REG(34)
548 MOV_FROM_REG(35)
549 MOV_FROM_REG(36)
550 MOV_FROM_REG(37)
551 MOV_FROM_REG(38)
552 MOV_FROM_REG(39)
553 MOV_FROM_REG(40)
554 MOV_FROM_REG(41)
555 MOV_FROM_REG(42)
556 MOV_FROM_REG(43)
557 MOV_FROM_REG(44)
558 MOV_FROM_REG(45)
559 MOV_FROM_REG(46)
560 MOV_FROM_REG(47)
561 MOV_FROM_REG(48)
562 MOV_FROM_REG(49)
563 MOV_FROM_REG(50)
564 MOV_FROM_REG(51)
565 MOV_FROM_REG(52)
566 MOV_FROM_REG(53)
567 MOV_FROM_REG(54)
568 MOV_FROM_REG(55)
569 MOV_FROM_REG(56)
570 MOV_FROM_REG(57)
571 MOV_FROM_REG(58)
572 MOV_FROM_REG(59)
573 MOV_FROM_REG(60)
574 MOV_FROM_REG(61)
575 MOV_FROM_REG(62)
576 MOV_FROM_REG(63)
577 MOV_FROM_REG(64)
578 MOV_FROM_REG(65)
579 MOV_FROM_REG(66)
580 MOV_FROM_REG(67)
581 MOV_FROM_REG(68)
582 MOV_FROM_REG(69)
583 MOV_FROM_REG(70)
584 MOV_FROM_REG(71)
585 MOV_FROM_REG(72)
586 MOV_FROM_REG(73)
587 MOV_FROM_REG(74)
588 MOV_FROM_REG(75)
589 MOV_FROM_REG(76)
590 MOV_FROM_REG(77)
591 MOV_FROM_REG(78)
592 MOV_FROM_REG(79)
593 MOV_FROM_REG(80)
594 MOV_FROM_REG(81)
595 MOV_FROM_REG(82)
596 MOV_FROM_REG(83)
597 MOV_FROM_REG(84)
598 MOV_FROM_REG(85)
599 MOV_FROM_REG(86)
600 MOV_FROM_REG(87)
601 MOV_FROM_REG(88)
602 MOV_FROM_REG(89)
603 MOV_FROM_REG(90)
604 MOV_FROM_REG(91)
605 MOV_FROM_REG(92)
606 MOV_FROM_REG(93)
607 MOV_FROM_REG(94)
608 MOV_FROM_REG(95)
609 MOV_FROM_REG(96)
610 MOV_FROM_REG(97)
611 MOV_FROM_REG(98)
612 MOV_FROM_REG(99)
613 MOV_FROM_REG(100)
614 MOV_FROM_REG(101)
615 MOV_FROM_REG(102)
616 MOV_FROM_REG(103)
617 MOV_FROM_REG(104)
618 MOV_FROM_REG(105)
619 MOV_FROM_REG(106)
620 MOV_FROM_REG(107)
621 MOV_FROM_REG(108)
622 MOV_FROM_REG(109)
623 MOV_FROM_REG(110)
624 MOV_FROM_REG(111)
625 MOV_FROM_REG(112)
626 MOV_FROM_REG(113)
627 MOV_FROM_REG(114)
628 MOV_FROM_REG(115)
629 MOV_FROM_REG(116)
630 MOV_FROM_REG(117)
631 MOV_FROM_REG(118)
632 MOV_FROM_REG(119)
633 MOV_FROM_REG(120)
634 MOV_FROM_REG(121)
635 MOV_FROM_REG(122)
636 MOV_FROM_REG(123)
637 MOV_FROM_REG(124)
638 MOV_FROM_REG(125)
639 MOV_FROM_REG(126)
640 MOV_FROM_REG(127)
641 END(asm_mov_from_reg)
644 /* must be in bank 0
645 * parameter:
646 * r31: pr
647 * r24: b0
648 */
649 ENTRY(vmx_resume_to_guest)
650 mov r16=cr.ipsr
651 movl r20=__vsa_base
652 ;;
653 ld8 r20=[r20]
654 adds r19=IA64_VPD_BASE_OFFSET,r21
655 ;;
656 ld8 r25=[r19]
657 extr.u r17=r16,IA64_PSR_RI_BIT,2
658 tbit.nz p6,p7=r16,IA64_PSR_RI_BIT+1
659 ;;
660 (p6) mov r18=cr.iip
661 (p6) mov r17=r0
662 ;;
663 (p6) add r18=0x10,r18
664 (p7) add r17=1,r17
665 ;;
666 (p6) mov cr.iip=r18
667 dep r16=r17,r16,IA64_PSR_RI_BIT,2
668 ;;
669 mov cr.ipsr=r16
670 adds r19= VPD_VPSR_START_OFFSET,r25
671 add r28=PAL_VPS_RESUME_NORMAL,r20
672 add r29=PAL_VPS_RESUME_HANDLER,r20
673 ;;
674 ld8 r19=[r19]
675 mov b0=r29
676 cmp.ne p6,p7 = r0,r0
677 ;;
678 tbit.z p6,p7 = r19,IA64_PSR_IC_BIT // p1=vpsr.ic
679 ;;
680 (p6) ld8 r26=[r25]
681 (p7) mov b0=r28
682 mov pr=r31,-2
683 br.sptk.many b0 // call pal service
684 ;;
685 END(vmx_resume_to_guest)
688 MOV_TO_BANK0_REG(16)
689 MOV_TO_BANK0_REG(17)
690 MOV_TO_BANK0_REG(18)
691 MOV_TO_BANK0_REG(19)
692 MOV_TO_BANK0_REG(20)
693 MOV_TO_BANK0_REG(21)
694 MOV_TO_BANK0_REG(22)
695 MOV_TO_BANK0_REG(23)
696 MOV_TO_BANK0_REG(24)
697 MOV_TO_BANK0_REG(25)
698 MOV_TO_BANK0_REG(26)
699 MOV_TO_BANK0_REG(27)
700 MOV_TO_BANK0_REG(28)
701 MOV_TO_BANK0_REG(29)
702 MOV_TO_BANK0_REG(30)
703 MOV_TO_BANK0_REG(31)
706 // mov to reg table
707 ENTRY(asm_mov_to_reg)
708 MOV_TO_REG0
709 MOV_TO_REG(1)
710 MOV_TO_REG(2)
711 MOV_TO_REG(3)
712 MOV_TO_REG(4)
713 MOV_TO_REG(5)
714 MOV_TO_REG(6)
715 MOV_TO_REG(7)
716 MOV_TO_REG(8)
717 MOV_TO_REG(9)
718 MOV_TO_REG(10)
719 MOV_TO_REG(11)
720 MOV_TO_REG(12)
721 MOV_TO_REG(13)
722 MOV_TO_REG(14)
723 MOV_TO_REG(15)
724 JMP_TO_MOV_TO_BANK0_REG(16)
725 JMP_TO_MOV_TO_BANK0_REG(17)
726 JMP_TO_MOV_TO_BANK0_REG(18)
727 JMP_TO_MOV_TO_BANK0_REG(19)
728 JMP_TO_MOV_TO_BANK0_REG(20)
729 JMP_TO_MOV_TO_BANK0_REG(21)
730 JMP_TO_MOV_TO_BANK0_REG(22)
731 JMP_TO_MOV_TO_BANK0_REG(23)
732 JMP_TO_MOV_TO_BANK0_REG(24)
733 JMP_TO_MOV_TO_BANK0_REG(25)
734 JMP_TO_MOV_TO_BANK0_REG(26)
735 JMP_TO_MOV_TO_BANK0_REG(27)
736 JMP_TO_MOV_TO_BANK0_REG(28)
737 JMP_TO_MOV_TO_BANK0_REG(29)
738 JMP_TO_MOV_TO_BANK0_REG(30)
739 JMP_TO_MOV_TO_BANK0_REG(31)
740 MOV_TO_REG(32)
741 MOV_TO_REG(33)
742 MOV_TO_REG(34)
743 MOV_TO_REG(35)
744 MOV_TO_REG(36)
745 MOV_TO_REG(37)
746 MOV_TO_REG(38)
747 MOV_TO_REG(39)
748 MOV_TO_REG(40)
749 MOV_TO_REG(41)
750 MOV_TO_REG(42)
751 MOV_TO_REG(43)
752 MOV_TO_REG(44)
753 MOV_TO_REG(45)
754 MOV_TO_REG(46)
755 MOV_TO_REG(47)
756 MOV_TO_REG(48)
757 MOV_TO_REG(49)
758 MOV_TO_REG(50)
759 MOV_TO_REG(51)
760 MOV_TO_REG(52)
761 MOV_TO_REG(53)
762 MOV_TO_REG(54)
763 MOV_TO_REG(55)
764 MOV_TO_REG(56)
765 MOV_TO_REG(57)
766 MOV_TO_REG(58)
767 MOV_TO_REG(59)
768 MOV_TO_REG(60)
769 MOV_TO_REG(61)
770 MOV_TO_REG(62)
771 MOV_TO_REG(63)
772 MOV_TO_REG(64)
773 MOV_TO_REG(65)
774 MOV_TO_REG(66)
775 MOV_TO_REG(67)
776 MOV_TO_REG(68)
777 MOV_TO_REG(69)
778 MOV_TO_REG(70)
779 MOV_TO_REG(71)
780 MOV_TO_REG(72)
781 MOV_TO_REG(73)
782 MOV_TO_REG(74)
783 MOV_TO_REG(75)
784 MOV_TO_REG(76)
785 MOV_TO_REG(77)
786 MOV_TO_REG(78)
787 MOV_TO_REG(79)
788 MOV_TO_REG(80)
789 MOV_TO_REG(81)
790 MOV_TO_REG(82)
791 MOV_TO_REG(83)
792 MOV_TO_REG(84)
793 MOV_TO_REG(85)
794 MOV_TO_REG(86)
795 MOV_TO_REG(87)
796 MOV_TO_REG(88)
797 MOV_TO_REG(89)
798 MOV_TO_REG(90)
799 MOV_TO_REG(91)
800 MOV_TO_REG(92)
801 MOV_TO_REG(93)
802 MOV_TO_REG(94)
803 MOV_TO_REG(95)
804 MOV_TO_REG(96)
805 MOV_TO_REG(97)
806 MOV_TO_REG(98)
807 MOV_TO_REG(99)
808 MOV_TO_REG(100)
809 MOV_TO_REG(101)
810 MOV_TO_REG(102)
811 MOV_TO_REG(103)
812 MOV_TO_REG(104)
813 MOV_TO_REG(105)
814 MOV_TO_REG(106)
815 MOV_TO_REG(107)
816 MOV_TO_REG(108)
817 MOV_TO_REG(109)
818 MOV_TO_REG(110)
819 MOV_TO_REG(111)
820 MOV_TO_REG(112)
821 MOV_TO_REG(113)
822 MOV_TO_REG(114)
823 MOV_TO_REG(115)
824 MOV_TO_REG(116)
825 MOV_TO_REG(117)
826 MOV_TO_REG(118)
827 MOV_TO_REG(119)
828 MOV_TO_REG(120)
829 MOV_TO_REG(121)
830 MOV_TO_REG(122)
831 MOV_TO_REG(123)
832 MOV_TO_REG(124)
833 MOV_TO_REG(125)
834 MOV_TO_REG(126)
835 MOV_TO_REG(127)
836 END(asm_mov_to_reg)