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++.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
diff --git a/ChangeLog b/ChangeLog
index b53cda3..35bf2af 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2011-02-13 Bradley Grainger <bgrainger@logos.com>
+ 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 <bgrainger@logos.com>
+
Add project and solution files in Visual Studio 2010 format.
* builds/win32/.gitignore: Ignore user-specific cache files.
diff --git a/include/freetype/config/ftconfig.h b/include/freetype/config/ftconfig.h
index bcbcd6f..dd9d10c 100644
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -395,6 +395,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 */