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/* */ 7c3ee10bfa1f76a18500b487de9c85757375b48f3David '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 /* Preferred alignment of data */ 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_ALIGNMENT 8 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_UNUSED is a macro used to indicate that a given parameter is not */ 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* used -- this is only used to get rid of unpleasant compiler warnings */ 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_UNUSED 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_UNUSED( arg ) ( (arg) = (arg) ) 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* AUTOMATIC CONFIGURATION MACROS */ 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* These macros are computed from the ones defined above. Don't touch */ 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* their definition, unless you know precisely what you are doing. No */ 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* porter should need to mess with them. */ 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Mac support */ 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This is the only necessary change, so it is defined here instead */ 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* providing a new configuration file. */ 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \ 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ( defined( __MWERKS__ ) && defined( macintosh ) ) 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* no Carbon frameworks for 64bit 10.4.x */ 130c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner /* AvailabilityMacros.h is available since Mac OS X 10.2, */ 131c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner /* so guess the system version by maximum errno before inclusion */ 132c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#include <errno.h> 133c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#ifdef ECANCELED /* defined since 10.2 */ 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "AvailabilityMacros.h" 135c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#endif 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if defined( __LP64__ ) && \ 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define DARWIN_NO_CARBON 1 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_MACINTOSH 1 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 1420a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 1430a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#elif defined( __SC__ ) || defined( __MRC__ ) 1440a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* Classic MacOS compilers */ 1450a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#include "ConditionalMacros.h" 1460a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#if TARGET_OS_MAC 1470a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_MACINTOSH 1 1480a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif 1490a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 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 /* <Section> */ 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* basic_types */ 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Type> */ 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_Int16 */ 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A typedef for a 16bit signed integer type. */ 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef signed short FT_Int16; 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Type> */ 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_UInt16 */ 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A typedef for a 16bit unsigned integer type. */ 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned short FT_UInt16; 1810a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* this #if 0 ... #endif clause is for documentation purposes */ 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Type> */ 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_Int32 */ 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A typedef for a 32bit signed integer type. The size depends on */ 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* the configuration. */ 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef signed XXX FT_Int32; 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Type> */ 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_UInt32 */ 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A typedef for a 32bit unsigned integer type. The size depends on */ 206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* the configuration. */ 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned XXX FT_UInt32; 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if FT_SIZEOF_INT == (32 / FT_CHAR_BIT) 215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef signed int FT_Int32; 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned int FT_UInt32; 218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT) 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef signed long FT_Int32; 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned long FT_UInt32; 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#error "no 32bit type found -- please check your configuration files" 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2280a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* look up an integer type that is at least 32 bits */ 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT) 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef int FT_Fast; 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned int FT_UFast; 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT) 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef long FT_Fast; 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef unsigned long FT_UFast; 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* determine whether we have a 64-bit int type for platforms without */ 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Autoconf */ 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_LONG64 must be defined if a 64-bit type is available */ 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 long 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */ 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* this compiler provides the __int64 type */ 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 __int64 256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( __BORLANDC__ ) /* Borland C++ */ 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* XXXX: We should probably check the value of __BORLANDC__ in order */ 260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* to test the compiler version. */ 261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* this compiler provides the __int64 type */ 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 __int64 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( __WATCOMC__ ) /* Watcom C++ */ 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Watcom doesn't provide 64-bit data types */ 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 long long int 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#elif defined( __GNUC__ ) 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* GCC provides the `long long' type */ 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LONG64 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_INT64 long long int 280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */ 282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A 64-bit data type will create compilation problems if you compile */ 2870a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* in strict ANSI mode. To avoid them, we disable its use if __STDC__ */ 2880a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* is defined. You can however ignore this rule by defining the */ 2890a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */ 290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 ) 292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __STDC__ 294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* undefine the 64-bit macros in strict ANSI compilation mode */ 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_LONG64 297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_INT64 298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __STDC__ */ 300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */ 302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 3040a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_BEGIN_STMNT do { 3050a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_END_STMNT } while ( 0 ) 3060a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT 3070a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3080a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3090a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER 3100a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* Provide assembler fragments for performance-critical functions. */ 3110a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* These must be defined `static __inline__' with GCC. */ 3120a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 313295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#if defined( __CC_ARM ) || defined( __ARMCC__ ) /* RVCT */ 314295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_MULFIX_ASSEMBLER FT_MulFix_arm 315295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 316295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* documentation is in freetype.h */ 317295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 318295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner static __inline FT_Int32 319295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_MulFix_arm( FT_Int32 a, 320295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Int32 b ) 321295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 322295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner register FT_Int32 t, t2; 323295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 324295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 325295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner __asm 326295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner { 327295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner smull t2, t, b, a /* (lo=t2,hi=t) = a*b */ 328295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner mov a, t, asr #31 /* a = (hi >> 31) */ 329295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner add a, a, #0x8000 /* a += 0x8000 */ 330295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner adds t2, t2, a /* t2 += a */ 331295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner adc t, t, #0 /* t += carry */ 332295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner mov a, t2, lsr #16 /* a = t2 >> 16 */ 333295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner orr a, a, t, lsl #16 /* a |= t << 16 */ 334295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 335295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return a; 336295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner } 337295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 338295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif /* __CC_ARM || __ARMCC__ */ 339295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 340295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 3410a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#ifdef __GNUC__ 3420a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 343295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#if defined( __arm__ ) && !defined( __thumb__ ) && \ 344295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner !( defined( __CC_ARM ) || defined( __ARMCC__ ) ) 3450a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_MULFIX_ASSEMBLER FT_MulFix_arm 3460a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3470a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* documentation is in freetype.h */ 3480a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3490a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project static __inline__ FT_Int32 3500a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_MulFix_arm( FT_Int32 a, 3510a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_Int32 b ) 3520a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project { 3530a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project register FT_Int32 t, t2; 3540a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3550a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 356c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner __asm__ __volatile__ ( 3570a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */ 3580a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */ 3590a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */ 3600a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "adds %1, %1, %0\n\t" /* %1 += %0 */ 3610a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "adc %2, %2, #0\n\t" /* %2 += carry */ 3620a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */ 363c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner "orr %0, %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */ 3640a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "=r"(a), "=&r"(t2), "=&r"(t) 3650a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "r"(a), "r"(b) ); 3660a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project return a; 3670a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project } 3680a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 369295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif /* __arm__ && !__thumb__ && !( __CC_ARM || __ARMCC__ ) */ 3700a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 371aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich#if defined( __i386__ ) 3720a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_MULFIX_ASSEMBLER FT_MulFix_i386 3730a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3740a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project /* documentation is in freetype.h */ 3750a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3760a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project static __inline__ FT_Int32 3770a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_MulFix_i386( FT_Int32 a, 3780a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_Int32 b ) 3790a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project { 3800a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project register FT_Int32 result; 3810a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3820a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3830a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project __asm__ __volatile__ ( 3840a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "imul %%edx\n" 3850a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "movl %%edx, %%ecx\n" 3860a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "sarl $31, %%ecx\n" 3870a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "addl $0x8000, %%ecx\n" 3880a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "addl %%ecx, %%eax\n" 3890a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "adcl $0, %%edx\n" 3900a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "shrl $16, %%eax\n" 3910a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "shll $16, %%edx\n" 3920a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project "addl %%edx, %%eax\n" 3930a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "=a"(result), "=d"(b) 3940a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "a"(a), "d"(b) 3950a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project : "%ecx", "cc" ); 3960a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project return result; 3970a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project } 3980a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 3990a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif /* i386 */ 4000a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 4010a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif /* __GNUC__ */ 4020a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 403c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner 404c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#ifdef _MSC_VER /* Visual C++ */ 405c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner 406c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#ifdef _M_IX86 407c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner 408c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#define FT_MULFIX_ASSEMBLER FT_MulFix_i386 409c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner 410c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner /* documentation is in freetype.h */ 411c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner 412c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner static __inline FT_Int32 413c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner FT_MulFix_i386( FT_Int32 a, 414c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner FT_Int32 b ) 415c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner { 416c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner register FT_Int32 result; 417c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner 418c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner __asm 419c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner { 420c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner mov eax, a 421c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner mov edx, b 422c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner imul edx 423c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner mov ecx, edx 424c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner sar ecx, 31 425c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner add ecx, 8000h 426c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner add eax, ecx 427c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner adc edx, 0 428c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner shr eax, 16 429c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner shl edx, 16 430c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner add eax, edx 431c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner mov result, eax 432c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner } 433c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner return result; 434c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner } 435c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner 436c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#endif /* _M_IX86 */ 437c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner 438c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#endif /* _MSC_VER */ 439c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner 4400a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */ 4410a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 4420a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 4430a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#ifdef FT_CONFIG_OPTION_INLINE_MULFIX 4440a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#ifdef FT_MULFIX_ASSEMBLER 4450a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_MULFIX_INLINED FT_MULFIX_ASSEMBLER 4460a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif 4470a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#endif 4480a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 4490a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 450049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef FT_MAKE_OPTION_SINGLE_OBJECT 451049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 452049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL( x ) static x 453049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL_DEF( x ) static x 454049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 455049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 456049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 457049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 458049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL( x ) extern "C" x 459049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL_DEF( x ) extern "C" x 460049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 461049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL( x ) extern x 462049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_LOCAL_DEF( x ) x 463049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 464049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 465049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */ 466049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 467049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 468049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_BASE 469049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 470049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 471049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_BASE( x ) extern "C" x 472049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 473049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_BASE( x ) extern x 474049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 475049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 476049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_BASE */ 477049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 478049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 479049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_BASE_DEF 480049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 481049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 4820a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project#define FT_BASE_DEF( x ) x 483049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 484049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_BASE_DEF( x ) x 485049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 486049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 487049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_BASE_DEF */ 488049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 489049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 490049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_EXPORT 491049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 492049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 493049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT( x ) extern "C" x 494049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 495049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT( x ) extern x 496049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 497049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 498049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_EXPORT */ 499049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 500049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 501049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_EXPORT_DEF 502049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 503049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 504049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT_DEF( x ) extern "C" x 505049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 506049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT_DEF( x ) extern x 507049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 508049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 509049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_EXPORT_DEF */ 510049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 511049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 512049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_EXPORT_VAR 513049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 514049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 515049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT_VAR( x ) extern "C" x 516049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 517049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_EXPORT_VAR( x ) extern x 518049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 519049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 520049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* !FT_EXPORT_VAR */ 521049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 522049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The following macros are needed to compile the library with a */ 523049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* C++ compiler and with 16bit compilers. */ 524049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 525049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 526049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This is special. Within C++, you must specify `extern "C"' for */ 527049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* functions which are used via function pointers, and you also */ 528049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* must do that for structures which contain function pointers to */ 529049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* assure C linkage -- it's not possible to have (local) anonymous */ 530049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* functions which are accessed by (global) function pointers. */ 531049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 532049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 533049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_CALLBACK_DEF is used to _define_ a callback function. */ 534049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 535049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */ 536049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* contains pointers to callback functions. */ 537049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 538049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */ 539049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* that contains pointers to callback functions. */ 540049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 541049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 542049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Some 16bit compilers have to redefine these macros to insert */ 543049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* the infamous `_cdecl' or `__fastcall' declarations. */ 544049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 545049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_CALLBACK_DEF 546049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 547049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_DEF( x ) extern "C" x 548049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 549049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_DEF( x ) static x 550049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 551049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_CALLBACK_DEF */ 552049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 553049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef FT_CALLBACK_TABLE 554049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef __cplusplus 555049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_TABLE extern "C" 556049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_TABLE_DEF extern "C" 557049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else 558049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_TABLE extern 559049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_CALLBACK_TABLE_DEF /* nothing */ 560049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 561049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_CALLBACK_TABLE */ 562049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 563049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 564049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER 565049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 566049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 567049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __FTCONFIG_H__ */ 568049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 569049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 570049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 571