1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ftconfig.h */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ANSI-specific configuration file (specification only). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner/* Copyright 1996-2004, 2006-2008, 2010-2011 by */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This header file contains a number of macro definitions that are used */ 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* by the rest of the engine. Most of the macros here are automatically */ 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* determined at compile time, and you should not need to change it to */ 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* port FreeType, except to compile the library with a non-ANSI */ 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* compiler. */ 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Note however that if some specific modifications are needed, we */ 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* advise you to place a modified copy in your build directory. */ 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The build directory is usually `freetype/builds/<system>', and */ 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* contains system-specific files that are always included first when */ 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* building the library. */ 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This ANSI version should stay in `include/freetype/config'. */ 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef __FTCONFIG_H__ 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __FTCONFIG_H__ 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_CONFIG_OPTIONS_H 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_CONFIG_STANDARD_LIBRARY_H 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 450a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 480a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* PLATFORM-SPECIFIC CONFIGURATION MACROS */ 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* These macros can be toggled to suit a specific system. The current */ 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* ones are defaults used to compile FreeType in an ANSI C environment */ 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* (16bit compilers are also supported). Copy this file to your own */ 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* `freetype/builds/<system>' directory, and edit it to port the engine. */ 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* There are systems (like the Texas Instruments 'C54x) where a `char' */ 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */ 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* `int' has 16 bits also for this system, sizeof(int) gives 1 which */ 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* is probably unexpected. */ 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */ 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* `char' type. */ 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_CHAR_BIT 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CHAR_BIT CHAR_BIT 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The size of an `int' type. */ 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if FT_UINT_MAX == 0xFFFFUL 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SIZEOF_INT (16 / FT_CHAR_BIT) 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif FT_UINT_MAX == 0xFFFFFFFFUL 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SIZEOF_INT (32 / FT_CHAR_BIT) 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SIZEOF_INT (64 / FT_CHAR_BIT) 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#error "Unsupported size of `int' type!" 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The size of a `long' type. A five-byte `long' (as used e.g. on the */ 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* DM642) is recognized but avoided. */ 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if FT_ULONG_MAX == 0xFFFFFFFFUL 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT) 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT) 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT) 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#error "Unsupported size of `long' type!" 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_UNUSED is a macro used to indicate that a given parameter is not */ 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* used -- this is only used to get rid of unpleasant compiler warnings */ 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_UNUSED 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_UNUSED( arg ) ( (arg) = (arg) ) 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* AUTOMATIC CONFIGURATION MACROS */ 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* These macros are computed from the ones defined above. Don't touch */ 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* their definition, unless you know precisely what you are doing. No */ 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* porter should need to mess with them. */ 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Mac support */ 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This is the only necessary change, so it is defined here instead */ 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* providing a new configuration file. */ 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 12341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) ) 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* no Carbon frameworks for 64bit 10.4.x */ 125aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner /* AvailabilityMacros.h is available since Mac OS X 10.2, */ 126aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner /* so guess the system version by maximum errno before inclusion */ 127aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#include <errno.h> 128aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#ifdef ECANCELED /* defined since 10.2 */ 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "AvailabilityMacros.h" 130aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if defined( __LP64__ ) && \ 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) 13341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#undef FT_MACINTOSH 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 1350a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 1360a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#elif defined( __SC__ ) || defined( __MRC__ ) 1370a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* Classic MacOS compilers */ 1380a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#include "ConditionalMacros.h" 1390a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#if TARGET_OS_MAC 1400a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_MACINTOSH 1 1410a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif 1420a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Section> */ 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* basic_types */ 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Type> */ 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_Int16 */ 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A typedef for a 16bit signed integer type. */ 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef signed short FT_Int16; 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Type> */ 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_UInt16 */ 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A typedef for a 16bit unsigned integer type. */ 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned short FT_UInt16; 1740a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* this #if 0 ... #endif clause is for documentation purposes */ 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Type> */ 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_Int32 */ 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A typedef for a 32bit signed integer type. The size depends on */ 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* the configuration. */ 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef signed XXX FT_Int32; 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Type> */ 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_UInt32 */ 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A typedef for a 32bit unsigned integer type. The size depends on */ 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* the configuration. */ 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned XXX FT_UInt32; 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if FT_SIZEOF_INT == (32 / FT_CHAR_BIT) 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef signed int FT_Int32; 210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned int FT_UInt32; 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT) 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef signed long FT_Int32; 215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned long FT_UInt32; 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#error "no 32bit type found -- please check your configuration files" 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2210a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* look up an integer type that is at least 32 bits */ 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT) 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef int FT_Fast; 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned int FT_UFast; 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT) 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef long FT_Fast; 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned long FT_UFast; 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* determine whether we have a 64-bit int type for platforms without */ 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Autoconf */ 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_LONG64 must be defined if a 64-bit type is available */ 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 long 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */ 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* this compiler provides the __int64 type */ 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 __int64 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( __BORLANDC__ ) /* Borland C++ */ 251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* XXXX: We should probably check the value of __BORLANDC__ in order */ 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* to test the compiler version. */ 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* this compiler provides the __int64 type */ 256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 __int64 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( __WATCOMC__ ) /* Watcom C++ */ 260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Watcom doesn't provide 64-bit data types */ 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 long long int 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( __GNUC__ ) 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* GCC provides the `long long' type */ 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 long long int 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */ 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A 64-bit data type will create compilation problems if you compile */ 2800a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* in strict ANSI mode. To avoid them, we disable its use if __STDC__ */ 2810a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* is defined. You can however ignore this rule by defining the */ 2820a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */ 283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 ) 285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __STDC__ 287049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 288049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* undefine the 64-bit macros in strict ANSI compilation mode */ 289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_LONG64 290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_INT64 291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __STDC__ */ 293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */ 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2970a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_BEGIN_STMNT do { 2980a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_END_STMNT } while ( 0 ) 2990a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT 3000a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3010a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3020a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER 3030a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* Provide assembler fragments for performance-critical functions. */ 3040a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* These must be defined `static __inline__' with GCC. */ 3050a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 306295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#if defined( __CC_ARM ) || defined( __ARMCC__ ) /* RVCT */ 307295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_MULFIX_ASSEMBLER FT_MulFix_arm 308295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 309295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* documentation is in freetype.h */ 310295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 311295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner static __inline FT_Int32 312295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_MulFix_arm( FT_Int32 a, 313295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Int32 b ) 314295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 315295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner register FT_Int32 t, t2; 316295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 317295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 318295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner __asm 319295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 320295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner smull t2, t, b, a /* (lo=t2,hi=t) = a*b */ 321295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner mov a, t, asr #31 /* a = (hi >> 31) */ 322295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner add a, a, #0x8000 /* a += 0x8000 */ 323295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner adds t2, t2, a /* t2 += a */ 324295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner adc t, t, #0 /* t += carry */ 325295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner mov a, t2, lsr #16 /* a = t2 >> 16 */ 326295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner orr a, a, t, lsl #16 /* a |= t << 16 */ 327295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 328295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return a; 329295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 330295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 331295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif /* __CC_ARM || __ARMCC__ */ 332295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 333295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 3340a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#ifdef __GNUC__ 3350a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 336295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#if defined( __arm__ ) && !defined( __thumb__ ) && \ 337295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner !( defined( __CC_ARM ) || defined( __ARMCC__ ) ) 3380a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_MULFIX_ASSEMBLER FT_MulFix_arm 3390a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3400a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* documentation is in freetype.h */ 3410a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3420a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project static __inline__ FT_Int32 3430a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_MulFix_arm( FT_Int32 a, 3440a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_Int32 b ) 3450a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project { 3460a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project register FT_Int32 t, t2; 3470a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3480a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 349aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner __asm__ __volatile__ ( 350bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */ 351bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */ 352bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly "add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */ 353bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly "adds %1, %1, %0\n\t" /* %1 += %0 */ 354bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly "adc %2, %2, #0\n\t" /* %2 += carry */ 355bff90fb5ec88ad7fdfb6d1d2f5a5719c20a2c5dcOlivier Bailly "mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */ 356aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner "orr %0, %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */ 3570a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "=r"(a), "=&r"(t2), "=&r"(t) 3580a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "r"(a), "r"(b) ); 3590a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project return a; 3600a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project } 3610a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 362295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif /* __arm__ && !__thumb__ && !( __CC_ARM || __ARMCC__ ) */ 3630a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 364aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich#if defined( __i386__ ) 3650a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_MULFIX_ASSEMBLER FT_MulFix_i386 3660a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3670a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* documentation is in freetype.h */ 3680a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3690a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project static __inline__ FT_Int32 3700a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_MulFix_i386( FT_Int32 a, 3710a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_Int32 b ) 3720a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project { 3730a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project register FT_Int32 result; 3740a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3750a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3760a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project __asm__ __volatile__ ( 3770a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "imul %%edx\n" 3780a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "movl %%edx, %%ecx\n" 3790a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "sarl $31, %%ecx\n" 3800a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "addl $0x8000, %%ecx\n" 3810a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "addl %%ecx, %%eax\n" 3820a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "adcl $0, %%edx\n" 3830a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "shrl $16, %%eax\n" 3840a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "shll $16, %%edx\n" 3850a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "addl %%edx, %%eax\n" 3860a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "=a"(result), "=d"(b) 3870a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "a"(a), "d"(b) 3880a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "%ecx", "cc" ); 3890a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project return result; 3900a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project } 3910a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3920a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif /* i386 */ 3930a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3940a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif /* __GNUC__ */ 3950a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 396aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 397aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#ifdef _MSC_VER /* Visual C++ */ 398aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 399aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#ifdef _M_IX86 400aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 401aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#define FT_MULFIX_ASSEMBLER FT_MulFix_i386 402aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 403aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner /* documentation is in freetype.h */ 404aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 405aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner static __inline FT_Int32 406aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner FT_MulFix_i386( FT_Int32 a, 407aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner FT_Int32 b ) 408aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner { 409aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner register FT_Int32 result; 410aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 411aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner __asm 412aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner { 413aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner mov eax, a 414aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner mov edx, b 415aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner imul edx 416aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner mov ecx, edx 417aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner sar ecx, 31 418aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner add ecx, 8000h 419aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner add eax, ecx 420aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner adc edx, 0 421aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner shr eax, 16 422aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner shl edx, 16 423aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner add eax, edx 424aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner mov result, eax 425aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner } 426aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner return result; 427aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner } 428aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 429aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif /* _M_IX86 */ 430aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 431aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#endif /* _MSC_VER */ 432aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 4330a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */ 4340a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 4350a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 4360a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#ifdef FT_CONFIG_OPTION_INLINE_MULFIX 4370a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#ifdef FT_MULFIX_ASSEMBLER 4380a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_MULFIX_INLINED FT_MULFIX_ASSEMBLER 4390a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif 4400a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif 4410a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 4420a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 443049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef FT_MAKE_OPTION_SINGLE_OBJECT 444049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 445049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL( x ) static x 446049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL_DEF( x ) static x 447049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 448049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 449049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 450049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 451049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL( x ) extern "C" x 452049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL_DEF( x ) extern "C" x 453049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 454049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL( x ) extern x 455049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL_DEF( x ) x 456049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 457049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 458049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ 459049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 460049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 461049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_BASE 462049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 463049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 464049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_BASE( x ) extern "C" x 465049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 466049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_BASE( x ) extern x 467049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 468049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 469049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_BASE */ 470049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 471049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 472049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_BASE_DEF 473049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 474049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 4750a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_BASE_DEF( x ) x 476049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 477049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_BASE_DEF( x ) x 478049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 479049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 480049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_BASE_DEF */ 481049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 482049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 483049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_EXPORT 484049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 485049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 486049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT( x ) extern "C" x 487049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 488049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT( x ) extern x 489049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 490049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 491049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_EXPORT */ 492049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 493049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 494049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_EXPORT_DEF 495049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 496049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 497049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT_DEF( x ) extern "C" x 498049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 499049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT_DEF( x ) extern x 500049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 501049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 502049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_EXPORT_DEF */ 503049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 504049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 505049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_EXPORT_VAR 506049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 507049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 508049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT_VAR( x ) extern "C" x 509049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 510049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT_VAR( x ) extern x 511049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 512049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 513049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_EXPORT_VAR */ 514049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 515049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The following macros are needed to compile the library with a */ 516049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* C++ compiler and with 16bit compilers. */ 517049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 518049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 519049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This is special. Within C++, you must specify `extern "C"' for */ 520049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* functions which are used via function pointers, and you also */ 521049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* must do that for structures which contain function pointers to */ 522049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* assure C linkage -- it's not possible to have (local) anonymous */ 523049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* functions which are accessed by (global) function pointers. */ 524049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 525049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 526049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_CALLBACK_DEF is used to _define_ a callback function. */ 527049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 528049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ 529049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* contains pointers to callback functions. */ 530049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 531049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ 532049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* that contains pointers to callback functions. */ 533049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 534049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 535049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Some 16bit compilers have to redefine these macros to insert */ 536049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* the infamous `_cdecl' or `__fastcall' declarations. */ 537049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 538049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_CALLBACK_DEF 539049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 540049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_DEF( x ) extern "C" x 541049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 542049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_DEF( x ) static x 543049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 544049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_CALLBACK_DEF */ 545049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 546049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_CALLBACK_TABLE 547049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 548049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_TABLE extern "C" 549049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_TABLE_DEF extern "C" 550049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 551049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_TABLE extern 552049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_TABLE_DEF /* nothing */ 553049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 554049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_CALLBACK_TABLE */ 555049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 556049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 557049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER 558049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 559049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 560049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __FTCONFIG_H__ */ 561049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 562049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 563049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 564