- Timestamp:
- Feb 19, 2022 3:15:31 PM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 150069
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r93853 r93854 1263 1263 */ 1264 1264 1265 IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u64,(uint64_t *puMem, uint64_t *puReg)) 1266 { 1267 /* XCHG implies LOCK. */ 1265 IEM_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 1268 1270 uint64_t uOldMem = *puMem; 1269 1271 while (!ASMAtomicCmpXchgExU64(puMem, *puReg, uOldMem, &uOldMem)) 1270 1272 ASMNopPause(); 1271 1273 *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 1279 IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u32_locked,(uint32_t *puMem, uint32_t *puReg)) 1280 { 1281 *puReg = ASMAtomicXchgU32(puMem, *puReg); 1282 } 1283 1284 1285 IEM_DECL_IMPL_DEF(void, iemAImpl_xchg_u16_locked,(uint16_t *puMem, uint16_t *puReg)) 1286 { 1287 *puReg = ASMAtomicXchgU16(puMem, *puReg); 1288 } 1289 1290 1291 IEM_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 1301 IEM_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 1310 IEM_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 1318 IEM_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 1326 IEM_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; 1303 1331 } 1304 1332
Note:
See TracChangeset
for help on using the changeset viewer.