[HarfBuzz] harfbuzz: Branch 'master' - 4 commits
Behdad Esfahbod
behdad at kemper.freedesktop.org
Wed Jul 11 15:24:36 UTC 2018
src/hb-dsalgs.hh | 11 ++------
src/hb-private.hh | 66 +++++++++++++++++++++++++++---------------------
src/hb-static.cc | 4 +-
test/api/test-ot-math.c | 4 +-
4 files changed, 46 insertions(+), 39 deletions(-)
New commits:
commit f3a74c16ecafdca135a647ebe85117c35c1ef585
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Wed Jul 11 17:23:53 2018 +0200
Make hb_vector_t 8 bytes smaller
diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh
index 953310bc..fc7d1f0a 100644
--- a/src/hb-dsalgs.hh
+++ b/src/hb-dsalgs.hh
@@ -450,8 +450,7 @@ template <typename Type, unsigned int StaticSize=8>
struct hb_vector_t
{
unsigned int len;
- unsigned int allocated;
- bool successful;
+ unsigned int allocated; /* == 0 means allocation failed. */
Type *arrayZ;
Type static_array[StaticSize];
@@ -459,7 +458,6 @@ struct hb_vector_t
{
len = 0;
allocated = ARRAY_LENGTH (static_array);
- successful = true;
arrayZ = static_array;
}
@@ -492,7 +490,7 @@ struct hb_vector_t
/* Allocate for size but don't adjust len. */
inline bool alloc (unsigned int size)
{
- if (unlikely (!successful))
+ if (unlikely (!allocated))
return false;
if (likely (size <= allocated))
@@ -521,7 +519,7 @@ struct hb_vector_t
if (unlikely (!new_array))
{
- successful = false;
+ allocated = 0;
return false;
}
commit 44999f8b758374015f5d48c83f9adcb464607c2f
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Wed Jul 11 17:00:59 2018 +0200
Align NullPool and CrapPool to HB_VECTOR_SIZE
diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh
index 6a8ddaa9..953310bc 100644
--- a/src/hb-dsalgs.hh
+++ b/src/hb-dsalgs.hh
@@ -854,8 +854,7 @@ struct hb_vector_size_t
union {
elt_t v[byte_size / sizeof (elt_t)];
#if HB_VECTOR_SIZE
- typedef unsigned long vec_t __attribute__((vector_size (HB_VECTOR_SIZE / 8)));
- vec_t vec[byte_size / sizeof (vec_t)];
+ hb_vector_size_impl_t vec[byte_size / sizeof (hb_vector_size_impl_t)];
#endif
} u;
};
diff --git a/src/hb-private.hh b/src/hb-private.hh
index ae733872..74b9e274 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
@@ -334,6 +334,39 @@ static_assert ((sizeof (hb_var_int_t) == 4), "");
TypeName(const TypeName&); \
void operator=(const TypeName&)
+
+/*
+ * Compiler-assisted vectorization parameters.
+ */
+
+/*
+ * Disable vectorization for now. To correctly use them, we should
+ * use posix_memalign() to allocate in hb_vector_t. Otherwise, can
+ * cause misaligned access.
+ *
+ * https://bugs.chromium.org/p/chromium/issues/detail?id=860184
+ */
+#if !defined(HB_VECTOR_SIZE)
+# define HB_VECTOR_SIZE 0
+#endif
+
+/* The `vector_size' attribute was introduced in gcc 3.1. */
+#if !defined(HB_VECTOR_SIZE)
+# if defined( __GNUC__ ) && ( __GNUC__ >= 4 )
+# define HB_VECTOR_SIZE 128
+# else
+# define HB_VECTOR_SIZE 0
+# endif
+#endif
+static_assert (0 == (HB_VECTOR_SIZE & (HB_VECTOR_SIZE - 1)), "HB_VECTOR_SIZE is not power of 2.");
+static_assert (0 == (HB_VECTOR_SIZE % 64), "HB_VECTOR_SIZE is not multiple of 64.");
+#if HB_VECTOR_SIZE
+typedef uint64_t hb_vector_size_impl_t __attribute__((vector_size (HB_VECTOR_SIZE / 8)));
+#else
+typedef uint64_t hb_vector_size_impl_t;
+#endif
+
+
/*
* Static pools
*/
@@ -341,18 +374,18 @@ static_assert ((sizeof (hb_var_int_t) == 4), "");
/* Global nul-content Null pool. Enlarge as necessary. */
#define HB_NULL_POOL_SIZE 264
-static_assert (HB_NULL_POOL_SIZE % sizeof (void *) == 0, "Align HB_NULL_POOL_SIZE.");
#ifdef HB_NO_VISIBILITY
static
#else
extern HB_INTERNAL
#endif
-void * const _hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)]
+hb_vector_size_impl_t const _hb_NullPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)]
#ifdef HB_NO_VISIBILITY
= {}
#endif
;
+
/* Generic nul-content Null objects. */
template <typename Type>
static inline Type const & Null (void) {
@@ -385,11 +418,12 @@ static
#else
extern HB_INTERNAL
#endif
-/*thread_local*/ void * _hb_CrapPool[HB_NULL_POOL_SIZE / sizeof (void *)]
+/*thread_local*/ hb_vector_size_impl_t _hb_CrapPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)]
#ifdef HB_NO_VISIBILITY
= {}
#endif
;
+
/* CRAP pool: Common Region for Access Protection. */
template <typename Type>
static inline Type& Crap (void) {
@@ -503,30 +537,6 @@ hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2, T lo3, T hi3)
#define FLAG_RANGE(x,y) (ASSERT_STATIC_EXPR_ZERO ((x) < (y)) + FLAG(y+1) - FLAG(x))
-
-/* Compiler-assisted vectorization. */
-
-/*
- * Disable vectorization for now. To correctly use them, we should
- * use posix_memalign() to allocate them. Otherwise, can cause
- * misaligned access.
- *
- * https://bugs.chromium.org/p/chromium/issues/detail?id=860184
- */
-#if !defined(HB_VECTOR_SIZE)
-# define HB_VECTOR_SIZE 0
-#endif
-
-/* The `vector_size' attribute was introduced in gcc 3.1. */
-#if !defined(HB_VECTOR_SIZE)
-# if defined( __GNUC__ ) && ( __GNUC__ >= 4 )
-# define HB_VECTOR_SIZE 128
-# else
-# define HB_VECTOR_SIZE 0
-# endif
-#endif
-
-
/* Global runtime options. */
struct hb_options_t
diff --git a/src/hb-static.cc b/src/hb-static.cc
index e26e5c80..ee17cd34 100644
--- a/src/hb-static.cc
+++ b/src/hb-static.cc
@@ -27,6 +27,6 @@
#include "hb-private.hh"
#ifndef HB_NO_VISIBILITY
-void * const _hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)] = {};
-/*thread_local*/ void * _hb_CrapPool[HB_NULL_POOL_SIZE / sizeof (void *)] = {};
+hb_vector_size_impl_t const _hb_NullPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)] = {};
+/*thread_local*/ hb_vector_size_impl_t _hb_CrapPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)] = {};
#endif
commit 20a318d06acaabdee0090339dfa621aab46f1441
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Wed Jul 11 17:00:13 2018 +0200
Fix return type of alignof() fallback
diff --git a/src/hb-private.hh b/src/hb-private.hh
index ff339df4..ae733872 100644
--- a/src/hb-private.hh
+++ b/src/hb-private.hh
@@ -95,7 +95,7 @@ struct _hb_alignof
char c;
T t;
};
- static constexpr unsigned int value = offsetof (s, t);
+ static constexpr size_t value = offsetof (s, t);
};
#if __cplusplus < 201103L
commit 58cb4d9f73f1292454e3673d5e7ae5a58a566522
Author: Behdad Esfahbod <behdad at behdad.org>
Date: Wed Jul 11 16:44:21 2018 +0200
Minor
diff --git a/test/api/test-ot-math.c b/test/api/test-ot-math.c
index 0ca5566d..d071c889 100644
--- a/test/api/test-ot-math.c
+++ b/test/api/test-ot-math.c
@@ -396,8 +396,8 @@ test_get_min_connector_overlap (void)
initFreeType();
openFont("fonts/MathTestFontEmpty.otf");
- g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, FALSE), ==, 0); // MathVariants not available
- g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, TRUE), ==, 0); // MathVariants not available
+ g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, HB_DIRECTION_LTR), ==, 0); // MathVariants not available
+ g_assert_cmpint(hb_ot_math_get_min_connector_overlap(hb_font, HB_DIRECTION_TTB), ==, 0); // MathVariants not available
closeFont();
openFont("fonts/MathTestFontPartial1.otf");
More information about the HarfBuzz
mailing list