diff --git a/include/import/eb32tree.h b/include/import/eb32tree.h index 292a10e39..9b331f609 100644 --- a/include/import/eb32tree.h +++ b/include/import/eb32tree.h @@ -137,8 +137,8 @@ static forceinline struct eb32_node *__eb32_lookup(struct eb_root *root, u32 x) node = container_of(eb_untag(troot, EB_NODE), struct eb32_node, node.branches); - __builtin_prefetch(node->node.branches.b[0], 0); - __builtin_prefetch(node->node.branches.b[1], 0); + eb_prefetch(node->node.branches.b[0], 0); + eb_prefetch(node->node.branches.b[1], 0); y = node->key ^ x; z = 1U << (node->node.bit & 31); @@ -191,8 +191,8 @@ static forceinline struct eb32_node *__eb32i_lookup(struct eb_root *root, s32 x) node = container_of(eb_untag(troot, EB_NODE), struct eb32_node, node.branches); - __builtin_prefetch(node->node.branches.b[0], 0); - __builtin_prefetch(node->node.branches.b[1], 0); + eb_prefetch(node->node.branches.b[0], 0); + eb_prefetch(node->node.branches.b[1], 0); y = node->key ^ x; z = 1U << (node->node.bit & 31); @@ -271,8 +271,8 @@ __eb32_insert(struct eb_root *root, struct eb32_node *new) { old = container_of(eb_untag(troot, EB_NODE), struct eb32_node, node.branches); - __builtin_prefetch(old->node.branches.b[0], 0); - __builtin_prefetch(old->node.branches.b[1], 0); + eb_prefetch(old->node.branches.b[0], 0); + eb_prefetch(old->node.branches.b[1], 0); old_node_bit = old->node.bit; @@ -408,8 +408,8 @@ __eb32i_insert(struct eb_root *root, struct eb32_node *new) { old = container_of(eb_untag(troot, EB_NODE), struct eb32_node, node.branches); - __builtin_prefetch(old->node.branches.b[0], 0); - __builtin_prefetch(old->node.branches.b[1], 0); + eb_prefetch(old->node.branches.b[0], 0); + eb_prefetch(old->node.branches.b[1], 0); old_node_bit = old->node.bit; diff --git a/include/import/eb64tree.h b/include/import/eb64tree.h index 5de45dd6c..ca5330b52 100644 --- a/include/import/eb64tree.h +++ b/include/import/eb64tree.h @@ -137,8 +137,8 @@ static forceinline struct eb64_node *__eb64_lookup(struct eb_root *root, u64 x) node = container_of(eb_untag(troot, EB_NODE), struct eb64_node, node.branches); - __builtin_prefetch(node->node.branches.b[0], 0); - __builtin_prefetch(node->node.branches.b[1], 0); + eb_prefetch(node->node.branches.b[0], 0); + eb_prefetch(node->node.branches.b[1], 0); y = node->key ^ x; z = 1ULL << (node->node.bit & 63); @@ -191,8 +191,8 @@ static forceinline struct eb64_node *__eb64i_lookup(struct eb_root *root, s64 x) node = container_of(eb_untag(troot, EB_NODE), struct eb64_node, node.branches); - __builtin_prefetch(node->node.branches.b[0], 0); - __builtin_prefetch(node->node.branches.b[1], 0); + eb_prefetch(node->node.branches.b[0], 0); + eb_prefetch(node->node.branches.b[1], 0); y = node->key ^ x; z = 1ULL << (node->node.bit & 63); @@ -317,8 +317,8 @@ __eb64_insert(struct eb_root *root, struct eb64_node *new) { old = container_of(eb_untag(troot, EB_NODE), struct eb64_node, node.branches); - __builtin_prefetch(old->node.branches.b[0], 0); - __builtin_prefetch(old->node.branches.b[1], 0); + eb_prefetch(old->node.branches.b[0], 0); + eb_prefetch(old->node.branches.b[1], 0); old_node_bit = old->node.bit; @@ -503,8 +503,8 @@ __eb64i_insert(struct eb_root *root, struct eb64_node *new) { old = container_of(eb_untag(troot, EB_NODE), struct eb64_node, node.branches); - __builtin_prefetch(old->node.branches.b[0], 0); - __builtin_prefetch(old->node.branches.b[1], 0); + eb_prefetch(old->node.branches.b[0], 0); + eb_prefetch(old->node.branches.b[1], 0); old_node_bit = old->node.bit; diff --git a/include/import/ebmbtree.h b/include/import/ebmbtree.h index d9f34f4e8..1d55e334a 100644 --- a/include/import/ebmbtree.h +++ b/include/import/ebmbtree.h @@ -240,8 +240,8 @@ static forceinline struct ebmb_node *__ebmb_lookup(struct eb_root *root, const v b = *(unsigned char *)x; side = 1 << node_bit; - __builtin_prefetch(node->node.branches.b[0], 0); - __builtin_prefetch(node->node.branches.b[1], 0); + eb_prefetch(node->node.branches.b[0], 0); + eb_prefetch(node->node.branches.b[1], 0); k = node->key[pos]; b0 = node->node.branches.b[0]; diff --git a/include/import/ebtree.h b/include/import/ebtree.h index 31a9cac10..2506e288b 100644 --- a/include/import/ebtree.h +++ b/include/import/ebtree.h @@ -499,6 +499,15 @@ __eb_insert_dup(struct eb_node *sub, struct eb_node *new) } } +/* __builtin_prefetch() appears in gcc-3.1 documentation */ +#if !defined(eb_prefetch) +# if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) +# define eb_prefetch(a,b) __builtin_prefetch(a,b) +# else +# define eb_prefetch(a,b) do { } while (0) +# endif +#endif + /**************************************\ * Public functions, for the end-user * diff --git a/src/eb32tree.c b/src/eb32tree.c index 2e824a734..7659d84e1 100644 --- a/src/eb32tree.c +++ b/src/eb32tree.c @@ -73,8 +73,8 @@ struct eb32_node *eb32_lookup_le(struct eb_root *root, u32 x) node = container_of(eb_untag(troot, EB_NODE), struct eb32_node, node.branches); - __builtin_prefetch(node->node.branches.b[0], 0); - __builtin_prefetch(node->node.branches.b[1], 0); + eb_prefetch(node->node.branches.b[0], 0); + eb_prefetch(node->node.branches.b[1], 0); y = node->key; z = 1U << (node->node.bit & 31); @@ -168,8 +168,8 @@ struct eb32_node *eb32_lookup_ge(struct eb_root *root, u32 x) node = container_of(eb_untag(troot, EB_NODE), struct eb32_node, node.branches); - __builtin_prefetch(node->node.branches.b[0], 0); - __builtin_prefetch(node->node.branches.b[1], 0); + eb_prefetch(node->node.branches.b[0], 0); + eb_prefetch(node->node.branches.b[1], 0); y = node->key; z = 1U << (node->node.bit & 31); diff --git a/src/eb64tree.c b/src/eb64tree.c index c1e183ea6..c2ed249ff 100644 --- a/src/eb64tree.c +++ b/src/eb64tree.c @@ -73,8 +73,8 @@ struct eb64_node *eb64_lookup_le(struct eb_root *root, u64 x) node = container_of(eb_untag(troot, EB_NODE), struct eb64_node, node.branches); - __builtin_prefetch(node->node.branches.b[0], 0); - __builtin_prefetch(node->node.branches.b[1], 0); + eb_prefetch(node->node.branches.b[0], 0); + eb_prefetch(node->node.branches.b[1], 0); y = node->key; z = 1ULL << (node->node.bit & 63); @@ -168,8 +168,8 @@ struct eb64_node *eb64_lookup_ge(struct eb_root *root, u64 x) node = container_of(eb_untag(troot, EB_NODE), struct eb64_node, node.branches); - __builtin_prefetch(node->node.branches.b[0], 0); - __builtin_prefetch(node->node.branches.b[1], 0); + eb_prefetch(node->node.branches.b[0], 0); + eb_prefetch(node->node.branches.b[1], 0); y = node->key; z = 1ULL << (node->node.bit & 63);