VirtualBox

Changeset 87337 in vbox


Ignore:
Timestamp:
Jan 21, 2021 1:32:19 AM (4 years ago)
Author:
vboxsync
Message:

VMM/HMR0A.asm: Saved 12-13 bytes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMR0A.asm

    r87336 r87337  
    232232; @param    1   How to address CPUMCTX.
    233233; @param    2   Which flag to test for (CPUMCTX_WSF_IBPB_ENTRY or CPUMCTX_WSF_IBPB_EXIT)
    234 %macro INDIRECT_BRANCH_PREDICTION_BARRIER_OLD 2
     234%macro INDIRECT_BRANCH_PREDICTION_BARRIER_CTX 2
    235235    test    byte [%1 + CPUMCTX.fWorldSwitcher], %2
    236236    jz      %%no_indirect_branch_barrier
     
    860860
    861861    ; Fight spectre.
    862     INDIRECT_BRANCH_PREDICTION_BARRIER_OLD xDI, CPUMCTX_WSF_IBPB_EXIT
     862    INDIRECT_BRANCH_PREDICTION_BARRIER_CTX xDI, CPUMCTX_WSF_IBPB_EXIT
    863863
    864864 %ifndef VMX_SKIP_TR
     
    11101110%define frm_uHostXcr0       -18h            ; 128-bit
    11111111%define frm_fNoRestoreXcr0  -20h            ; Non-zero if we should skip XCR0 restoring.
    1112 %define frm_pVCpu           -28h            ; Where we stash pVCpu for use after the vmrun.
     1112%define frm_pGstCtx         -28h            ; Where we stash guest CPU context for use after the vmrun.
    11131113%define frm_HCPhysVmcbHost  -30h            ; Where we stash HCPhysVmcbHost for the vmload after vmrun.
    11141114%assign cbFrame              30h
     
    11561156        mov     [rbp + frm_fNoRestoreXcr0], rcx
    11571157
    1158         ; Save pVCpu pointer for simplifying saving of the GPRs afterwards.
    1159         mov     qword [rbp + frm_pVCpu], rsi
    1160 
    11611158        ; Save host fs, gs, sysenter msr etc.
    11621159        mov     rax, [rsi + VMCPU.hm + HMCPU.u + HMCPUSVM.HCPhysVmcbHost]
    11631160        mov     qword [rbp + frm_HCPhysVmcbHost], rax          ; save for the vmload after vmrun
     1161        lea     rsi, [rsi + VMCPU.cpum.GstCtx]
     1162        mov     qword [rbp + frm_pGstCtx], rsi
    11641163        vmsave
    11651164
    11661165        ; Fight spectre (trashes rax, rdx and rcx).
    1167         INDIRECT_BRANCH_PREDICTION_BARRIER rsi, CPUMCTX_WSF_IBPB_ENTRY
     1166        INDIRECT_BRANCH_PREDICTION_BARRIER_CTX rsi, CPUMCTX_WSF_IBPB_ENTRY
    11681167
    11691168        ; Setup rax for VMLOAD.
     
    11711170
    11721171        ; Load guest general purpose registers (rax is loaded from the VMCB by VMRUN).
    1173         mov     rbx, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.ebx]
    1174         mov     rcx, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.ecx]
    1175         mov     rdx, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.edx]
    1176         mov     rdi, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.edi]
    1177         mov     rbp, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.ebp]
    1178         mov     r8,  qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.r8]
    1179         mov     r9,  qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.r9]
    1180         mov     r10, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.r10]
    1181         mov     r11, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.r11]
    1182         mov     r12, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.r12]
    1183         mov     r13, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.r13]
    1184         mov     r14, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.r14]
    1185         mov     r15, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.r15]
    1186         mov     rsi, qword [rsi + VMCPU.cpum.GstCtx + CPUMCTX.esi]
     1172        mov     rbx, qword [rsi + CPUMCTX.ebx]
     1173        mov     rcx, qword [rsi + CPUMCTX.ecx]
     1174        mov     rdx, qword [rsi + CPUMCTX.edx]
     1175        mov     rdi, qword [rsi + CPUMCTX.edi]
     1176        mov     rbp, qword [rsi + CPUMCTX.ebp]
     1177        mov     r8,  qword [rsi + CPUMCTX.r8]
     1178        mov     r9,  qword [rsi + CPUMCTX.r9]
     1179        mov     r10, qword [rsi + CPUMCTX.r10]
     1180        mov     r11, qword [rsi + CPUMCTX.r11]
     1181        mov     r12, qword [rsi + CPUMCTX.r12]
     1182        mov     r13, qword [rsi + CPUMCTX.r13]
     1183        mov     r14, qword [rsi + CPUMCTX.r14]
     1184        mov     r15, qword [rsi + CPUMCTX.r15]
     1185        mov     rsi, qword [rsi + CPUMCTX.esi]
    11871186
    11881187        ; Clear the global interrupt flag & execute sti to make sure external interrupts cause a world switch.
     
    12081207
    12091208        ; Pop pVCpu (saved above) and save the guest GPRs (sans RSP and RAX).
    1210         mov     rax, [rsp + cbFrame + frm_pVCpu] ; (rbp still not operational)
    1211 
    1212         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.ebp], rbp
     1209        mov     rax, [rsp + cbFrame + frm_pGstCtx] ; (rbp still not operational)
     1210
     1211        mov     qword [rax + CPUMCTX.ebp], rbp
    12131212        lea     rbp, [rsp + cbFrame]
    1214         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.ecx], rcx
     1213        mov     qword [rax + CPUMCTX.ecx], rcx
    12151214        mov     rcx, SPECTRE_FILLER
    1216         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.edx], rdx
     1215        mov     qword [rax + CPUMCTX.edx], rdx
    12171216        mov     rdx, rcx
    1218         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.r8],  r8
     1217        mov     qword [rax + CPUMCTX.r8],  r8
    12191218        mov     r8, rcx
    1220         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.r9],  r9
     1219        mov     qword [rax + CPUMCTX.r9],  r9
    12211220        mov     r9, rcx
    1222         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.r10], r10
     1221        mov     qword [rax + CPUMCTX.r10], r10
    12231222        mov     r10, rcx
    1224         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.r11], r11
     1223        mov     qword [rax + CPUMCTX.r11], r11
    12251224        mov     r11, rcx
    1226         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.edi], rdi
     1225        mov     qword [rax + CPUMCTX.edi], rdi
    12271226%ifdef ASM_CALL64_MSC
    12281227        mov     rdi, [rbp + frm_saved_rdi]
     
    12301229        mov     rdi, rcx
    12311230%endif
    1232         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.esi], rsi
     1231        mov     qword [rax + CPUMCTX.esi], rsi
    12331232%ifdef ASM_CALL64_MSC
    12341233        mov     rsi, [rbp + frm_saved_rsi]
     
    12361235        mov     rsi, rcx
    12371236%endif
    1238         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.ebx], rbx
     1237        mov     qword [rax + CPUMCTX.ebx], rbx
    12391238        mov     rbx, [rbp + frm_saved_rbx]
    1240         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.r12], r12
     1239        mov     qword [rax + CPUMCTX.r12], r12
    12411240        mov     r12, [rbp + frm_saved_r12]
    1242         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.r13], r13
     1241        mov     qword [rax + CPUMCTX.r13], r13
    12431242        mov     r13, [rbp + frm_saved_r13]
    1244         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.r14], r14
     1243        mov     qword [rax + CPUMCTX.r14], r14
    12451244        mov     r14, [rbp + frm_saved_r14]
    1246         mov     qword [rax + VMCPU.cpum.GstCtx + CPUMCTX.r15], r15
     1245        mov     qword [rax + CPUMCTX.r15], r15
    12471246        mov     r15, [rbp + frm_saved_r15]
    12481247
    12491248        ; Fight spectre.  Note! Trashes rax, rdx and rcx!
    1250         INDIRECT_BRANCH_PREDICTION_BARRIER rax, CPUMCTX_WSF_IBPB_EXIT
     1249        INDIRECT_BRANCH_PREDICTION_BARRIER_CTX rax, CPUMCTX_WSF_IBPB_EXIT
    12511250
    12521251        ; Restore the host xcr0 if necessary.
Note: See TracChangeset for help on using the changeset viewer.

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