diff options
author | Bradley Grainger <bgrainger@logos.com> | 2011-02-12 12:51:36 -0800 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2011-02-14 08:32:24 +0100 |
commit | 70f7db113e1e659cae950ec7d9f2a99c30383e7b (patch) | |
tree | c0a652e3cb1a900b8edc7d08a7ed721c336e5aeb | |
parent | d2731e104c2804439e359fe3376a5baa14afcef4 (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-- | ChangeLog | 8 | ||||
-rw-r--r-- | include/freetype/config/ftconfig.h | 37 |
2 files changed, 45 insertions, 0 deletions
@@ -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 */ |