summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexei Podtelezhnikov <apodtele@gmail.com>2021-11-09 22:47:26 -0500
committerAlexei Podtelezhnikov <apodtele@gmail.com>2021-11-09 22:47:26 -0500
commit188c7d6670fc69d01495ba791bd3d5c7d10c6824 (patch)
tree51a55d770ee9a168391c566ccf2adbdfd25166e2
parent05089e8a07dd18544032f7c0bb7179e7315ecbab (diff)
downloadfreetype2-188c7d6670fc69d01495ba791bd3d5c7d10c6824.tar.gz
Additional `FT_MSB` macro definitions.
Better macros for Windoes CE and ARM in general, based on !109 from metarutaiga. * include/freetype/internal/ftcalc.h [_MSC_VER] (FT_MSB): Updated.
-rw-r--r--include/freetype/internal/ftcalc.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/include/freetype/internal/ftcalc.h b/include/freetype/internal/ftcalc.h
index a0f6890f8..b28d4bfdb 100644
--- a/include/freetype/internal/ftcalc.h
+++ b/include/freetype/internal/ftcalc.h
@@ -372,9 +372,23 @@ FT_BEGIN_HEADER
#endif
-#elif defined( _MSC_VER ) && ( _MSC_VER >= 1400 )
+#elif defined( _MSC_VER ) && _MSC_VER >= 1400
-#if FT_SIZEOF_INT == 4
+#if defined( _WIN32_WCE )
+
+#include <cmnintrin.h>
+#pragma intrinsic( _CountLeadingZeros )
+
+#define FT_MSB( x ) ( 31 - _CountLeadingZeros( x ) )
+
+#elif defined( _M_ARM64 ) || defined( _M_ARM )
+
+#include <intrin.h>
+#pragma intrinsic( _CountLeadingZeros )
+
+#define FT_MSB( x ) ( 31 - _CountLeadingZeros( x ) )
+
+#elif defined( _M_IX86 ) || defined( _M_AMD64 ) || defined( _M_IA64 )
#include <intrin.h>
#pragma intrinsic( _BitScanReverse )
@@ -390,7 +404,7 @@ FT_BEGIN_HEADER
return (FT_Int32)where;
}
-#define FT_MSB( x ) ( FT_MSB_i386( x ) )
+#define FT_MSB( x ) FT_MSB_i386( x )
#endif