diff options
Diffstat (limited to 'libs/rs/driver/rsdRuntimeMath.cpp')
-rw-r--r-- | libs/rs/driver/rsdRuntimeMath.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/libs/rs/driver/rsdRuntimeMath.cpp b/libs/rs/driver/rsdRuntimeMath.cpp index 4c300b7..753ef73 100644 --- a/libs/rs/driver/rsdRuntimeMath.cpp +++ b/libs/rs/driver/rsdRuntimeMath.cpp @@ -14,6 +14,8 @@ * limitations under the License. */ +#include <cutils/compiler.h> + #include "rsContext.h" #include "rsScriptC.h" #include "rsMatrix4x4.h" @@ -306,7 +308,7 @@ static int32_t SC_AtomicSub(volatile int32_t *ptr, int32_t value) { do { prev = *ptr; status = android_atomic_release_cas(prev, prev - value, ptr); - } while (__builtin_expect(status != 0, 0)); + } while (CC_UNLIKELY(status != 0)); return prev; } @@ -323,7 +325,17 @@ static int32_t SC_AtomicXor(volatile int32_t *ptr, int32_t value) { do { prev = *ptr; status = android_atomic_release_cas(prev, prev ^ value, ptr); - } while (__builtin_expect(status != 0, 0)); + } while (CC_UNLIKELY(status != 0)); + return prev; +} + +static uint32_t SC_AtomicUMin(volatile uint32_t *ptr, uint32_t value) { + uint32_t prev, status; + do { + prev = *ptr; + uint32_t n = rsMin(value, prev); + status = android_atomic_release_cas((int32_t) prev, (int32_t)n, (volatile int32_t*) ptr); + } while (CC_UNLIKELY(status != 0)); return prev; } @@ -333,7 +345,17 @@ static int32_t SC_AtomicMin(volatile int32_t *ptr, int32_t value) { prev = *ptr; int32_t n = rsMin(value, prev); status = android_atomic_release_cas(prev, n, ptr); - } while (__builtin_expect(status != 0, 0)); + } while (CC_UNLIKELY(status != 0)); + return prev; +} + +static uint32_t SC_AtomicUMax(volatile uint32_t *ptr, uint32_t value) { + uint32_t prev, status; + do { + prev = *ptr; + uint32_t n = rsMax(value, prev); + status = android_atomic_release_cas((int32_t) prev, (int32_t) n, (volatile int32_t*) ptr); + } while (CC_UNLIKELY(status != 0)); return prev; } @@ -343,7 +365,7 @@ static int32_t SC_AtomicMax(volatile int32_t *ptr, int32_t value) { prev = *ptr; int32_t n = rsMax(value, prev); status = android_atomic_release_cas(prev, n, ptr); - } while (__builtin_expect(status != 0, 0)); + } while (CC_UNLIKELY(status != 0)); return prev; } @@ -522,9 +544,9 @@ static RsdSymbolTable gSyms[] = { { "_Z11rsAtomicXorPVii", (void *)&SC_AtomicXor, true }, { "_Z11rsAtomicXorPVjj", (void *)&SC_AtomicXor, true }, { "_Z11rsAtomicMinPVii", (void *)&SC_AtomicMin, true }, - { "_Z11rsAtomicMinPVjj", (void *)&SC_AtomicMin, true }, + { "_Z11rsAtomicMinPVjj", (void *)&SC_AtomicUMin, true }, { "_Z11rsAtomicMaxPVii", (void *)&SC_AtomicMax, true }, - { "_Z11rsAtomicMaxPVjj", (void *)&SC_AtomicMax, true }, + { "_Z11rsAtomicMaxPVjj", (void *)&SC_AtomicUMax, true }, { "_Z11rsAtomicCasPViii", (void *)&SC_AtomicCas, true }, { "_Z11rsAtomicCasPVjjj", (void *)&SC_AtomicCas, true }, |