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