1#include <BeOSBuildCompatibility.h> 2 3#include <string.h> 4 5#include <OS.h> 6#include <SupportDefs.h> 7 8 9#if (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)) \ 10 && !defined(__clang__) 11 12 13void 14atomic_set(int32 *value, int32 newValue) 15{ 16 *value = newValue; 17} 18 19 20int32 21atomic_get_and_set(int32 *value, int32 newValue) 22{ 23 int32 oldValue = *value; 24 *value = newValue; 25 return oldValue; 26} 27 28 29int32 30atomic_test_and_set(int32 *value, int32 newValue, int32 testAgainst) 31{ 32 int32 oldValue = *value; 33 if (oldValue == testAgainst) 34 *value = newValue; 35 return oldValue; 36} 37 38 39int32 40atomic_add(int32 *value, int32 addValue) 41{ 42 int32 oldValue = *value; 43 *value += addValue; 44 return oldValue; 45} 46 47 48int32 49atomic_and(int32 *value, int32 andValue) 50{ 51 int32 oldValue = *value; 52 *value &= andValue; 53 return oldValue; 54} 55 56 57int32 58atomic_or(int32 *value, int32 orValue) 59{ 60 int32 oldValue = *value; 61 *value |= orValue; 62 return oldValue; 63} 64 65 66int32 67atomic_get(int32 *value) 68{ 69 return *value; 70} 71 72 73void 74atomic_set64(int64 *value, int64 newValue) 75{ 76 *value = newValue; 77} 78 79 80int64 81atomic_get_and_set64(int64 *value, int64 newValue) 82{ 83 int64 oldValue = *value; 84 *value = newValue; 85 return oldValue; 86} 87 88int64 89atomic_test_and_set64(int64 *value, int64 newValue, int64 testAgainst) 90{ 91 int64 oldValue = *value; 92 if (oldValue == testAgainst) 93 *value = newValue; 94 return oldValue; 95} 96 97int64 98atomic_add64(int64 *value, int64 addValue) 99{ 100 int64 oldValue = *value; 101 *value += addValue; 102 return oldValue; 103} 104 105int64 106atomic_and64(int64 *value, int64 andValue) 107{ 108 int64 oldValue = *value; 109 *value &= andValue; 110 return oldValue; 111} 112 113int64 114atomic_or64(int64 *value, int64 orValue) 115{ 116 int64 oldValue = *value; 117 *value |= orValue; 118 return oldValue; 119} 120 121int64 122atomic_get64(int64 *value) 123{ 124 return *value; 125} 126 127 128#endif // __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) 129 130