Merge "Add definitions for store barrier."

This commit is contained in:
Brian Carlstrom 2010-09-24 13:59:41 -07:00 committed by Android (Google) Code Review
commit b32007c54b
3 changed files with 33 additions and 3 deletions

View File

@ -28,18 +28,30 @@ extern inline void android_compiler_barrier(void)
#if ANDROID_SMP == 0
extern inline void android_memory_barrier(void)
{
android_compiler_barrier();
android_compiler_barrier();
}
extern inline void android_memory_store_barrier(void)
{
android_compiler_barrier();
}
#elif defined(__ARM_HAVE_DMB)
extern inline void android_memory_barrier(void)
{
__asm__ __volatile__ ("dmb" : : : "memory");
}
extern inline void android_memory_store_barrier(void)
{
/* TODO: use "dmb st" once the toolchain understands it */
__asm__ __volatile__ ("dmb" : : : "memory");
}
#elif defined(__ARM_HAVE_LDREX_STREX)
extern inline void android_memory_barrier(void)
{
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5"
: : "r" (0) : "memory");
__asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r" (0) : "memory");
}
extern inline void android_memory_store_barrier(void)
{
android_memory_barrier();
}
#else
extern inline void android_memory_barrier(void)
@ -47,6 +59,10 @@ extern inline void android_memory_barrier(void)
typedef void (kuser_memory_barrier)(void);
(*(kuser_memory_barrier *)0xffff0fa0)();
}
extern inline void android_memory_store_barrier(void)
{
android_memory_barrier();
}
#endif
extern inline int32_t android_atomic_acquire_load(volatile int32_t *ptr)

View File

@ -55,4 +55,10 @@
#define ANDROID_MEMBAR_FULL android_memory_barrier
#endif
#if ANDROID_SMP == 0
#define ANDROID_MEMBAR_STORE android_compiler_barrier
#else
#define ANDROID_MEMBAR_STORE android_memory_store_barrier
#endif
#endif /* ANDROID_CUTILS_ATOMIC_INLINE_H */

View File

@ -29,11 +29,19 @@ extern inline void android_memory_barrier(void)
{
android_compiler_barrier();
}
extern inline void android_memory_store_barrier(void)
{
android_compiler_barrier();
}
#else
extern inline void android_memory_barrier(void)
{
__asm__ __volatile__ ("mfence" : : : "memory");
}
extern inline void android_memory_store_barrier(void)
{
android_compiler_barrier();
}
#endif
extern inline int32_t android_atomic_acquire_load(volatile int32_t *ptr) {