Index: third_party/freetype2/include/ftconfig.h |
diff --git a/third_party/freetype2/include/ftconfig.h b/third_party/freetype2/include/ftconfig.h |
index 16f8854e27efb947eb65950c22abaca687160261..f05e60845569995915be5d6b0a440bd634574138 100644 |
--- a/third_party/freetype2/include/ftconfig.h |
+++ b/third_party/freetype2/include/ftconfig.h |
@@ -5,7 +5,7 @@ |
/* */ |
/* UNIX-specific configuration file (specification only). */ |
/* */ |
-/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 by */ |
+/* Copyright 1996-2004, 2006-2009, 2011 by */ |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
/* */ |
/* This file is part of the FreeType project, and may only be used, */ |
@@ -118,10 +118,6 @@ FT_BEGIN_HEADER |
#endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */ |
- /* Preferred alignment of data */ |
-#define FT_ALIGNMENT 8 |
- |
- |
/* FT_UNUSED is a macro used to indicate that a given parameter is not */ |
/* used -- this is only used to get rid of unpleasant compiler warnings */ |
#ifndef FT_UNUSED |
@@ -150,7 +146,12 @@ FT_BEGIN_HEADER |
#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \ |
( defined( __MWERKS__ ) && defined( macintosh ) ) |
/* no Carbon frameworks for 64bit 10.4.x */ |
+ /* AvailabilityMacros.h is available since Mac OS X 10.2, */ |
+ /* so guess the system version by maximum errno before inclusion */ |
+#include <errno.h> |
+#ifdef ECANCELED /* defined since 10.2 */ |
#include "AvailabilityMacros.h" |
+#endif |
#if defined( __LP64__ ) && \ |
( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) |
#define DARWIN_NO_CARBON 1 |
@@ -287,11 +288,42 @@ FT_BEGIN_HEADER |
/* Provide assembler fragments for performance-critical functions. */ |
/* These must be defined `static __inline__' with GCC. */ |
+#if defined( __CC_ARM ) || defined( __ARMCC__ ) /* RVCT */ |
+#define FT_MULFIX_ASSEMBLER FT_MulFix_arm |
+ |
+ /* documentation is in freetype.h */ |
+ |
+ static __inline FT_Int32 |
+ FT_MulFix_arm( FT_Int32 a, |
+ FT_Int32 b ) |
+ { |
+ register FT_Int32 t, t2; |
+ |
+ |
+ __asm |
+ { |
+ smull t2, t, b, a /* (lo=t2,hi=t) = a*b */ |
+ mov a, t, asr #31 /* a = (hi >> 31) */ |
+ add a, a, #0x8000 /* a += 0x8000 */ |
+ adds t2, t2, a /* t2 += a */ |
+ adc t, t, #0 /* t += carry */ |
+ mov a, t2, lsr #16 /* a = t2 >> 16 */ |
+ orr a, a, t, lsl #16 /* a |= t << 16 */ |
+ } |
+ return a; |
+ } |
+ |
+#endif /* __CC_ARM || __ARMCC__ */ |
+ |
+ |
#ifdef __GNUC__ |
-#if defined( __arm__ ) && !defined( __thumb__ ) |
+#if defined( __arm__ ) && !defined( __thumb__ ) && \ |
+ !( defined( __CC_ARM ) || defined( __ARMCC__ ) ) |
#define FT_MULFIX_ASSEMBLER FT_MulFix_arm |
+ /* documentation is in freetype.h */ |
+ |
static __inline__ FT_Int32 |
FT_MulFix_arm( FT_Int32 a, |
FT_Int32 b ) |
@@ -312,11 +344,13 @@ FT_BEGIN_HEADER |
return a; |
} |
-#endif /* __arm__ && !__thumb__ */ |
+#endif /* __arm__ && !__thumb__ && !( __CC_ARM || __ARMCC__ ) */ |
-#if defined( i386 ) |
+#if defined( __i386__ ) |
#define FT_MULFIX_ASSEMBLER FT_MulFix_i386 |
+ /* documentation is in freetype.h */ |
+ |
static __inline__ FT_Int32 |
FT_MulFix_i386( FT_Int32 a, |
FT_Int32 b ) |
@@ -334,9 +368,9 @@ FT_BEGIN_HEADER |
"shrl $16, %%eax\n" |
"shll $16, %%edx\n" |
"addl %%edx, %%eax\n" |
- : "=a"(result), "+d"(b) |
- : "a"(a) |
- : "%ecx" ); |
+ : "=a"(result), "=d"(b) |
+ : "a"(a), "d"(b) |
+ : "%ecx", "cc" ); |
return result; |
} |
@@ -344,6 +378,43 @@ FT_BEGIN_HEADER |
#endif /* __GNUC__ */ |
+ |
+#ifdef _MSC_VER /* Visual C++ */ |
+ |
+#ifdef _M_IX86 |
+ |
+#define FT_MULFIX_ASSEMBLER FT_MulFix_i386 |
+ |
+ /* documentation is in freetype.h */ |
+ |
+ static __inline FT_Int32 |
+ FT_MulFix_i386( FT_Int32 a, |
+ FT_Int32 b ) |
+ { |
+ register FT_Int32 result; |
+ |
+ __asm |
+ { |
+ mov eax, a |
+ mov edx, b |
+ imul edx |
+ mov ecx, edx |
+ sar ecx, 31 |
+ add ecx, 8000h |
+ add eax, ecx |
+ adc edx, 0 |
+ shr eax, 16 |
+ shl edx, 16 |
+ add eax, edx |
+ mov result, eax |
+ } |
+ return result; |
+ } |
+ |
+#endif /* _M_IX86 */ |
+ |
+#endif /* _MSC_VER */ |
+ |
#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */ |