Changes in libcfa/src/bits/defs.hfa [dca5802:8a13c47]
- File:
-
- 1 edited
-
libcfa/src/bits/defs.hfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/bits/defs.hfa
rdca5802 r8a13c47 10 10 // Created On : Thu Nov 9 13:24:10 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T hu Feb 8 16:22:41 201813 // Update Count : 812 // Last Modified On : Tue Jan 28 22:38:27 2020 13 // Update Count : 9 14 14 // 15 15 … … 34 34 35 35 #ifdef __cforall 36 void abort ( const char fmt[], ... ) __attribute__ (( format(printf, 1, 2), __nothrow__, __leaf__, __noreturn__ )); 36 void abort( const char fmt[], ... ) __attribute__ (( format(printf, 1, 2), __nothrow__, __leaf__, __noreturn__ )); 37 void abort( bool signalAbort, const char fmt[], ... ) __attribute__ (( format(printf, 2, 3), __nothrow__, __leaf__, __noreturn__ )); 37 38 extern "C" { 38 39 #endif … … 53 54 return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 ); 54 55 } 55 56 // #define __CFA_NO_BIT_TEST_AND_SET__57 58 #if defined( __i386 )59 static inline bool __atomic_bts(volatile unsigned long int * target, unsigned long int bit ) {60 #if defined(__CFA_NO_BIT_TEST_AND_SET__)61 unsigned long int mask = 1ul << bit;62 unsigned long int ret = __atomic_fetch_or(target, mask, (int)__ATOMIC_RELAXED);63 return (ret & mask) != 0;64 #else65 int result = 0;66 asm volatile(67 "LOCK btsl %[bit], %[target]\n\t"68 : "=@ccc" (result)69 : [target] "m" (*target), [bit] "r" (bit)70 );71 return result != 0;72 #endif73 }74 75 static inline bool __atomic_btr(volatile unsigned long int * target, unsigned long int bit ) {76 #if defined(__CFA_NO_BIT_TEST_AND_SET__)77 unsigned long int mask = 1ul << bit;78 unsigned long int ret = __atomic_fetch_and(target, ~mask, (int)__ATOMIC_RELAXED);79 return (ret & mask) != 0;80 #else81 int result = 0;82 asm volatile(83 "LOCK btrl %[bit], %[target]\n\t"84 :"=@ccc" (result)85 : [target] "m" (*target), [bit] "r" (bit)86 );87 return result != 0;88 #endif89 }90 #elif defined( __x86_64 )91 static inline bool __atomic_bts(volatile unsigned long long int * target, unsigned long long int bit ) {92 #if defined(__CFA_NO_BIT_TEST_AND_SET__)93 unsigned long long int mask = 1ul << bit;94 unsigned long long int ret = __atomic_fetch_or(target, mask, (int)__ATOMIC_RELAXED);95 return (ret & mask) != 0;96 #else97 int result = 0;98 asm volatile(99 "LOCK btsq %[bit], %[target]\n\t"100 : "=@ccc" (result)101 : [target] "m" (*target), [bit] "r" (bit)102 );103 return result != 0;104 #endif105 }106 107 static inline bool __atomic_btr(volatile unsigned long long int * target, unsigned long long int bit ) {108 #if defined(__CFA_NO_BIT_TEST_AND_SET__)109 unsigned long long int mask = 1ul << bit;110 unsigned long long int ret = __atomic_fetch_and(target, ~mask, (int)__ATOMIC_RELAXED);111 return (ret & mask) != 0;112 #else113 int result = 0;114 asm volatile(115 "LOCK btrq %[bit], %[target]\n\t"116 :"=@ccc" (result)117 : [target] "m" (*target), [bit] "r" (bit)118 );119 return result != 0;120 #endif121 }122 #elif defined( __ARM_ARCH )123 #error __atomic_bts and __atomic_btr not implemented for arm124 #else125 #error uknown hardware architecture126 #endif
Note:
See TracChangeset
for help on using the changeset viewer.