com php-src: make use of intrinsics available with VS for bitset lookups: Zend/zend_alloc.c

From: Date: Fri, 19 Sep 2014 23:43:06 +0000
Subject: com php-src: make use of intrinsics available with VS for bitset lookups: Zend/zend_alloc.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-81792@lists.php.net to get a copy of this message
Commit: 7b4e8c64e059108a612ba04feddf0e395633d081 Author: Anatol Belski <ab@php.net> Sat, 20 Sep 2014 01:36:51 +0200 Parents: 2700e248b88db997d5504b7387d0f0bb3e35291c Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=7b4e8c64e059108a612ba04feddf0e395633d081 Log: make use of intrinsics available with VS for bitset lookups Changed paths: M Zend/zend_alloc.c Diff: diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 7514979..77a8251 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -477,6 +477,19 @@ static zend_always_inline int zend_mm_bitset_nts(zend_mm_bitset bitset) { #if defined(__GNUC__) return __builtin_ctzl(~bitset); +#elif defined(_WIN32) + unsigned long index; + +#if defined(_WIN64) + if (!BitScanForward64(&index, ~bitset)) { +#else + if (!BitScanForward(&index, ~bitset)) { +#endif + /* undefined behavior */ + return 32; + } + + return (int)index; #else int n; @@ -501,6 +514,19 @@ static zend_always_inline int zend_mm_bitset_ntz(zend_mm_bitset bitset) { #if defined(__GNUC__) return __builtin_ctzl(bitset); +#elif defined(_WIN32) + unsigned long index; + +#if defined(_WIN64) + if (!BitScanForward64(&index, bitset)) { +#else + if (!BitScanForward(&index, bitset)) { +#endif + /* undefined behavior */ + return 32; + } + + return (int)index; #else int n; @@ -1023,6 +1049,15 @@ static zend_always_inline int zend_mm_small_size_to_bit(int size) { #if defined(__GNUC__) return (__builtin_clz(size) ^ 0x1f) + 1; +#elif defined(_WIN32) + unsigned long index; + + if (!BitScanReverse(&index, (unsigned long)size)) { + /* undefined behavior */ + return 32; + } + + return (((31 - (int)index) ^ 0x1f) + 1); #else int n = 16; if (size <= 0x00ff) {n -= 8; size = size << 8;}

« previous php.cvs (#81792) next »