提交 ea3e61f3 authored 作者: Michael Jerris's avatar Michael Jerris

tweak the defines for memory barriers. This should fix the freebsd build, and…

tweak the defines for memory barriers.  This should fix the freebsd build, and adds proper memory barrier defines for msvc build.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4175 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 ed41805c
...@@ -71,7 +71,17 @@ ...@@ -71,7 +71,17 @@
* *
****************/ ****************/
#if defined(__APPLE__) || defined(__FreeBSD__) #if defined(__VIA_HACK__)
#define NO_BARRIER
#endif
#if defined(NO_BARRIER)
# define PaUtil_FullMemoryBarrier()
# define PaUtil_ReadMemoryBarrier()
# define PaUtil_WriteMemoryBarrier()
#else
#if defined(__APPLE__) //|| defined(__FreeBSD__)
# include <libkern/OSAtomic.h> # include <libkern/OSAtomic.h>
/* Here are the memory barrier functions. Mac OS X and FreeBSD only provide /* Here are the memory barrier functions. Mac OS X and FreeBSD only provide
full memory barriers, so the three types of barriers are the same. */ full memory barriers, so the three types of barriers are the same. */
...@@ -85,39 +95,29 @@ ...@@ -85,39 +95,29 @@
# define PaUtil_FullMemoryBarrier() asm volatile("sync":::"memory") # define PaUtil_FullMemoryBarrier() asm volatile("sync":::"memory")
# define PaUtil_ReadMemoryBarrier() asm volatile("sync":::"memory") # define PaUtil_ReadMemoryBarrier() asm volatile("sync":::"memory")
# define PaUtil_WriteMemoryBarrier() asm volatile("sync":::"memory") # define PaUtil_WriteMemoryBarrier() asm volatile("sync":::"memory")
# elif defined(__VIA_HACK__)
# define PaUtil_FullMemoryBarrier()
# define PaUtil_ReadMemoryBarrier()
# define PaUtil_WriteMemoryBarrier()
# elif defined( __i386__ ) || defined( __i486__ ) || defined( __i586__ ) || defined( __i686__ ) || defined(__x86_64__) # elif defined( __i386__ ) || defined( __i486__ ) || defined( __i586__ ) || defined( __i686__ ) || defined(__x86_64__)
# define PaUtil_FullMemoryBarrier() asm volatile("mfence":::"memory") # define PaUtil_FullMemoryBarrier() asm volatile("mfence":::"memory")
# define PaUtil_ReadMemoryBarrier() asm volatile("lfence":::"memory") # define PaUtil_ReadMemoryBarrier() asm volatile("lfence":::"memory")
# define PaUtil_WriteMemoryBarrier() asm volatile("sfence":::"memory") # define PaUtil_WriteMemoryBarrier() asm volatile("sfence":::"memory")
# else # else
# ifdef ALLOW_SMP_DANGERS
# warning Memory barriers not defined on this system or system unknown
# warning For SMP safety, you should fix this.
# define PaUtil_FullMemoryBarrier()
# define PaUtil_ReadMemoryBarrier()
# define PaUtil_WriteMemoryBarrier()
# else
# error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed.
# endif
# endif
#else
# ifdef ALLOW_SMP_DANGERS
# ifndef _MSC_VER
# warning Memory barriers not defined on this system or system unknown
# warning For SMP safety, you should fix this.
# endif
# define PaUtil_FullMemoryBarrier() # define PaUtil_FullMemoryBarrier()
# define PaUtil_ReadMemoryBarrier() # define PaUtil_ReadMemoryBarrier()
# define PaUtil_WriteMemoryBarrier() # define PaUtil_WriteMemoryBarrier()
# else
# error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed.
# endif # endif
#elif defined(_MSC_VER)
# include <intrin.h>
# pragma intrinsic(_ReadWriteBarrier)
# pragma intrinsic(_ReadBarrier)
# pragma intrinsic(_WriteBarrier)
# define PaUtil_FullMemoryBarrier() _ReadWriteBarrier()
# define PaUtil_ReadMemoryBarrier() _ReadBarrier()
# define PaUtil_WriteMemoryBarrier() _WriteBarrier()
#else
# define PaUtil_FullMemoryBarrier()
# define PaUtil_ReadMemoryBarrier()
# define PaUtil_WriteMemoryBarrier()
#endif
#endif #endif
/*************************************************************************** /***************************************************************************
* Initialize FIFO. * Initialize FIFO.
* numBytes must be power of 2, returns -1 if not. * numBytes must be power of 2, returns -1 if not.
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论