1#ifndef INCLUDED_tlsfbits
2#define INCLUDED_tlsfbits
4#if defined(__cplusplus)
5#define tlsf_decl inline
7#define tlsf_decl static
32#if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) \
33 || defined (_WIN64) || defined (__LP64__) || defined (__LLP64__)
41#if defined (__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) \
42 && defined (__GNUC_PATCHLEVEL__)
46 return __builtin_ffs(
word) - 1;
51 const int bit =
word ? 32 - __builtin_clz(
word) : 0;
55#elif defined (_MSC_VER) && (_MSC_VER >= 1400) && (defined (_M_IX86) || defined (_M_X64))
60#pragma intrinsic(_BitScanReverse)
61#pragma intrinsic(_BitScanForward)
66 return _BitScanReverse(&index,
word) ? index : -1;
72 return _BitScanForward(&index,
word) ? index : -1;
75#elif defined (_MSC_VER) && defined (_M_PPC)
78#include <ppcintrinsics.h>
82 const int bit = 32 - _CountLeadingZeros(
word);
88 const unsigned int reverse =
word & (
~word + 1);
89 const int bit = 32 - _CountLeadingZeros(reverse);
93#elif defined (__ARMCC_VERSION)
98 const unsigned int reverse =
word & (
~word + 1);
99 const int bit = 32 - __clz(reverse);
105 const int bit =
word ? 32 - __clz(
word) : 0;
109#elif defined (__ghs__)
116 const unsigned int reverse =
word & (
~word + 1);
117 const int bit = 32 - __CLZ32(reverse);
123 const int bit =
word ? 32 - __CLZ32(
word) : 0;
135 if (!(
word & 0xffff0000)) {
word <<= 16; bit -= 16; }
136 if (!(
word & 0xff000000)) {
word <<= 8; bit -= 8; }
137 if (!(
word & 0xf0000000)) {
word <<= 4; bit -= 4; }
138 if (!(
word & 0xc0000000)) {
word <<= 2; bit -= 2; }
139 if (!(
word & 0x80000000)) {
word <<= 1; bit -= 1; }
158#if defined (TLSF_64BIT)
175#define tlsf_fls_sizet tlsf_fls
short word
Definition private.h:22
tlsf_decl int tlsf_ffs(unsigned int word)
Definition tlsfbits.h:145
tlsf_decl int tlsf_fls_generic(unsigned int word)
Definition tlsfbits.h:130
#define tlsf_decl
Definition tlsfbits.h:7
#define tlsf_fls_sizet
Definition tlsfbits.h:175
tlsf_decl int tlsf_fls(unsigned int word)
Definition tlsfbits.h:150
typedef int(UZ_EXP MsgFn)()