- Timestamp:
- Oct 21, 2024 7:58:11 AM (6 months ago)
- svn:sync-xref-src-repo-rev:
- 165380
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/asm.h
r106545 r106546 6370 6370 DECLINLINE(uint32_t) ASMAtomicUoOrExU32(uint32_t volatile RT_FAR *pu32, uint32_t u32) RT_NOTHROW_DEF 6371 6371 { 6372 #if RT_INLINE_ASM_USES_INTRIN /** @todo Check what the compiler generates... */ 6372 #if defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32) 6373 # if RT_INLINE_ASM_USES_INTRIN /** @todo Check what the compiler generates... */ 6373 6374 return (uint32_t)_InterlockedOr_nf((long volatile RT_FAR *)pu32, u32); 6374 6375 #elif defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32) 6376 # if defined(RTASM_ARM64_USE_FEAT_LSE) 6375 # elif defined(RTASM_ARM64_USE_FEAT_LSE) 6377 6376 uint32_t u32OldRet; 6378 6377 __asm__ __volatile__("Lstart_ASMAtomicOrExU32_%=:\n\t" … … 6382 6381 : [fBitsToSet] "r" (u32) 6383 6382 : ); 6384 # else 6383 return u32OldRet; 6384 # else 6385 uint32_t u32OldRet; 6385 6386 RTASM_ARM_LOAD_MODIFY_STORE_RET_OLD_32(ASMAtomicUoOrExU32, pu32, NO_BARRIER, 6386 6387 "orr %w[uNew], %w[uOld], %w[uVal]\n\t", 6387 6388 "orr %[uNew], %[uOld], %[uVal]\n\t", 6388 6389 [uVal] "r" (u32)); 6389 # endif6390 6390 return u32OldRet; 6391 6391 # endif 6392 6392 #else 6393 6393 return ASMAtomicOrExU32(pu32, u32); /* (we have no unordered cmpxchg primitive atm.) */
Note:
See TracChangeset
for help on using the changeset viewer.