[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [IA64] Accelerate mov to rr



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID c8fa605f131fa9422d90f286445c909e63fd6f7a
# Parent  7c2a5f96a192a07cc73991a52ff3ffd80658cf94
[IA64] Accelerate mov to rr

Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx>
---
 xen/arch/ia64/asm-offsets.c   |    1 
 xen/arch/ia64/vmx/optvfault.S |  109 +++++++++++++++++++++++++++++++++++-------
 xen/arch/ia64/vmx/vmx_ivt.S   |    6 +-
 3 files changed, 98 insertions(+), 18 deletions(-)

diff -r 7c2a5f96a192 -r c8fa605f131f xen/arch/ia64/asm-offsets.c
--- a/xen/arch/ia64/asm-offsets.c       Sat Oct 14 16:28:32 2006 -0600
+++ b/xen/arch/ia64/asm-offsets.c       Sat Oct 14 16:34:41 2006 -0600
@@ -141,6 +141,7 @@ void foo(void)
        DEFINE(SWITCH_MPTA_OFFSET,offsetof(struct vcpu ,arch.arch_vmx.mpta));
        DEFINE(IA64_PT_REGS_R16_SLOT, (((offsetof(struct pt_regs, 
r16)-sizeof(struct pt_regs))>>3)&0x3f));
        DEFINE(IA64_VCPU_FLAGS_OFFSET,offsetof(struct vcpu 
,arch.arch_vmx.flags));
+       DEFINE(IA64_VCPU_MODE_FLAGS_OFFSET,offsetof(struct vcpu, 
arch.mode_flags));
 
        BLANK();
 
diff -r 7c2a5f96a192 -r c8fa605f131f xen/arch/ia64/vmx/optvfault.S
--- a/xen/arch/ia64/vmx/optvfault.S     Sat Oct 14 16:28:32 2006 -0600
+++ b/xen/arch/ia64/vmx/optvfault.S     Sat Oct 14 16:34:41 2006 -0600
@@ -18,11 +18,12 @@
 
 #define ACCE_MOV_FROM_AR
 #define ACCE_MOV_FROM_RR
+#define ACCE_MOV_TO_RR
 
 //mov r1=ar3
-GLOBAL_ENTRY(asm_mov_from_ar)
+GLOBAL_ENTRY(vmx_asm_mov_from_ar)
 #ifndef ACCE_MOV_FROM_AR
-    br.many vmx_vitualization_fault_back
+    br.many vmx_virtualization_fault_back
 #endif
     add r18=VCPU_VTM_OFFSET_OFS,r21
     mov r19=ar.itc
@@ -39,19 +40,19 @@ GLOBAL_ENTRY(asm_mov_from_ar)
     mov b0=r17
     br.sptk.few b0
     ;;
-END(asm_mov_from_ar)
+END(vmx_asm_mov_from_ar)
 
 
 // mov r1=rr[r3]
-GLOBAL_ENTRY(asm_mov_from_rr)
+GLOBAL_ENTRY(vmx_asm_mov_from_rr)
 #ifndef ACCE_MOV_FROM_RR
-    br.many vmx_vitualization_fault_back
+    br.many vmx_virtualization_fault_back
 #endif
     extr.u r16=r25,20,7
     extr.u r17=r25,6,7
     movl r20=asm_mov_from_reg
     ;;
-    adds r30=asm_mov_from_rr_back_1-asm_mov_from_reg,r20
+    adds r30=vmx_asm_mov_from_rr_back_1-asm_mov_from_reg,r20
     shladd r16=r16,4,r20
     mov r24=b0
     ;;
@@ -59,7 +60,7 @@ GLOBAL_ENTRY(asm_mov_from_rr)
     mov b0=r16
     br.many b0
     ;;   
-asm_mov_from_rr_back_1:  
+vmx_asm_mov_from_rr_back_1:  
     adds r30=vmx_resume_to_guest-asm_mov_from_reg,r20
     adds r22=asm_mov_to_reg-asm_mov_from_reg,r20
     shr.u r26=r19,61
@@ -70,7 +71,86 @@ asm_mov_from_rr_back_1:
     ld8 r19=[r27]
     mov b0=r17
     br.many b0
-END(asm_mov_from_rr)
+END(vmx_asm_mov_from_rr)
+
+
+// mov rr[r3]=r2
+GLOBAL_ENTRY(vmx_asm_mov_to_rr)
+#ifndef ACCE_MOV_TO_RR
+    br.many vmx_virtualization_fault_back
+#endif
+    extr.u r16=r25,20,7
+    extr.u r17=r25,13,7
+    movl r20=asm_mov_from_reg
+    ;;
+    adds r30=vmx_asm_mov_to_rr_back_1-asm_mov_from_reg,r20
+    shladd r16=r16,4,r20
+    mov r22=b0
+    ;;
+    add r27=VCPU_VRR0_OFS,r21
+    mov b0=r16
+    br.many b0
+    ;;   
+vmx_asm_mov_to_rr_back_1:
+    adds r30=vmx_asm_mov_to_rr_back_2-asm_mov_from_reg,r20
+    shr.u r23=r19,61
+    shladd r17=r17,4,r20
+    ;;
+    //if rr7, go back
+    cmp.eq p6,p0=7,r23
+    (p6) br.cond.dpnt.many vmx_virtualization_fault_back
+    ;;
+    mov r28=r19
+    mov b0=r17
+    br.many b0
+vmx_asm_mov_to_rr_back_2: 
+    adds r30=vmx_resume_to_guest-asm_mov_from_reg,r20
+    shladd r27=r23,3,r27
+    ;; // +starting_rid
+    st8 [r27]=r19
+    mov b0=r30
+    ;;
+    adds r16=IA64_VCPU_STARTING_RID_OFFSET,r21
+    ;;
+    ld4 r16=[r16]
+    ;;
+    shl r16=r16,8
+    ;;
+    add r19=r19,r16
+    ;; //mangling rid 1 and 3
+    extr.u r16=r19,8,8
+    extr.u r17=r19,24,8
+    extr.u r18=r19,2,6
+    ;;
+    dep r19=r16,r19,24,8
+    ;;
+    dep r19=r17,r19,8,8
+    ;; //set ve 1
+    dep r19=-1,r19,0,1  
+    cmp.lt p6,p0=14,r18
+    ;;
+    (p6) mov r18=14
+    ;;
+    (p6) dep r19=r18,r19,2,6
+    ;;
+    cmp.eq p6,p0=0,r23
+    ;;
+    cmp.eq.or p6,p0=4,r23
+    ;;
+    adds r16=IA64_VCPU_MODE_FLAGS_OFFSET,r21
+    (p6) adds r17=IA64_VCPU_META_SAVED_RR0_OFFSET,r21
+    ;;
+    ld8 r16=[r16]
+    cmp.eq p7,p0=r0,r0
+    (p6) shladd r17=r23,1,r17
+    ;;
+    (p6) st8 [r17]=r19
+    (p6) tbit.nz p6,p7=r16,0
+    ;;
+    (p7) mov rr[r28]=r19
+    mov r24=r22
+    br.many b0
+END(vmx_asm_mov_from_rr)
 
 
 #define MOV_TO_REG0    \
@@ -346,20 +426,17 @@ ENTRY(vmx_resume_to_guest)
     dep r16=r17,r16,IA64_PSR_RI_BIT,2
     ;;
     mov cr.ipsr=r16
-    mov r17=cr.isr
     adds r19= VPD_VPSR_START_OFFSET,r25
-    ld8 r26=[r25]
-    add r29=PAL_VPS_RESUME_NORMAL,r20
-    add r28=PAL_VPS_RESUME_HANDLER,r20
+    add r28=PAL_VPS_RESUME_NORMAL,r20
+    add r29=PAL_VPS_RESUME_HANDLER,r20
     ;;
     ld8 r19=[r19]
     mov b0=r29
     cmp.ne p6,p7 = r0,r0
     ;;
-    tbit.nz.or.andcm p6,p7 = r19,IA64_PSR_IC_BIT               // p1=vpsr.ic
-    tbit.nz.or.andcm p6,p7 = r17,IA64_ISR_IR_BIT               //p1=cr.isr.ir
-    ;;
-    (p6) mov b0=r29
+    tbit.z p6,p7 = r19,IA64_PSR_IC_BIT         // p1=vpsr.ic
+    ;;
+    (p6) ld8 r26=[r25]
     (p7) mov b0=r28
     mov pr=r31,-2
     br.sptk.many b0             // call pal service
diff -r 7c2a5f96a192 -r c8fa605f131f xen/arch/ia64/vmx/vmx_ivt.S
--- a/xen/arch/ia64/vmx/vmx_ivt.S       Sat Oct 14 16:28:32 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_ivt.S       Sat Oct 14 16:34:41 2006 -0600
@@ -782,8 +782,10 @@ ENTRY(vmx_virtualization_fault)
     ;;
     cmp.eq p6,p0=EVENT_MOV_FROM_AR,r24
     cmp.eq p7,p0=EVENT_MOV_FROM_RR,r24
-    (p6) br.dptk.many asm_mov_from_ar
-    (p7) br.dptk.many asm_mov_from_rr
+    cmp.eq p8,p0=EVENT_MOV_TO_RR,r24
+    (p6) br.dptk.many vmx_asm_mov_from_ar
+    (p7) br.dptk.many vmx_asm_mov_from_rr
+    (p8) br.dptk.many vmx_asm_mov_to_rr
     ;;
 vmx_virtualization_fault_back:
     mov r19=37

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.