提交 bee92013 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

oops: still need compiler barriers!

上级 1153b3c3
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define _GLIBCXX_BEGIN_EXTERN_C extern "C" { #define _GLIBCXX_BEGIN_EXTERN_C extern "C" {
#define _GLIBCXX_END_EXTERN_C } #define _GLIBCXX_END_EXTERN_C }
#define __glibcxx_assert(x) #define __glibcxx_assert(x)
#define __barrier() do { __asm__ __volatile__("" ::: "memory"); } while (0)
#define _GLIBCXX_ATOMIC_BUILTINS_1 1 #define _GLIBCXX_ATOMIC_BUILTINS_1 1
#define _GLIBCXX_ATOMIC_BUILTINS_2 1 #define _GLIBCXX_ATOMIC_BUILTINS_2 1
......
...@@ -285,8 +285,10 @@ namespace __atomic2 ...@@ -285,8 +285,10 @@ namespace __atomic2
__glibcxx_assert(__m != memory_order_acq_rel); __glibcxx_assert(__m != memory_order_acq_rel);
// __sync_synchronize(); // __sync_synchronize();
__barrier();
__int_type __ret = _M_i; __int_type __ret = _M_i;
// __sync_synchronize(); // __sync_synchronize();
__barrier();
return __ret; return __ret;
} }
...@@ -297,8 +299,10 @@ namespace __atomic2 ...@@ -297,8 +299,10 @@ namespace __atomic2
__glibcxx_assert(__m != memory_order_acq_rel); __glibcxx_assert(__m != memory_order_acq_rel);
// __sync_synchronize(); // __sync_synchronize();
__barrier();
__int_type __ret = _M_i; __int_type __ret = _M_i;
// __sync_synchronize(); // __sync_synchronize();
__barrier();
return __ret; return __ret;
} }
...@@ -577,8 +581,10 @@ namespace __atomic2 ...@@ -577,8 +581,10 @@ namespace __atomic2
__glibcxx_assert(__m != memory_order_acq_rel); __glibcxx_assert(__m != memory_order_acq_rel);
// __sync_synchronize(); // __sync_synchronize();
__barrier();
__pointer_type __ret = _M_p; __pointer_type __ret = _M_p;
// __sync_synchronize(); // __sync_synchronize();
__barrier();
return __ret; return __ret;
} }
...@@ -589,8 +595,10 @@ namespace __atomic2 ...@@ -589,8 +595,10 @@ namespace __atomic2
__glibcxx_assert(__m != memory_order_acq_rel); __glibcxx_assert(__m != memory_order_acq_rel);
// __sync_synchronize(); // __sync_synchronize();
__barrier();
__pointer_type __ret = _M_p; __pointer_type __ret = _M_p;
// __sync_synchronize(); // __sync_synchronize();
__barrier();
return __ret; return __ret;
} }
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论