58
58
#include "zend_globals.h"
59
59
#include "zend_operators.h"
60
60
#include "zend_multiply.h"
61
+ #include "zend_bitset.h"
61
62
62
63
#ifdef HAVE_SIGNAL_H
63
64
# include <signal.h>
@@ -546,45 +547,6 @@ static zend_always_inline int zend_mm_bitset_nts(zend_mm_bitset bitset)
546
547
#endif
547
548
}
548
549
549
- /* number of trailing zero bits (0x01 -> 1; 0x40 -> 6; 0x00 -> LEN) */
550
- static zend_always_inline int zend_mm_bitset_ntz (zend_mm_bitset bitset )
551
- {
552
- #if (defined(__GNUC__ ) || __has_builtin (__builtin_ctzl )) && SIZEOF_ZEND_LONG == SIZEOF_LONG && defined(PHP_HAVE_BUILTIN_CTZL )
553
- return __builtin_ctzl (bitset );
554
- #elif (defined(__GNUC__ ) || __has_builtin (__builtin_ctzll )) && defined(PHP_HAVE_BUILTIN_CTZLL )
555
- return __builtin_ctzll (bitset );
556
- #elif defined(_WIN32 )
557
- unsigned long index ;
558
-
559
- #if defined(_WIN64 )
560
- if (!BitScanForward64 (& index , bitset )) {
561
- #else
562
- if (!BitScanForward (& index , bitset )) {
563
- #endif
564
- /* undefined behavior */
565
- return 32 ;
566
- }
567
-
568
- return (int )index ;
569
- #else
570
- int n ;
571
-
572
- if (bitset == (zend_mm_bitset )0 ) return ZEND_MM_BITSET_LEN ;
573
-
574
- n = 1 ;
575
- #if SIZEOF_ZEND_LONG == 8
576
- if (sizeof (zend_mm_bitset ) == 8 ) {
577
- if ((bitset & 0xffffffff ) == 0 ) {n += 32 ; bitset = bitset >> Z_UL (32 );}
578
- }
579
- #endif
580
- if ((bitset & 0x0000ffff ) == 0 ) {n += 16 ; bitset = bitset >> 16 ;}
581
- if ((bitset & 0x000000ff ) == 0 ) {n += 8 ; bitset = bitset >> 8 ;}
582
- if ((bitset & 0x0000000f ) == 0 ) {n += 4 ; bitset = bitset >> 4 ;}
583
- if ((bitset & 0x00000003 ) == 0 ) {n += 2 ; bitset = bitset >> 2 ;}
584
- return n - (bitset & 1 );
585
- #endif
586
- }
587
-
588
550
static zend_always_inline int zend_mm_bitset_find_zero (zend_mm_bitset * bitset , int size )
589
551
{
590
552
int i = 0 ;
@@ -606,7 +568,7 @@ static zend_always_inline int zend_mm_bitset_find_one(zend_mm_bitset *bitset, in
606
568
do {
607
569
zend_mm_bitset tmp = bitset [i ];
608
570
if (tmp != 0 ) {
609
- return i * ZEND_MM_BITSET_LEN + zend_mm_bitset_ntz (tmp );
571
+ return i * ZEND_MM_BITSET_LEN + zend_ulong_ntz (tmp );
610
572
}
611
573
i ++ ;
612
574
} while (i < size );
@@ -941,7 +903,7 @@ static void *zend_mm_alloc_pages(zend_mm_heap *heap, int pages_count ZEND_FILE_L
941
903
tmp = * (bitset ++ );
942
904
}
943
905
/* find first 1 bit */
944
- len = (i + zend_mm_bitset_ntz (tmp )) - page_num ;
906
+ len = (i + zend_ulong_ntz (tmp )) - page_num ;
945
907
if (len >= pages_count ) {
946
908
goto found ;
947
909
}
@@ -998,7 +960,7 @@ static void *zend_mm_alloc_pages(zend_mm_heap *heap, int pages_count ZEND_FILE_L
998
960
tmp = * (bitset ++ );
999
961
}
1000
962
/* find first 1 bit */
1001
- len = i + zend_mm_bitset_ntz (tmp ) - page_num ;
963
+ len = i + zend_ulong_ntz (tmp ) - page_num ;
1002
964
if (len >= pages_count ) {
1003
965
if (len == pages_count ) {
1004
966
goto found ;
0 commit comments