aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorQi Wang <interwq@gwu.edu>2018-04-05 14:37:17 -0700
committerQi Wang <interwq@gmail.com>2018-04-10 10:18:46 -0700
commit4be74d51121e8772d356e8be088dc93f927fd709 (patch)
tree4f781c143e2c2a28cebfb4e8f37d3bb331a8b998 /include
parent5f51882a0a7d529c90bbb15ccbabb064b0a11e80 (diff)
downloadplatform_external_jemalloc_new-4be74d51121e8772d356e8be088dc93f927fd709.tar.gz
platform_external_jemalloc_new-4be74d51121e8772d356e8be088dc93f927fd709.tar.bz2
platform_external_jemalloc_new-4be74d51121e8772d356e8be088dc93f927fd709.zip
Consolidate the two memory loads in rtree_szind_slab_read().
szind and slab bits are read on fast path, where compiler generated two memory loads separately for them before this diff. Manually operate on the bits to avoid the extra memory load.
Diffstat (limited to 'include')
-rw-r--r--include/jemalloc/internal/rtree.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/jemalloc/internal/rtree.h b/include/jemalloc/internal/rtree.h
index 4563db23..8ff20d72 100644
--- a/include/jemalloc/internal/rtree.h
+++ b/include/jemalloc/internal/rtree.h
@@ -460,8 +460,14 @@ rtree_szind_slab_read(tsdn_t *tsdn, rtree_t *rtree, rtree_ctx_t *rtree_ctx,
if (!dependent && elm == NULL) {
return true;
}
+#ifdef RTREE_LEAF_COMPACT
+ uintptr_t bits = rtree_leaf_elm_bits_read(tsdn, rtree, elm, dependent);
+ *r_szind = rtree_leaf_elm_bits_szind_get(bits);
+ *r_slab = rtree_leaf_elm_bits_slab_get(bits);
+#else
*r_szind = rtree_leaf_elm_szind_read(tsdn, rtree, elm, dependent);
*r_slab = rtree_leaf_elm_slab_read(tsdn, rtree, elm, dependent);
+#endif
return false;
}