Changeset 25665 in vbox for trunk/include
- Timestamp:
- Jan 6, 2010 4:19:49 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 56380
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/asm.h
r25645 r25665 117 117 #endif 118 118 119 /** @def RT_INLINE_ASM_GCC_4_3_X_X86120 * Used to work around some 4.3.x register allocation issues in this version of121 * the compiler. */122 #ifdef __GNUC__123 # define RT_INLINE_ASM_GCC_4_3_X_X86 (__GNUC__ == 4 && __GNUC_MINOR__ == 3 && defined(__i386__))124 #endif125 #ifndef RT_INLINE_ASM_GCC_4_3_X_X86126 # define RT_INLINE_ASM_GCC_4_3_X_X86 0127 #endif128 129 130 119 131 120 /** @defgroup grp_asm ASM - Assembly Routines … … 167 156 * @{ 168 157 */ 158 159 /** @def RT_INLINE_ASM_GCC_4_3_X_X86 160 * Used to work around some 4.3.x register allocation issues in this version of 161 * the compiler. */ 162 #ifdef __GNUC__ 163 # define RT_INLINE_ASM_GCC_4_3_X_X86 (__GNUC__ == 4 && __GNUC_MINOR__ == 3 && defined(__i386__)) 164 #endif 165 #ifndef RT_INLINE_ASM_GCC_4_3_X_X86 166 # define RT_INLINE_ASM_GCC_4_3_X_X86 0 167 #endif 168 169 /** @def RT_INLINE_DONT_USE_CMPXCHG8B 170 * i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5493) screws up 171 * RTSemRWRequestWrite semsemrw-lockless-generic.cpp in release builds. PIC 172 * mode, x86. 173 * 174 * Some gcc 4.3.x versions may have register allocation issues with cmpxchg8b 175 * when in PIC mode on x86. 176 */ 177 #ifndef RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 178 # define RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC \ 179 ( (defined(PIC) || defined(__PIC__)) \ 180 && defined(RT_ARCH_X86) \ 181 && ( RT_INLINE_ASM_GCC_4_3_X_X86 \ 182 || defined(RT_OS_DARWIN)) ) 183 #endif 169 184 170 185 /** @def RT_INLINE_ASM_EXTERNAL … … 2808 2823 * @param u64 The 64-bit value to assign to *pu64. 2809 2824 */ 2810 #if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN 2825 #if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ 2826 || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 2811 2827 DECLASM(uint64_t) ASMAtomicXchgU64(volatile uint64_t *pu64, uint64_t u64); 2812 2828 #else … … 3175 3191 */ 3176 3192 #if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ 3177 || (RT_INLINE_ASM_GCC_4_3_X_X86 && defined(IN_RING3) && defined(__PIC__))3193 || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 3178 3194 DECLASM(bool) ASMAtomicCmpXchgU64(volatile uint64_t *pu64, const uint64_t u64New, const uint64_t u64Old); 3179 3195 #else 3180 DECLINLINE(bool) ASMAtomicCmpXchgU64(volatile uint64_t *pu64, constuint64_t u64New, uint64_t u64Old)3196 DECLINLINE(bool) ASMAtomicCmpXchgU64(volatile uint64_t *pu64, uint64_t u64New, uint64_t u64Old) 3181 3197 { 3182 3198 # if RT_INLINE_ASM_USES_INTRIN … … 3443 3459 * @param pu64Old Pointer store the old value at. 3444 3460 */ 3445 #if RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN 3461 #if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ 3462 || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 3446 3463 DECLASM(bool) ASMAtomicCmpXchgExU64(volatile uint64_t *pu64, const uint64_t u64New, const uint64_t u64Old, uint64_t *pu64Old); 3447 3464 #else … … 4222 4239 */ 4223 4240 #if (RT_INLINE_ASM_EXTERNAL && !defined(RT_ARCH_AMD64)) \ 4224 || (RT_INLINE_ASM_GCC_4_3_X_X86 && defined(IN_RING3) && defined(__PIC__))4241 || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 4225 4242 DECLASM(uint64_t) ASMAtomicReadU64(volatile uint64_t *pu64); 4226 4243 #else … … 4300 4317 * @remark This will fault if the memory is read-only! 4301 4318 */ 4302 #if RT_INLINE_ASM_EXTERNAL && !defined(RT_ARCH_AMD64) 4319 #if #if (RT_INLINE_ASM_EXTERNAL && !RT_INLINE_ASM_USES_INTRIN) \ 4320 || RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC 4303 4321 DECLASM(uint64_t) ASMAtomicUoReadU64(volatile uint64_t *pu64); 4304 4322 #else
Note:
See TracChangeset
for help on using the changeset viewer.