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++.
--- 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 */