[gvar] Add optimize-size code path

This commit is contained in:
Behdad Esfahbod 2023-04-27 10:13:39 -06:00
parent 7c9ed76d0a
commit 726590ed5f

View file

@ -368,50 +368,78 @@ struct gvar
hb_memset (deltas.arrayZ, 0, deltas.get_size ());
}
/* Ouch. Four cases... for optimization. */
if (scalar != 1.0f)
bool optimize_size =
#ifdef HB_OPTIMIZE_SIZE
true
#else
false
#endif
;
if (optimize_size)
{
if (apply_to_all)
for (unsigned int i = 0; i < num_deltas; i++)
for (unsigned int i = 0; i < num_deltas; i++)
{
unsigned int pt_index;
if (apply_to_all)
pt_index = i;
else
{
unsigned int pt_index = i;
auto &delta = deltas.arrayZ[pt_index];
delta.flag = 1; /* this point is referenced, i.e., explicit deltas specified */
delta.x += x_deltas.arrayZ[i] * scalar;
delta.y += y_deltas.arrayZ[i] * scalar;
}
else
for (unsigned int i = 0; i < num_deltas; i++)
{
unsigned int pt_index = indices[i];
pt_index = indices[i];
if (unlikely (pt_index >= deltas.length)) continue;
auto &delta = deltas.arrayZ[pt_index];
delta.flag = 1; /* this point is referenced, i.e., explicit deltas specified */
delta.x += x_deltas.arrayZ[i] * scalar;
delta.y += y_deltas.arrayZ[i] * scalar;
}
auto &delta = deltas.arrayZ[pt_index];
delta.flag = 1; /* this point is referenced, i.e., explicit deltas specified */
delta.x += x_deltas.arrayZ[i] * scalar;
delta.y += y_deltas.arrayZ[i] * scalar;
}
}
else
{
if (apply_to_all)
for (unsigned int i = 0; i < num_deltas; i++)
{
unsigned int pt_index = i;
auto &delta = deltas.arrayZ[pt_index];
delta.flag = 1; /* this point is referenced, i.e., explicit deltas specified */
delta.x += x_deltas.arrayZ[i];
delta.y += y_deltas.arrayZ[i];
}
/* Ouch. Four cases... for optimization. */
if (scalar != 1.0f)
{
if (apply_to_all)
for (unsigned int i = 0; i < num_deltas; i++)
{
unsigned int pt_index = i;
auto &delta = deltas.arrayZ[pt_index];
delta.flag = 1; /* this point is referenced, i.e., explicit deltas specified */
delta.x += x_deltas.arrayZ[i] * scalar;
delta.y += y_deltas.arrayZ[i] * scalar;
}
else
for (unsigned int i = 0; i < num_deltas; i++)
{
unsigned int pt_index = indices[i];
if (unlikely (pt_index >= deltas.length)) continue;
auto &delta = deltas.arrayZ[pt_index];
delta.flag = 1; /* this point is referenced, i.e., explicit deltas specified */
delta.x += x_deltas.arrayZ[i] * scalar;
delta.y += y_deltas.arrayZ[i] * scalar;
}
}
else
for (unsigned int i = 0; i < num_deltas; i++)
{
unsigned int pt_index = indices[i];
if (unlikely (pt_index >= deltas.length)) continue;
auto &delta = deltas.arrayZ[pt_index];
delta.flag = 1; /* this point is referenced, i.e., explicit deltas specified */
delta.x += x_deltas.arrayZ[i];
delta.y += y_deltas.arrayZ[i];
}
{
if (apply_to_all)
for (unsigned int i = 0; i < num_deltas; i++)
{
unsigned int pt_index = i;
auto &delta = deltas.arrayZ[pt_index];
delta.flag = 1; /* this point is referenced, i.e., explicit deltas specified */
delta.x += x_deltas.arrayZ[i];
delta.y += y_deltas.arrayZ[i];
}
else
for (unsigned int i = 0; i < num_deltas; i++)
{
unsigned int pt_index = indices[i];
if (unlikely (pt_index >= deltas.length)) continue;
auto &delta = deltas.arrayZ[pt_index];
delta.flag = 1; /* this point is referenced, i.e., explicit deltas specified */
delta.x += x_deltas.arrayZ[i];
delta.y += y_deltas.arrayZ[i];
}
}
}
/* infer deltas for unreferenced points */