src/hb-atomic-private.hh | 6 +++--- src/hb-cache-private.hh | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-)
New commits: commit e4b6d503c5575ddbf49249e3fef693d75ae75170 Author: Behdad Esfahbod <beh...@behdad.org> Date: Sun May 27 10:11:13 2012 -0400 Don't use atomic ops in hb_cache_t We don't care about linearizability, so unprotected int read/write are enough, no need for expensive memory barriers. It's a cache, that's all. diff --git a/src/hb-cache-private.hh b/src/hb-cache-private.hh index 7394fbb..a0928a0 100644 --- a/src/hb-cache-private.hh +++ b/src/hb-cache-private.hh @@ -36,7 +36,7 @@ template <unsigned int key_bits, unsigned int value_bits, unsigned int cache_bit struct hb_cache_t { ASSERT_STATIC (key_bits >= cache_bits); - ASSERT_STATIC (key_bits + value_bits - cache_bits < 8 * sizeof (hb_atomic_int_t)); + ASSERT_STATIC (key_bits + value_bits - cache_bits < 8 * sizeof (unsigned int)); inline void clear (void) { @@ -46,7 +46,7 @@ struct hb_cache_t inline bool get (unsigned int key, unsigned int *value) { unsigned int k = key & ((1<<cache_bits)-1); - unsigned int v = hb_atomic_int_get (values[k]); + unsigned int v = values[k]; if ((v >> value_bits) != (key >> cache_bits)) return false; } @@ -57,12 +57,12 @@ struct hb_cache_t return false; /* Overflows */ unsigned int k = key & ((1<<cache_bits)-1); unsigned int v = ((key>>cache_bits)<<value_bits) | value; - hb_atomic_int_set (values[k], v); + values[k] = v; return true; } private: - hb_atomic_int_t values[1<<cache_bits]; + unsigned int values[1<<cache_bits]; }; typedef hb_cache_t<21, 16, 8> hb_cmap_cache_t; commit 819faa05307aa192015f4b43d8103a35e87d6cc7 Author: Behdad Esfahbod <beh...@behdad.org> Date: Sun May 27 10:09:18 2012 -0400 Minor diff --git a/src/hb-atomic-private.hh b/src/hb-atomic-private.hh index b587fde..ba52773 100644 --- a/src/hb-atomic-private.hh +++ b/src/hb-atomic-private.hh @@ -78,7 +78,7 @@ typedef volatile int hb_atomic_int_t; #define HB_ATOMIC_INT_NIL 1 typedef volatile int hb_atomic_int_t; -#define hb_atomic_int_add(AI, V) ((AI) += (V), (AI) - (V)) +#define hb_atomic_int_add(AI, V) (((AI) += (V)) - (V)) #define hb_atomic_int_set(AI, V) ((void) ((AI) = (V))) #define hb_atomic_int_get(AI) (AI) commit 303d5850ec0516e198db241456b0cfc4899ef9c0 Author: Behdad Esfahbod <beh...@behdad.org> Date: Sun May 27 10:01:13 2012 -0400 Fix Windows atomic get/set According to: http://msdn.microsoft.com/en-us/library/65tt87y8.aspx MemoryBarrier() is the right macro to protect these, not _ReadBarrier() and/or _WriteBarrier(). diff --git a/src/hb-atomic-private.hh b/src/hb-atomic-private.hh index 684e856..b587fde 100644 --- a/src/hb-atomic-private.hh +++ b/src/hb-atomic-private.hh @@ -47,8 +47,8 @@ #include <intrin.h> typedef long hb_atomic_int_t; #define hb_atomic_int_add(AI, V) _InterlockedExchangeAdd (&(AI), (V)) -#define hb_atomic_int_set(AI, V) _InterlockedExchange (&(AI), (V)) -#define hb_atomic_int_get(AI) (_ReadBarrier (), (AI)) +#define hb_atomic_int_set(AI, V) ((AI) = (V), MemoryBarrier ()) +#define hb_atomic_int_get(AI) (MemoryBarrier (), (AI)) #elif !defined(HB_NO_MT) && defined(__APPLE__) _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/harfbuzz