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);
|
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);
|
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);
|
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 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 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"
|
#include "eina_inline_mempool.x"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue