VirtualBox

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


Ignore:
Timestamp:
Feb 21, 2022 8:49:18 PM (3 years ago)
Author:
vboxsync
Message:

VMM/IEM: Fixed EFlags for LOCK XADD, adding tests for it. bugref:9898

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r93869 r93877  
    13581358{
    13591359    uint64_t uOld = ASMAtomicUoReadU64(puDst);
    1360     uint64_t uTmpDst;
     1360    uint64_t uResult;
    13611361    uint32_t fEflTmp;
    13621362    do
    13631363    {
    1364         uTmpDst = uOld;
     1364        uResult = uOld;
    13651365        fEflTmp = *pfEFlags;
    1366         iemAImpl_add_u64(&uTmpDst, *puReg, pfEFlags);
    1367     } while (!ASMAtomicCmpXchgExU64(puDst, uTmpDst, uOld, &uOld));
     1366        iemAImpl_add_u64(&uResult, *puReg, &fEflTmp);
     1367    } while (!ASMAtomicCmpXchgExU64(puDst, uResult, uOld, &uOld));
    13681368    *puReg    = uOld;
    13691369    *pfEFlags = fEflTmp;
     
    13851385{
    13861386    uint32_t uOld = ASMAtomicUoReadU32(puDst);
    1387     uint32_t uTmpDst;
     1387    uint32_t uResult;
    13881388    uint32_t fEflTmp;
    13891389    do
    13901390    {
    1391         uTmpDst = uOld;
     1391        uResult = uOld;
    13921392        fEflTmp = *pfEFlags;
    1393         iemAImpl_add_u32(&uTmpDst, *puReg, pfEFlags);
    1394     } while (!ASMAtomicCmpXchgExU32(puDst, uTmpDst, uOld, &uOld));
     1393        iemAImpl_add_u32(&uResult, *puReg, &fEflTmp);
     1394    } while (!ASMAtomicCmpXchgExU32(puDst, uResult, uOld, &uOld));
    13951395    *puReg    = uOld;
    13961396    *pfEFlags = fEflTmp;
     
    14111411{
    14121412    uint16_t uOld = ASMAtomicUoReadU16(puDst);
    1413     uint16_t uTmpDst;
     1413    uint16_t uResult;
    14141414    uint32_t fEflTmp;
    14151415    do
    14161416    {
    1417         uTmpDst = uOld;
     1417        uResult = uOld;
    14181418        fEflTmp = *pfEFlags;
    1419         iemAImpl_add_u16(&uTmpDst, *puReg, pfEFlags);
    1420     } while (!ASMAtomicCmpXchgExU16(puDst, uTmpDst, uOld, &uOld));
     1419        iemAImpl_add_u16(&uResult, *puReg, &fEflTmp);
     1420    } while (!ASMAtomicCmpXchgExU16(puDst, uResult, uOld, &uOld));
    14211421    *puReg    = uOld;
    14221422    *pfEFlags = fEflTmp;
     
    14371437{
    14381438    uint8_t uOld = ASMAtomicUoReadU8(puDst);
    1439     uint8_t uTmpDst;
     1439    uint8_t uResult;
    14401440    uint32_t fEflTmp;
    14411441    do
    14421442    {
    1443         uTmpDst = uOld;
     1443        uResult = uOld;
    14441444        fEflTmp = *pfEFlags;
    1445         iemAImpl_add_u8(&uTmpDst, *puReg, pfEFlags);
    1446     } while (!ASMAtomicCmpXchgExU8(puDst, uTmpDst, uOld, &uOld));
     1445        iemAImpl_add_u8(&uResult, *puReg, &fEflTmp);
     1446    } while (!ASMAtomicCmpXchgExU8(puDst, uResult, uOld, &uOld));
    14471447    *puReg    = uOld;
    14481448    *pfEFlags = fEflTmp;
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