VirtualBox

Changeset 10647 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Jul 15, 2008 12:07:24 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
33357
Message:

Manual saving of XMM registers.
Use new FPU/MMX/XMM state saving for VT-x and AMD-V.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/CPUMAllA.asm

    r10633 r10647  
    267267
    268268;;
    269 ; Restores the host's FPU/XMM state
     269; Restores the guest's FPU/XMM state
    270270;
    271271; @param    pCtx  x86:[esp+4] GCC:rdi MSC:rcx     CPUMCTX pointer
     
    285285    ret
    286286ENDPROC CPUMSaveFPUAsm
     287
     288;;
     289; Saves the guest's XMM state
     290;
     291; @param    pCtx  x86:[esp+4] GCC:rdi MSC:rcx     CPUMCTX pointer
     292;
     293BEGINPROC   CPUMLoadXMMAsm
     294%ifdef RT_ARCH_AMD64
     295 %ifdef RT_OS_WINDOWS
     296    mov     xDX, rcx
     297 %else
     298    mov     xDX, rdi
     299 %endif
     300%else
     301    mov     xDX, dword [esp + 4]
     302%endif
     303    movdqa  xmm0, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*0]
     304    movdqa  xmm1, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*1]
     305    movdqa  xmm2, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*2]
     306    movdqa  xmm3, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*3]
     307    movdqa  xmm4, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*4]
     308    movdqa  xmm5, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*5]
     309    movdqa  xmm6, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*6]
     310    movdqa  xmm7, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*7]
     311   
     312%ifdef RT_ARCH_AMD64
     313    test qword [xDX + CPUMCTX.msrEFER], MSR_K6_EFER_LMA
     314    jz CPUMLoadXMMAsm_done
     315   
     316    movdqa  xmm8, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*8]
     317    movdqa  xmm9, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*9]
     318    movdqa  xmm10, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*10]
     319    movdqa  xmm11, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*11]
     320    movdqa  xmm12, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*12]
     321    movdqa  xmm13, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*13]
     322    movdqa  xmm14, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*14]
     323    movdqa  xmm15, [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*15]
     324CPUMLoadXMMAsm_done:
     325%endif
     326
     327    ret
     328ENDPROC     CPUMLoadXMMAsm
     329
     330
     331;;
     332; Restores the guest's XMM state
     333;
     334; @param    pCtx  x86:[esp+4] GCC:rdi MSC:rcx     CPUMCTX pointer
     335;
     336BEGINPROC   CPUMSaveXMMAsm
     337%ifdef RT_ARCH_AMD64
     338 %ifdef RT_OS_WINDOWS
     339    mov     xDX, rcx
     340 %else
     341    mov     xDX, rdi
     342 %endif
     343%else
     344    mov     xDX, dword [esp + 4]
     345%endif
     346    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*0], xmm0
     347    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*1], xmm1
     348    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*2], xmm2
     349    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*3], xmm3
     350    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*4], xmm4
     351    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*5], xmm5
     352    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*6], xmm6
     353    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*7], xmm7
     354   
     355%ifdef RT_ARCH_AMD64
     356    test qword [xDX + CPUMCTX.msrEFER], MSR_K6_EFER_LMA
     357    jz CPUMSaveXMMAsm_done
     358
     359    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*8], xmm8
     360    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*9], xmm9
     361    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*10], xmm10
     362    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*11], xmm11
     363    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*12], xmm12
     364    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*13], xmm13
     365    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*14], xmm14
     366    movdqa  [xDX + CPUMCTX.fpu + X86FXSTATE.aXMM + 16*15], xmm15
     367   
     368CPUMSaveXMMAsm_done:
     369%endif
     370    ret
     371ENDPROC     CPUMSaveXMMAsm
     372
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette