VirtualBox

忽略:
時間撮記:
2007-1-17 下午04:04:27 (18 年 以前)
作者:
vboxsync
訊息:

64-bit

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMAll/CPUMAllA.asm

    r19 r112  
    9797%ifdef __AMD64__
    9898 %ifdef __WIN__
    99     mov     CPUM_REG, rcx
     99    mov     xDX, rcx
    100100 %else
    101     mov     CPUM_REG, rdi
     101    mov     xDX, rdi
    102102 %endif
    103103%else
    104     mov     CPUM_REG, dword [esp + 4]
    105 %endif
    106     test    dword [CPUM_REG + CPUM.fUseFlags], CPUM_USED_FPU
     104    mov     xDX, dword [esp + 4]
     105%endif
     106    test    dword [xDX + CPUM.fUseFlags], CPUM_USED_FPU
    107107    jz      hlfpua_not_loaded
    108108    jmp     hlfpua_to_host
     
    113113align 16
    114114hlfpua_not_loaded:
    115     mov     eax, [CPUM_REG + CPUM.Guest.cr0]
     115    mov     eax, [xDX + CPUM.Guest.cr0]
    116116    and     eax, X86_CR0_MP | X86_CR0_EM | X86_CR0_TS
    117117%ifdef __AMD64__
     
    134134;; and mask for cr0.
    135135hlfpu_afFlags:
    136     dd      ~(X86_CR0_TS | X86_CR0_MP)
    137     dd      ~(X86_CR0_TS)
    138     dd      ~(X86_CR0_TS | X86_CR0_MP)
    139     dd      ~(X86_CR0_TS)
    140     dd      ~(X86_CR0_MP)
    141     dd      0
    142     dd      ~(X86_CR0_MP)
    143     dd      0
     136    RTCCPTR_DEF ~(X86_CR0_TS | X86_CR0_MP)
     137    RTCCPTR_DEF ~(X86_CR0_TS)
     138    RTCCPTR_DEF ~(X86_CR0_TS | X86_CR0_MP)
     139    RTCCPTR_DEF ~(X86_CR0_TS)
     140    RTCCPTR_DEF ~(X86_CR0_MP)
     141    RTCCPTR_DEF 0
     142    RTCCPTR_DEF ~(X86_CR0_MP)
     143    RTCCPTR_DEF 0
    144144
    145145    ;
     
    149149hlfpua_switch_fpu_ctx:
    150150%ifndef IN_RING3 ; IN_GC or IN_RING0
    151     mov     ecx, cr0
     151    mov     xCX, cr0
    152152 %ifdef __AMD64__
    153153    lea     r8, [hlfpu_afFlags wrt rip]
    154     and     ecx, [eax*2 + r8]                   ; calc the new cr0 flags.
     154    and     rcx, [rax*4 + r8]                   ; calc the new cr0 flags.
    155155 %else
    156156    and     ecx, [eax*2 + hlfpu_afFlags]        ; calc the new cr0 flags.
    157157 %endif
    158     mov     eax, cr0
    159     and     eax, dword ~(X86_CR0_TS | X86_CR0_EM)
    160     mov     cr0, eax                            ; clear flags so we don't trap here.
     158    mov     xAX, cr0
     159    and     xAX, ~(X86_CR0_TS | X86_CR0_EM)
     160    mov     cr0, xAX                            ; clear flags so we don't trap here.
    161161%endif
    162162%ifndef __AMD64__
    163     test    dword [CPUM_REG + CPUM.CPUFeatures.edx], X86_CPUID_FEATURE_EDX_FXSR
     163    test    dword [xDX + CPUM.CPUFeatures.edx], X86_CPUID_FEATURE_EDX_FXSR
    164164    jz short hlfpua_no_fxsave
    165165%endif
    166166
    167     fxsave  [CPUM_REG + CPUM.Host.fpu]
    168     or      dword [CPUM_REG + CPUM.fUseFlags], (CPUM_USED_FPU | CPUM_USED_FPU_SINCE_REM)
    169     fxrstor [CPUM_REG + CPUM.Guest.fpu]
     167    fxsave  [xDX + CPUM.Host.fpu]
     168    or      dword [xDX + CPUM.fUseFlags], (CPUM_USED_FPU | CPUM_USED_FPU_SINCE_REM)
     169    fxrstor [xDX + CPUM.Guest.fpu]
    170170hlfpua_finished_switch:
    171171%ifdef IN_GC
    172     mov     cr0, ecx                            ; load the new cr0 flags.
     172    mov     cr0, xCX                            ; load the new cr0 flags.
    173173%endif
    174174    ; return continue execution.
     
    179179; legacy support.
    180180hlfpua_no_fxsave:
    181     fnsave  [CPUM_REG + CPUM.Host.fpu]
    182     or      dword [CPUM_REG + CPUM.fUseFlags], dword (CPUM_USED_FPU | CPUM_USED_FPU_SINCE_REM) ; yasm / nasm
    183     mov     eax, [CPUM_REG + CPUM.Guest.fpu]    ; control word
     181    fnsave  [xDX + CPUM.Host.fpu]
     182    or      dword [xDX + CPUM.fUseFlags], dword (CPUM_USED_FPU | CPUM_USED_FPU_SINCE_REM) ; yasm / nasm
     183    mov     eax, [xDX + CPUM.Guest.fpu]    ; control word
    184184    not     eax                                 ; 1 means exception ignored (6 LS bits)
    185185    and     eax, byte 03Fh                      ; 6 LS bits only
    186     test    eax, [CPUM_REG + CPUM.Guest.fpu + 4]; status word
     186    test    eax, [xDX + CPUM.Guest.fpu + 4]; status word
    187187    jz short hlfpua_no_exceptions_pending
    188188    ; technically incorrect, but we certainly don't want any exceptions now!!
    189     and     dword [CPUM_REG + CPUM.Guest.fpu + 4], ~03Fh
     189    and     dword [xDX + CPUM.Guest.fpu + 4], ~03Fh
    190190hlfpua_no_exceptions_pending:
    191     frstor  [CPUM_REG + CPUM.Guest.fpu]
     191    frstor  [xDX + CPUM.Guest.fpu]
    192192    jmp near hlfpua_finished_switch
    193193%endif ; !__AMD64__
     
    214214%ifdef __AMD64__
    215215 %ifdef __WIN__
    216     mov     CPUM_REG, rcx
     216    mov     xDX, rcx
    217217 %else
    218     mov     CPUM_REG, rdi
     218    mov     xDX, rdi
    219219 %endif
    220220%else
    221     mov     CPUM_REG, dword [esp + 4]
     221    mov     xDX, dword [esp + 4]
    222222%endif
    223223
    224224    ; Restore FPU if guest has used it.
    225225    ; Using fxrstor should ensure that we're not causing unwanted exception on the host.
    226     test    dword [CPUM_REG + CPUM.fUseFlags], CPUM_USED_FPU
     226    test    dword [xDX + CPUM.fUseFlags], CPUM_USED_FPU
    227227    jz short gth_fpu_no
    228228
    229     mov     eax, cr0
    230     mov     ecx, eax                    ; save old CR0
    231     and     eax, dword ~(X86_CR0_TS | X86_CR0_EM)
    232     mov     cr0, eax
    233 
    234     fxsave  [CPUM_REG + CPUM.Guest.fpu]
    235     fxrstor [CPUM_REG + CPUM.Host.fpu]
    236 
    237     mov     cr0, ecx                    ; and restore old CR0 again
    238     and     dword [CPUM_REG + CPUM.fUseFlags], ~CPUM_USED_FPU
     229    mov     xAX, cr0
     230    mov     xCX, xAX                    ; save old CR0
     231    and     xAX, ~(X86_CR0_TS | X86_CR0_EM)
     232    mov     cr0, xAX
     233
     234    fxsave  [xDX + CPUM.Guest.fpu]
     235    fxrstor [xDX + CPUM.Host.fpu]
     236
     237    mov     cr0, xCX                    ; and restore old CR0 again
     238    and     dword [xDX + CPUM.fUseFlags], ~CPUM_USED_FPU
    239239gth_fpu_no:
    240240    xor     eax, eax
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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