VirtualBox

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


Ignore:
Timestamp:
Apr 5, 2024 8:28:19 PM (11 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162643
Message:

VMM/IEM: Refactoring assembly helpers to not pass eflags by reference but instead by value and return the updated value (via eax/w0) - first chunk: IMUL(two ops), BSF, BSR, LZCNT, TZCNT, POPCNT. bugref:10376

Location:
trunk/src/VBox/VMM/VMMAll
Files:
5 edited

Legend:

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

    r104195 r104206  
    473473;;
    474474; Calculates the new EFLAGS based on the CPU EFLAGS (%2), a clear mask (%3),
    475 ; signed input (%4[%5]) and parity index (%6).
    476 ;
    477 ; This is used by MUL and IMUL, where we got result (%4 & %6) in xAX which is
    478 ; also T0. So, we have to use T1 for the EFLAGS calculation and save T0/xAX
    479 ; while we extract the %2 flags from the CPU EFLAGS or use T2 (only AMD64).
    480 ;
    481 ; @remarks  Clobbers T0, T1, stack, %6, EFLAGS.
     475; signed input (%4[%5]) and parity index (%6), storing the result into EAX (T0).
     476;
     477; @note     %4 & %6 must not be RAX, EAX, or AX! So, don't use with full MUL/IMUL.
     478
     479; @remarks  Clobbers T0, T1, stack, %6, EFLAGS, %1.
    482480; @param        1       The parameter (A0..A3) holding the eflags value.
    483481; @param        2       The mask of modified flags to save.
     
    486484; @param        5       The width of the %4 register in bits (8, 16, 32, or 64).
    487485; @param        6       The (full) register containing the parity table index. Will be modified!
    488 
    489 %macro IEM_SAVE_FLAGS_ADJUST_AND_CALC_SF_PF 6
    490  %ifdef RT_ARCH_AMD64
    491         pushf
    492         pop     T2
    493  %else
    494         push    T0
     486%macro IEM_SAVE_FLAGS_ADJUST_AND_CALC_SF_PF_RETVAL 6
    495487        pushf
    496488        pop     T0
    497  %endif
    498         mov     T1_32, %1               ; load flags.
    499         and     T1_32, ~(%2 | %3 | X86_EFL_PF | X86_EFL_SF)  ; clear the modified, always cleared flags and the two flags we calc.
    500  %ifdef RT_ARCH_AMD64
    501         and     T2_32, (%2)             ; select the modified flags.
    502         or      T1_32, T2_32            ; combine the flags.
    503  %else
     489        and     %1, ~(%2 | %3 | X86_EFL_PF | X86_EFL_SF)  ; clear the modified, always cleared flags and the two flags we calc.
    504490        and     T0_32, (%2)             ; select the modified flags.
    505         or      T1_32, T0_32            ; combine the flags.
    506         pop     T0
    507  %endif
    508 
    509         ; First calculate SF as it's likely to be refereing to the same register as %6 does.
     491        or      T0_32, %1               ; combine the flags.
     492
     493        ; First calculate SF as it is the same register as %6 (only %6 is always full width).
    510494        bt      %4, %5 - 1
    511495        jnc     %%sf_clear
    512         or      T1_32, X86_EFL_SF
     496        or      T0_32, X86_EFL_SF
    513497 %%sf_clear:
    514498
     
    516500        and     %6, 0xff
    517501 %ifdef RT_ARCH_AMD64
    518         lea     T2, [NAME(g_afParity) xWrtRIP]
    519         or      T1_8, [T2 + %6]
     502        lea     T1, [NAME(g_afParity) xWrtRIP]
     503        or      T0_8, [T1 + %6]
    520504 %else
    521         or      T1_8, [NAME(g_afParity) + %6]
     505        or      T0_8, [NAME(g_afParity) + %6]
    522506 %endif
    523507
    524         mov     %1, T1_32               ; save the result.
     508        ;mov     %1, T0_32               ; save the result.
     509        ; ASSUMES T0 = eax!
    525510%endmacro
    526511
     
    14111396; system where the 64-bit accesses requires hand coding.
    14121397;
    1413 ; All the functions takes a pointer to the destination memory operand in A0,
    1414 ; the source register operand in A1 and a pointer to eflags in A2.
     1398; All the functions takes a pointer to the destination memory operand in A1,
     1399; the source register operand in A2 and the incoming eflags in A0.
    14151400;
    14161401; In the ZF case the destination register is 'undefined', however it seems that
     
    14341419BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 12
    14351420        PROLOGUE_3_ARGS
    1436         IEM_MAYBE_LOAD_FLAGS_OLD           A2, %2, %3, %3 ; Must load undefined flags since AMD passes them thru
    1437         %1      T0_16, A1_16
     1421        IEM_MAYBE_LOAD_FLAGS               A0_32, %2, %3, %3 ; Must load undefined flags since AMD passes them thru
     1422        %1      T0_16, A2_16
    14381423%if %4 != 0
    14391424        jz      .unchanged_dst
    14401425%endif
    1441         mov     [A0], T0_16
     1426        mov     [A1], T0_16
    14421427.unchanged_dst:
    1443         IEM_SAVE_FLAGS_OLD                 A2, %2, %3, 0
     1428        IEM_SAVE_FLAGS_RETVAL              A0_32, %2, %3, 0
    14441429        EPILOGUE_3_ARGS
    14451430ENDPROC iemAImpl_ %+ %1 %+ _u16
     
    14761461BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 12
    14771462        PROLOGUE_3_ARGS
    1478         IEM_MAYBE_LOAD_FLAGS_OLD           A2, %2, %3, %3 ; Must load undefined flags since AMD passes them thru
    1479         %1      T0_32, A1_32
     1463        IEM_MAYBE_LOAD_FLAGS               A0_32, %2, %3, %3 ; Must load undefined flags since AMD passes them thru
     1464        %1      T0_32, A2_32
    14801465%if %4 != 0
    14811466        jz      .unchanged_dst
    14821467%endif
    1483         mov     [A0], T0_32
     1468        mov     [A1], T0_32
    14841469.unchanged_dst:
    1485         IEM_SAVE_FLAGS_OLD                 A2, %2, %3, 0
     1470        IEM_SAVE_FLAGS_RETVAL             A0_32, %2, %3, 0
    14861471        EPILOGUE_3_ARGS
    14871472ENDPROC iemAImpl_ %+ %1 %+ _u32
     
    15191504BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 16
    15201505        PROLOGUE_3_ARGS
    1521         IEM_MAYBE_LOAD_FLAGS_OLD           A2, %2, %3, %3 ; Must load undefined flags since AMD passes them thru
    1522         %1      T0, A1
     1506        IEM_MAYBE_LOAD_FLAGS               A0_32, %2, %3, %3 ; Must load undefined flags since AMD passes them thru
     1507        %1      T0, A2
    15231508%if %4 != 0
    15241509        jz      .unchanged_dst
    15251510%endif
    1526         mov     [A0], T0
     1511        mov     [A1], T0
    15271512.unchanged_dst:
    1528         IEM_SAVE_FLAGS_OLD                 A2, %2, %3, 0
     1513        IEM_SAVE_FLAGS_RETVAL              A0_32, %2, %3, 0
    15291514        EPILOGUE_3_ARGS_EX 8
    15301515ENDPROC iemAImpl_ %+ %1 %+ _u64
     
    15711556; system where the 64-bit accesses requires hand coding.
    15721557;
    1573 ; All the functions takes a pointer to the destination memory operand in A0,
    1574 ; the source register operand in A1 and a pointer to eflags in A2.
     1558; All the functions takes a pointer to the destination memory operand in A1,
     1559; the source register operand in A2 and eflags in A0.
    15751560;
    15761561; ASSUMES Intel and AMD set EFLAGS the same way.
     
    15871572BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u16, 12
    15881573        PROLOGUE_3_ARGS
    1589         IEM_MAYBE_LOAD_FLAGS_OLD           A2, %2, %3, 0
    1590         %1      T0_16, A1_16
    1591         mov     [A0], T0_16
    1592         IEM_SAVE_FLAGS_OLD                 A2, %2, %3, %4
     1574        IEM_MAYBE_LOAD_FLAGS               A0_32, %2, %3, 0
     1575        %1      T0_16, A2_16
     1576        mov     [A1], T0_16
     1577        IEM_SAVE_FLAGS_RETVAL              A0_32, %2, %3, %4
    15931578        EPILOGUE_3_ARGS
    15941579ENDPROC iemAImpl_ %+ %1 %+ _u16
     
    15961581BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u32, 12
    15971582        PROLOGUE_3_ARGS
    1598         IEM_MAYBE_LOAD_FLAGS_OLD           A2, %2, %3, 0
    1599         %1      T0_32, A1_32
    1600         mov     [A0], T0_32
    1601         IEM_SAVE_FLAGS_OLD                 A2, %2, %3, %4
     1583        IEM_MAYBE_LOAD_FLAGS               A0_32, %2, %3, 0
     1584        %1      T0_32, A2_32
     1585        mov     [A1], T0_32
     1586        IEM_SAVE_FLAGS_RETVAL              A0_32, %2, %3, %4
    16021587        EPILOGUE_3_ARGS
    16031588ENDPROC iemAImpl_ %+ %1 %+ _u32
     
    16061591BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _u64, 16
    16071592        PROLOGUE_3_ARGS
    1608         IEM_MAYBE_LOAD_FLAGS_OLD           A2, %2, %3, 0
    1609         %1      T0, A1
    1610         mov     [A0], T0
    1611         IEM_SAVE_FLAGS_OLD                 A2, %2, %3, %4
     1593        IEM_MAYBE_LOAD_FLAGS               A0_32, %2, %3, 0
     1594        %1      T0, A2
     1595        mov     [A1], T0
     1596        IEM_SAVE_FLAGS_RETVAL              A0_32, %2, %3, %4
    16121597        EPILOGUE_3_ARGS_EX 8
    16131598ENDPROC iemAImpl_ %+ %1 %+ _u64
     
    16301615BEGINPROC_FASTCALL iemAImpl_imul_two_u16 %+ %3, 12
    16311616        PROLOGUE_3_ARGS
    1632         IEM_MAYBE_LOAD_FLAGS_OLD                    A2, %1, %2, %2 ; Undefined flags may be passed thru (AMD)
    1633         imul    A1_16, word [A0]
    1634         mov     [A0], A1_16
     1617        IEM_MAYBE_LOAD_FLAGS                        A0_32, %1, %2, %2 ; Undefined flags may be passed thru (AMD)
     1618        imul    A2_16, word [A1]
     1619        mov     [A1], A2_16
    16351620 %if %4 != 1
    1636         IEM_SAVE_FLAGS_OLD                          A2, %1, %2, 0
     1621        IEM_SAVE_FLAGS_RETVAL                       A0_32, %1, %2, 0
    16371622 %else
    1638         IEM_SAVE_FLAGS_ADJUST_AND_CALC_SF_PF_OLD    A2, %1, X86_EFL_AF | X86_EFL_ZF, A1_16, 16, A1 ; intel
     1623        IEM_SAVE_FLAGS_ADJUST_AND_CALC_SF_PF_RETVAL A0_32, %1, X86_EFL_AF | X86_EFL_ZF, A2_16, 16, A2 ; intel
    16391624 %endif
    16401625        EPILOGUE_3_ARGS
     
    16431628BEGINPROC_FASTCALL iemAImpl_imul_two_u32 %+ %3, 12
    16441629        PROLOGUE_3_ARGS
    1645         IEM_MAYBE_LOAD_FLAGS_OLD                    A2, %1, %2, %2 ; Undefined flags may be passed thru (AMD)
    1646         imul    A1_32, dword [A0]
    1647         mov     [A0], A1_32
     1630        IEM_MAYBE_LOAD_FLAGS                        A0_32, %1, %2, %2 ; Undefined flags may be passed thru (AMD)
     1631        imul    A2_32, dword [A1]
     1632        mov     [A1], A2_32
    16481633 %if %4 != 1
    1649         IEM_SAVE_FLAGS_OLD                          A2, %1, %2, 0
     1634        IEM_SAVE_FLAGS_RETVAL                       A0_32, %1, %2, 0
    16501635 %else
    1651         IEM_SAVE_FLAGS_ADJUST_AND_CALC_SF_PF_OLD    A2, %1, X86_EFL_AF | X86_EFL_ZF, A1_32, 32, A1 ; intel
     1636        IEM_SAVE_FLAGS_ADJUST_AND_CALC_SF_PF_RETVAL A0_32, %1, X86_EFL_AF | X86_EFL_ZF, A2_32, 32, A2 ; intel
    16521637 %endif
    16531638        EPILOGUE_3_ARGS
     
    16571642BEGINPROC_FASTCALL iemAImpl_imul_two_u64 %+ %3, 16
    16581643        PROLOGUE_3_ARGS
    1659         IEM_MAYBE_LOAD_FLAGS_OLD                    A2, %1, %2, %2 ; Undefined flags may be passed thru (AMD)
    1660         imul    A1, qword [A0]
    1661         mov     [A0], A1
     1644        IEM_MAYBE_LOAD_FLAGS                        A0_32, %1, %2, %2 ; Undefined flags may be passed thru (AMD)
     1645        imul    A2, qword [A1]
     1646        mov     [A1], A2
    16621647 %if %4 != 1
    1663         IEM_SAVE_FLAGS_OLD                          A2, %1, %2, 0
     1648        IEM_SAVE_FLAGS_RETVAL                       A0_32, %1, %2, 0
    16641649 %else
    1665         IEM_SAVE_FLAGS_ADJUST_AND_CALC_SF_PF_OLD    A2, %1, X86_EFL_AF | X86_EFL_ZF, A1, 64, A1 ; intel
     1650        IEM_SAVE_FLAGS_ADJUST_AND_CALC_SF_PF_RETVAL A0_32, %1, X86_EFL_AF | X86_EFL_ZF, A2, 64, A2 ; intel
    16661651 %endif
    16671652        EPILOGUE_3_ARGS_EX 8
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r104195 r104206  
    14861486 *       but we restrict ourselves to emulating these recent marchs.
    14871487 */
    1488 #define SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlag, a_iBit) do { \
     1488#define SET_BIT_SEARCH_RESULT_INTEL(a_puDst, a_fEFlagsVar, a_iBit) do { \
    14891489        unsigned iBit = (a_iBit); \
    1490         uint32_t fEfl = *pfEFlags & ~(X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF); \
     1490        a_fEFlagsVar &= ~(X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF); \
    14911491        if (iBit) \
    14921492        { \
    1493             *puDst    = --iBit; \
    1494             fEfl    |= IEM_EFL_CALC_PARITY(iBit); \
     1493            *(a_puDst)    = --iBit; \
     1494            a_fEFlagsVar |= IEM_EFL_CALC_PARITY(iBit); \
    14951495        } \
    14961496        else \
    1497             fEfl     |= X86_EFL_ZF | X86_EFL_PF; \
    1498         *pfEFlags = fEfl; \
     1497            a_fEFlagsVar |= X86_EFL_ZF | X86_EFL_PF; \
    14991498    } while (0)
    1500 #define SET_BIT_SEARCH_RESULT_AMD(puDst, pfEFlag, a_iBit) do { \
     1499#define SET_BIT_SEARCH_RESULT_AMD(a_puDst, a_fEFlagsVar, a_iBit) do { \
    15011500        unsigned const iBit = (a_iBit); \
    15021501        if (iBit) \
    15031502        { \
    1504             *puDst     = iBit - 1; \
    1505             *pfEFlags &= ~X86_EFL_ZF; \
     1503            *(a_puDst)    = iBit - 1; \
     1504            a_fEFlagsVar &= ~X86_EFL_ZF; \
    15061505        } \
    15071506        else \
    1508             *pfEFlags |= X86_EFL_ZF; \
     1507            a_fEFlagsVar |= X86_EFL_ZF; \
    15091508    } while (0)
    15101509
     
    15131512 */
    15141513#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1515 IEM_DECL_IMPL_DEF(void, iemAImpl_bsf_u64,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1516 {
    1517     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitFirstSetU64(uSrc));
    1518 }
    1519 #endif
    1520 
    1521 IEM_DECL_IMPL_DEF(void, iemAImpl_bsf_u64_intel,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1522 {
    1523     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitFirstSetU64(uSrc));
    1524 }
    1525 
    1526 IEM_DECL_IMPL_DEF(void, iemAImpl_bsf_u64_amd,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1527 {
    1528     SET_BIT_SEARCH_RESULT_AMD(puDst, pfEFlags, ASMBitFirstSetU64(uSrc));
     1514IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsf_u64,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1515{
     1516    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitFirstSetU64(uSrc));
     1517    return fEFlags;
     1518}
     1519#endif
     1520
     1521IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsf_u64_intel,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1522{
     1523    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitFirstSetU64(uSrc));
     1524    return fEFlags;
     1525}
     1526
     1527IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsf_u64_amd,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1528{
     1529    SET_BIT_SEARCH_RESULT_AMD(puDst, fEFlags, ASMBitFirstSetU64(uSrc));
     1530    return fEFlags;
    15291531}
    15301532
    15311533#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1532 IEM_DECL_IMPL_DEF(void, iemAImpl_bsf_u32,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1533 {
    1534     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitFirstSetU32(uSrc));
    1535 }
    1536 #endif
    1537 
    1538 IEM_DECL_IMPL_DEF(void, iemAImpl_bsf_u32_intel,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1539 {
    1540     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitFirstSetU32(uSrc));
    1541 }
    1542 
    1543 IEM_DECL_IMPL_DEF(void, iemAImpl_bsf_u32_amd,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1544 {
    1545     SET_BIT_SEARCH_RESULT_AMD(puDst, pfEFlags, ASMBitFirstSetU32(uSrc));
     1534IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsf_u32,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1535{
     1536    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitFirstSetU32(uSrc));
     1537    return fEFlags;
     1538}
     1539#endif
     1540
     1541IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsf_u32_intel,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1542{
     1543    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitFirstSetU32(uSrc));
     1544    return fEFlags;
     1545}
     1546
     1547IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsf_u32_amd,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1548{
     1549    SET_BIT_SEARCH_RESULT_AMD(puDst, fEFlags, ASMBitFirstSetU32(uSrc));
     1550    return fEFlags;
    15461551}
    15471552
    15481553
    15491554#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1550 IEM_DECL_IMPL_DEF(void, iemAImpl_bsf_u16,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1551 {
    1552     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitFirstSetU16(uSrc));
    1553 }
    1554 #endif
    1555 
    1556 IEM_DECL_IMPL_DEF(void, iemAImpl_bsf_u16_intel,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1557 {
    1558     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitFirstSetU16(uSrc));
    1559 }
    1560 
    1561 IEM_DECL_IMPL_DEF(void, iemAImpl_bsf_u16_amd,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1562 {
    1563     SET_BIT_SEARCH_RESULT_AMD(puDst, pfEFlags, ASMBitFirstSetU16(uSrc));
     1555IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsf_u16,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1556{
     1557    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitFirstSetU16(uSrc));
     1558    return fEFlags;
     1559}
     1560#endif
     1561
     1562IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsf_u16_intel,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1563{
     1564    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitFirstSetU16(uSrc));
     1565    return fEFlags;
     1566}
     1567
     1568IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsf_u16_amd,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1569{
     1570    SET_BIT_SEARCH_RESULT_AMD(puDst, fEFlags, ASMBitFirstSetU16(uSrc));
     1571    return fEFlags;
    15641572}
    15651573
     
    15701578 */
    15711579#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1572 IEM_DECL_IMPL_DEF(void, iemAImpl_bsr_u64,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1573 {
    1574     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitLastSetU64(uSrc));
    1575 }
    1576 #endif
    1577 
    1578 IEM_DECL_IMPL_DEF(void, iemAImpl_bsr_u64_intel,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1579 {
    1580     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitLastSetU64(uSrc));
    1581 }
    1582 
    1583 IEM_DECL_IMPL_DEF(void, iemAImpl_bsr_u64_amd,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1584 {
    1585     SET_BIT_SEARCH_RESULT_AMD(puDst, pfEFlags, ASMBitLastSetU64(uSrc));
     1580IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsr_u64,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1581{
     1582    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitLastSetU64(uSrc));
     1583    return fEFlags;
     1584}
     1585#endif
     1586
     1587IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsr_u64_intel,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1588{
     1589    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitLastSetU64(uSrc));
     1590    return fEFlags;
     1591}
     1592
     1593IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsr_u64_amd,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1594{
     1595    SET_BIT_SEARCH_RESULT_AMD(puDst, fEFlags, ASMBitLastSetU64(uSrc));
     1596    return fEFlags;
    15861597}
    15871598
    15881599
    15891600#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1590 IEM_DECL_IMPL_DEF(void, iemAImpl_bsr_u32,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1591 {
    1592     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitLastSetU32(uSrc));
    1593 }
    1594 #endif
    1595 
    1596 IEM_DECL_IMPL_DEF(void, iemAImpl_bsr_u32_intel,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1597 {
    1598     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitLastSetU32(uSrc));
    1599 }
    1600 
    1601 IEM_DECL_IMPL_DEF(void, iemAImpl_bsr_u32_amd,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1602 {
    1603     SET_BIT_SEARCH_RESULT_AMD(puDst, pfEFlags, ASMBitLastSetU32(uSrc));
     1601IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsr_u32,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1602{
     1603    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitLastSetU32(uSrc));
     1604    return fEFlags;
     1605}
     1606#endif
     1607
     1608IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsr_u32_intel,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1609{
     1610    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitLastSetU32(uSrc));
     1611    return fEFlags;
     1612}
     1613
     1614IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsr_u32_amd,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1615{
     1616    SET_BIT_SEARCH_RESULT_AMD(puDst, fEFlags, ASMBitLastSetU32(uSrc));
     1617    return fEFlags;
    16041618}
    16051619
    16061620
    16071621#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1608 IEM_DECL_IMPL_DEF(void, iemAImpl_bsr_u16,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1609 {
    1610     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitLastSetU16(uSrc));
    1611 }
    1612 #endif
    1613 
    1614 IEM_DECL_IMPL_DEF(void, iemAImpl_bsr_u16_intel,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1615 {
    1616     SET_BIT_SEARCH_RESULT_INTEL(puDst, pfEFlags, ASMBitLastSetU16(uSrc));
    1617 }
    1618 
    1619 IEM_DECL_IMPL_DEF(void, iemAImpl_bsr_u16_amd,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1620 {
    1621     SET_BIT_SEARCH_RESULT_AMD(puDst, pfEFlags, ASMBitLastSetU16(uSrc));
     1622IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsr_u16,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1623{
     1624    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitLastSetU16(uSrc));
     1625    return fEFlags;
     1626}
     1627#endif
     1628
     1629IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsr_u16_intel,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1630{
     1631    SET_BIT_SEARCH_RESULT_INTEL(puDst, fEFlags, ASMBitLastSetU16(uSrc));
     1632    return fEFlags;
     1633}
     1634
     1635IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_bsr_u16_amd,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1636{
     1637    SET_BIT_SEARCH_RESULT_AMD(puDst, fEFlags, ASMBitLastSetU16(uSrc));
     1638    return fEFlags;
    16221639}
    16231640
     
    16261643 * Helpers for LZCNT and TZCNT.
    16271644 */
    1628 #define SET_BIT_CNT_SEARCH_RESULT_INTEL(a_puDst, a_uSrc, a_pfEFlags, a_uResult) do { \
     1645#define SET_BIT_CNT_SEARCH_RESULT_INTEL(a_puDst, a_uSrc, a_fEFlagsVar, a_uResult) do { \
    16291646        unsigned const uResult = (a_uResult); \
    16301647        *(a_puDst) = uResult; \
    1631         uint32_t fEfl = *(a_pfEFlags) & ~(X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF); \
     1648        a_fEFlagsVar &= ~(X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF); \
    16321649        if (uResult) \
    1633             fEfl |= IEM_EFL_CALC_PARITY(uResult); \
     1650            a_fEFlagsVar |= IEM_EFL_CALC_PARITY(uResult); \
    16341651        else \
    1635             fEfl |= X86_EFL_ZF | X86_EFL_PF; \
     1652            a_fEFlagsVar |= X86_EFL_ZF | X86_EFL_PF; \
    16361653        if (!a_uSrc) \
    1637             fEfl |= X86_EFL_CF; \
    1638         *(a_pfEFlags) = fEfl; \
     1654            a_fEFlagsVar |= X86_EFL_CF; \
    16391655    } while (0)
    1640 #define SET_BIT_CNT_SEARCH_RESULT_AMD(a_puDst, a_uSrc, a_pfEFlags, a_uResult) do { \
     1656#define SET_BIT_CNT_SEARCH_RESULT_AMD(a_puDst, a_uSrc, a_fEFlagsVar, a_uResult) do { \
    16411657        unsigned const uResult = (a_uResult); \
    16421658        *(a_puDst) = uResult; \
    1643         uint32_t fEfl = *(a_pfEFlags) & ~(X86_EFL_ZF | X86_EFL_CF); \
     1659        a_fEFlagsVar &= ~(X86_EFL_ZF | X86_EFL_CF); \
    16441660        if (!uResult) \
    1645             fEfl |= X86_EFL_ZF; \
     1661            a_fEFlagsVar |= X86_EFL_ZF; \
    16461662        if (!a_uSrc) \
    1647             fEfl |= X86_EFL_CF; \
    1648         *(a_pfEFlags) = fEfl; \
     1663            a_fEFlagsVar |= X86_EFL_CF; \
    16491664    } while (0)
    16501665
     
    16541669 */
    16551670#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1656 IEM_DECL_IMPL_DEF(void, iemAImpl_lzcnt_u64,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1657 {
    1658     iemAImpl_lzcnt_u64_intel(puDst, uSrc, pfEFlags);
    1659 }
    1660 #endif
    1661 
    1662 IEM_DECL_IMPL_DEF(void, iemAImpl_lzcnt_u64_intel,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1663 {
    1664     SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, pfEFlags, ASMCountLeadingZerosU64(uSrc));
    1665 }
    1666 
    1667 IEM_DECL_IMPL_DEF(void, iemAImpl_lzcnt_u64_amd,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1668 {
    1669     SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, pfEFlags, ASMCountLeadingZerosU64(uSrc));
     1671IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_lzcnt_u64,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1672{
     1673    return iemAImpl_lzcnt_u64_intel(fEFlags, puDst, uSrc);
     1674}
     1675#endif
     1676
     1677IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_lzcnt_u64_intel,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1678{
     1679    SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, fEFlags, ASMCountLeadingZerosU64(uSrc));
     1680    return fEFlags;
     1681}
     1682
     1683IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_lzcnt_u64_amd,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1684{
     1685    SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, fEFlags, ASMCountLeadingZerosU64(uSrc));
     1686    return fEFlags;
    16701687}
    16711688
    16721689
    16731690#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1674 IEM_DECL_IMPL_DEF(void, iemAImpl_lzcnt_u32,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1675 {
    1676     iemAImpl_lzcnt_u32_intel(puDst, uSrc, pfEFlags);
    1677 }
    1678 #endif
    1679 
    1680 IEM_DECL_IMPL_DEF(void, iemAImpl_lzcnt_u32_intel,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1681 {
    1682     SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, pfEFlags, ASMCountLeadingZerosU32(uSrc));
    1683 }
    1684 
    1685 IEM_DECL_IMPL_DEF(void, iemAImpl_lzcnt_u32_amd,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1686 {
    1687     SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, pfEFlags, ASMCountLeadingZerosU32(uSrc));
     1691IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_lzcnt_u32,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1692{
     1693    return iemAImpl_lzcnt_u32_intel(fEFlags, puDst, uSrc);
     1694}
     1695#endif
     1696
     1697IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_lzcnt_u32_intel,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1698{
     1699    SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, fEFlags, ASMCountLeadingZerosU32(uSrc));
     1700    return fEFlags;
     1701}
     1702
     1703IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_lzcnt_u32_amd,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1704{
     1705    SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, fEFlags, ASMCountLeadingZerosU32(uSrc));
     1706    return fEFlags;
    16881707}
    16891708
    16901709
    16911710#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1692 IEM_DECL_IMPL_DEF(void, iemAImpl_lzcnt_u16,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1693 {
    1694     iemAImpl_lzcnt_u16_intel(puDst, uSrc, pfEFlags);
    1695 }
    1696 #endif
    1697 
    1698 IEM_DECL_IMPL_DEF(void, iemAImpl_lzcnt_u16_intel,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1699 {
    1700     SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, pfEFlags, ASMCountLeadingZerosU16(uSrc));
    1701 }
    1702 
    1703 IEM_DECL_IMPL_DEF(void, iemAImpl_lzcnt_u16_amd,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1704 {
    1705     SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, pfEFlags, ASMCountLeadingZerosU16(uSrc));
     1711IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_lzcnt_u16,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1712{
     1713    return iemAImpl_lzcnt_u16_intel(fEFlags, puDst, uSrc);
     1714}
     1715#endif
     1716
     1717IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_lzcnt_u16_intel,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1718{
     1719    SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, fEFlags, ASMCountLeadingZerosU16(uSrc));
     1720    return fEFlags;
     1721}
     1722
     1723IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_lzcnt_u16_amd,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1724{
     1725    SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, fEFlags, ASMCountLeadingZerosU16(uSrc));
     1726    return fEFlags;
    17061727}
    17071728
     
    17111732 */
    17121733#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1713 IEM_DECL_IMPL_DEF(void, iemAImpl_tzcnt_u64,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1714 {
    1715     iemAImpl_tzcnt_u64_intel(puDst, uSrc, pfEFlags);
    1716 }
    1717 #endif
    1718 
    1719 IEM_DECL_IMPL_DEF(void, iemAImpl_tzcnt_u64_intel,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1720 {
    1721     SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, pfEFlags, ASMCountTrailingZerosU64(uSrc));
    1722 }
    1723 
    1724 IEM_DECL_IMPL_DEF(void, iemAImpl_tzcnt_u64_amd,(uint64_t *puDst, uint64_t uSrc, uint32_t *pfEFlags))
    1725 {
    1726     SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, pfEFlags, ASMCountTrailingZerosU64(uSrc));
     1734IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_tzcnt_u64,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1735{
     1736    return iemAImpl_tzcnt_u64_intel(fEFlags, puDst, uSrc);
     1737}
     1738#endif
     1739
     1740IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_tzcnt_u64_intel,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1741{
     1742    SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, fEFlags, ASMCountTrailingZerosU64(uSrc));
     1743    return fEFlags;
     1744}
     1745
     1746IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_tzcnt_u64_amd,(uint32_t fEFlags, uint64_t *puDst, uint64_t uSrc))
     1747{
     1748    SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, fEFlags, ASMCountTrailingZerosU64(uSrc));
     1749    return fEFlags;
    17271750}
    17281751
    17291752
    17301753#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1731 IEM_DECL_IMPL_DEF(void, iemAImpl_tzcnt_u32,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1732 {
    1733     iemAImpl_tzcnt_u32_intel(puDst, uSrc, pfEFlags);
    1734 }
    1735 #endif
    1736 
    1737 IEM_DECL_IMPL_DEF(void, iemAImpl_tzcnt_u32_intel,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1738 {
    1739     SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, pfEFlags, ASMCountTrailingZerosU32(uSrc));
    1740 }
    1741 
    1742 IEM_DECL_IMPL_DEF(void, iemAImpl_tzcnt_u32_amd,(uint32_t *puDst, uint32_t uSrc, uint32_t *pfEFlags))
    1743 {
    1744     SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, pfEFlags, ASMCountTrailingZerosU32(uSrc));
     1754IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_tzcnt_u32,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1755{
     1756    return iemAImpl_tzcnt_u32_intel(fEFlags, puDst, uSrc);
     1757}
     1758#endif
     1759
     1760IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_tzcnt_u32_intel,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1761{
     1762    SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, fEFlags, ASMCountTrailingZerosU32(uSrc));
     1763    return fEFlags;
     1764}
     1765
     1766IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_tzcnt_u32_amd,(uint32_t fEFlags, uint32_t *puDst, uint32_t uSrc))
     1767{
     1768    SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, fEFlags, ASMCountTrailingZerosU32(uSrc));
     1769    return fEFlags;
    17451770}
    17461771
    17471772
    17481773#if !defined(RT_ARCH_AMD64) || defined(IEM_WITHOUT_ASSEMBLY)
    1749 IEM_DECL_IMPL_DEF(void, iemAImpl_tzcnt_u16,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1750 {
    1751     iemAImpl_tzcnt_u16_intel(puDst, uSrc, pfEFlags);
    1752 }
    1753 #endif
    1754 
    1755 IEM_DECL_IMPL_DEF(void, iemAImpl_tzcnt_u16_intel,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1756 {
    1757     SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, pfEFlags, ASMCountTrailingZerosU16(uSrc));
    1758 }
    1759 
    1760 IEM_DECL_IMPL_DEF(void, iemAImpl_tzcnt_u16_amd,(uint16_t *puDst, uint16_t uSrc, uint32_t *pfEFlags))
    1761 {
    1762     SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, pfEFlags, ASMCountTrailingZerosU16(uSrc));
     1774IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_tzcnt_u16,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1775{
     1776    return iemAImpl_tzcnt_u16_intel(fEFlags, puDst, uSrc);
     1777}
     1778#endif
     1779
     1780IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_tzcnt_u16_intel,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1781{
     1782    SET_BIT_CNT_SEARCH_RESULT_INTEL(puDst, uSrc, fEFlags, ASMCountTrailingZerosU16(uSrc));
     1783    return fEFlags;
     1784}
     1785
     1786IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_tzcnt_u16_amd,(uint32_t fEFlags, uint16_t *puDst, uint16_t uSrc))
     1787{
     1788    SET_BIT_CNT_SEARCH_RESULT_AMD(puDst, uSrc, fEFlags, ASMCountTrailingZerosU16(uSrc));
     1789    return fEFlags;
    17631790}
    17641791
     
    19671994
    19681995#define EMIT_POPCNT(a_cBits, a_Type, a_Suffix) \
    1969 IEM_DECL_IMPL_DEF(void, RT_CONCAT3(iemAImpl_popcnt_u,a_cBits,a_Suffix),(a_Type *puDst, a_Type uSrc, uint32_t *pfEFlags)) \
     1996IEM_DECL_IMPL_DEF(uint32_t, RT_CONCAT3(iemAImpl_popcnt_u,a_cBits,a_Suffix),(uint32_t fEFlags, a_Type *puDst, a_Type uSrc)) \
    19701997{ \
    1971     uint32_t    fEfl = *pfEFlags & ~(X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF); \
     1998    fEFlags &= ~(X86_EFL_OF | X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF); \
    19721999    a_Type      uResult; \
    19732000    if (uSrc) \
     
    19752002    else \
    19762003    { \
    1977         fEfl |= X86_EFL_ZF; \
    1978         uResult = 0; \
     2004        fEFlags |= X86_EFL_ZF; \
     2005        uResult  = 0; \
    19792006    } \
    1980     *puDst    = uResult; \
    1981     *pfEFlags = fEfl; \
     2007    *puDst = uResult; \
     2008    return fEFlags; \
    19822009}
    19832010
     
    26222649 */
    26232650# define EMIT_IMUL_TWO(a_cBits, a_uType) \
    2624 IEM_DECL_IMPL_DEF(void, iemAImpl_imul_two_u ## a_cBits,(a_uType *puDst, a_uType uSrc, uint32_t *pfEFlags)) \
     2651IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_imul_two_u ## a_cBits,(uint32_t fEFlags, a_uType *puDst, a_uType uSrc)) \
    26252652{ \
    26262653    a_uType uIgn; \
    2627     iemAImpl_imul_u ## a_cBits(puDst, &uIgn, uSrc, pfEFlags); \
     2654    iemAImpl_imul_u ## a_cBits(puDst, &uIgn, uSrc, &fEFlags); \
     2655    return fEFlags; \
    26282656} \
    26292657\
    2630 IEM_DECL_IMPL_DEF(void, iemAImpl_imul_two_u ## a_cBits ## _intel,(a_uType *puDst, a_uType uSrc, uint32_t *pfEFlags)) \
     2658IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_imul_two_u ## a_cBits ## _intel,(uint32_t fEFlags, a_uType *puDst, a_uType uSrc)) \
    26312659{ \
    26322660    a_uType uIgn; \
    2633     iemAImpl_imul_u ## a_cBits ## _intel(puDst, &uIgn, uSrc, pfEFlags); \
     2661    iemAImpl_imul_u ## a_cBits ## _intel(puDst, &uIgn, uSrc, &fEFlags); \
     2662    return fEFlags; \
    26342663} \
    26352664\
    2636 IEM_DECL_IMPL_DEF(void, iemAImpl_imul_two_u ## a_cBits ## _amd,(a_uType *puDst, a_uType uSrc, uint32_t *pfEFlags)) \
     2665IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_imul_two_u ## a_cBits ## _amd,(uint32_t fEFlags, a_uType *puDst, a_uType uSrc)) \
    26372666{ \
    26382667    a_uType uIgn; \
    2639     iemAImpl_imul_u ## a_cBits ## _amd(puDst, &uIgn, uSrc, pfEFlags); \
     2668    iemAImpl_imul_u ## a_cBits ## _amd(puDst, &uIgn, uSrc, &fEFlags); \
     2669    return fEFlags; \
    26402670}
    26412671
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstCommon.cpp.h

    r104195 r104206  
    4646
    4747/** Function table for the BSF instruction. */
    48 IEM_STATIC const IEMOPBINTODOSIZES g_iemAImpl_bsf =
     48IEM_STATIC const IEMOPBINSIZES g_iemAImpl_bsf =
    4949{
    5050    NULL,  NULL,
     
    5555
    5656/** Function table for the BSF instruction, AMD EFLAGS variant. */
    57 IEM_STATIC const IEMOPBINTODOSIZES g_iemAImpl_bsf_amd =
     57IEM_STATIC const IEMOPBINSIZES g_iemAImpl_bsf_amd =
    5858{
    5959    NULL,  NULL,
     
    6464
    6565/** Function table for the BSF instruction, Intel EFLAGS variant. */
    66 IEM_STATIC const IEMOPBINTODOSIZES g_iemAImpl_bsf_intel =
     66IEM_STATIC const IEMOPBINSIZES g_iemAImpl_bsf_intel =
    6767{
    6868    NULL,  NULL,
     
    7373
    7474/** EFLAGS variation selection table for the BSF instruction. */
    75 IEM_STATIC const IEMOPBINTODOSIZES * const g_iemAImpl_bsf_eflags[] =
     75IEM_STATIC const IEMOPBINSIZES * const g_iemAImpl_bsf_eflags[] =
    7676{
    7777    &g_iemAImpl_bsf,
     
    8282
    8383/** Function table for the BSR instruction. */
    84 IEM_STATIC const IEMOPBINTODOSIZES g_iemAImpl_bsr =
     84IEM_STATIC const IEMOPBINSIZES g_iemAImpl_bsr =
    8585{
    8686    NULL,  NULL,
     
    9191
    9292/** Function table for the BSR instruction, AMD EFLAGS variant. */
    93 IEM_STATIC const IEMOPBINTODOSIZES g_iemAImpl_bsr_amd =
     93IEM_STATIC const IEMOPBINSIZES g_iemAImpl_bsr_amd =
    9494{
    9595    NULL,  NULL,
     
    100100
    101101/** Function table for the BSR instruction, Intel EFLAGS variant. */
    102 IEM_STATIC const IEMOPBINTODOSIZES g_iemAImpl_bsr_intel =
     102IEM_STATIC const IEMOPBINSIZES g_iemAImpl_bsr_intel =
    103103{
    104104    NULL,  NULL,
     
    109109
    110110/** EFLAGS variation selection table for the BSR instruction. */
    111 IEM_STATIC const IEMOPBINTODOSIZES * const g_iemAImpl_bsr_eflags[] =
     111IEM_STATIC const IEMOPBINSIZES * const g_iemAImpl_bsr_eflags[] =
    112112{
    113113    &g_iemAImpl_bsr,
     
    118118
    119119/** Function table for the IMUL instruction. */
    120 IEM_STATIC const IEMOPBINTODOSIZES g_iemAImpl_imul_two =
     120IEM_STATIC const IEMOPBINSIZES g_iemAImpl_imul_two =
    121121{
    122122    NULL,  NULL,
     
    127127
    128128/** Function table for the IMUL instruction, AMD EFLAGS variant. */
    129 IEM_STATIC const IEMOPBINTODOSIZES g_iemAImpl_imul_two_amd =
     129IEM_STATIC const IEMOPBINSIZES g_iemAImpl_imul_two_amd =
    130130{
    131131    NULL,  NULL,
     
    136136
    137137/** Function table for the IMUL instruction, Intel EFLAGS variant. */
    138 IEM_STATIC const IEMOPBINTODOSIZES g_iemAImpl_imul_two_intel =
     138IEM_STATIC const IEMOPBINSIZES g_iemAImpl_imul_two_intel =
    139139{
    140140    NULL,  NULL,
     
    145145
    146146/** EFLAGS variation selection table for the IMUL instruction. */
    147 IEM_STATIC const IEMOPBINTODOSIZES * const g_iemAImpl_imul_two_eflags[] =
     147IEM_STATIC const IEMOPBINSIZES * const g_iemAImpl_imul_two_eflags[] =
    148148{
    149149    &g_iemAImpl_imul_two,
     
    154154
    155155/** EFLAGS variation selection table for the 16-bit IMUL instruction. */
    156 IEM_STATIC PFNIEMAIMPLBINTODOU16 const g_iemAImpl_imul_two_u16_eflags[] =
     156IEM_STATIC PFNIEMAIMPLBINU16 const g_iemAImpl_imul_two_u16_eflags[] =
    157157{
    158158    iemAImpl_imul_two_u16,
     
    163163
    164164/** EFLAGS variation selection table for the 32-bit IMUL instruction. */
    165 IEM_STATIC PFNIEMAIMPLBINTODOU32 const g_iemAImpl_imul_two_u32_eflags[] =
     165IEM_STATIC PFNIEMAIMPLBINU32 const g_iemAImpl_imul_two_u32_eflags[] =
    166166{
    167167    iemAImpl_imul_two_u32,
     
    172172
    173173/** EFLAGS variation selection table for the 64-bit IMUL instruction. */
    174 IEM_STATIC PFNIEMAIMPLBINTODOU64 const g_iemAImpl_imul_two_u64_eflags[] =
     174IEM_STATIC PFNIEMAIMPLBINU64 const g_iemAImpl_imul_two_u64_eflags[] =
    175175{
    176176    iemAImpl_imul_two_u64,
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h

    r104195 r104206  
    33863386        case IEMMODE_16BIT:
    33873387        {
    3388             PFNIEMAIMPLBINTODOU16 const pfnAImplU16 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u16_eflags);
     3388            PFNIEMAIMPLBINU16 const pfnAImplU16 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u16_eflags);
    33893389            if (IEM_IS_MODRM_REG_MODE(bRm))
    33903390            {
     
    33953395                IEM_MC_LOCAL(uint16_t,              u16Tmp);
    33963396                IEM_MC_FETCH_GREG_U16(u16Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    3397                 IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst, u16Tmp,        0);
    3398                 IEM_MC_ARG_CONST(uint16_t,          u16Src,/*=*/ u16Imm,    1);
    3399                 IEM_MC_ARG(uint32_t *,              pEFlags,                2);
    3400                 IEM_MC_REF_EFLAGS(pEFlags);
    3401                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU16, pu16Dst, u16Src, pEFlags);
     3397
     3398                IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst, u16Tmp,        1);
     3399                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,              0);
     3400                IEM_MC_ARG_CONST(uint16_t,          u16Src,/*=*/ u16Imm,    2);
     3401                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU16, fEFlagsIn, pu16Dst, u16Src);
    34023402                IEM_MC_STORE_GREG_U16(IEM_GET_MODRM_REG(pVCpu, bRm), u16Tmp);
     3403                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    34033404
    34043405                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    34183419                IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    34193420
    3420                 IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,    u16Tmp, 0);
    3421                 IEM_MC_ARG_CONST(uint16_t,          u16Src,     u16Imm, 1);
    3422                 IEM_MC_ARG(uint32_t *,              pEFlags,            2);
    3423                 IEM_MC_REF_EFLAGS(pEFlags);
    3424                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU16, pu16Dst, u16Src, pEFlags);
     3421                IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,    u16Tmp,     1);
     3422                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,              0);
     3423                IEM_MC_ARG_CONST(uint16_t,          u16Src,     u16Imm,     2);
     3424                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU16, fEFlagsIn, pu16Dst, u16Src);
    34253425                IEM_MC_STORE_GREG_U16(IEM_GET_MODRM_REG(pVCpu, bRm), u16Tmp);
     3426                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    34263427
    34273428                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    34333434        case IEMMODE_32BIT:
    34343435        {
    3435             PFNIEMAIMPLBINTODOU32 const pfnAImplU32 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u32_eflags);
     3436            PFNIEMAIMPLBINU32 const pfnAImplU32 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u32_eflags);
    34363437            if (IEM_IS_MODRM_REG_MODE(bRm))
    34373438            {
     
    34433444                IEM_MC_FETCH_GREG_U32(u32Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    34443445
    3445                 IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst,     u32Tmp,    0);
    3446                 IEM_MC_ARG_CONST(uint32_t,          u32Src,/*=*/ u32Imm,    1);
    3447                 IEM_MC_ARG(uint32_t *,              pEFlags,                2);
    3448                 IEM_MC_REF_EFLAGS(pEFlags);
    3449                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU32, pu32Dst, u32Src, pEFlags);
     3446                IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst,     u32Tmp,    1);
     3447                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,              0);
     3448                IEM_MC_ARG_CONST(uint32_t,          u32Src,/*=*/ u32Imm,    2);
     3449                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU32, fEFlagsIn, pu32Dst, u32Src);
    34503450                IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u32Tmp);
     3451                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    34513452
    34523453                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    34663467                IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    34673468
    3468                 IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst,    u32Tmp, 0);
    3469                 IEM_MC_ARG_CONST(uint32_t,          u32Src,     u32Imm, 1);
    3470                 IEM_MC_ARG(uint32_t *,              pEFlags,            2);
    3471                 IEM_MC_REF_EFLAGS(pEFlags);
    3472                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU32, pu32Dst, u32Src, pEFlags);
     3469                IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst,    u32Tmp,     1);
     3470                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,              0);
     3471                IEM_MC_ARG_CONST(uint32_t,          u32Src,     u32Imm,     2);
     3472                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU32, fEFlagsIn, pu32Dst, u32Src);
    34733473                IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u32Tmp);
     3474                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    34743475
    34753476                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    34813482        case IEMMODE_64BIT:
    34823483        {
    3483             PFNIEMAIMPLBINTODOU64 const pfnAImplU64 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u64_eflags);
     3484            PFNIEMAIMPLBINU64 const pfnAImplU64 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u64_eflags);
    34843485            if (IEM_IS_MODRM_REG_MODE(bRm))
    34853486            {
     
    34913492                IEM_MC_FETCH_GREG_U64(u64Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    34923493
    3493                 IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,     u64Tmp,    0);
    3494                 IEM_MC_ARG_CONST(uint64_t,          u64Src,/*=*/ u64Imm,    1);
    3495                 IEM_MC_ARG(uint32_t *,              pEFlags,                2);
    3496                 IEM_MC_REF_EFLAGS(pEFlags);
    3497                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU64, pu64Dst, u64Src, pEFlags);
     3494                IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,     u64Tmp,    1);
     3495                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,              0);
     3496                IEM_MC_ARG_CONST(uint64_t,          u64Src,/*=*/ u64Imm,    2);
     3497                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU64, fEFlagsIn, pu64Dst, u64Src);
    34983498                IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Tmp);
     3499                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    34993500
    35003501                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    35143515                IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    35153516
    3516                 IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,      u64Tmp,                   0);
    3517                 IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ (int64_t)(int32_t)u32Imm, 1);
    3518                 IEM_MC_ARG(uint32_t *,              pEFlags,                                2);
    3519                 IEM_MC_REF_EFLAGS(pEFlags);
    3520                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU64, pu64Dst, u64Src, pEFlags);
     3517                IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,      u64Tmp,                   1);
     3518                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,                              0);
     3519                IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ (int64_t)(int32_t)u32Imm, 2);
     3520                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU64, fEFlagsIn, pu64Dst, u64Src);
    35213521                IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Tmp);
     3522                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    35223523
    35233524                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    35883589        case IEMMODE_16BIT:
    35893590        {
    3590             PFNIEMAIMPLBINTODOU16 const pfnAImplU16 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u16_eflags);
     3591            PFNIEMAIMPLBINU16 const pfnAImplU16 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u16_eflags);
    35913592            if (IEM_IS_MODRM_REG_MODE(bRm))
    35923593            {
     
    35993600                IEM_MC_FETCH_GREG_U16(u16Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    36003601
    3601                 IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,    u16Tmp,         0);
    3602                 IEM_MC_ARG_CONST(uint16_t,          u16Src,/*=*/ (int8_t)u8Imm, 1);
    3603                 IEM_MC_ARG(uint32_t *,              pEFlags,                    2);
    3604                 IEM_MC_REF_EFLAGS(pEFlags);
    3605                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU16, pu16Dst, u16Src, pEFlags);
     3602                IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,    u16Tmp,         1);
     3603                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,                  0);
     3604                IEM_MC_ARG_CONST(uint16_t,          u16Src,/*=*/ (int8_t)u8Imm, 2);
     3605                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU16, fEFlagsIn, pu16Dst, u16Src);
    36063606                IEM_MC_STORE_GREG_U16(IEM_GET_MODRM_REG(pVCpu, bRm), u16Tmp);
     3607                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    36073608
    36083609                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    36233624                IEM_MC_FETCH_MEM_U16(u16Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    36243625
    3625                 IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,    u16Tmp, 0);
    3626                 IEM_MC_ARG_CONST(uint16_t,          u16Src,     u16Imm, 1);
    3627                 IEM_MC_ARG(uint32_t *,              pEFlags,            2);
    3628                 IEM_MC_REF_EFLAGS(pEFlags);
    3629                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU16, pu16Dst, u16Src, pEFlags);
     3626                IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Dst,    u16Tmp,         1);
     3627                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,                  0);
     3628                IEM_MC_ARG_CONST(uint16_t,          u16Src,     u16Imm,         2);
     3629                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU16, fEFlagsIn, pu16Dst, u16Src);
    36303630                IEM_MC_STORE_GREG_U16(IEM_GET_MODRM_REG(pVCpu, bRm), u16Tmp);
     3631                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    36313632
    36323633                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    36383639        case IEMMODE_32BIT:
    36393640        {
    3640             PFNIEMAIMPLBINTODOU32 const pfnAImplU32 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u32_eflags);
     3641            PFNIEMAIMPLBINU32 const pfnAImplU32 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u32_eflags);
    36413642            if (IEM_IS_MODRM_REG_MODE(bRm))
    36423643            {
     
    36483649                IEM_MC_FETCH_GREG_U32(u32Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    36493650
    3650                 IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst,            u32Tmp, 0);
    3651                 IEM_MC_ARG_CONST(uint32_t,          u32Src,/*=*/ (int8_t)u8Imm, 1);
    3652                 IEM_MC_ARG(uint32_t *,              pEFlags,                    2);
    3653                 IEM_MC_REF_EFLAGS(pEFlags);
    3654                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU32, pu32Dst, u32Src, pEFlags);
     3651                IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst,            u32Tmp, 1);
     3652                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,                  0);
     3653                IEM_MC_ARG_CONST(uint32_t,          u32Src,/*=*/ (int8_t)u8Imm, 2);
     3654                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU32, fEFlagsIn, pu32Dst, u32Src);
    36553655                IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u32Tmp);
     3656                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    36563657
    36573658                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    36713672                IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    36723673
    3673                 IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst, u32Tmp,    0);
    3674                 IEM_MC_ARG_CONST(uint32_t,          u32Src,  u32Imm,    1);
    3675                 IEM_MC_ARG(uint32_t *,              pEFlags,            2);
    3676                 IEM_MC_REF_EFLAGS(pEFlags);
    3677                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU32, pu32Dst, u32Src, pEFlags);
     3674                IEM_MC_ARG_LOCAL_REF(uint32_t *,    pu32Dst, u32Tmp,            1);
     3675                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,                  0);
     3676                IEM_MC_ARG_CONST(uint32_t,          u32Src,  u32Imm,            2);
     3677                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU32, fEFlagsIn, pu32Dst, u32Src);
    36783678                IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u32Tmp);
     3679                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    36793680
    36803681                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    36863687        case IEMMODE_64BIT:
    36873688        {
    3688             PFNIEMAIMPLBINTODOU64 const pfnAImplU64 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u64_eflags);
     3689            PFNIEMAIMPLBINU64 const pfnAImplU64 = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_u64_eflags);
    36893690            if (IEM_IS_MODRM_REG_MODE(bRm))
    36903691            {
     
    36963697                IEM_MC_FETCH_GREG_U64(u64Tmp, IEM_GET_MODRM_RM(pVCpu, bRm));
    36973698
    3698                 IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,                       u64Tmp,  0);
    3699                 IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ (int64_t)(int8_t)u8Imm,   1);
    3700                 IEM_MC_ARG(uint32_t *,              pEFlags,                                2);
    3701                 IEM_MC_REF_EFLAGS(pEFlags);
    3702                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU64, pu64Dst, u64Src, pEFlags);
     3699                IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,                       u64Tmp,  1);
     3700                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,                              0);
     3701                IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ (int64_t)(int8_t)u8Imm,   2);
     3702                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU64, fEFlagsIn, pu64Dst, u64Src);
    37033703                IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Tmp);
     3704                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    37043705
    37053706                IEM_MC_ADVANCE_RIP_AND_FINISH();
     
    37193720                IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    37203721
    3721                 IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,      u64Tmp,                   0);
    3722                 IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ (int64_t)(int8_t)u8Imm,   1);
    3723                 IEM_MC_ARG(uint32_t *,              pEFlags,                                2);
    3724                 IEM_MC_REF_EFLAGS(pEFlags);
    3725                 IEM_MC_CALL_VOID_AIMPL_3(pfnAImplU64, pu64Dst, u64Src, pEFlags);
     3722                IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,      u64Tmp,                   1);
     3723                IEM_MC_ARG_EFLAGS(                  fEFlagsIn,                              0);
     3724                IEM_MC_ARG_CONST(uint64_t,          u64Src, /*=*/ (int64_t)(int8_t)u8Imm,   2);
     3725                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pfnAImplU64, fEFlagsIn, pu64Dst, u64Src);
    37263726                IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Tmp);
     3727                IEM_MC_COMMIT_EFLAGS(fEFlagsRet);
    37273728
    37283729                IEM_MC_ADVANCE_RIP_AND_FINISH();
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h

    r104195 r104206  
    1000410004    IEMOP_HLP_MIN_386();
    1000510005    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF);
    10006     const IEMOPBINTODOSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_eflags);
     10006    const IEMOPBINSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_two_eflags);
    1000710007    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10008     IEMOP_BODY_BINARY_TODO_rv_rm(bRm, pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, IEM_MC_F_MIN_386, imul, 0);
     10008    IEMOP_BODY_BINARY_rv_rm(bRm, pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, IEM_MC_F_MIN_386, imul, 0);
    1000910009}
    1001010010
     
    1050110501#ifndef TST_IEM_CHECK_MC
    1050210502# if (defined(RT_ARCH_X86) || defined(RT_ARCH_AMD64)) && !defined(IEM_WITHOUT_ASSEMBLY)
    10503     static const IEMOPBINTODOSIZES s_Native =
     10503    static const IEMOPBINSIZES s_Native =
    1050410504    {   NULL, NULL, iemAImpl_popcnt_u16, NULL, iemAImpl_popcnt_u32, NULL, iemAImpl_popcnt_u64, NULL };
    1050510505# endif
    10506     static const IEMOPBINTODOSIZES s_Fallback =
     10506    static const IEMOPBINSIZES s_Fallback =
    1050710507    {   NULL, NULL, iemAImpl_popcnt_u16_fallback, NULL, iemAImpl_popcnt_u32_fallback, NULL, iemAImpl_popcnt_u64_fallback, NULL };
    1050810508#endif
    10509     const IEMOPBINTODOSIZES * const pImpl = IEM_SELECT_HOST_OR_FALLBACK(fPopCnt, &s_Native, &s_Fallback);
     10509    const IEMOPBINSIZES * const pImpl = IEM_SELECT_HOST_OR_FALLBACK(fPopCnt, &s_Native, &s_Fallback);
    1051010510    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10511     IEMOP_BODY_BINARY_TODO_rv_rm(bRm, pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, IEM_MC_F_NOT_286_OR_OLDER, popcnt, 0);
     10511    IEMOP_BODY_BINARY_rv_rm(bRm, pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, IEM_MC_F_NOT_286_OR_OLDER, popcnt, 0);
    1051210512}
    1051310513
     
    1100511005                IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \
    1100611006                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    11007                 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \
    11008                 IEM_MC_ARG(uint16_t,   u16Src,  1); \
    11009                 IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    1101011007                \
     11008                IEM_MC_ARG(uint16_t,    u16Src,     2); \
    1101111009                IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     11010                IEM_MC_ARG(uint16_t *,  pu16Dst,    1); \
    1101211011                IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    11013                 IEM_MC_REF_EFLAGS(pEFlags); \
    11014                 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); \
     11012                IEM_MC_ARG_EFLAGS(      fEFlagsIn,  0); \
     11013                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pImpl->pfnNormalU16, fEFlagsIn, pu16Dst, u16Src); \
     11014                IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    1101511015                \
    1101611016                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
    1101711017                IEM_MC_END(); \
    1101811018                break; \
    11019                 \
     11019            \
    1102011020            case IEMMODE_32BIT: \
    1102111021                IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \
    1102211022                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    11023                 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \
    11024                 IEM_MC_ARG(uint32_t,   u32Src,  1); \
    11025                 IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    1102611023                \
     11024                IEM_MC_ARG(uint32_t,    u32Src,     2); \
    1102711025                IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     11026                IEM_MC_ARG(uint32_t *,  pu32Dst,    1); \
    1102811027                IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    11029                 IEM_MC_REF_EFLAGS(pEFlags); \
    11030                 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); \
     11028                IEM_MC_ARG_EFLAGS(      fEFlagsIn,  0); \
     11029                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pImpl->pfnNormalU32, fEFlagsIn, pu32Dst, u32Src); \
     11030                IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    1103111031                IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) { \
    1103211032                    IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); \
     
    1103511035                IEM_MC_END(); \
    1103611036                break; \
    11037                 \
     11037            \
    1103811038            case IEMMODE_64BIT: \
    1103911039                IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \
    1104011040                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
    11041                 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \
    11042                 IEM_MC_ARG(uint64_t,   u64Src,  1); \
    11043                 IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    1104411041                \
     11042                IEM_MC_ARG(uint64_t,    u64Src,     2); \
    1104511043                IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     11044                IEM_MC_ARG(uint64_t *,  pu64Dst,    1); \
    1104611045                IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    11047                 IEM_MC_REF_EFLAGS(pEFlags); \
    11048                 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); \
     11046                IEM_MC_ARG_EFLAGS(      fEFlagsIn,  0); \
     11047                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pImpl->pfnNormalU64, fEFlagsIn, pu64Dst, u64Src); \
     11048                IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    1104911049                \
    1105011050                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    1106411064            case IEMMODE_16BIT: \
    1106511065                IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \
    11066                 IEM_MC_ARG(uint16_t *, pu16Dst, 0); \
    11067                 IEM_MC_ARG(uint16_t,   u16Src,  1); \
    11068                 IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    11069                 IEM_MC_LOCAL(RTGCPTR,  GCPtrEffDst); \
    11070                 \
     11066                IEM_MC_LOCAL(RTGCPTR,   GCPtrEffDst); \
    1107111067                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    1107211068                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     11069                \
     11070                IEM_MC_ARG(uint16_t,    u16Src,     2); \
    1107311071                IEM_MC_FETCH_MEM_U16(u16Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     11072                IEM_MC_ARG(uint16_t *,  pu16Dst,    1); \
    1107411073                IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    11075                 IEM_MC_REF_EFLAGS(pEFlags); \
    11076                 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, u16Src, pEFlags); \
     11074                IEM_MC_ARG_EFLAGS(      fEFlagsIn,  0); \
     11075                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pImpl->pfnNormalU16, fEFlagsIn, pu16Dst, u16Src); \
     11076                IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    1107711077                \
    1107811078                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    1108211082            case IEMMODE_32BIT: \
    1108311083                IEM_MC_BEGIN(IEM_MC_F_MIN_386, 0); \
    11084                 IEM_MC_ARG(uint32_t *, pu32Dst, 0); \
    11085                 IEM_MC_ARG(uint32_t,   u32Src,  1); \
    11086                 IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    11087                 IEM_MC_LOCAL(RTGCPTR,  GCPtrEffDst); \
    11088                 \
     11084                IEM_MC_LOCAL(RTGCPTR,   GCPtrEffDst); \
    1108911085                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    1109011086                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     11087                \
     11088                IEM_MC_ARG(uint32_t,    u32Src,     2); \
    1109111089                IEM_MC_FETCH_MEM_U32(u32Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     11090                IEM_MC_ARG(uint32_t *,  pu32Dst,    1); \
    1109211091                IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    11093                 IEM_MC_REF_EFLAGS(pEFlags); \
    11094                 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); \
     11092                IEM_MC_ARG_EFLAGS(      fEFlagsIn,  0); \
     11093                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pImpl->pfnNormalU32, fEFlagsIn, pu32Dst, u32Src); \
     11094                IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    1109511095                \
    1109611096                IEM_MC_IF_EFL_BIT_NOT_SET(X86_EFL_ZF) { \
     
    1110311103            case IEMMODE_64BIT: \
    1110411104                IEM_MC_BEGIN(IEM_MC_F_64BIT, 0); \
    11105                 IEM_MC_ARG(uint64_t *, pu64Dst, 0); \
    11106                 IEM_MC_ARG(uint64_t,   u64Src,  1); \
    11107                 IEM_MC_ARG(uint32_t *, pEFlags, 2); \
    11108                 IEM_MC_LOCAL(RTGCPTR,  GCPtrEffDst); \
    11109                 \
     11105                IEM_MC_LOCAL(RTGCPTR,   GCPtrEffDst); \
    1111011106                IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); \
    1111111107                IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); \
     11108                \
     11109                IEM_MC_ARG(uint64_t,    u64Src,     2); \
    1111211110                IEM_MC_FETCH_MEM_U64(u64Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); \
     11111                IEM_MC_ARG(uint64_t *,  pu64Dst,    1); \
    1111311112                IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    11114                 IEM_MC_REF_EFLAGS(pEFlags); \
    11115                 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, u64Src, pEFlags); \
     11113                IEM_MC_ARG_EFLAGS(      fEFlagsIn,  0); \
     11114                IEM_MC_CALL_AIMPL_3(uint32_t, fEFlagsRet, pImpl->pfnNormalU64, fEFlagsIn, pu64Dst, u64Src); \
     11115                IEM_MC_COMMIT_EFLAGS(fEFlagsRet); \
    1111611116                \
    1111711117                IEM_MC_ADVANCE_RIP_AND_FINISH(); \
     
    1113811138    IEMOP_HLP_MIN_386();
    1113911139    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_OF | X86_EFL_SF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF);
    11140     PCIEMOPBINTODOSIZES const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_bsf_eflags);
     11140    PCIEMOPBINSIZES const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_bsf_eflags);
    1114111141    IEMOP_BODY_BIT_SCAN_OPERATOR_RV_RM(pImpl);
    1114211142}
     
    1115911159
    1116011160#ifndef TST_IEM_CHECK_MC
    11161     static const IEMOPBINTODOSIZES s_iemAImpl_tzcnt =
     11161    static const IEMOPBINSIZES s_iemAImpl_tzcnt =
    1116211162    {   NULL, NULL,     iemAImpl_tzcnt_u16, NULL,       iemAImpl_tzcnt_u32, NULL,       iemAImpl_tzcnt_u64, NULL };
    11163     static const IEMOPBINTODOSIZES s_iemAImpl_tzcnt_amd =
     11163    static const IEMOPBINSIZES s_iemAImpl_tzcnt_amd =
    1116411164    {   NULL, NULL,     iemAImpl_tzcnt_u16_amd, NULL,   iemAImpl_tzcnt_u32_amd, NULL,   iemAImpl_tzcnt_u64_amd, NULL };
    11165     static const IEMOPBINTODOSIZES s_iemAImpl_tzcnt_intel =
     11165    static const IEMOPBINSIZES s_iemAImpl_tzcnt_intel =
    1116611166    {   NULL, NULL,     iemAImpl_tzcnt_u16_intel, NULL, iemAImpl_tzcnt_u32_intel, NULL, iemAImpl_tzcnt_u64_intel, NULL };
    11167     static const IEMOPBINTODOSIZES * const s_iemAImpl_tzcnt_eflags[2][4] =
     11167    static const IEMOPBINSIZES * const s_iemAImpl_tzcnt_eflags[2][4] =
    1116811168    {
    1116911169        { &s_iemAImpl_tzcnt_intel, &s_iemAImpl_tzcnt_intel, &s_iemAImpl_tzcnt_amd, &s_iemAImpl_tzcnt_intel },
     
    1117211172#endif
    1117311173    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_OF | X86_EFL_SF | X86_EFL_AF | X86_EFL_PF);
    11174     const IEMOPBINTODOSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT_EX(s_iemAImpl_tzcnt_eflags,
     11174    const IEMOPBINSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT_EX(s_iemAImpl_tzcnt_eflags,
    1117511175                                                                            IEM_GET_HOST_CPU_FEATURES(pVCpu)->fBmi1);
    1117611176    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    11177     IEMOP_BODY_BINARY_TODO_rv_rm(bRm, pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, IEM_MC_F_NOT_286_OR_OLDER, tzcnt, 0);
     11177    IEMOP_BODY_BINARY_rv_rm(bRm, pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, IEM_MC_F_NOT_286_OR_OLDER, tzcnt, 0);
    1117811178}
    1117911179
     
    1119311193    IEMOP_HLP_MIN_386();
    1119411194    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_OF | X86_EFL_SF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF);
    11195     PCIEMOPBINTODOSIZES const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_bsr_eflags);
     11195    PCIEMOPBINSIZES const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_bsr_eflags);
    1119611196    IEMOP_BODY_BIT_SCAN_OPERATOR_RV_RM(pImpl);
    1119711197}
     
    1121411214
    1121511215#ifndef TST_IEM_CHECK_MC
    11216     static const IEMOPBINTODOSIZES s_iemAImpl_lzcnt =
     11216    static const IEMOPBINSIZES s_iemAImpl_lzcnt =
    1121711217    {   NULL, NULL,     iemAImpl_lzcnt_u16, NULL,       iemAImpl_lzcnt_u32, NULL,       iemAImpl_lzcnt_u64, NULL };
    11218     static const IEMOPBINTODOSIZES s_iemAImpl_lzcnt_amd =
     11218    static const IEMOPBINSIZES s_iemAImpl_lzcnt_amd =
    1121911219    {   NULL,  NULL,    iemAImpl_lzcnt_u16_amd, NULL,   iemAImpl_lzcnt_u32_amd, NULL,   iemAImpl_lzcnt_u64_amd, NULL };
    11220     static const IEMOPBINTODOSIZES s_iemAImpl_lzcnt_intel =
     11220    static const IEMOPBINSIZES s_iemAImpl_lzcnt_intel =
    1122111221    {   NULL,  NULL,    iemAImpl_lzcnt_u16_intel, NULL, iemAImpl_lzcnt_u32_intel, NULL, iemAImpl_lzcnt_u64_intel, NULL };
    11222     static const IEMOPBINTODOSIZES * const s_iemAImpl_lzcnt_eflags[2][4] =
     11222    static const IEMOPBINSIZES * const s_iemAImpl_lzcnt_eflags[2][4] =
    1122311223    {
    1122411224        { &s_iemAImpl_lzcnt_intel, &s_iemAImpl_lzcnt_intel, &s_iemAImpl_lzcnt_amd, &s_iemAImpl_lzcnt_intel },
     
    1122711227#endif
    1122811228    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_OF | X86_EFL_SF | X86_EFL_AF | X86_EFL_PF);
    11229     const IEMOPBINTODOSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT_EX(s_iemAImpl_lzcnt_eflags,
     11229    const IEMOPBINSIZES * const pImpl = IEMTARGETCPU_EFL_BEHAVIOR_SELECT_EX(s_iemAImpl_lzcnt_eflags,
    1123011230                                                                            IEM_GET_HOST_CPU_FEATURES(pVCpu)->fBmi1);
    1123111231    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    11232     IEMOP_BODY_BINARY_TODO_rv_rm(bRm, pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, IEM_MC_F_NOT_286_OR_OLDER, lzcnt, 0);
     11232    IEMOP_BODY_BINARY_rv_rm(bRm, pImpl->pfnNormalU16, pImpl->pfnNormalU32, pImpl->pfnNormalU64, IEM_MC_F_NOT_286_OR_OLDER, lzcnt, 0);
    1123311233}
    1123411234
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