[truetype] Remove code for static TrueType interpreter.
This is a follow-up patch. * src/truetype/ttinterp.c, src/truetype/ttinterp.h [TT_CONFIG_OPTION_STATIC_INTERPRETER, TT_CONFIG_OPTION_STATIC_RASTER]: Remove macros and related code.
This commit is contained in:
parent
1b4d68cf90
commit
5a752f332c
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2015-01-10 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[truetype] Remove code for static TrueType interpreter.
|
||||
|
||||
This is a follow-up patch.
|
||||
|
||||
* src/truetype/ttinterp.c, src/truetype/ttinterp.h
|
||||
[TT_CONFIG_OPTION_STATIC_INTERPRETER,
|
||||
TT_CONFIG_OPTION_STATIC_RASTER]: Remove macros and related code.
|
||||
|
||||
2015-01-10 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
* src/truetype/ttinterp.c (CUR): Remove by replacing with expansion.
|
||||
|
|
|
@ -53,45 +53,6 @@
|
|||
#define MAX_RUNNABLE_OPCODES 1000000L
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* There are two kinds of implementations: */
|
||||
/* */
|
||||
/* a. static implementation */
|
||||
/* */
|
||||
/* The current execution context is a static variable, which fields */
|
||||
/* are accessed directly by the interpreter during execution. The */
|
||||
/* context is named `cur'. */
|
||||
/* */
|
||||
/* This version is non-reentrant, of course. */
|
||||
/* */
|
||||
/* b. indirect implementation */
|
||||
/* */
|
||||
/* The current execution context is passed to _each_ function as its */
|
||||
/* first argument, and each field is thus accessed indirectly. */
|
||||
/* */
|
||||
/* This version is fully re-entrant. */
|
||||
/* */
|
||||
/* The idea is that an indirect implementation may be slower to execute */
|
||||
/* on low-end processors that are used in some systems (like 386s or */
|
||||
/* even 486s). */
|
||||
/* */
|
||||
/* As a consequence, the indirect implementation is now the default, as */
|
||||
/* its performance costs can be considered negligible in our context. */
|
||||
/* Note, however, that we kept the same source with macros because: */
|
||||
/* */
|
||||
/* - The code is kept very close in design to the Pascal code used for */
|
||||
/* development. */
|
||||
/* */
|
||||
/* - It's much more readable that way! */
|
||||
/* */
|
||||
/* - It's still open to experimentation and tuning. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* This macro is used whenever `exec' is unused in a function, to avoid */
|
||||
|
@ -99,19 +60,6 @@
|
|||
/* */
|
||||
#define FT_UNUSED_EXEC FT_UNUSED( exc )
|
||||
|
||||
#else /* static implementation */
|
||||
|
||||
#define FT_UNUSED_EXEC int __dummy = __dummy
|
||||
|
||||
static
|
||||
TT_ExecContextRec cur; /* static exec. context variable */
|
||||
|
||||
/* apparently, we have a _lot_ of direct indexing when accessing */
|
||||
/* the static `cur', which makes the code bigger (due to all the */
|
||||
/* four bytes addresses). */
|
||||
|
||||
#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
|
@ -8221,13 +8169,6 @@
|
|||
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
|
||||
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_STATIC_RASTER
|
||||
if ( !exc )
|
||||
return FT_THROW( Invalid_Argument );
|
||||
|
||||
cur = *exc;
|
||||
#endif
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
|
||||
exc->iup_called = FALSE;
|
||||
#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
|
||||
|
@ -8981,22 +8922,12 @@
|
|||
} while ( !exc->instruction_trap );
|
||||
|
||||
LNo_Error_:
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_STATIC_RASTER
|
||||
*exc = cur;
|
||||
#endif
|
||||
|
||||
return FT_Err_Ok;
|
||||
|
||||
LErrorCodeOverflow_:
|
||||
exc->error = FT_THROW( Code_Overflow );
|
||||
|
||||
LErrorLabel_:
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_STATIC_RASTER
|
||||
*exc = cur;
|
||||
#endif
|
||||
|
||||
/* If any errors have occurred, function tables may be broken. */
|
||||
/* Force a re-execution of `prep' and `fpgm' tables if no */
|
||||
/* bytecode debugger is run. */
|
||||
|
|
|
@ -26,22 +26,11 @@
|
|||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
|
||||
|
||||
#define EXEC_OP_ TT_ExecContext exc,
|
||||
#define EXEC_OP TT_ExecContext exc
|
||||
#define EXEC_ARG_ exc,
|
||||
#define EXEC_ARG exc
|
||||
|
||||
#else /* static implementation */
|
||||
|
||||
#define EXEC_OP_ /* void */
|
||||
#define EXEC_OP /* void */
|
||||
#define EXEC_ARG_ /* void */
|
||||
#define EXEC_ARG /* void */
|
||||
|
||||
#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
|
|
Loading…
Reference in New Issue