mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-14 12:04:29 +00:00
sw_engine: fix MSVC compatibility problem.
clz (count leading zero) is builtin function that is not available in MSVC. This patch replace clz for MSVC env. Thanks @fire for pointing out this. Refers: https://stackoverflow.com/questions/355967/how-to-use-msvc-intrinsics-to-get-the-equivalent-of-this-gcc-code
This commit is contained in:
parent
4f35c478c2
commit
bba162b604
1 changed files with 16 additions and 2 deletions
|
@ -27,6 +27,21 @@
|
||||||
/* Internal Class Implementation */
|
/* Internal Class Implementation */
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
||||||
|
//clz: count leading zero’s
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include <intrin.h>
|
||||||
|
static uint32_t __inline _clz(uint32_t value)
|
||||||
|
{
|
||||||
|
unsigned long leadingZero = 0;
|
||||||
|
if (_BitScanReverse(&leadingZero, value)) return 31 - leadingZero;
|
||||||
|
else return 32;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define _clz(x) __builtin_clz((x))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
constexpr SwFixed CORDIC_FACTOR = 0xDBD95B16UL; //the Cordic shrink factor 0.858785336480436 * 2^32
|
constexpr SwFixed CORDIC_FACTOR = 0xDBD95B16UL; //the Cordic shrink factor 0.858785336480436 * 2^32
|
||||||
|
|
||||||
//this table was generated for SW_FT_PI = 180L << 16, i.e. degrees
|
//this table was generated for SW_FT_PI = 180L << 16, i.e. degrees
|
||||||
|
@ -68,8 +83,7 @@ static int32_t _normalize(SwPoint& pt)
|
||||||
auto v = pt;
|
auto v = pt;
|
||||||
|
|
||||||
//High order bit(MSB)
|
//High order bit(MSB)
|
||||||
//clz: count leading zero’s
|
auto shift = 31 - _clz(abs(v.x) | abs(v.y));
|
||||||
auto shift = 31 - __builtin_clz(abs(v.x) | abs(v.y));
|
|
||||||
|
|
||||||
if (shift <= SAFE_MSB) {
|
if (shift <= SAFE_MSB) {
|
||||||
shift = SAFE_MSB - shift;
|
shift = SAFE_MSB - shift;
|
||||||
|
|
Loading…
Add table
Reference in a new issue