cedric pushed a commit to branch master.

commit 495088caf4f229549aee9bf9d8fe94c5cd1fba3e
Author: Cedric Bail <[email protected]>
Date:   Thu Apr 11 11:58:22 2013 +0900

    eina: make eina_mempool_alignof a little bit faster.
---
 src/lib/eina/eina_abi.c            | 37 +++++++++++++++++++++++++++++++++++++
 src/lib/eina/eina_inline_mempool.x | 32 ++++++++++++++++++++++++++++++++
 src/lib/eina/eina_mempool.c        | 22 ----------------------
 src/lib/eina/eina_mempool.h        |  2 +-
 4 files changed, 70 insertions(+), 23 deletions(-)

diff --git a/src/lib/eina/eina_abi.c b/src/lib/eina/eina_abi.c
index dfd9622..cdf0f9f 100644
--- a/src/lib/eina/eina_abi.c
+++ b/src/lib/eina/eina_abi.c
@@ -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;
+}
diff --git a/src/lib/eina/eina_inline_mempool.x 
b/src/lib/eina/eina_inline_mempool.x
index 40cd7d5..fc3dd00 100644
--- a/src/lib/eina/eina_inline_mempool.x
+++ b/src/lib/eina/eina_inline_mempool.x
@@ -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;
+}
+
 /**
  * @}
  */
diff --git a/src/lib/eina/eina_mempool.c b/src/lib/eina/eina_mempool.c
index 46ea7f5..55723a4 100644
--- a/src/lib/eina/eina_mempool.c
+++ b/src/lib/eina/eina_mempool.c
@@ -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;
-}
diff --git a/src/lib/eina/eina_mempool.h b/src/lib/eina/eina_mempool.h
index 5ece88d..2dd4787 100644
--- a/src/lib/eina/eina_mempool.h
+++ b/src/lib/eina/eina_mempool.h
@@ -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"
 

-- 

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter

Reply via email to