VirtualBox

Changeset 101569 in vbox for trunk/src


Ignore:
Timestamp:
Oct 24, 2023 12:44:45 AM (16 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
159650
Message:

VMM/IEM: Native IEM_MC_IF_EFL_NO_BITS_SET. translation. bugref:10371

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py

    r101568 r101569  
    28932893    'IEM_MC_IF_EFL_BITS_EQ':                                     (McBlock.parseMcGenericCond,       True,  False, ),
    28942894    'IEM_MC_IF_EFL_BITS_NE':                                     (McBlock.parseMcGenericCond,       True,  False, ),
    2895     'IEM_MC_IF_EFL_NO_BITS_SET':                                 (McBlock.parseMcGenericCond,       True,  False, ),
     2895    'IEM_MC_IF_EFL_NO_BITS_SET':                                 (McBlock.parseMcGenericCond,       True,  True, ),
    28962896    'IEM_MC_IF_FCW_IM':                                          (McBlock.parseMcGenericCond,       True,  False, ),
    28972897    'IEM_MC_IF_FPUREG_IS_EMPTY':                                 (McBlock.parseMcGenericCond,       True,  False, ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r101568 r101569  
    42824282
    42834283
     4284#define IEM_MC_IF_EFL_NO_BITS_SET(a_fBits) \
     4285        off = iemNativeEmitIfEflagNoBitsSet(pReNative, off, (a_fBits)); \
     4286        AssertReturn(off != UINT32_MAX, UINT32_MAX); \
     4287        do {
     4288
     4289/** Emits code for IEM_MC_IF_EFL_NO_BITS_SET. */
     4290DECLINLINE(uint32_t) iemNativeEmitIfEflagNoBitsSet(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint32_t fBitsInEfl)
     4291{
     4292    PIEMNATIVECOND pEntry = iemNativeCondPushIf(pReNative);
     4293    AssertReturn(pEntry, UINT32_MAX);
     4294
     4295    /* Get the eflags. */
     4296    uint8_t const idxEflReg = iemNativeRegAllocTmpForGuestReg(pReNative, &off, kIemNativeGstReg_EFlags,
     4297                                                              kIemNativeGstRegUse_ReadOnly);
     4298    AssertReturn(idxEflReg != UINT8_MAX, UINT32_MAX);
     4299
     4300    /* Test and jump. */
     4301    off = iemNativeEmitTestAnyBitsInGprAndJmpToLabelIfAnySet(pReNative, off, idxEflReg, fBitsInEfl, pEntry->idxLabelElse);
     4302
     4303    /* Free but don't flush the EFlags register. */
     4304    iemNativeRegFreeTmp(pReNative, idxEflReg);
     4305
     4306    /* Make a copy of the core state now as we start the if-block. */
     4307    iemNativeCondStartIfBlock(pReNative, off);
     4308
     4309    return off;
     4310}
     4311
     4312
    42844313#define IEM_MC_IF_EFL_BIT_SET(a_fBit) \
    42854314        off = iemNativeEmitIfEflagsBitSet(pReNative, off, (a_fBit)); \
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