forked from enlightenment/efl
eina: make eina_mempool_alignof a little bit faster.
This commit is contained in:
parent
9547166878
commit
495088caf4
|
@ -30,3 +30,40 @@ EAPI Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex)
|
|||
return eina_unicode_utf8_next_get(buf, iindex);
|
||||
}
|
||||
|
||||
EAPI unsigned int
|
||||
eina_mempool_alignof(unsigned int size)
|
||||
{
|
||||
unsigned int align;
|
||||
unsigned int mask;
|
||||
|
||||
if (EINA_UNLIKELY(size <= 2))
|
||||
{
|
||||
align = 1;
|
||||
mask = 0x1;
|
||||
}
|
||||
else if (EINA_UNLIKELY(size < 8))
|
||||
{
|
||||
align = 2;
|
||||
mask = 0x3;
|
||||
}
|
||||
else
|
||||
#if __WORDSIZE == 32
|
||||
{
|
||||
align = 3;
|
||||
mask = 0x7;
|
||||
}
|
||||
#else
|
||||
if (EINA_UNLIKELY(size < 16))
|
||||
{
|
||||
align = 3;
|
||||
mask = 0x7;
|
||||
}
|
||||
else
|
||||
{
|
||||
align = 4;
|
||||
mask = 0x15;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ((size >> align) + (size & mask ? 1 : 0)) << align;
|
||||
}
|
||||
|
|
|
@ -142,6 +142,38 @@ eina_mempool_free(Eina_Mempool *mp, void *element)
|
|||
mp->backend.free(mp->backend_data, element);
|
||||
}
|
||||
|
||||
static inline unsigned int
|
||||
eina_mempool_alignof(unsigned int size)
|
||||
{
|
||||
unsigned int align;
|
||||
|
||||
if (EINA_UNLIKELY(size <= 2))
|
||||
{
|
||||
align = 2;
|
||||
}
|
||||
else if (EINA_UNLIKELY(size < 8))
|
||||
{
|
||||
align = 4;
|
||||
}
|
||||
else
|
||||
#if __WORDSIZE == 32
|
||||
{
|
||||
align = 8;
|
||||
}
|
||||
#else
|
||||
if (EINA_UNLIKELY(size < 16))
|
||||
{
|
||||
align = 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
align = 16;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ((size / align) + (size % align ? 1 : 0)) * align;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -323,25 +323,3 @@ EAPI void eina_mempool_statistics(Eina_Mempool *mp)
|
|||
mp->backend.statistics(mp->backend_data);
|
||||
}
|
||||
|
||||
EAPI unsigned int
|
||||
eina_mempool_alignof(unsigned int size)
|
||||
{
|
||||
int align;
|
||||
|
||||
if (size <= 2)
|
||||
align = 2;
|
||||
else if (size < 8)
|
||||
align = 4;
|
||||
else
|
||||
#if __WORDSIZE == 32
|
||||
align = 8;
|
||||
|
||||
#else
|
||||
if (size < 16)
|
||||
align = 8;
|
||||
else
|
||||
align = 16;
|
||||
#endif
|
||||
|
||||
return ((size / align) + (size % align ? 1 : 0)) * align;
|
||||
}
|
||||
|
|
|
@ -94,7 +94,7 @@ EAPI void eina_mempool_statistics(Eina_Mempool *mp) EINA_ARG_NONNULL(1
|
|||
EAPI Eina_Bool eina_mempool_register(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1);
|
||||
EAPI void eina_mempool_unregister(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1);
|
||||
|
||||
EAPI unsigned int eina_mempool_alignof(unsigned int size);
|
||||
static inline unsigned int eina_mempool_alignof(unsigned int size);
|
||||
|
||||
#include "eina_inline_mempool.x"
|
||||
|
||||
|
|
Loading…
Reference in New Issue