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