From 84eebf48021ab76c1c628bb7451b712f701e4518 Mon Sep 17 00:00:00 2001 From: Arkady Shapkin Date: Sat, 12 May 2018 06:16:46 +0200 Subject: [PATCH] Use MS VC++'s _BitScanReverse to calculate MSB (patch #9636). * include/freetype/internal/ftcalc.h (FT_MSB) [_MSC_VER]: Implement it. --- ChangeLog | 7 +++++++ include/freetype/internal/ftcalc.h | 26 +++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 004c96f64..4bd8e5ed2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2018-05-12 Arkady Shapkin + + Use MS VC++'s _BitScanReverse to calculate MSB (patch #9636). + + * include/freetype/internal/ftcalc.h (FT_MSB) [_MSC_VER]: Implement + it. + 2018-05-10 Alan Coopersmith Fix DLL compilation on Solaris. diff --git a/include/freetype/internal/ftcalc.h b/include/freetype/internal/ftcalc.h index 818a81235..3f889e631 100644 --- a/include/freetype/internal/ftcalc.h +++ b/include/freetype/internal/ftcalc.h @@ -341,6 +341,7 @@ FT_BEGIN_HEADER */ #ifndef FT_CONFIG_OPTION_NO_ASSEMBLER + #if defined( __GNUC__ ) && \ ( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ) ) @@ -354,7 +355,30 @@ FT_BEGIN_HEADER #endif -#endif /* __GNUC__ */ + +#elif defined( _MSC_VER ) + +#if FT_SIZEOF_INT == 4 + +#include + + static inline FT_Int32 + FT_MSB_i386( FT_UInt32 x ) + { + unsigned long where; + + + _BitScanReverse( &where, x ); + + return (FT_Int32)where; + } + +#define FT_MSB( x ) ( FT_MSB_i386( x ) ) + +#endif + +#endif + #endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */ #ifndef FT_MSB