[gvar] Micro-optimize unpack_points

This commit is contained in:
Behdad Esfahbod 2022-11-22 14:16:40 -07:00
parent a383027262
commit 656bb223f1
1 changed files with 4 additions and 4 deletions

View File

@ -293,13 +293,14 @@ struct GlyphVariationData
while (i < count) while (i < count)
{ {
if (unlikely (p + 1 > end)) return false; if (unlikely (p + 1 > end)) return false;
unsigned j;
unsigned control = *p++; unsigned control = *p++;
unsigned run_count = (control & POINT_RUN_COUNT_MASK) + 1; unsigned run_count = (control & POINT_RUN_COUNT_MASK) + 1;
if (unlikely (i + run_count > count)) return false;
unsigned j;
if (control & POINTS_ARE_WORDS) if (control & POINTS_ARE_WORDS)
{ {
if (unlikely (p + run_count * HBUINT16::static_size > end)) return false; if (unlikely (p + run_count * HBUINT16::static_size > end)) return false;
for (j = 0; j < run_count && i < count; j++, i++) for (j = 0; j < run_count; j++, i++)
{ {
n += *(const HBUINT16 *)p; n += *(const HBUINT16 *)p;
points.arrayZ[i] = n; points.arrayZ[i] = n;
@ -309,13 +310,12 @@ struct GlyphVariationData
else else
{ {
if (unlikely (p + run_count > end)) return false; if (unlikely (p + run_count > end)) return false;
for (j = 0; j < run_count && i < count; j++, i++) for (j = 0; j < run_count; j++, i++)
{ {
n += *p++; n += *p++;
points.arrayZ[i] = n; points.arrayZ[i] = n;
} }
} }
if (j < run_count) return false;
} }
return true; return true;
} }