ia64/xen-unstable

changeset 11607:5292d57b0771

[IA64] Accelerate some virtualization faults

Accelerate MOV_FROM_ITC and MOV_FROM_RR virtualization faults,
More will be added.

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
author awilliam@xenbuild.aw
date Sun Sep 24 14:23:58 2006 -0600 (2006-09-24)
parents 1824ee11fc53
children 06bec182a66e
files xen/arch/ia64/asm-offsets.c xen/arch/ia64/vmx/Makefile xen/arch/ia64/vmx/optvfault.S xen/arch/ia64/vmx/vmx_ivt.S
line diff
     1.1 --- a/xen/arch/ia64/asm-offsets.c	Sun Sep 24 14:01:35 2006 -0600
     1.2 +++ b/xen/arch/ia64/asm-offsets.c	Sun Sep 24 14:23:58 2006 -0600
     1.3 @@ -37,6 +37,8 @@ void foo(void)
     1.4  	DEFINE(IA64_MCA_CPU_INIT_STACK_OFFSET, offsetof (struct ia64_mca_cpu, init_stack));
     1.5  
     1.6  	BLANK();
     1.7 +	DEFINE(VCPU_VTM_OFFSET_OFS, offsetof(struct vcpu, arch.arch_vmx.vtm.vtm_offset));
     1.8 +	DEFINE(VCPU_VRR0_OFS, offsetof(struct vcpu, arch.arch_vmx.vrr[0]));
     1.9  #ifdef   VTI_DEBUG
    1.10  	DEFINE(IVT_CUR_OFS, offsetof(struct vcpu, arch.arch_vmx.ivt_current));
    1.11  	DEFINE(IVT_DBG_OFS, offsetof(struct vcpu, arch.arch_vmx.ivt_debug));
     2.1 --- a/xen/arch/ia64/vmx/Makefile	Sun Sep 24 14:01:35 2006 -0600
     2.2 +++ b/xen/arch/ia64/vmx/Makefile	Sun Sep 24 14:23:58 2006 -0600
     2.3 @@ -17,3 +17,4 @@ obj-y += vmx_vcpu.o
     2.4  obj-y += vmx_virt.o
     2.5  obj-y += vmx_vsa.o
     2.6  obj-y += vtlb.o
     2.7 +obj-y += optvfault.o
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/xen/arch/ia64/vmx/optvfault.S	Sun Sep 24 14:23:58 2006 -0600
     3.3 @@ -0,0 +1,518 @@
     3.4 +/*
     3.5 + * arch/ia64/vmx/optvfault.S
     3.6 + * optimize virtualization fault handler
     3.7 + *
     3.8 + * Copyright (C) 2006 Intel Co
     3.9 + *	Xuefei Xu (Anthony Xu) <anthony.xu@intel.com>
    3.10 + */
    3.11 +
    3.12 +#include <linux/config.h>
    3.13 +#include <asm/asmmacro.h>
    3.14 +#include <asm/kregs.h>
    3.15 +#include <asm/offsets.h>
    3.16 +#include <asm/percpu.h>
    3.17 +#include <asm/processor.h>
    3.18 +#include <asm/vmx_vpd.h>
    3.19 +#include <asm/vmx_pal_vsa.h>
    3.20 +#include <asm/asm-offsets.h>
    3.21 +
    3.22 +#define ACCE_MOV_FROM_AR
    3.23 +#define ACCE_MOV_FROM_RR
    3.24 +
    3.25 +//mov r1=ar3
    3.26 +GLOBAL_ENTRY(asm_mov_from_ar)
    3.27 +#ifndef ACCE_MOV_FROM_AR
    3.28 +    br.many vmx_vitualization_fault_back
    3.29 +#endif
    3.30 +    add r18=VCPU_VTM_OFFSET_OFS,r21
    3.31 +    mov r19=ar.itc
    3.32 +    extr.u r17=r25,6,7
    3.33 +    ;;
    3.34 +    ld8 r18=[r18]
    3.35 +    movl r20=asm_mov_to_reg
    3.36 +    ;;
    3.37 +    adds r30=vmx_resume_to_guest-asm_mov_to_reg,r20
    3.38 +    shladd r17=r17,4,r20
    3.39 +    mov r24=b0
    3.40 +    ;;
    3.41 +    add r19=r19,r18
    3.42 +    mov b0=r17
    3.43 +    br.sptk.few b0
    3.44 +    ;;
    3.45 +END(asm_mov_from_ar)
    3.46 +
    3.47 +
    3.48 +// mov r1=rr[r3]
    3.49 +GLOBAL_ENTRY(asm_mov_from_rr)
    3.50 +#ifndef ACCE_MOV_FROM_RR
    3.51 +    br.many vmx_vitualization_fault_back
    3.52 +#endif
    3.53 +    extr.u r16=r25,20,7
    3.54 +    extr.u r17=r25,6,7
    3.55 +    movl r20=asm_mov_from_reg
    3.56 +    ;;
    3.57 +    adds r30=asm_mov_from_rr_back_1-asm_mov_from_reg,r20
    3.58 +    shladd r16=r16,4,r20
    3.59 +    mov r24=b0
    3.60 +    ;;
    3.61 +    add r27=VCPU_VRR0_OFS,r21
    3.62 +    mov b0=r16
    3.63 +    br.many b0
    3.64 +    ;;   
    3.65 +asm_mov_from_rr_back_1:  
    3.66 +    adds r30=vmx_resume_to_guest-asm_mov_from_reg,r20
    3.67 +    adds r22=asm_mov_to_reg-asm_mov_from_reg,r20
    3.68 +    shr.u r26=r19,61
    3.69 +    ;;
    3.70 +    shladd r17=r17,4,r22
    3.71 +    shladd r27=r26,3,r27
    3.72 +    ;;
    3.73 +    ld8 r19=[r27]
    3.74 +    mov b0=r17
    3.75 +    br.many b0
    3.76 +END(asm_mov_from_rr)
    3.77 +
    3.78 +
    3.79 +#define MOV_TO_REG0	\
    3.80 +{;			\
    3.81 +    nop.b 0x0;		\
    3.82 +    nop.b 0x0;		\
    3.83 +    nop.b 0x0;		\
    3.84 +    ;;			\
    3.85 +};
    3.86 +
    3.87 +
    3.88 +#define MOV_TO_REG(n)	\
    3.89 +{;			\
    3.90 +    mov r##n##=r19;	\
    3.91 +    mov b0=r30;		\
    3.92 +    br.sptk.many b0;	\
    3.93 +    ;;			\
    3.94 +};
    3.95 +
    3.96 +
    3.97 +#define MOV_FROM_REG(n)	\
    3.98 +{;			\
    3.99 +    mov r19=r##n##;	\
   3.100 +    mov b0=r30;		\
   3.101 +    br.sptk.many b0;	\
   3.102 +    ;;			\
   3.103 +};
   3.104 +
   3.105 +
   3.106 +#define MOV_TO_BANK0_REG(n)			\
   3.107 +ENTRY_MIN_ALIGN(asm_mov_to_bank0_reg##n##);	\
   3.108 +{;						\
   3.109 +    mov r26=r2;					\
   3.110 +    mov r2=r19;					\
   3.111 +    bsw.1;					\
   3.112 +    ;;						\
   3.113 +};						\
   3.114 +{;						\
   3.115 +    mov r##n##=r2;				\
   3.116 +    nop.b 0x0;					\
   3.117 +    bsw.0;					\
   3.118 +    ;;						\
   3.119 +};						\
   3.120 +{;						\
   3.121 +    mov r2=r26;					\
   3.122 +    mov b0=r30;					\
   3.123 +    br.sptk.many b0;				\
   3.124 +    ;;						\
   3.125 +};						\
   3.126 +END(asm_mov_to_bank0_reg##n##)
   3.127 +
   3.128 +
   3.129 +#define MOV_FROM_BANK0_REG(n)			\
   3.130 +ENTRY_MIN_ALIGN(asm_mov_from_bank0_reg##n##);	\
   3.131 +{;						\
   3.132 +    mov r26=r2;					\
   3.133 +    nop.b 0x0;					\
   3.134 +    bsw.1;					\
   3.135 +    ;;						\
   3.136 +};						\
   3.137 +{;						\
   3.138 +    mov r2=r##n##;				\
   3.139 +    nop.b 0x0;					\
   3.140 +    bsw.0;					\
   3.141 +    ;;						\
   3.142 +};						\
   3.143 +{;						\
   3.144 +    mov r19=r2;					\
   3.145 +    mov r2=r26;					\
   3.146 +    mov b0=r30;					\
   3.147 +};						\
   3.148 +{;						\
   3.149 +    nop.b 0x0;					\
   3.150 +    nop.b 0x0;					\
   3.151 +    br.sptk.many b0;				\
   3.152 +    ;;						\
   3.153 +};						\
   3.154 +END(asm_mov_from_bank0_reg##n##)
   3.155 +
   3.156 +
   3.157 +#define JMP_TO_MOV_TO_BANK0_REG(n)		\
   3.158 +{;						\
   3.159 +    nop.b 0x0;					\
   3.160 +    nop.b 0x0;					\
   3.161 +    br.sptk.many asm_mov_to_bank0_reg##n##;	\
   3.162 +    ;;						\
   3.163 +}    
   3.164 +
   3.165 +
   3.166 +#define JMP_TO_MOV_FROM_BANK0_REG(n)		\
   3.167 +{;						\
   3.168 +    nop.b 0x0;					\
   3.169 +    nop.b 0x0;					\
   3.170 +    br.sptk.many asm_mov_from_bank0_reg##n##;	\
   3.171 +    ;;						\
   3.172 +}
   3.173 +
   3.174 +
   3.175 +MOV_FROM_BANK0_REG(16)
   3.176 +MOV_FROM_BANK0_REG(17)
   3.177 +MOV_FROM_BANK0_REG(18)
   3.178 +MOV_FROM_BANK0_REG(19)
   3.179 +MOV_FROM_BANK0_REG(20)
   3.180 +MOV_FROM_BANK0_REG(21)
   3.181 +MOV_FROM_BANK0_REG(22)
   3.182 +MOV_FROM_BANK0_REG(23)
   3.183 +MOV_FROM_BANK0_REG(24)
   3.184 +MOV_FROM_BANK0_REG(25)
   3.185 +MOV_FROM_BANK0_REG(26)
   3.186 +MOV_FROM_BANK0_REG(27)
   3.187 +MOV_FROM_BANK0_REG(28)
   3.188 +MOV_FROM_BANK0_REG(29)
   3.189 +MOV_FROM_BANK0_REG(30)
   3.190 +MOV_FROM_BANK0_REG(31)
   3.191 +
   3.192 +
   3.193 +// mov from reg table
   3.194 +ENTRY(asm_mov_from_reg)
   3.195 +    MOV_FROM_REG(0)
   3.196 +    MOV_FROM_REG(1)
   3.197 +    MOV_FROM_REG(2)
   3.198 +    MOV_FROM_REG(3)
   3.199 +    MOV_FROM_REG(4)
   3.200 +    MOV_FROM_REG(5)
   3.201 +    MOV_FROM_REG(6)
   3.202 +    MOV_FROM_REG(7)
   3.203 +    MOV_FROM_REG(8)
   3.204 +    MOV_FROM_REG(9)
   3.205 +    MOV_FROM_REG(10)
   3.206 +    MOV_FROM_REG(11)
   3.207 +    MOV_FROM_REG(12)
   3.208 +    MOV_FROM_REG(13)
   3.209 +    MOV_FROM_REG(14)
   3.210 +    MOV_FROM_REG(15)
   3.211 +    JMP_TO_MOV_FROM_BANK0_REG(16)
   3.212 +    JMP_TO_MOV_FROM_BANK0_REG(17)
   3.213 +    JMP_TO_MOV_FROM_BANK0_REG(18)
   3.214 +    JMP_TO_MOV_FROM_BANK0_REG(19)
   3.215 +    JMP_TO_MOV_FROM_BANK0_REG(20)
   3.216 +    JMP_TO_MOV_FROM_BANK0_REG(21)
   3.217 +    JMP_TO_MOV_FROM_BANK0_REG(22)
   3.218 +    JMP_TO_MOV_FROM_BANK0_REG(23)
   3.219 +    JMP_TO_MOV_FROM_BANK0_REG(24)
   3.220 +    JMP_TO_MOV_FROM_BANK0_REG(25)
   3.221 +    JMP_TO_MOV_FROM_BANK0_REG(26)
   3.222 +    JMP_TO_MOV_FROM_BANK0_REG(27)
   3.223 +    JMP_TO_MOV_FROM_BANK0_REG(28)
   3.224 +    JMP_TO_MOV_FROM_BANK0_REG(29)
   3.225 +    JMP_TO_MOV_FROM_BANK0_REG(30)
   3.226 +    JMP_TO_MOV_FROM_BANK0_REG(31)
   3.227 +    MOV_FROM_REG(32)
   3.228 +    MOV_FROM_REG(33)
   3.229 +    MOV_FROM_REG(34)
   3.230 +    MOV_FROM_REG(35)
   3.231 +    MOV_FROM_REG(36)
   3.232 +    MOV_FROM_REG(37)
   3.233 +    MOV_FROM_REG(38)
   3.234 +    MOV_FROM_REG(39)
   3.235 +    MOV_FROM_REG(40)
   3.236 +    MOV_FROM_REG(41)
   3.237 +    MOV_FROM_REG(42)
   3.238 +    MOV_FROM_REG(43)
   3.239 +    MOV_FROM_REG(44)
   3.240 +    MOV_FROM_REG(45)
   3.241 +    MOV_FROM_REG(46)
   3.242 +    MOV_FROM_REG(47)
   3.243 +    MOV_FROM_REG(48)
   3.244 +    MOV_FROM_REG(49)
   3.245 +    MOV_FROM_REG(50)
   3.246 +    MOV_FROM_REG(51)
   3.247 +    MOV_FROM_REG(52)
   3.248 +    MOV_FROM_REG(53)
   3.249 +    MOV_FROM_REG(54)
   3.250 +    MOV_FROM_REG(55)
   3.251 +    MOV_FROM_REG(56)
   3.252 +    MOV_FROM_REG(57)
   3.253 +    MOV_FROM_REG(58)
   3.254 +    MOV_FROM_REG(59)
   3.255 +    MOV_FROM_REG(60)
   3.256 +    MOV_FROM_REG(61)
   3.257 +    MOV_FROM_REG(62)
   3.258 +    MOV_FROM_REG(63)
   3.259 +    MOV_FROM_REG(64)
   3.260 +    MOV_FROM_REG(65)
   3.261 +    MOV_FROM_REG(66)
   3.262 +    MOV_FROM_REG(67)
   3.263 +    MOV_FROM_REG(68)
   3.264 +    MOV_FROM_REG(69)
   3.265 +    MOV_FROM_REG(70)
   3.266 +    MOV_FROM_REG(71)
   3.267 +    MOV_FROM_REG(72)
   3.268 +    MOV_FROM_REG(73)
   3.269 +    MOV_FROM_REG(74)
   3.270 +    MOV_FROM_REG(75)
   3.271 +    MOV_FROM_REG(76)
   3.272 +    MOV_FROM_REG(77)
   3.273 +    MOV_FROM_REG(78)
   3.274 +    MOV_FROM_REG(79)
   3.275 +    MOV_FROM_REG(80)
   3.276 +    MOV_FROM_REG(81)
   3.277 +    MOV_FROM_REG(82)
   3.278 +    MOV_FROM_REG(83)
   3.279 +    MOV_FROM_REG(84)
   3.280 +    MOV_FROM_REG(85)
   3.281 +    MOV_FROM_REG(86)
   3.282 +    MOV_FROM_REG(87)
   3.283 +    MOV_FROM_REG(88)
   3.284 +    MOV_FROM_REG(89)
   3.285 +    MOV_FROM_REG(90)
   3.286 +    MOV_FROM_REG(91)
   3.287 +    MOV_FROM_REG(92)
   3.288 +    MOV_FROM_REG(93)
   3.289 +    MOV_FROM_REG(94)
   3.290 +    MOV_FROM_REG(95)
   3.291 +    MOV_FROM_REG(96)
   3.292 +    MOV_FROM_REG(97)
   3.293 +    MOV_FROM_REG(98)
   3.294 +    MOV_FROM_REG(99)
   3.295 +    MOV_FROM_REG(100)
   3.296 +    MOV_FROM_REG(101)
   3.297 +    MOV_FROM_REG(102)
   3.298 +    MOV_FROM_REG(103)
   3.299 +    MOV_FROM_REG(104)
   3.300 +    MOV_FROM_REG(105)
   3.301 +    MOV_FROM_REG(106)
   3.302 +    MOV_FROM_REG(107)
   3.303 +    MOV_FROM_REG(108)
   3.304 +    MOV_FROM_REG(109)
   3.305 +    MOV_FROM_REG(110)
   3.306 +    MOV_FROM_REG(111)
   3.307 +    MOV_FROM_REG(112)
   3.308 +    MOV_FROM_REG(113)
   3.309 +    MOV_FROM_REG(114)
   3.310 +    MOV_FROM_REG(115)
   3.311 +    MOV_FROM_REG(116)
   3.312 +    MOV_FROM_REG(117)
   3.313 +    MOV_FROM_REG(118)
   3.314 +    MOV_FROM_REG(119)
   3.315 +    MOV_FROM_REG(120)
   3.316 +    MOV_FROM_REG(121)
   3.317 +    MOV_FROM_REG(122)
   3.318 +    MOV_FROM_REG(123)
   3.319 +    MOV_FROM_REG(124)
   3.320 +    MOV_FROM_REG(125)
   3.321 +    MOV_FROM_REG(126)
   3.322 +    MOV_FROM_REG(127)
   3.323 +END(asm_mov_from_reg)
   3.324 +
   3.325 +
   3.326 +/* must be in bank 0
   3.327 + * parameter:
   3.328 + * r31: pr
   3.329 + * r24: b0
   3.330 + */
   3.331 +ENTRY(vmx_resume_to_guest)
   3.332 +    mov r16=cr.ipsr
   3.333 +    movl r20=__vsa_base
   3.334 +    ;;
   3.335 +    ld8 r20=[r20]
   3.336 +    adds r19=IA64_VPD_BASE_OFFSET,r21
   3.337 +    ;;
   3.338 +    ld8 r25=[r19]
   3.339 +    extr.u r17=r16,IA64_PSR_RI_BIT,2
   3.340 +    tbit.nz p6,p7=r16,IA64_PSR_RI_BIT+1
   3.341 +    ;;	
   3.342 +    (p6) mov r18=cr.iip
   3.343 +    (p6) mov r17=r0
   3.344 +    ;;    
   3.345 +    (p6) add r18=0x10,r18
   3.346 +    (p7) add r17=1,r17
   3.347 +    ;;		
   3.348 +    (p6) mov cr.iip=r18
   3.349 +    dep r16=r17,r16,IA64_PSR_RI_BIT,2
   3.350 +    ;;
   3.351 +    mov cr.ipsr=r16
   3.352 +    mov r17=cr.isr
   3.353 +    adds r19= VPD_VPSR_START_OFFSET,r25
   3.354 +    ld8 r26=[r25]
   3.355 +    add r29=PAL_VPS_RESUME_NORMAL,r20
   3.356 +    add r28=PAL_VPS_RESUME_HANDLER,r20
   3.357 +    ;;
   3.358 +    ld8 r19=[r19]
   3.359 +    mov b0=r29
   3.360 +    cmp.ne p6,p7 = r0,r0
   3.361 +    ;;
   3.362 +    tbit.nz.or.andcm p6,p7 = r19,IA64_PSR_IC_BIT		// p1=vpsr.ic
   3.363 +    tbit.nz.or.andcm p6,p7 = r17,IA64_ISR_IR_BIT		//p1=cr.isr.ir
   3.364 +    ;;
   3.365 +    (p6) mov b0=r29
   3.366 +    (p7) mov b0=r28
   3.367 +    mov pr=r31,-2
   3.368 +    br.sptk.many b0             // call pal service
   3.369 +    ;;
   3.370 +END(vmx_resume_to_guest)
   3.371 +
   3.372 +
   3.373 +MOV_TO_BANK0_REG(16)
   3.374 +MOV_TO_BANK0_REG(17)
   3.375 +MOV_TO_BANK0_REG(18)
   3.376 +MOV_TO_BANK0_REG(19)
   3.377 +MOV_TO_BANK0_REG(20)
   3.378 +MOV_TO_BANK0_REG(21)
   3.379 +MOV_TO_BANK0_REG(22)
   3.380 +MOV_TO_BANK0_REG(23)
   3.381 +MOV_TO_BANK0_REG(24)
   3.382 +MOV_TO_BANK0_REG(25)
   3.383 +MOV_TO_BANK0_REG(26)
   3.384 +MOV_TO_BANK0_REG(27)
   3.385 +MOV_TO_BANK0_REG(28)
   3.386 +MOV_TO_BANK0_REG(29)
   3.387 +MOV_TO_BANK0_REG(30)
   3.388 +MOV_TO_BANK0_REG(31)
   3.389 +
   3.390 +
   3.391 +// mov to reg table
   3.392 +ENTRY(asm_mov_to_reg)
   3.393 +    MOV_TO_REG0
   3.394 +    MOV_TO_REG(1)
   3.395 +    MOV_TO_REG(2)
   3.396 +    MOV_TO_REG(3)
   3.397 +    MOV_TO_REG(4)
   3.398 +    MOV_TO_REG(5)
   3.399 +    MOV_TO_REG(6)
   3.400 +    MOV_TO_REG(7)
   3.401 +    MOV_TO_REG(8)
   3.402 +    MOV_TO_REG(9)
   3.403 +    MOV_TO_REG(10)
   3.404 +    MOV_TO_REG(11)
   3.405 +    MOV_TO_REG(12)
   3.406 +    MOV_TO_REG(13)
   3.407 +    MOV_TO_REG(14)
   3.408 +    MOV_TO_REG(15)
   3.409 +    JMP_TO_MOV_TO_BANK0_REG(16)
   3.410 +    JMP_TO_MOV_TO_BANK0_REG(17)
   3.411 +    JMP_TO_MOV_TO_BANK0_REG(18)
   3.412 +    JMP_TO_MOV_TO_BANK0_REG(19)
   3.413 +    JMP_TO_MOV_TO_BANK0_REG(20)
   3.414 +    JMP_TO_MOV_TO_BANK0_REG(21)
   3.415 +    JMP_TO_MOV_TO_BANK0_REG(22)
   3.416 +    JMP_TO_MOV_TO_BANK0_REG(23)
   3.417 +    JMP_TO_MOV_TO_BANK0_REG(24)
   3.418 +    JMP_TO_MOV_TO_BANK0_REG(25)
   3.419 +    JMP_TO_MOV_TO_BANK0_REG(26)
   3.420 +    JMP_TO_MOV_TO_BANK0_REG(27)
   3.421 +    JMP_TO_MOV_TO_BANK0_REG(28)
   3.422 +    JMP_TO_MOV_TO_BANK0_REG(29)
   3.423 +    JMP_TO_MOV_TO_BANK0_REG(30)
   3.424 +    JMP_TO_MOV_TO_BANK0_REG(31)
   3.425 +    MOV_TO_REG(32)
   3.426 +    MOV_TO_REG(33)
   3.427 +    MOV_TO_REG(34)
   3.428 +    MOV_TO_REG(35)
   3.429 +    MOV_TO_REG(36)
   3.430 +    MOV_TO_REG(37)
   3.431 +    MOV_TO_REG(38)
   3.432 +    MOV_TO_REG(39)
   3.433 +    MOV_TO_REG(40)
   3.434 +    MOV_TO_REG(41)
   3.435 +    MOV_TO_REG(42)
   3.436 +    MOV_TO_REG(43)
   3.437 +    MOV_TO_REG(44)
   3.438 +    MOV_TO_REG(45)
   3.439 +    MOV_TO_REG(46)
   3.440 +    MOV_TO_REG(47)
   3.441 +    MOV_TO_REG(48)
   3.442 +    MOV_TO_REG(49)
   3.443 +    MOV_TO_REG(50)
   3.444 +    MOV_TO_REG(51)
   3.445 +    MOV_TO_REG(52)
   3.446 +    MOV_TO_REG(53)
   3.447 +    MOV_TO_REG(54)
   3.448 +    MOV_TO_REG(55)
   3.449 +    MOV_TO_REG(56)
   3.450 +    MOV_TO_REG(57)
   3.451 +    MOV_TO_REG(58)
   3.452 +    MOV_TO_REG(59)
   3.453 +    MOV_TO_REG(60)
   3.454 +    MOV_TO_REG(61)
   3.455 +    MOV_TO_REG(62)
   3.456 +    MOV_TO_REG(63)
   3.457 +    MOV_TO_REG(64)
   3.458 +    MOV_TO_REG(65)
   3.459 +    MOV_TO_REG(66)
   3.460 +    MOV_TO_REG(67)
   3.461 +    MOV_TO_REG(68)
   3.462 +    MOV_TO_REG(69)
   3.463 +    MOV_TO_REG(70)
   3.464 +    MOV_TO_REG(71)
   3.465 +    MOV_TO_REG(72)
   3.466 +    MOV_TO_REG(73)
   3.467 +    MOV_TO_REG(74)
   3.468 +    MOV_TO_REG(75)
   3.469 +    MOV_TO_REG(76)
   3.470 +    MOV_TO_REG(77)
   3.471 +    MOV_TO_REG(78)
   3.472 +    MOV_TO_REG(79)
   3.473 +    MOV_TO_REG(80)
   3.474 +    MOV_TO_REG(81)
   3.475 +    MOV_TO_REG(82)
   3.476 +    MOV_TO_REG(83)
   3.477 +    MOV_TO_REG(84)
   3.478 +    MOV_TO_REG(85)
   3.479 +    MOV_TO_REG(86)
   3.480 +    MOV_TO_REG(87)
   3.481 +    MOV_TO_REG(88)
   3.482 +    MOV_TO_REG(89)
   3.483 +    MOV_TO_REG(90)
   3.484 +    MOV_TO_REG(91)
   3.485 +    MOV_TO_REG(92)
   3.486 +    MOV_TO_REG(93)
   3.487 +    MOV_TO_REG(94)
   3.488 +    MOV_TO_REG(95)
   3.489 +    MOV_TO_REG(96)
   3.490 +    MOV_TO_REG(97)
   3.491 +    MOV_TO_REG(98)
   3.492 +    MOV_TO_REG(99)
   3.493 +    MOV_TO_REG(100)
   3.494 +    MOV_TO_REG(101)
   3.495 +    MOV_TO_REG(102)
   3.496 +    MOV_TO_REG(103)
   3.497 +    MOV_TO_REG(104)
   3.498 +    MOV_TO_REG(105)
   3.499 +    MOV_TO_REG(106)
   3.500 +    MOV_TO_REG(107)
   3.501 +    MOV_TO_REG(108)
   3.502 +    MOV_TO_REG(109)
   3.503 +    MOV_TO_REG(110)
   3.504 +    MOV_TO_REG(111)
   3.505 +    MOV_TO_REG(112)
   3.506 +    MOV_TO_REG(113)
   3.507 +    MOV_TO_REG(114)
   3.508 +    MOV_TO_REG(115)
   3.509 +    MOV_TO_REG(116)
   3.510 +    MOV_TO_REG(117)
   3.511 +    MOV_TO_REG(118)
   3.512 +    MOV_TO_REG(119)
   3.513 +    MOV_TO_REG(120)
   3.514 +    MOV_TO_REG(121)
   3.515 +    MOV_TO_REG(122)
   3.516 +    MOV_TO_REG(123)
   3.517 +    MOV_TO_REG(124)
   3.518 +    MOV_TO_REG(125)
   3.519 +    MOV_TO_REG(126)
   3.520 +    MOV_TO_REG(127)
   3.521 +END(asm_mov_to_reg)
     4.1 --- a/xen/arch/ia64/vmx/vmx_ivt.S	Sun Sep 24 14:01:35 2006 -0600
     4.2 +++ b/xen/arch/ia64/vmx/vmx_ivt.S	Sun Sep 24 14:23:58 2006 -0600
     4.3 @@ -772,12 +772,20 @@ ENTRY(vmx_single_step_trap)
     4.4      VMX_REFLECT(36)
     4.5  END(vmx_single_step_trap)
     4.6  
     4.7 +    .global vmx_virtualization_fault_back
     4.8      .org vmx_ia64_ivt+0x6100
     4.9  /////////////////////////////////////////////////////////////////////////////////////////
    4.10  // 0x6100 Entry 37 (size 16 bundles) Virtualization Fault
    4.11  ENTRY(vmx_virtualization_fault)
    4.12  //    VMX_DBG_FAULT(37)
    4.13      mov r31=pr
    4.14 +    ;;
    4.15 +    cmp.eq p6,p0=EVENT_MOV_FROM_AR,r24
    4.16 +    cmp.eq p7,p0=EVENT_MOV_FROM_RR,r24
    4.17 +    (p6) br.dptk.many asm_mov_from_ar
    4.18 +    (p7) br.dptk.many asm_mov_from_rr
    4.19 +    ;;
    4.20 +vmx_virtualization_fault_back:
    4.21      mov r19=37
    4.22      adds r16 = IA64_VCPU_CAUSE_OFFSET,r21
    4.23      adds r17 = IA64_VCPU_OPCODE_OFFSET,r21