Use asm volatile during benchmarks.
This commit is contained in:
parent
e8b28908de
commit
09e4b38fb1
16
configure.ac
16
configure.ac
@ -546,6 +546,22 @@ typedef unsigned __int32 uint32_t;
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR], [ ])
|
AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR], [ ])
|
||||||
|
AC_CACHE_CHECK([asm volatile support],
|
||||||
|
[je_cv_asm_volatile],
|
||||||
|
AC_RUN_IFELSE([AC_LANG_PROGRAM(
|
||||||
|
[[
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
void* ptr;
|
||||||
|
asm volatile("" : "+r"(ptr));
|
||||||
|
return 0;
|
||||||
|
]])],
|
||||||
|
[je_cv_asm_volatile=yes],
|
||||||
|
[je_cv_asm_volatile=no],
|
||||||
|
[je_cv_asm_volatile=no]))
|
||||||
|
if test "x${je_cv_asm_volatile}" = "xyes"; then
|
||||||
|
AC_DEFINE([JEMALLOC_HAVE_ASM_VOLATILE], [ ], [ ])
|
||||||
|
fi
|
||||||
|
|
||||||
LD_PRELOAD_VAR="LD_PRELOAD"
|
LD_PRELOAD_VAR="LD_PRELOAD"
|
||||||
so="so"
|
so="so"
|
||||||
|
@ -440,4 +440,7 @@
|
|||||||
/* If defined, realloc(ptr, 0) defaults to "free" instead of "alloc". */
|
/* If defined, realloc(ptr, 0) defaults to "free" instead of "alloc". */
|
||||||
#undef JEMALLOC_ZERO_REALLOC_DEFAULT_FREE
|
#undef JEMALLOC_ZERO_REALLOC_DEFAULT_FREE
|
||||||
|
|
||||||
|
/* If defined, use volatile asm during benchmarks. */
|
||||||
|
#undef JEMALLOC_HAVE_ASM_VOLATILE
|
||||||
|
|
||||||
#endif /* JEMALLOC_INTERNAL_DEFS_H_ */
|
#endif /* JEMALLOC_INTERNAL_DEFS_H_ */
|
||||||
|
@ -58,3 +58,14 @@ compare_funcs(uint64_t nwarmup, uint64_t niter, const char *name_a,
|
|||||||
|
|
||||||
dallocx(p, 0);
|
dallocx(p, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
no_opt_ptr(void *ptr) {
|
||||||
|
#ifdef JEMALLOC_HAVE_ASM_VOLATILE
|
||||||
|
asm volatile("" : "+r"(ptr));
|
||||||
|
#else
|
||||||
|
void *volatile dup = ptr;
|
||||||
|
ptr = dup;
|
||||||
|
#endif
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
@ -3,44 +3,50 @@
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
malloc_free(void) {
|
malloc_free(void) {
|
||||||
void* volatile p = malloc(1);
|
void* p = malloc(1);
|
||||||
expect_ptr_not_null((void *)p, "Unexpected malloc failure");
|
expect_ptr_not_null((void *)p, "Unexpected malloc failure");
|
||||||
|
p = no_opt_ptr(p);
|
||||||
free((void *)p);
|
free((void *)p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
new_delete(void) {
|
new_delete(void) {
|
||||||
void* volatile p = ::operator new(1);
|
void* p = ::operator new(1);
|
||||||
expect_ptr_not_null((void *)p, "Unexpected new failure");
|
expect_ptr_not_null((void *)p, "Unexpected new failure");
|
||||||
|
p = no_opt_ptr(p);
|
||||||
::operator delete((void *)p);
|
::operator delete((void *)p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
malloc_free_array(void) {
|
malloc_free_array(void) {
|
||||||
void* volatile p = malloc(sizeof(int)*8);
|
void* p = malloc(sizeof(int)*8);
|
||||||
expect_ptr_not_null((void *)p, "Unexpected malloc failure");
|
expect_ptr_not_null((void *)p, "Unexpected malloc failure");
|
||||||
|
p = no_opt_ptr(p);
|
||||||
free((void *)p);
|
free((void *)p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
new_delete_array(void) {
|
new_delete_array(void) {
|
||||||
int* volatile p = new int[8];
|
int* p = new int[8];
|
||||||
expect_ptr_not_null((int *)p, "Unexpected new[] failure");
|
expect_ptr_not_null((void *)p, "Unexpected new[] failure");
|
||||||
|
p = (int *)no_opt_ptr((void *)p);
|
||||||
delete[] (int *)p;
|
delete[] (int *)p;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __cpp_sized_deallocation >= 201309
|
#if __cpp_sized_deallocation >= 201309
|
||||||
static void
|
static void
|
||||||
new_sized_delete(void) {
|
new_sized_delete(void) {
|
||||||
void* volatile p = ::operator new(1);
|
void* p = ::operator new(1);
|
||||||
expect_ptr_not_null((void *)p, "Unexpected new failure");
|
expect_ptr_not_null((void *)p, "Unexpected new failure");
|
||||||
|
p = no_opt_ptr(p);
|
||||||
::operator delete((void *)p, 1);
|
::operator delete((void *)p, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
malloc_sdallocx(void) {
|
malloc_sdallocx(void) {
|
||||||
void* volatile p = malloc(1);
|
void* p = malloc(1);
|
||||||
expect_ptr_not_null((void *)p, "Unexpected malloc failure");
|
expect_ptr_not_null((void *)p, "Unexpected malloc failure");
|
||||||
|
p = no_opt_ptr(p);
|
||||||
sdallocx((void *)p, 1, 0);
|
sdallocx((void *)p, 1, 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -9,6 +9,7 @@ large_mallocx_free(void) {
|
|||||||
*/
|
*/
|
||||||
void *p = mallocx(SC_LARGE_MINCLASS, MALLOCX_TCACHE_NONE);
|
void *p = mallocx(SC_LARGE_MINCLASS, MALLOCX_TCACHE_NONE);
|
||||||
assert_ptr_not_null(p, "mallocx shouldn't fail");
|
assert_ptr_not_null(p, "mallocx shouldn't fail");
|
||||||
|
p = no_opt_ptr(p);
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16,6 +17,7 @@ static void
|
|||||||
small_mallocx_free(void) {
|
small_mallocx_free(void) {
|
||||||
void *p = mallocx(16, 0);
|
void *p = mallocx(16, 0);
|
||||||
assert_ptr_not_null(p, "mallocx shouldn't fail");
|
assert_ptr_not_null(p, "mallocx shouldn't fail");
|
||||||
|
p = no_opt_ptr(p);
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ malloc_free(void) {
|
|||||||
test_fail("Unexpected malloc() failure");
|
test_fail("Unexpected malloc() failure");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
p = no_opt_ptr(p);
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,6 +20,7 @@ mallocx_free(void) {
|
|||||||
test_fail("Unexpected mallocx() failure");
|
test_fail("Unexpected mallocx() failure");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
p = no_opt_ptr(p);
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,6 +37,7 @@ malloc_dallocx(void) {
|
|||||||
test_fail("Unexpected malloc() failure");
|
test_fail("Unexpected malloc() failure");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
p = no_opt_ptr(p);
|
||||||
dallocx(p, 0);
|
dallocx(p, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,6 +48,7 @@ malloc_sdallocx(void) {
|
|||||||
test_fail("Unexpected malloc() failure");
|
test_fail("Unexpected malloc() failure");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
p = no_opt_ptr(p);
|
||||||
sdallocx(p, 1, 0);
|
sdallocx(p, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,6 +86,7 @@ malloc_sallocx_free(void) {
|
|||||||
test_fail("Unexpected malloc() failure");
|
test_fail("Unexpected malloc() failure");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
p = no_opt_ptr(p);
|
||||||
if (sallocx(p, 0) < 1) {
|
if (sallocx(p, 0) < 1) {
|
||||||
test_fail("Unexpected sallocx() failure");
|
test_fail("Unexpected sallocx() failure");
|
||||||
}
|
}
|
||||||
@ -103,6 +108,7 @@ malloc_nallocx_free(void) {
|
|||||||
test_fail("Unexpected malloc() failure");
|
test_fail("Unexpected malloc() failure");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
p = no_opt_ptr(p);
|
||||||
if (nallocx(1, 0) < 1) {
|
if (nallocx(1, 0) < 1) {
|
||||||
test_fail("Unexpected nallocx() failure");
|
test_fail("Unexpected nallocx() failure");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user