Merge "Add definitions for store barrier."
diff --git a/include/cutils/atomic-arm.h b/include/cutils/atomic-arm.h
index 0dd629d..3ed9af2 100644
--- a/include/cutils/atomic-arm.h
+++ b/include/cutils/atomic-arm.h
@@ -28,18 +28,30 @@
#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 @@
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)
diff --git a/include/cutils/atomic-inline.h b/include/cutils/atomic-inline.h
index 715e0aa..6acb67c 100644
--- a/include/cutils/atomic-inline.h
+++ b/include/cutils/atomic-inline.h
@@ -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 */
diff --git a/include/cutils/atomic-x86.h b/include/cutils/atomic-x86.h
index 06b643f..834379d 100644
--- a/include/cutils/atomic-x86.h
+++ b/include/cutils/atomic-x86.h
@@ -29,11 +29,19 @@
{
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) {