summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBradley Grainger <bgrainger@logos.com>2011-02-12 12:51:36 -0800
committerWerner Lemberg <wl@gnu.org>2011-02-14 08:32:24 +0100
commit70f7db113e1e659cae950ec7d9f2a99c30383e7b (patch)
treec0a652e3cb1a900b8edc7d08a7ed721c336e5aeb
parentd2731e104c2804439e359fe3376a5baa14afcef4 (diff)
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++.
-rw-r--r--ChangeLog8
-rw-r--r--include/freetype/config/ftconfig.h37
2 files changed, 45 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index b53cda3e..35bf2afc 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 bcbcd6f9..dd9d10c2 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 */