VirtualBox

Changeset 93854 in vbox for trunk/src


Ignore:
Timestamp:
Feb 19, 2022 3:15:31 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
150069
Message:

VMM/IEM: Working on adding missing C version of IEMAllAImpl.asm functions. bugref:9898

File:
1 edited

Legend:

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

    r93853 r93854  
    12631263 */
    12641264
    1265 IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u64,(uint64_t *puMem, uint64_t *puReg))
    1266 {
    1267     /* XCHG implies LOCK. */
     1265IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u64_locked,(uint64_t *puMem, uint64_t *puReg))
     1266{
     1267#if ARCH_BITS >= 64
     1268    *puReg = ASMAtomicXchgU64(puMem, *puReg);
     1269#else
    12681270    uint64_t uOldMem = *puMem;
    12691271    while (!ASMAtomicCmpXchgExU64(puMem, *puReg, uOldMem, &uOldMem))
    12701272        ASMNopPause();
    12711273    *puReg = uOldMem;
    1272 }
    1273 
    1274 # if !defined(RT_ARCH_X86) || defined(IEM_WITHOUT_ASSEMBLY)
    1275 
    1276 IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u32,(uint32_t *puMem, uint32_t *puReg))
    1277 {
    1278     /* XCHG implies LOCK. */
    1279     uint32_t uOldMem = *puMem;
    1280     while (!ASMAtomicCmpXchgExU32(puMem, *puReg, uOldMem, &uOldMem))
    1281         ASMNopPause();
    1282     *puReg = uOldMem;
    1283 }
    1284 
    1285 
    1286 IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u16,(uint16_t *puMem, uint16_t *puReg))
    1287 {
    1288     /* XCHG implies LOCK. */
    1289     uint16_t uOldMem = *puMem;
    1290     while (!ASMAtomicCmpXchgExU16(puMem, *puReg, uOldMem, &uOldMem))
    1291         ASMNopPause();
    1292     *puReg = uOldMem;
    1293 }
    1294 
    1295 
    1296 IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u8,(uint8_t *puMem, uint8_t *puReg))
    1297 {
    1298     /* XCHG implies LOCK. */
    1299     uint8_t uOldMem = *puMem;
    1300     while (!ASMAtomicCmpXchgExU8(puMem, *puReg, uOldMem, &uOldMem))
    1301         ASMNopPause();
    1302     *puReg = uOldMem;
     1274#endif
     1275}
     1276
     1277# if !defined(RT_ARCH_X86) || defined(IEM_WITHOUT_ASSEMBLY)
     1278
     1279IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u32_locked,(uint32_t *puMem, uint32_t *puReg))
     1280{
     1281    *puReg = ASMAtomicXchgU32(puMem, *puReg);
     1282}
     1283
     1284
     1285IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u16_locked,(uint16_t *puMem, uint16_t *puReg))
     1286{
     1287    *puReg = ASMAtomicXchgU16(puMem, *puReg);
     1288}
     1289
     1290
     1291IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u8_locked,(uint8_t *puMem, uint8_t *puReg))
     1292{
     1293    *puReg = ASMAtomicXchgU8(puMem, *puReg);
     1294}
     1295
     1296# endif /* !defined(RT_ARCH_X86) || defined(IEM_WITHOUT_ASSEMBLY) */
     1297
     1298
     1299/* Unlocked variants for fDisregardLock mode: */
     1300
     1301IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u64_unlocked,(uint64_t *puMem, uint64_t *puReg))
     1302{
     1303    uint64_t const uOld = *puMem;
     1304    *puMem = *puReg;
     1305    *puReg = uOld;
     1306}
     1307
     1308# if !defined(RT_ARCH_X86) || defined(IEM_WITHOUT_ASSEMBLY)
     1309
     1310IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u32_unlocked,(uint32_t *puMem, uint32_t *puReg))
     1311{
     1312    uint32_t const uOld = *puMem;
     1313    *puMem = *puReg;
     1314    *puReg = uOld;
     1315}
     1316
     1317
     1318IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u16_unlocked,(uint16_t *puMem, uint16_t *puReg))
     1319{
     1320    uint16_t const uOld = *puMem;
     1321    *puMem = *puReg;
     1322    *puReg = uOld;
     1323}
     1324
     1325
     1326IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u8_unlocked,(uint8_t *puMem, uint8_t *puReg))
     1327{
     1328    uint8_t const uOld = *puMem;
     1329    *puMem = *puReg;
     1330    *puReg = uOld;
    13031331}
    13041332
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