VirtualBox

Ignore:
Timestamp:
Apr 4, 2024 8:54:42 AM (8 months ago)
Author:
vboxsync
Message:

VMM/IEM: Rework the [v][u]comis[sd] instruction emulations to work by value instead by reference and drop the IEM_MC_FETCH_MEM_XMM_U32/IEM_MC_FETCH_XMM_U64 microcode statements, enables recompilation of those instructions, bugref:10614

File:
1 edited

Legend:

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

    r104139 r104150  
    61756175; @param    A0_32   The guest's MXCSR register value to use (input).
    61766176; @param    A1      Pointer to the EFLAGS value (input/output).
    6177 ; @param    A2      Pointer to the first source operand (aka readonly destination).
    6178 ; @param    A3      Pointer to the second source operand.
     6177; @param    A2_32   The first source operand.
     6178; @param    A3_32   The second source operand.
    61796179;
    61806180BEGINPROC_FASTCALL  iemAImpl_ucomiss_u128, 16
     
    61836183        SSE_AVX_LD_MXCSR A0_32
    61846184
    6185         movdqu  xmm0, [A2]
    6186         movdqu  xmm1, [A3]
     6185        movd    xmm0, A2_32
     6186        movd    xmm1, A3_32
    61876187        ucomiss xmm0, xmm1
    61886188        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    61986198        SSE_AVX_LD_MXCSR A0_32
    61996199
    6200         movdqu  xmm0, [A2]
    6201         movdqu  xmm1, [A3]
     6200        movd    xmm0, [A2]
     6201        movd    xmm1, [A3]
    62026202        vucomiss xmm0, xmm1
    62036203        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62156215; @param    A0_32   The guest's MXCSR register value to use (input).
    62166216; @param    A1      Pointer to the EFLAGS value (input/output).
    6217 ; @param    A2      Pointer to the first source operand (aka readonly destination).
    6218 ; @param    A3      Pointer to the second source operand.
     6217; @param    A2      The first source operand.
     6218; @param    A3      The second source operand.
    62196219;
    62206220BEGINPROC_FASTCALL  iemAImpl_ucomisd_u128, 16
     
    62236223        SSE_AVX_LD_MXCSR A0_32
    62246224
    6225         movdqu  xmm0, [A2]
    6226         movdqu  xmm1, [A3]
     6225        movq    xmm0, A2
     6226        movq    xmm1, A3
    62276227        ucomisd xmm0, xmm1
    62286228        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62386238        SSE_AVX_LD_MXCSR A0_32
    62396239
    6240         movdqu  xmm0, [A2]
    6241         movdqu  xmm1, [A3]
     6240        movq    xmm0, A2
     6241        movq    xmm1, A3
    62426242        vucomisd xmm0, xmm1
    62436243        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62546254; @param    A0_32   The guest's MXCSR register value to use (input).
    62556255; @param    A1      Pointer to the EFLAGS value (input/output).
    6256 ; @param    A2      Pointer to the first source operand (aka readonly destination).
    6257 ; @param    A3      Pointer to the second source operand.
     6256; @param    A2_32   The first source operand.
     6257; @param    A3_32   The second source operand.
    62586258;
    62596259BEGINPROC_FASTCALL  iemAImpl_comiss_u128, 16
     
    62626262        SSE_AVX_LD_MXCSR A0_32
    62636263
    6264         movdqu  xmm0, [A2]
    6265         movdqu  xmm1, [A3]
     6264        movd    xmm0, A2_32
     6265        movd    xmm1, A3_32
    62666266        comiss xmm0, xmm1
    62676267        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62776277        SSE_AVX_LD_MXCSR A0_32
    62786278
    6279         movdqu  xmm0, [A2]
    6280         movdqu  xmm1, [A3]
     6279        movd    xmm0, A2_32
     6280        movd    xmm1, A3_32
    62816281        vcomiss xmm0, xmm1
    62826282        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62946294; @param    A0_32   The guest's MXCSR register value to use (input).
    62956295; @param    A1      Pointer to the EFLAGS value (input/output).
    6296 ; @param    A2      Pointer to the first source operand (aka readonly destination).
    6297 ; @param    A3      Pointer to the second source operand.
     6296; @param    A2      The first source operand.
     6297; @param    A3      The second source operand.
    62986298;
    62996299BEGINPROC_FASTCALL  iemAImpl_comisd_u128, 16
     
    63026302        SSE_AVX_LD_MXCSR A0_32
    63036303
    6304         movdqu  xmm0, [A2]
    6305         movdqu  xmm1, [A3]
     6304        movq    xmm0, A2
     6305        movq    xmm1, A3
    63066306        comisd xmm0, xmm1
    63076307        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    63176317        SSE_AVX_LD_MXCSR A0_32
    63186318
    6319         movdqu  xmm0, [A2]
    6320         movdqu  xmm1, [A3]
     6319        movq    xmm0, A2
     6320        movq    xmm1, A3
    63216321        vcomisd xmm0, xmm1
    63226322        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
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