From: Ivan Maidanski Date: Sun, 6 Jan 2013 18:04:48 +0000 (+0400) Subject: Fix missing compiler barrier in AO_nop_full for uniprocessor ARM X-Git-Tag: libatomic_ops-7_4_0~48^2~31 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b78058a2a967cfa7807efd545c70c4a0c7bbb1a6;p=platform%2Fupstream%2Flibatomic_ops.git Fix missing compiler barrier in AO_nop_full for uniprocessor ARM * 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. --- diff --git a/src/atomic_ops/sysdeps/armcc/arm_v6.h b/src/atomic_ops/sysdeps/armcc/arm_v6.h index 4c965b1..7c3f6e5 100644 --- a/src/atomic_ops/sysdeps/armcc/arm_v6.h +++ b/src/atomic_ops/sysdeps/armcc/arm_v6.h @@ -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 diff --git a/src/atomic_ops/sysdeps/gcc/arm.h b/src/atomic_ops/sysdeps/gcc/arm.h index 37bc811..ab0b42f 100644 --- a/src/atomic_ops/sysdeps/gcc/arm.h +++ b/src/atomic_ops/sysdeps/gcc/arm.h @@ -97,6 +97,8 @@ AO_nop_full(void) : "=&r"(dest) : /* empty */ : AO_THUMB_SWITCH_CLOBBERS "memory"); +# else + AO_compiler_barrier(); # endif } #define AO_HAVE_nop_full diff --git a/src/atomic_ops/sysdeps/msftc/arm.h b/src/atomic_ops/sysdeps/msftc/arm.h index 68727cc..5a96ee7 100644 --- a/src/atomic_ops/sysdeps/msftc/arm.h +++ b/src/atomic_ops/sysdeps/msftc/arm.h @@ -33,10 +33,12 @@ #if _M_ARM >= 6 /* ARMv6 is the first architecture providing support for simple LL/SC. */ -/* 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(). */