| Index: third_party/harfbuzz-ng/src/hb-atomic-private.hh
|
| ===================================================================
|
| --- third_party/harfbuzz-ng/src/hb-atomic-private.hh (리비전 189447)
|
| +++ third_party/harfbuzz-ng/src/hb-atomic-private.hh (작업 사본)
|
| @@ -42,27 +42,15 @@
|
| #if 0
|
|
|
|
|
| -#elif !defined(HB_NO_MT) && defined(_MSC_VER) || defined(__MINGW32__)
|
| +#elif !defined(HB_NO_MT) && (defined(_WIN32) || defined(__CYGWIN__))
|
|
|
| #define WIN32_LEAN_AND_MEAN
|
| #include <windows.h>
|
|
|
| -/* mingw32 does not have MemoryBarrier.
|
| - * MemoryBarrier may be defined as a macro or a function.
|
| - * Just make a failsafe version for ourselves. */
|
| -#ifdef MemoryBarrier
|
| -#define HBMemoryBarrier MemoryBarrier
|
| -#else
|
| -static inline void HBMemoryBarrier (void) {
|
| - long dummy = 0;
|
| - InterlockedExchange (&dummy, 1);
|
| -}
|
| -#endif
|
| -
|
| typedef LONG hb_atomic_int_t;
|
| #define hb_atomic_int_add(AI, V) InterlockedExchangeAdd (&(AI), (V))
|
|
|
| -#define hb_atomic_ptr_get(P) (HBMemoryBarrier (), (void *) *(P))
|
| +#define hb_atomic_ptr_get(P) (MemoryBarrier (), (void *) *(P))
|
| #define hb_atomic_ptr_cmpexch(P,O,N) (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))
|
|
|
|
|
| @@ -99,6 +87,18 @@
|
| #define hb_atomic_ptr_cmpexch(P,O,N) __sync_bool_compare_and_swap ((P), (O), (N))
|
|
|
|
|
| +#elif !defined(HB_NO_MT) && defined(HAVE_SOLARIS_ATOMIC_OPS)
|
| +
|
| +#include <atomic.h>
|
| +#include <mbarrier.h>
|
| +
|
| +typedef unsigned int hb_atomic_int_t;
|
| +#define hb_atomic_int_add(AI, V) ( ({__machine_rw_barrier ();}), atomic_add_int_nv (&(AI), (V)) - (V))
|
| +
|
| +#define hb_atomic_ptr_get(P) ( ({__machine_rw_barrier ();}), (void *) *(P))
|
| +#define hb_atomic_ptr_cmpexch(P,O,N) ( ({__machine_rw_barrier ();}), atomic_cas_ptr ((void **) (P), (void *) (O), (void *) (N)) == (void *) (O) ? true : false)
|
| +
|
| +
|
| #elif !defined(HB_NO_MT)
|
|
|
| #define HB_ATOMIC_INT_NIL 1 /* Warn that fallback implementation is in use. */
|
|
|