shithub: freetype+ttf2subf

Download patch

ref: 70f7db113e1e659cae950ec7d9f2a99c30383e7b
parent: d2731e104c2804439e359fe3376a5baa14afcef4
author: Bradley Grainger <[email protected]>
date: Sat Feb 12 07:51:36 EST 2011

Add inline assembly version of FT_MulFix for MSVC.

* include/freetype/config/ftconfig.h: Ported the FT_MulFix_i386
function from GNU inline assembly syntax (see #ifdef __GNUC__ block
above) to MASM syntax for Microsoft Visual C++.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2011-02-13  Bradley Grainger  <[email protected]>
 
+	Add inline assembly version of FT_MulFix for MSVC.
+
+	* include/freetype/config/ftconfig.h: Ported the FT_MulFix_i386
+	function from GNU inline assembly syntax (see #ifdef __GNUC__ block
+	above) to MASM syntax for Microsoft Visual C++.
+
+2011-02-13  Bradley Grainger  <[email protected]>
+
 	Add project and solution files in Visual Studio 2010 format.
 
 	* builds/win32/.gitignore: Ignore user-specific cache files.
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -395,6 +395,43 @@
 
 #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 */