From 2f0765a0d16ef482af27a87e124564614008f1f7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=98yvind=20Kol=C3=A5s?= Date: Wed, 6 Mar 2019 12:09:47 +0100 Subject: [PATCH] babl: use inlined lookup functions inside type implementations This avoids function call stack overhead for some calls that are in many of our hot-paths. --- babl/babl-db.c | 67 +++++++++++++++++++++++++++++++++++++----- babl/babl-hash-table.c | 37 ----------------------- 2 files changed, 59 insertions(+), 45 deletions(-) diff --git a/babl/babl-db.c b/babl/babl-db.c index ba62a54..2ae47a4 100644 --- a/babl/babl-db.c +++ b/babl/babl-db.c @@ -27,6 +27,57 @@ #include #include "babl-internal.h" +static int +_babl_hash_by_str (BablHashTable *htab, + const char *str) +{ + int hash = 0; + + while (*str) + { + hash += *str++; + hash += (hash << 10); + hash ^= (hash >> 6); + } + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + + return (hash & htab->mask); +} + +int +babl_hash_by_str (BablHashTable *htab, + const char *str) +{ + return _babl_hash_by_str (htab, str); +} + + +static int +_babl_hash_by_int (BablHashTable *htab, + int id) +{ + int hash = 0; + hash += id & 0xFF; + hash += (hash << 10); + hash ^= (hash >> 6); + id >>= 8; + hash += id & 0xFF; + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + + return (hash & htab->mask); +} + +int +babl_hash_by_int (BablHashTable *htab, + int id) +{ + return _babl_hash_by_int (htab, id); +} + static int db_find_by_name (Babl *item, void *data) @@ -49,14 +100,14 @@ static int db_hash_by_name (BablHashTable *htab, Babl *item) { - return babl_hash_by_str (htab, item->instance.name); + return _babl_hash_by_str (htab, item->instance.name); } static int db_hash_by_id (BablHashTable *htab, Babl *item) { - return babl_hash_by_int (htab, item->instance.id); + return _babl_hash_by_int (htab, item->instance.id); } static int @@ -100,7 +151,7 @@ Babl * babl_db_find (BablDb *db, const char *name) { - return babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), + return babl_hash_table_find (db->name_hash, _babl_hash_by_str (db->name_hash, name), NULL, (void *) name); } @@ -143,9 +194,9 @@ babl_db_exist (BablDb *db, { Babl *ret; if (id) - ret = babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id), NULL, &id); - else - ret = babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), NULL, (void *) name); + ret = babl_hash_table_find (db->id_hash, _babl_hash_by_int (db->id_hash, id), NULL, &id); + else + ret = babl_hash_table_find (db->name_hash, _babl_hash_by_str (db->name_hash, name), NULL, (void *) name); return ret; } @@ -154,7 +205,7 @@ babl_db_exist_by_id (BablDb *db, int id) { Babl *ret; - ret = babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id), NULL, &id); + ret = babl_hash_table_find (db->id_hash, _babl_hash_by_int (db->id_hash, id), NULL, &id); return ret; } @@ -163,7 +214,7 @@ babl_db_exist_by_name (BablDb *db, const char *name) { Babl *ret; - ret = babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), + ret = babl_hash_table_find (db->name_hash, _babl_hash_by_str (db->name_hash, name), NULL, (void *) name); return ret; } diff --git a/babl/babl-hash-table.c b/babl/babl-hash-table.c index 8316db1..97e7012 100644 --- a/babl/babl-hash-table.c +++ b/babl/babl-hash-table.c @@ -33,43 +33,6 @@ hash_insert (BablHashTable *htab, static void hash_rehash (BablHashTable *htab); - -int -babl_hash_by_str (BablHashTable *htab, - const char *str) -{ - int hash = 0; - - while (*str) - { - hash += *str++; - hash += (hash << 10); - hash ^= (hash >> 6); - } - hash += (hash << 3); - hash ^= (hash >> 11); - hash += (hash << 15); - - return (hash & htab->mask); -} - -int -babl_hash_by_int (BablHashTable *htab, - int id) -{ - int hash = 0; - hash += id & 0xFF; - hash += (hash << 10); - hash ^= (hash >> 6); - id >>= 8; - hash += id & 0xFF; - hash += (hash << 3); - hash ^= (hash >> 11); - hash += (hash << 15); - - return (hash & htab->mask); -} - static inline int hash_insert (BablHashTable *htab, Babl *item) -- 2.30.2