Fix missing compiler barrier in AO_nop_full for uniprocessor ARM
authorIvan Maidanski <ivmai@mail.ru>
Sun, 6 Jan 2013 18:04:48 +0000 (22:04 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 11 Jan 2013 18:47:05 +0000 (22:47 +0400)
(Apply commit b78058a from 'add-dbl-load-store' branch.)

* src/atomic_ops/sysdeps/armcc/arm_v6.h (AO_nop_full): Insert
AO_compiler_barrier for AO_UNIPROCESSOR case.
* src/atomic_ops/sysdeps/gcc/arm.h (AO_nop_full): Likewise.
* src/atomic_ops/sysdeps/msftc/arm.h (AO_nop_full): Likewise.
* src/atomic_ops/sysdeps/msftc/arm.h (AO_nop_full): Refine comment.

Conflicts:

src/atomic_ops/sysdeps/msftc/arm.h

src/atomic_ops/sysdeps/armcc/arm_v6.h
src/atomic_ops/sysdeps/gcc/arm.h
src/atomic_ops/sysdeps/msftc/arm.h

index a239587..fd6113d 100644 (file)
@@ -50,6 +50,8 @@ AO_nop_full(void)
     __asm {
             mcr p15,0,dest,c7,c10,5
             };
+# else
+    AO_compiler_barrier();
 # endif
 }
 #define AO_HAVE_nop_full
index 2a4520c..0d7a93f 100644 (file)
@@ -79,6 +79,8 @@ AO_nop_full(void)
       : "=&r"(dest)
       : /* empty */
       : AO_THUMB_SWITCH_CLOBBERS "memory");
+# else
+    AO_compiler_barrier();
 # endif
 }
 #define AO_HAVE_nop_full
index 36e45f0..18fa11c 100644 (file)
 
 #include "../standard_ao_double_t.h"
 
-/* If only a single processor is used, we can define AO_UNIPROCESSOR    */
-/* and do not need to access CP15 for ensuring a DMB at all.            */
+/* If only a single processor is used, we can define AO_UNIPROCESSOR.   */
 #ifdef AO_UNIPROCESSOR
-  AO_INLINE void AO_nop_full(void) {}
+  AO_INLINE void AO_nop_full(void)
+  {
+    AO_compiler_barrier();
+  }
 # define AO_HAVE_nop_full
 #else
 /* AO_nop_full() is emulated using AO_test_and_set_full().              */