📄 ftconfig.h
字号:
#elif defined( __BORLANDC__ ) /* Borland C++ */ /* XXXX: We should probably check the value of __BORLANDC__ in order */ /* to test the compiler version. */ /* this compiler provides the __int64 type */#define FT_LONG64#define FT_INT64 __int64#elif defined( __WATCOMC__ ) /* Watcom C++ */ /* Watcom doesn't provide 64-bit data types */#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */#define FT_LONG64#define FT_INT64 long long int#elif defined( __GNUC__ ) /* GCC provides the `long long' type */#define FT_LONG64#define FT_INT64 long long int#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */ /*************************************************************************/ /* */ /* A 64-bit data type will create compilation problems if you compile */ /* in strict ANSI mode. To avoid them, we disable its use if __STDC__ */ /* is defined. You can however ignore this rule by defining the */ /* FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */ /* */#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )#ifdef __STDC__ /* undefine the 64-bit macros in strict ANSI compilation mode */#undef FT_LONG64#undef FT_INT64#endif /* __STDC__ */#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */#define FT_BEGIN_STMNT do {#define FT_END_STMNT } while ( 0 )#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER /* Provide assembler fragments for performance-critical functions. */ /* These must be defined `static __inline__' with GCC. */#ifdef __GNUC__#if defined( __arm__ ) && !defined( __thumb__ )#define FT_MULFIX_ASSEMBLER FT_MulFix_arm /* documentation is in freetype.h */ static __inline__ FT_Int32 FT_MulFix_arm( FT_Int32 a, FT_Int32 b ) { register FT_Int32 t, t2; asm __volatile__ ( "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */ "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */ "add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */ "adds %1, %1, %0\n\t" /* %1 += %0 */ "adc %2, %2, #0\n\t" /* %2 += carry */ "mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */ "orr %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */ : "=r"(a), "=&r"(t2), "=&r"(t) : "r"(a), "r"(b) ); return a; }#endif /* __arm__ && !__thumb__ */#if defined( i386 )#define FT_MULFIX_ASSEMBLER FT_MulFix_i386 /* documentation is in freetype.h */ static __inline__ FT_Int32 FT_MulFix_i386( FT_Int32 a, FT_Int32 b ) { register FT_Int32 result; __asm__ __volatile__ ( "imul %%edx\n" "movl %%edx, %%ecx\n" "sarl $31, %%ecx\n" "addl $0x8000, %%ecx\n" "addl %%ecx, %%eax\n" "adcl $0, %%edx\n" "shrl $16, %%eax\n" "shll $16, %%edx\n" "addl %%edx, %%eax\n" : "=a"(result), "+d"(b) : "a"(a) : "%ecx" ); return result; }#endif /* i386 */#endif /* __GNUC__ */#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */#ifdef FT_CONFIG_OPTION_INLINE_MULFIX#ifdef FT_MULFIX_ASSEMBLER#define FT_MULFIX_INLINED FT_MULFIX_ASSEMBLER#endif#endif#ifdef FT_MAKE_OPTION_SINGLE_OBJECT#define FT_LOCAL( x ) static x#define FT_LOCAL_DEF( x ) static x#else#ifdef __cplusplus#define FT_LOCAL( x ) extern "C" x#define FT_LOCAL_DEF( x ) extern "C" x#else#define FT_LOCAL( x ) extern x#define FT_LOCAL_DEF( x ) x#endif#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */#ifndef FT_BASE#ifdef __cplusplus#define FT_BASE( x ) extern "C" x#else#define FT_BASE( x ) extern x#endif#endif /* !FT_BASE */#ifndef FT_BASE_DEF#ifdef __cplusplus#define FT_BASE_DEF( x ) x#else#define FT_BASE_DEF( x ) x#endif#endif /* !FT_BASE_DEF */#ifndef FT_EXPORT#ifdef __cplusplus#define FT_EXPORT( x ) extern "C" x#else#define FT_EXPORT( x ) extern x#endif#endif /* !FT_EXPORT */#ifndef FT_EXPORT_DEF#ifdef __cplusplus#define FT_EXPORT_DEF( x ) extern "C" x#else#define FT_EXPORT_DEF( x ) extern x#endif#endif /* !FT_EXPORT_DEF */#ifndef FT_EXPORT_VAR#ifdef __cplusplus#define FT_EXPORT_VAR( x ) extern "C" x#else#define FT_EXPORT_VAR( x ) extern x#endif#endif /* !FT_EXPORT_VAR */ /* The following macros are needed to compile the library with a */ /* C++ compiler and with 16bit compilers. */ /* */ /* This is special. Within C++, you must specify `extern "C"' for */ /* functions which are used via function pointers, and you also */ /* must do that for structures which contain function pointers to */ /* assure C linkage -- it's not possible to have (local) anonymous */ /* functions which are accessed by (global) function pointers. */ /* */ /* */ /* FT_CALLBACK_DEF is used to _define_ a callback function. */ /* */ /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ /* contains pointers to callback functions. */ /* */ /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ /* that contains pointers to callback functions. */ /* */ /* */ /* Some 16bit compilers have to redefine these macros to insert */ /* the infamous `_cdecl' or `__fastcall' declarations. */ /* */#ifndef FT_CALLBACK_DEF#ifdef __cplusplus#define FT_CALLBACK_DEF( x ) extern "C" x#else#define FT_CALLBACK_DEF( x ) static x#endif#endif /* FT_CALLBACK_DEF */#ifndef FT_CALLBACK_TABLE#ifdef __cplusplus#define FT_CALLBACK_TABLE extern "C"#define FT_CALLBACK_TABLE_DEF extern "C"#else#define FT_CALLBACK_TABLE extern#define FT_CALLBACK_TABLE_DEF /* nothing */#endif#endif /* FT_CALLBACK_TABLE */FT_END_HEADER#endif /* __FTCONFIG_H__ *//* END */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -