24#include FT_INTERNAL_DEBUG_H
25#include FT_INTERNAL_CALC_H
26#include FT_TRIGONOMETRY_H
29#include FT_MULTIPLE_MASTERS_H
34#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
39#ifdef TT_USE_BYTECODE_INTERPRETER
49#define FT_COMPONENT ttinterp
52#define NO_SUBPIXEL_HINTING \
53 ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
54 TT_INTERPRETER_VERSION_35 )
56#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
57#define SUBPIXEL_HINTING_INFINALITY \
58 ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
59 TT_INTERPRETER_VERSION_38 )
62#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
63#define SUBPIXEL_HINTING_MINIMAL \
64 ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \
65 TT_INTERPRETER_VERSION_40 )
68#define PROJECT( v1, v2 ) \
69 exc->func_project( exc, \
70 SUB_LONG( (v1)->x, (v2)->x ), \
71 SUB_LONG( (v1)->y, (v2)->y ) )
73#define DUALPROJ( v1, v2 ) \
74 exc->func_dualproj( exc, \
75 SUB_LONG( (v1)->x, (v2)->x ), \
76 SUB_LONG( (v1)->y, (v2)->y ) )
78#define FAST_PROJECT( v ) \
79 exc->func_project( exc, (v)->x, (v)->y )
81#define FAST_DUALPROJ( v ) \
82 exc->func_dualproj( exc, (v)->x, (v)->y )
89#define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) )
90#define BOUNDSL( x, n ) ( (FT_ULong)(x) >= (FT_ULong)(n) )
297 FT_TRACE1((
"Init_Context: new object at 0x%08p\n", exec ));
322 FT_ERROR((
"Init_Context: not enough memory for %p\n", exec ));
323 TT_Done_Context( exec );
366 void** pbuff = (
void**)_pbuff;
369 if ( *
size < new_max )
371 if (
FT_REALLOC( *pbuff, *
size * multiplier, new_max * multiplier ) )
417 maxp = &
face->max_profile;
592 TRUE, 68, 0, 0, 9, 3,
648#define PACK( x, y ) ( ( x << 4 ) | y )
652 const FT_Byte Pop_Push_Count[256] =
931#ifdef FT_DEBUG_LEVEL_TRACE
938 const char*
const opcode_name[256] =
1094#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1222 const FT_Char opcode_length[256] =
1224 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1225 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1226 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1227 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1229 -1,-2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1230 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1231 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1232 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1234 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1235 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1236 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1237 2, 3, 4, 5, 6, 7, 8, 9, 3, 5, 7, 9, 11,13,15,17,
1239 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1240 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1241 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1242 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1248#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER
1250#if defined( __arm__ ) && \
1251 ( defined( __thumb2__ ) || !defined( __thumb__ ) )
1253#define TT_MulFix14 TT_MulFix14_arm
1256 TT_MulFix14_arm( FT_Int32
a,
1262#if defined( __CC_ARM ) || defined( __ARMCC__ )
1272 orr
a,
a,
t, lsl #18
1275#elif defined( __GNUC__ )
1278 "smull %1, %2, %4, %3\n\t"
1279 "mov %0, %2, asr #31\n\t"
1280#
if defined( __clang__ ) && defined( __thumb2__ )
1281 "add.w %0, %0, #0x2000\n\t"
1283 "add %0, %0, #0x2000\n\t"
1285 "adds %1, %1, %0\n\t"
1286 "adc %2, %2, #0\n\t"
1287 "mov %0, %1, lsr #14\n\t"
1288 "orr %0, %0, %2, lsl #18\n\t"
1289 :
"=r"(
a),
"=&r"(t2),
"=&r"(
t)
1303#if defined( __GNUC__ ) && \
1304 ( defined( __i386__ ) || defined( __x86_64__ ) )
1306#define TT_MulFix14 TT_MulFix14_long_long
1309#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406
1310#pragma GCC diagnostic push
1312#pragma GCC diagnostic ignored "-Wlong-long"
1319 TT_MulFix14_long_long( FT_Int32
a,
1328 long long tmp =
ret >> 63;
1331 ret += 0x2000 + tmp;
1333 return (FT_Int32)(
ret >> 14 );
1336#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406
1337#pragma GCC diagnostic pop
1349 TT_MulFix14( FT_Int32
a,
1353 FT_UInt32 ah, al, mid, lo, hi;
1363 ah = (FT_UInt32)( (
a >> 16 ) & 0xFFFFU );
1364 al = (FT_UInt32)(
a & 0xFFFFU );
1369 mid = ( mid << 16 ) + ( 1 << 13 );
1374 mid = ( lo >> 14 ) | ( hi << 18 );
1376 return sign >= 0 ? (FT_Int32)mid : -(FT_Int32)mid;
1382#if defined( __GNUC__ ) && \
1383 ( defined( __i386__ ) || \
1384 defined( __x86_64__ ) || \
1385 defined( __arm__ ) )
1387#define TT_DotFix14 TT_DotFix14_long_long
1389#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406
1390#pragma GCC diagnostic push
1392#pragma GCC diagnostic ignored "-Wlong-long"
1395 TT_DotFix14_long_long( FT_Int32
ax,
1403 long long temp1 = (
long long)
ax * bx;
1404 long long temp2 = (
long long)ay *
by;
1408 temp2 = temp1 >> 63;
1409 temp1 += 0x2000 + temp2;
1411 return (FT_Int32)( temp1 >> 14 );
1415#if ( __GNUC__ * 100 + __GNUC_MINOR__ ) >= 406
1416#pragma GCC diagnostic pop
1426 TT_DotFix14( FT_Int32
ax,
1431 FT_Int32
m,
s, hi1, hi2, hi;
1432 FT_UInt32
l, lo1, lo2, lo;
1436 l = (FT_UInt32)( (
ax & 0xFFFFU ) * bx );
1437 m = (
ax >> 16 ) * bx;
1439 lo1 =
l + ( (FT_UInt32)
m << 16 );
1440 hi1 = (
m >> 16 ) + ( (FT_Int32)
l >> 31 ) + ( lo1 <
l );
1443 l = (FT_UInt32)( ( ay & 0xFFFFU ) *
by );
1444 m = ( ay >> 16 ) *
by;
1446 lo2 =
l + ( (FT_UInt32)
m << 16 );
1447 hi2 = (
m >> 16 ) + ( (FT_Int32)
l >> 31 ) + ( lo2 <
l );
1451 hi = hi1 + hi2 + ( lo < lo1 );
1455 l = lo + (FT_UInt32)
s;
1456 hi +=
s + (
l < lo );
1462 return (FT_Int32)( ( (FT_UInt32)hi << 18 ) | (
l >> 14 ) );
1602 exc->
code[exc->
IP - 1] );
1632 if ( aRange < 1 || aRange > 3 )
1650 if ( aIP >
range->size )
1702#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1703 if ( SUBPIXEL_HINTING_INFINALITY &&
1704 ( !exc->ignore_x_mode ||
1705 ( exc->sph_tweak_flags & SPH_TWEAK_ALLOW_X_DMOVE ) ) )
1713#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
1717 if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility )
1725 if ( NO_SUBPIXEL_HINTING )
1738#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
1739 if ( !( SUBPIXEL_HINTING_MINIMAL &&
1740 exc->backward_compatibility &&
1742 exc->iupy_called ) )
1818#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1819 if ( SUBPIXEL_HINTING_INFINALITY && !exc->ignore_x_mode )
1824#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
1825 if ( SUBPIXEL_HINTING_MINIMAL && !exc->backward_compatibility )
1830 if ( NO_SUBPIXEL_HINTING )
1845#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
1846 if ( !( SUBPIXEL_HINTING_MINIMAL &&
1847 exc->backward_compatibility &&
1848 exc->iupx_called && exc->iupy_called ) )
2295 switch ( round_mode )
2352 switch ( (
FT_Int)( selector & 0xC0 ) )
2355 exc->
period = GridPeriod / 2;
2359 exc->
period = GridPeriod;
2363 exc->
period = GridPeriod * 2;
2368 exc->
period = GridPeriod;
2372 switch ( (
FT_Int)( selector & 0x30 ) )
2391 if ( ( selector & 0x0F ) == 0 )
2426 return TT_DotFix14(
dx,
dy,
2455 return TT_DotFix14(
dx,
dy,
2559 if ( exc->
F_dot_P == 0x4000L )
2617 if ( Vx == 0 && Vy == 0 )
2643#define ARRAY_BOUND_ERROR \
2646 exc->error = FT_THROW( Invalid_Reference ); \
2675 if ( NO_SUBPIXEL_HINTING )
3039#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
3042 if ( SUBPIXEL_HINTING_INFINALITY &&
3043 exc->ignore_x_mode &&
3045 ( exc->
face->sph_found_func_flags &
3046 ( SPH_FDEF_SPACING_1 |
3047 SPH_FDEF_SPACING_2 ) ) ) ||
3049 ( exc->sph_in_func_flags &
3050 SPH_FDEF_TYPEMAN_STROKES ) ) ||
3052 ( exc->
face->sph_found_func_flags &
3053 SPH_FDEF_VACUFORM_ROUND_1 ) &&
3054 exc->iup_called ) ) )
3212 args[0] = Round_None(
3262 if ( L <= 0 || L > exc->
args )
3295 if ( L <= 0 || L > exc->
args )
3404 if ( SkipCode( exc ) ==
FAILURE )
3422 }
while (
Out == 0 );
3442 if ( SkipCode( exc ) ==
FAILURE )
3455 }
while ( nIfs != 0 );
3482 if (
args[0] == 0 && exc->
args == 0 )
3518 Ins_JMPR( exc,
args );
3533 Ins_JMPR( exc,
args );
3558#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
3560 FT_Byte opcode_pattern[9][12] = {
3653 FT_UShort opcode_pointer[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
3654 FT_UShort opcode_size[9] = { 12, 8, 8, 6, 7, 4, 5, 4, 2 };
3673 for ( ; rec <
limit; rec++ )
3675 if ( rec->
opc ==
n )
3708#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
3711 if (
n >= 64 &&
n <= 66 )
3718 while ( SkipCode( exc ) ==
SUCCESS )
3721#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
3723 if ( SUBPIXEL_HINTING_INFINALITY )
3725 for (
i = 0;
i < opcode_patterns;
i++ )
3727 if ( opcode_pointer[
i] < opcode_size[
i] &&
3728 exc->
opcode == opcode_pattern[
i][opcode_pointer[
i]] )
3730 opcode_pointer[
i] += 1;
3732 if ( opcode_pointer[
i] == opcode_size[
i] )
3734 FT_TRACE6((
"sph: Function %d, opcode ptrn: %d, %s %s\n",
3743 exc->
face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_1;
3748 exc->
face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_2;
3757 exc->
face->sph_found_func_flags |= SPH_FDEF_DIAGONAL_STROKE;
3766 exc->
face->sph_found_func_flags |= SPH_FDEF_VACUFORM_ROUND_1;
3773 exc->
face->sph_found_func_flags |= SPH_FDEF_TTFAUTOHINT_1;
3786 exc->
face->sph_found_func_flags |= SPH_FDEF_SPACING_1;
3800 exc->
face->sph_found_func_flags |= SPH_FDEF_SPACING_2;
3806 exc->
face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
3812 exc->
face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL;
3816 opcode_pointer[
i] = 0;
3821 opcode_pointer[
i] = 0;
3825 exc->
face->sph_compatibility_mode =
3826 ( ( exc->
face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_1 ) |
3827 ( exc->
face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_2 ) );
3859#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
3860 exc->sph_in_func_flags = 0x0000;
3914 if ( BOUNDSL(
F, exc->
maxFunc + 1 ) )
3936 while ( def < limit && def->opc !=
F )
3947#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
3948 if ( SUBPIXEL_HINTING_INFINALITY &&
3949 exc->ignore_x_mode &&
3950 ( ( exc->iup_called &&
3951 ( exc->sph_tweak_flags & SPH_TWEAK_NO_CALL_AFTER_IUP ) ) ||
3974 Ins_Goto_CodeRange( exc, def->
range, def->
start );
4002 if ( BOUNDSL(
F, exc->
maxFunc + 1 ) )
4024 while ( def < limit && def->opc !=
F )
4035#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
4036 if ( SUBPIXEL_HINTING_INFINALITY &&
4037 exc->ignore_x_mode &&
4062 Ins_Goto_CodeRange( exc, def->
range, def->
start );
4104 for ( ; def <
limit; def++ )
4120 if ( 0 >
args[0] ||
args[0] > 0x00FF )
4137 while ( SkipCode( exc ) ==
SUCCESS )
4181 for ( K = 1; K <=
L; K++ )
4211 for ( K = 0; K <
L; K++ )
4212 args[K] = GetShortIns( exc );
4240 for ( K = 1; K <=
L; K++ )
4268 for ( K = 0; K <
L; K++ )
4269 args[K] = GetShortIns( exc );
4303 p1 = exc->
zp1.
cur + aIdx2;
4304 p2 = exc->
zp2.
cur + aIdx1;
4314 if (
A == 0 &&
B == 0 )
4320 if ( ( opcode & 1 ) != 0 )
4367 if ( ( opcode & 2 ) == 0 )
4373 Compute_Funcs( exc );
4387 if ( Ins_SxVTL( exc,
4393 Compute_Funcs( exc );
4408 if ( Ins_SxVTL( exc,
4413 Compute_Funcs( exc );
4428 Compute_Funcs( exc );
4455 Compute_Funcs( exc );
4480 Compute_Funcs( exc );
4775 SetSuperRound( exc, 0x4000,
args[0] );
4792 SetSuperRound( exc, 0x2D41,
args[0] );
4827 R = FAST_DUALPROJ( &exc->
zp2.
org[
L] );
4829 R = FAST_PROJECT( &exc->
zp2.
cur[
L] );
4863 K = FAST_PROJECT( &exc->
zp2.
cur[
L] );
4921 D = DUALPROJ( vec1, vec2 );
4932 D = DUALPROJ( vec1, vec2 );
4943 D = FAST_DUALPROJ( &
vec );
4949#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
4951 if ( SUBPIXEL_HINTING_INFINALITY &&
4952 exc->ignore_x_mode &&
5001 if (
A == 0 &&
B == 0 )
5008 if ( ( opcode & 1 ) != 0 )
5025 if (
A == 0 &&
B == 0 )
5032 if ( ( opcode & 1 ) != 0 )
5040 Compute_Funcs( exc );
5187 if ( K < 1 || K > 3 )
5195 Kf = 1 << ( K - 1 );
5213#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
5216 if ( SUBPIXEL_HINTING_INFINALITY )
5217 exc->ignore_x_mode =
FT_BOOL(
L == 4 );
5220#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
5224 if ( SUBPIXEL_HINTING_MINIMAL )
5225 exc->backward_compatibility = !
FT_BOOL(
L == 4 );
5312#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
5314 if ( SUBPIXEL_HINTING_MINIMAL &&
5315 exc->backward_compatibility &&
5328 while ( exc->
GS.
loop > 0 )
5367#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
5369 if ( SUBPIXEL_HINTING_MINIMAL &&
5370 exc->backward_compatibility &&
5387 for (
I =
L;
I <= K;
I++ )
5405#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
5407 if ( SUBPIXEL_HINTING_MINIMAL &&
5408 exc->backward_compatibility &&
5425 for (
I =
L;
I <= K;
I++ )
5483#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
5484 if ( !( SUBPIXEL_HINTING_MINIMAL &&
5485 exc->backward_compatibility ) )
5495#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
5496 if ( !( SUBPIXEL_HINTING_MINIMAL &&
5497 exc->backward_compatibility &&
5499 exc->iupy_called ) )
5532 if ( Compute_Point_Displacement( exc, &
dx, &
dy, &zp, &refp ) )
5535 while ( exc->
GS.
loop > 0 )
5549#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
5551 if ( SUBPIXEL_HINTING_INFINALITY && exc->ignore_x_mode )
5598 if ( Compute_Point_Displacement( exc, &
dx, &
dy, &zp, &refp ) )
5647 if ( Compute_Point_Displacement( exc, &
dx, &
dy, &zp, &refp ) )
5682#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
5685#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
5703 while ( exc->
GS.
loop > 0 )
5718#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
5719 if ( SUBPIXEL_HINTING_INFINALITY )
5729 if ( exc->ignore_x_mode )
5737 if ( !exc->
face->sph_compatibility_mode &&
5748 if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
5752 Move_Zp2_Point( exc,
5759 else if ( exc->
face->sph_compatibility_mode )
5761 if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
5768 if ( exc->iup_called &&
5769 ( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) ||
5770 ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) )
5773 if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) &&
5776 ( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) )
5785 if ( ( B1 & 63 ) == 0 &&
5791 else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL )
5799#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
5800 if ( SUBPIXEL_HINTING_MINIMAL &&
5801 exc->backward_compatibility )
5809 ( !( exc->iupx_called && exc->iupy_called ) &&
5818#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
5842#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
5847 if ( SUBPIXEL_HINTING_INFINALITY )
5851 if ( exc->ignore_x_mode &&
5853 !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
5854 control_value_cutin = 0;
5879#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
5885 if ( SUBPIXEL_HINTING_INFINALITY &&
5886 exc->ignore_x_mode &&
5888 delta >= control_value_cutin )
5900 if ( ( exc->
opcode & 1 ) != 0 )
5929 if ( ( exc->
opcode & 1 ) != 0 )
5932#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
5933 if ( SUBPIXEL_HINTING_INFINALITY &&
5934 exc->ignore_x_mode &&
5980#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
5981 if ( SUBPIXEL_HINTING_INFINALITY &&
5982 exc->ignore_x_mode &&
5985 !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
5986 control_value_cutin = 0;
5990 BOUNDSL( cvtEntry, exc->
cvtSize ) )
6021#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6024 if ( !( SUBPIXEL_HINTING_INFINALITY &&
6025 ( exc->ignore_x_mode &&
6026 exc->
face->sph_compatibility_mode ) ) )
6034#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6035 if ( SUBPIXEL_HINTING_INFINALITY &&
6036 exc->ignore_x_mode &&
6037 ( exc->sph_tweak_flags & SPH_TWEAK_MIAP_HACK ) &&
6045 if ( ( exc->
opcode & 1 ) != 0 )
6054 if ( delta > control_value_cutin )
6057#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6058 if ( SUBPIXEL_HINTING_INFINALITY &&
6059 exc->ignore_x_mode &&
6095#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6096 if ( SUBPIXEL_HINTING_INFINALITY &&
6097 exc->ignore_x_mode &&
6099 !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
6100 minimum_distance = 0;
6124 org_dist = DUALPROJ( vec1, vec2 );
6135 org_dist = DUALPROJ( vec1, vec2 );
6148 org_dist = FAST_DUALPROJ( &
vec );
6156 org_dist < exc->
GS.single_width_value +
6161 if ( org_dist >= 0 )
6169 if ( ( exc->
opcode & 4 ) != 0 )
6171#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6172 if ( SUBPIXEL_HINTING_INFINALITY &&
6173 exc->ignore_x_mode &&
6194 if ( ( exc->
opcode & 8 ) != 0 )
6196 if ( org_dist >= 0 )
6218 if ( ( exc->
opcode & 16 ) != 0 )
6240 control_value_cutin,
6242#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6256#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6257 if ( SUBPIXEL_HINTING_INFINALITY &&
6258 exc->ignore_x_mode &&
6260 !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
6261 control_value_cutin = minimum_distance = 0;
6267 BOUNDSL( cvtEntry, exc->
cvtSize + 1 ) ||
6286 if ( delta < exc->
GS.single_width_cutin )
6288 if ( cvt_dist >= 0 )
6299 TT_MulFix14( cvt_dist,
6302 TT_MulFix14( cvt_dist,
6314 if ( ( org_dist ^ cvt_dist ) < 0 )
6318#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6319 if ( SUBPIXEL_HINTING_INFINALITY &&
6320 exc->ignore_x_mode &&
6322 ( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) )
6324 if ( cur_dist < -64 )
6326 else if ( cur_dist > 64 && cur_dist < 84 )
6333 if ( ( exc->
opcode & 4 ) != 0 )
6352 delta =
SUB_LONG( cvt_dist, org_dist );
6356 if ( delta > control_value_cutin )
6357 cvt_dist = org_dist;
6368#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6370 if ( SUBPIXEL_HINTING_INFINALITY &&
6371 exc->ignore_x_mode &&
6374 delta =
SUB_LONG( cvt_dist, org_dist );
6378 if ( delta > control_value_cutin )
6379 cvt_dist = org_dist;
6391 if ( ( exc->
opcode & 8 ) != 0 )
6393 if ( org_dist >= 0 )
6405#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6406 if ( SUBPIXEL_HINTING_INFINALITY )
6411 if ( exc->ignore_x_mode &&
6413 ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) )
6416 if ( exc->ignore_x_mode &&
6418 ( exc->
opcode & 16 ) == 0 &&
6419 ( exc->
opcode & 8 ) == 0 &&
6420 ( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) )
6430#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6431 if ( SUBPIXEL_HINTING_INFINALITY )
6436 if ( exc->ignore_x_mode )
6438 if ( exc->
face->sph_compatibility_mode &&
6442 reverse_move =
TRUE;
6444 if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
6448 reverse_move =
TRUE;
6463 if ( ( exc->
opcode & 16 ) != 0 )
6483#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
6484 if ( SUBPIXEL_HINTING_INFINALITY &&
6485 exc->ignore_x_mode &&
6487 ( exc->sph_tweak_flags & SPH_TWEAK_NO_ALIGNRP_AFTER_IUP ) )
6502 while ( exc->
GS.
loop > 0 )
6691 twilight = ( exc->
GS.
gep0 == 0 ||
6722 old_range = DUALPROJ( &exc->
zp1.
org[exc->
GS.
rp2], orus_base );
6724 old_range = DUALPROJ( &exc->
zp1.
orus[exc->
GS.
rp2], orus_base );
6737 old_range = FAST_DUALPROJ( &
vec );
6740 cur_range = PROJECT( &exc->
zp1.
cur[exc->
GS.
rp2], cur_base );
6761 org_dist = DUALPROJ( &exc->
zp2.
org[
point], orus_base );
6763 org_dist = DUALPROJ( &exc->
zp2.
orus[
point], orus_base );
6776 org_dist = FAST_DUALPROJ( &
vec );
6779 cur_dist = PROJECT( &exc->
zp2.
cur[
point], cur_base );
6784 new_dist =
FT_MulDiv( org_dist, cur_range, old_range );
6803 new_dist = org_dist;
6847 mask &= ~FT_CURVE_TAG_TOUCH_X;
6850 mask &= ~FT_CURVE_TAG_TOUCH_Y;
6857 typedef struct IUP_WorkerRec_
6864 } IUP_WorkerRec, *IUP_Worker;
6868 _iup_worker_shift( IUP_Worker worker,
6880 for (
i = p1;
i <
p;
i++ )
6883 for (
i =
p + 1;
i <= p2;
i++ )
6890 _iup_worker_interpolate( IUP_Worker worker,
6897 FT_F26Dot6 orus1, orus2, org1, org2, cur1, cur2, delta1, delta2;
6903 if (
BOUNDS( ref1, worker->max_points ) ||
6904 BOUNDS( ref2, worker->max_points ) )
6907 orus1 = worker->orus[ref1].x;
6908 orus2 = worker->orus[ref2].x;
6910 if ( orus1 > orus2 )
6925 org1 = worker->orgs[ref1].x;
6926 org2 = worker->orgs[ref2].x;
6927 cur1 = worker->curs[ref1].x;
6928 cur2 = worker->curs[ref2].x;
6932 if ( cur1 == cur2 || orus1 == orus2 )
6936 for (
i = p1;
i <= p2;
i++ )
6944 else if (
x >= org2 )
6950 worker->curs[
i].x =
x;
6960 for (
i = p1;
i <= p2;
i++ )
6968 else if (
x >= org2 )
6984 worker->curs[
i].x =
x;
7012#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
7016 if ( SUBPIXEL_HINTING_MINIMAL &&
7017 exc->backward_compatibility )
7019 if ( exc->iupx_called && exc->iupy_called )
7023 exc->iupx_called =
TRUE;
7025 exc->iupy_called =
TRUE;
7052#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
7053 if ( SUBPIXEL_HINTING_INFINALITY &&
7054 exc->ignore_x_mode )
7056 exc->iup_called =
TRUE;
7057 if ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_IUP )
7065 first_point =
point;
7073 if (
point <= end_point )
7075 first_touched =
point;
7076 cur_touched =
point;
7080 while (
point <= end_point )
7084 _iup_worker_interpolate( &
V,
7089 cur_touched =
point;
7095 if ( cur_touched == first_touched )
7096 _iup_worker_shift( &
V, first_point, end_point, cur_touched );
7099 _iup_worker_interpolate( &
V,
7105 if ( first_touched > 0 )
7106 _iup_worker_interpolate( &
V,
7114 }
while ( contour < exc->pts.n_contours );
7132#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
7136 if ( SUBPIXEL_HINTING_INFINALITY &&
7137 exc->ignore_x_mode &&
7139 ( exc->sph_tweak_flags & SPH_TWEAK_NO_DELTAP_AFTER_IUP ) )
7147 for (
k = 1;
k <= nump;
k++ )
7149 if ( exc->
args < 2 )
7195#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
7197 if ( SUBPIXEL_HINTING_INFINALITY )
7207 if ( !exc->ignore_x_mode ||
7208 ( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_DO_DELTAP ) ||
7221 if ( !exc->
face->sph_compatibility_mode &&
7226 else if ( exc->
face->sph_compatibility_mode &&
7227 !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) )
7229 if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
7234 if ( !exc->iup_called &&
7243 ( ( exc->
face->sph_compatibility_mode &&
7245 ( B2 & 63 ) != 0 ) ||
7246 ( ( exc->sph_tweak_flags &
7247 SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP ) &&
7249 ( B2 & 63 ) != 0 ) ) )
7258#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
7261 if ( SUBPIXEL_HINTING_MINIMAL &&
7262 exc->backward_compatibility )
7264 if ( !( exc->iupx_called && exc->iupy_called ) &&
7303 for (
k = 1;
k <= nump;
k++ )
7305 if ( exc->
args < 2 )
7394#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
7400 if ( SUBPIXEL_HINTING_INFINALITY &&
7401 (
args[0] & 1 ) != 0 &&
7402 exc->subpixel_hinting )
7404 if ( exc->ignore_x_mode )
7408 K = exc->rasterizer_version;
7409 FT_TRACE6((
"Setting rasterizer version %d\n",
7410 exc->rasterizer_version ));
7417 if ( (
args[0] & 1 ) != 0 )
7418 K =
driver->interpreter_version;
7436#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
7444 if ( (
args[0] & 8 ) != 0 && exc->
face->blend )
7457#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
7462 if ( SUBPIXEL_HINTING_MINIMAL && exc->subpixel_hinting_lean )
7471 if ( (
args[0] & 64 ) != 0 )
7479 if ( (
args[0] & 256 ) != 0 && exc->vertical_lcd_lean )
7489 if ( (
args[0] & 1024 ) != 0 )
7500 if ( (
args[0] & 2048 ) != 0 && exc->subpixel_hinting_lean )
7512 if ( (
args[0] & 4096 ) != 0 && exc->grayscale_cleartype )
7517#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
7519 if ( SUBPIXEL_HINTING_INFINALITY &&
7523 if ( exc->rasterizer_version >= 37 )
7530 if ( (
args[0] & 64 ) != 0 && exc->subpixel_hinting )
7540 if ( (
args[0] & 128 ) != 0 && exc->compatible_widths )
7550 if ( (
args[0] & 256 ) != 0 && exc->vertical_lcd )
7560 if ( (
args[0] & 512 ) != 0 && exc->bgr )
7563 if ( exc->rasterizer_version >= 38 )
7572 if ( (
args[0] & 1024 ) != 0 && exc->subpixel_positioned )
7582 if ( (
args[0] & 2048 ) != 0 && exc->symmetrical_smoothing )
7592 if ( (
args[0] & 4096 ) != 0 && exc->gray_cleartype )
7604#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
7634 for (
i = 0;
i < num_axes;
i++ )
7639 for (
i = 0;
i < num_axes;
i++ )
7670 for ( ; def <
limit; def++ )
7690 Ins_Goto_CodeRange( exc, def->
range, def->
start );
7740#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
7741 FT_Byte opcode_pattern[1][2] = {
7754#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
7755 exc->iup_called =
FALSE;
7758#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
7772 if ( SUBPIXEL_HINTING_MINIMAL &&
7773 exc->subpixel_hinting_lean &&
7777 exc->backward_compatibility =
FALSE;
7779 exc->iupx_called =
FALSE;
7780 exc->iupy_called =
FALSE;
7785 num_twilight_points =
FT_MAX( 30,
7789 if ( num_twilight_points > 0xFFFFU )
7790 num_twilight_points = 0xFFFFU;
7792 FT_TRACE5((
"TT_RunIns: Resetting number of twilight points\n"
7793 " from %d to the more reasonable value %d\n",
7795 num_twilight_points ));
7827 FT_TRACE5((
"TT_RunIns: Limiting total number of loops in LOOPCALL"
7831 FT_TRACE5((
"TT_RunIns: Limiting total number of backward jumps"
7853 Compute_Funcs( exc );
7860#ifdef FT_DEBUG_LEVEL_TRACE
7873 : 12 - ( *opcode_name[exc->
opcode] -
'0' ),
7875 for (
n = 1;
n <=
cnt;
n++ )
7881 if ( ( exc->
length = opcode_length[exc->
opcode] ) < 0 )
7884 goto LErrorCodeOverflow_;
7890 goto LErrorCodeOverflow_;
7893 exc->
args = exc->
top - ( Pop_Push_Count[exc->
opcode] >> 4 );
7897 if ( exc->
args < 0 )
7906 for (
i = 0;
i < Pop_Push_Count[exc->
opcode] >> 4;
i++ )
7911#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
7912 if ( exc->
opcode == 0x91 )
7920 if ( exc->
face->blend )
7939#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
7941 if ( SUBPIXEL_HINTING_INFINALITY )
7943 for (
i = 0;
i < opcode_patterns;
i++ )
7945 if ( opcode_pointer[
i] < opcode_size[
i] &&
7946 exc->
opcode == opcode_pattern[
i][opcode_pointer[
i]] )
7948 opcode_pointer[
i] += 1;
7950 if ( opcode_pointer[
i] == opcode_size[
i] )
7952 FT_TRACE6((
"sph: opcode ptrn: %d, %s %s\n",
7962 opcode_pointer[
i] = 0;
7966 opcode_pointer[
i] = 0;
7990 Ins_SPVTL( exc,
args );
7995 Ins_SFVTL( exc,
args );
7999 Ins_SPVFS( exc,
args );
8003 Ins_SFVFS( exc,
args );
8007 Ins_GPV( exc,
args );
8011 Ins_GFV( exc,
args );
8019 Ins_ISECT( exc,
args );
8023 Ins_SRP0( exc,
args );
8027 Ins_SRP1( exc,
args );
8031 Ins_SRP2( exc,
args );
8035 Ins_SZP0( exc,
args );
8039 Ins_SZP1( exc,
args );
8043 Ins_SZP2( exc,
args );
8047 Ins_SZPS( exc,
args );
8051 Ins_SLOOP( exc,
args );
8063 Ins_SMD( exc,
args );
8071 Ins_JMPR( exc,
args );
8075 Ins_SCVTCI( exc,
args );
8079 Ins_SSWCI( exc,
args );
8083 Ins_SSW( exc,
args );
8103 Ins_DEPTH( exc,
args );
8107 Ins_CINDEX( exc,
args );
8111 Ins_MINDEX( exc,
args );
8115 Ins_ALIGNPTS( exc,
args );
8123 Ins_UTP( exc,
args );
8127 Ins_LOOPCALL( exc,
args );
8131 Ins_CALL( exc,
args );
8135 Ins_FDEF( exc,
args );
8144 Ins_MDAP( exc,
args );
8159 Ins_SHC( exc,
args );
8164 Ins_SHZ( exc,
args );
8168 Ins_SHPIX( exc,
args );
8177 Ins_MSIRP( exc,
args );
8190 Ins_MIAP( exc,
args );
8194 Ins_NPUSHB( exc,
args );
8198 Ins_NPUSHW( exc,
args );
8202 Ins_WS( exc,
args );
8206 Ins_RS( exc,
args );
8210 Ins_WCVTP( exc,
args );
8214 Ins_RCVT( exc,
args );
8219 Ins_GC( exc,
args );
8223 Ins_SCFS( exc,
args );
8228 Ins_MD( exc,
args );
8232 Ins_MPPEM( exc,
args );
8236 Ins_MPS( exc,
args );
8276 Ins_ODD( exc,
args );
8280 Ins_EVEN( exc,
args );
8284 Ins_IF( exc,
args );
8304 Ins_DELTAP( exc,
args );
8308 Ins_SDB( exc,
args );
8312 Ins_SDS( exc,
args );
8324 Ins_DIV( exc,
args );
8344 Ins_CEILING(
args );
8351 Ins_ROUND( exc,
args );
8358 Ins_NROUND( exc,
args );
8362 Ins_WCVTF( exc,
args );
8367 Ins_DELTAP( exc,
args );
8373 Ins_DELTAC( exc,
args );
8377 Ins_SROUND( exc,
args );
8381 Ins_S45ROUND( exc,
args );
8385 Ins_JROT( exc,
args );
8389 Ins_JROF( exc,
args );
8421 Ins_FLIPRGON( exc,
args );
8425 Ins_FLIPRGOFF( exc,
args );
8434 Ins_SCANCTRL( exc,
args );
8439 Ins_SDPVTL( exc,
args );
8443 Ins_GETINFO( exc,
args );
8447 Ins_IDEF( exc,
args );
8463 Ins_SCANTYPE( exc,
args );
8467 Ins_INSTCTRL( exc,
args );
8475#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
8480 if ( exc->
face->blend )
8481 Ins_GETVARIATION( exc,
args );
8490 if ( exc->
face->blend )
8491 Ins_GETDATA(
args );
8498 if ( opcode >= 0xE0 )
8499 Ins_MIRP( exc,
args );
8500 else if ( opcode >= 0xC0 )
8501 Ins_MDRP( exc,
args );
8502 else if ( opcode >= 0xB8 )
8503 Ins_PUSHW( exc,
args );
8504 else if ( opcode >= 0xB0 )
8505 Ins_PUSHB( exc,
args );
8513 switch ( exc->
error )
8516 case FT_ERR( Invalid_Opcode ):
8522 for ( ; def <
limit; def++ )
8542 if ( Ins_Goto_CodeRange( exc,
8578 return FT_THROW( Execution_Too_Long );
8594 FT_TRACE4((
" %d instruction%s executed\n",
8596 ins_counter == 1 ?
"" :
"s" ));
8599 LErrorCodeOverflow_:
8604 FT_TRACE1((
" The interpreter returned error 0x%x\n", exc->
error ));
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
static DOUBLE day(DOUBLE time)
static BOOL Normalize(PFILE_TYPE_ENTRY Entry)
FT_DivFix(FT_Long a, FT_Long b)
#define FT_IS_TRICKY(face)
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_MulFix(FT_Long a, FT_Long b)
FT_BEGIN_HEADER FT_MulDiv_No_Round(FT_Long a, FT_Long b, FT_Long c)
FT_Vector_NormLen(FT_Vector *vector)
FT_Hypot(FT_Fixed x, FT_Fixed y)
#define FT_CALLBACK_DEF(x)
#define FT_ASSERT(condition)
#define FT_ERROR(varformat)
#define FT_TRACE5(varformat)
#define FT_TRACE7(varformat)
#define FT_TRACE6(varformat)
#define FT_TRACE1(varformat)
#define FT_TRACE4(varformat)
#define TT_INTERPRETER_VERSION_38
#define TT_INTERPRETER_VERSION_35
#define FT_CURVE_TAG_TOUCH_X
#define FT_CURVE_TAG_TOUCH_BOTH
#define FT_CURVE_TAG_TOUCH_Y
FT_BEGIN_HEADER typedef signed long FT_Pos
#define FT_REALLOC(ptr, cursz, newsz)
#define FT_NEW_ARRAY(ptr, count)
#define FT_ARRAY_MOVE(dest, source, count)
#define FT_PAD_ROUND_LONG(x, n)
#define FT_FACE_DRIVER(x)
#define FT_PIX_ROUND_LONG(x)
#define FT_PIX_CEIL_LONG(x)
#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLenum GLenum GLenum GLenum GLenum scale
GLenum GLuint GLint GLenum face
GLboolean GLboolean GLboolean b
GLsizei GLsizei GLfloat distance
GLuint GLsizei GLsizei * length
GLboolean GLboolean GLboolean GLboolean a
GLfloat GLfloat GLfloat v2
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define AA(_h, _w, _x, _y, _z)
static const struct update_accum a1
static CRYPT_DATA_BLOB b1[]
static char memory[1024 *256]
struct @1717::@1718 driver
__forceinline bool __cdecl add(big_integer &x, uint32_t const value)
__asm__(".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" "\tsub %rbp, %rax\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tsub $32, %rsp\n" "\t.seh_stackalloc 32\n" "\t.seh_endprologue\n" "\tsub %rax, %rdx\n" "\tmov %rdx, %rbp\n" "\tjmp *%r8\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $32, %rsp\n" "\tpop %rbp\n" "\tret\n" "\t.seh_endproc")
STDMETHOD() Skip(THIS_ ULONG celt) PURE
TT_Get_CVT_Func func_read_cvt
FT_ULong loopcall_counter
TT_Project_Func func_dualproj
FT_ULong neg_jump_counter_max
TT_Size_Metrics tt_metrics
TT_Move_Func func_move_orig
TT_Project_Func func_project
TT_Set_CVT_Func func_move_cvt
TT_Cur_Ppem_Func func_cur_ppem
FT_ULong loopcall_counter_max
FT_ULong neg_jump_counter
TT_CodeRangeTable codeRangeTable
TT_Set_CVT_Func func_write_cvt
TT_Interpreter interpreter
FT_F26Dot6 single_width_value
FT_F26Dot6 control_value_cutin
FT_F26Dot6 minimum_distance
FT_F26Dot6 single_width_cutin
FT_UShort maxStackElements
FT_UShort maxSizeOfInstructions
FT_F26Dot6 compensations[4]
ecx edi movl ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx movl TEMP incl eax andl eax ecx incl ebx testl eax jnz xchgl ecx incl TEMP esp ecx subl ebx pushl ecx ecx edx ecx shrl ecx mm0 mm4 mm0 mm4 mm1 mm5 mm1 mm5 mm2 mm6 mm2 mm6 mm3 mm7 mm3 mm7 paddd mm0 paddd mm4 paddd mm0 paddd mm4 paddd mm0 paddd mm4 movq mm1 movq mm5 psrlq mm1 psrlq mm5 paddd mm0 paddd mm4 psrad mm0 psrad mm4 packssdw mm0 packssdw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz popl ecx andl ecx jecxz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 psrlq mm1 paddd mm0 psrad mm0 packssdw mm0 movd eax movw ax
FT_F26Dot6(* TT_Round_Func)(TT_ExecContext exc, FT_F26Dot6 distance, FT_F26Dot6 compensation)
#define TT_Round_Super_45
#define TT_Round_To_Double_Grid
#define TT_Round_Up_To_Grid
TT_RunIns(TT_ExecContext exec)
#define TT_Round_To_Half_Grid
const TT_GraphicsState tt_default_graphics_state
void(* TT_Move_Func)(TT_ExecContext exc, TT_GlyphZone zone, FT_UShort point, FT_F26Dot6 distance)
FT_F26Dot6(* TT_Project_Func)(TT_ExecContext exc, FT_Pos dx, FT_Pos dy)
TT_New_Context(TT_Driver driver)
#define TT_Round_Down_To_Grid
typedefFT_BEGIN_HEADER struct TT_DriverRec_ * TT_Driver
#define TT_MAX_CODE_RANGES
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList