[truetype] Microoptimizations in bytecode interpreter.
* src/truetype/ttinterp.c (TT_DivFix14): New macro. (Normalize): Use it here. (Current_Ratio): Use TT_MulFix14 instead of FT_MulDiv. (Ins_SHPIX): Cancel out two TT_MulFix14 calls.
This commit is contained in:
parent
b50088bd9c
commit
5ad05f97b6
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,12 @@
|
||||||
|
2012-12-06 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||||
|
|
||||||
|
[truetype] Microoptimizations in bytecode interpreter.
|
||||||
|
|
||||||
|
* src/truetype/ttinterp.c (TT_DivFix14): New macro.
|
||||||
|
(Normalize): Use it here.
|
||||||
|
(Current_Ratio): Use TT_MulFix14 instead of FT_MulDiv.
|
||||||
|
(Ins_SHPIX): Cancel out two TT_MulFix14 calls.
|
||||||
|
|
||||||
2012-12-05 Alexei Podtelezhnikov <apodtele@gmail.com>
|
2012-12-05 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||||
|
|
||||||
[truetype] Cosmetic improvement in bytecode interpreter.
|
[truetype] Cosmetic improvement in bytecode interpreter.
|
||||||
|
@ -750,7 +759,7 @@
|
||||||
(ALWAYS_SKIP_DELTAP_Rules): Add Russian char 0x438.
|
(ALWAYS_SKIP_DELTAP_Rules): Add Russian char 0x438.
|
||||||
(COMPATIBLE_WIDTHS_Rules): Rearrange some rules.
|
(COMPATIBLE_WIDTHS_Rules): Rearrange some rules.
|
||||||
(X_SCALING_Rules): Adjust Verdana `a' at 12 and 13 ppem.
|
(X_SCALING_Rules): Adjust Verdana `a' at 12 and 13 ppem.
|
||||||
|
|
||||||
* src/truetype/ttsubpix.c: Updated.
|
* src/truetype/ttsubpix.c: Updated.
|
||||||
(sph_set_tweaks): Re-execute fpgm always.
|
(sph_set_tweaks): Re-execute fpgm always.
|
||||||
|
|
||||||
|
|
|
@ -231,6 +231,14 @@
|
||||||
#define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) )
|
#define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) )
|
||||||
#define BOUNDSL( x, n ) ( (FT_ULong)(x) >= (FT_ULong)(n) )
|
#define BOUNDSL( x, n ) ( (FT_ULong)(x) >= (FT_ULong)(n) )
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* This macro computes (a*2^14)/b and compliments TT_MulFix14. */
|
||||||
|
/* */
|
||||||
|
#define TT_DivFix14( a, b ) \
|
||||||
|
FT_DivFix( a, (b) << 2 )
|
||||||
|
|
||||||
|
|
||||||
#undef SUCCESS
|
#undef SUCCESS
|
||||||
#define SUCCESS 0
|
#define SUCCESS 0
|
||||||
|
|
||||||
|
@ -1660,13 +1668,13 @@
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FT_Long x, y;
|
FT_F26Dot6 x, y;
|
||||||
|
|
||||||
|
|
||||||
x = FT_MulDiv( CUR.GS.projVector.x,
|
x = TT_MulFix14( CUR.GS.projVector.x,
|
||||||
CUR.tt_metrics.x_ratio, 0x4000 );
|
CUR.tt_metrics.x_ratio );
|
||||||
y = FT_MulDiv( CUR.GS.projVector.y,
|
y = TT_MulFix14( CUR.GS.projVector.y,
|
||||||
CUR.tt_metrics.y_ratio, 0x4000 );
|
CUR.tt_metrics.y_ratio );
|
||||||
CUR.tt_metrics.ratio = TT_VecLen( x, y );
|
CUR.tt_metrics.ratio = TT_VecLen( x, y );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2751,16 +2759,16 @@
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
R->x = (FT_F2Dot14)FT_MulDiv( Vx, 0x4000L, W );
|
R->x = (FT_F2Dot14)TT_DivFix14( Vx, W );
|
||||||
R->y = (FT_F2Dot14)FT_MulDiv( Vy, 0x4000L, W );
|
R->y = (FT_F2Dot14)TT_DivFix14( Vy, W );
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
W = TT_VecLen( Vx, Vy );
|
W = TT_VecLen( Vx, Vy );
|
||||||
|
|
||||||
Vx = FT_MulDiv( Vx, 0x4000L, W );
|
Vx = TT_DivFix14( Vx, W );
|
||||||
Vy = FT_MulDiv( Vy, 0x4000L, W );
|
Vy = TT_DivFix14( Vy, W );
|
||||||
|
|
||||||
W = Vx * Vx + Vy * Vy;
|
W = Vx * Vx + Vy * Vy;
|
||||||
|
|
||||||
|
@ -6076,13 +6084,13 @@
|
||||||
{
|
{
|
||||||
if ( CUR.GS.both_x_axis )
|
if ( CUR.GS.both_x_axis )
|
||||||
{
|
{
|
||||||
dx = TT_MulFix14( (FT_UInt32)args[0], 0x4000 );
|
dx = (FT_UInt32)args[0];
|
||||||
dy = 0;
|
dy = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dx = 0;
|
dx = 0;
|
||||||
dy = TT_MulFix14( (FT_UInt32)args[0], 0x4000 );
|
dy = (FT_UInt32)args[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue