eina: make eina_mempool_alignof a little bit faster.

This commit is contained in:
Cedric Bail 2013-04-11 11:58:22 +09:00
parent 9547166878
commit 495088caf4
4 changed files with 70 additions and 23 deletions

View File

@ -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;
}

View File

@ -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;
}
/**
* @}
*/

View File

@ -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;
}

View File

@ -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"