From: Bart Van Assche Date: Thu, 5 Jun 2008 08:53:42 +0000 (+0000) Subject: Manual inlining. X-Git-Tag: svn/VALGRIND_3_4_0~514 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=22df7e35eb2940eb39a909dad63fe21ddbb7a490;p=thirdparty%2Fvalgrind.git Manual inlining. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8190 --- diff --git a/exp-drd/Makefile.am b/exp-drd/Makefile.am index 15a4b8d82f..ef2441efa5 100644 --- a/exp-drd/Makefile.am +++ b/exp-drd/Makefile.am @@ -89,7 +89,6 @@ vgpreload_exp_drd_ppc64_aix5_so_LDFLAGS = $(PRELOAD_LDFLAGS_PPC64_AIX5)\ DRD_SOURCES_COMMON = \ drd_barrier.c \ - drd_bitmap.c \ drd_clientobj.c \ drd_clientreq.c \ drd_cond.c \ diff --git a/exp-drd/drd_thread.c b/exp-drd/drd_thread.c index a26f3ed8d0..d20739d481 100644 --- a/exp-drd/drd_thread.c +++ b/exp-drd/drd_thread.c @@ -39,6 +39,10 @@ #include "pub_tool_options.h" // VG_(clo_backtrace_size) #include "pub_tool_threadstate.h" // VG_(get_pthread_id)() +/* Include the drd_bitmap.c source file here to allow the compiler to */ +/* inline the bitmap manipulation functions called from this source file. */ +#include "drd_bitmap.c" + // Local functions. @@ -748,20 +752,43 @@ Bool bm_access_load_1_triggers_conflict(const Addr a1) Bool bm_access_load_2_triggers_conflict(const Addr a1) { - bm_access_load_2(running_thread_get_segment()->bm, a1); - return bm_load_2_has_conflict_with(thread_get_danger_set(), a1); + if ((a1 & 1) == 0) + bm_access_aligned_load(running_thread_get_segment()->bm, a1, 2); + else + bm_access_range(running_thread_get_segment()->bm, a1, a1 + 2, eLoad); + if ((a1 & 1) == 0) + return bm_aligned_load_has_conflict_with(thread_get_danger_set(), a1, 2); + else + return bm_has_conflict_with(thread_get_danger_set(), a1, a1 + 2, eLoad); } Bool bm_access_load_4_triggers_conflict(const Addr a1) { - bm_access_load_4(running_thread_get_segment()->bm, a1); - return bm_load_4_has_conflict_with(thread_get_danger_set(), a1); + if ((a1 & 3) == 0) + bm_access_aligned_load(running_thread_get_segment()->bm, a1, 4); + else + bm_access_range(running_thread_get_segment()->bm, a1, a1 + 4, eLoad); + if ((a1 & 3) == 0) + return bm_aligned_load_has_conflict_with(thread_get_danger_set(), a1, 4); + else + return bm_has_conflict_with(thread_get_danger_set(), a1, a1 + 4, eLoad); } Bool bm_access_load_8_triggers_conflict(const Addr a1) { - bm_access_load_8(running_thread_get_segment()->bm, a1); - return bm_load_8_has_conflict_with(thread_get_danger_set(), a1); + if ((a1 & 7) == 0) + bm_access_aligned_load(running_thread_get_segment()->bm, a1, 8); + else if ((a1 & 3) == 0) + { + bm_access_aligned_load(running_thread_get_segment()->bm, a1 + 0, 4); + bm_access_aligned_load(running_thread_get_segment()->bm, a1 + 4, 4); + } + else + bm_access_range(running_thread_get_segment()->bm, a1, a1 + 8, eLoad); + if ((a1 & 7) == 0) + return bm_aligned_load_has_conflict_with(thread_get_danger_set(), a1, 8); + else + return bm_has_conflict_with(thread_get_danger_set(), a1, a1 + 8, eLoad); } Bool bm_access_load_triggers_conflict(const Addr a1, const Addr a2) @@ -778,20 +805,43 @@ Bool bm_access_store_1_triggers_conflict(const Addr a1) Bool bm_access_store_2_triggers_conflict(const Addr a1) { - bm_access_store_2(running_thread_get_segment()->bm, a1); - return bm_store_2_has_conflict_with(thread_get_danger_set(), a1); + if ((a1 & 1) == 0) + bm_access_aligned_store(running_thread_get_segment()->bm, a1, 2); + else + bm_access_range(running_thread_get_segment()->bm, a1, a1 + 2, eStore); + if ((a1 & 1) == 0) + return bm_aligned_store_has_conflict_with(thread_get_danger_set(), a1, 2); + else + return bm_has_conflict_with(thread_get_danger_set(), a1, a1 + 2, eStore); } Bool bm_access_store_4_triggers_conflict(const Addr a1) { - bm_access_store_4(running_thread_get_segment()->bm, a1); - return bm_store_4_has_conflict_with(thread_get_danger_set(), a1); + if ((a1 & 3) == 0) + bm_access_aligned_store(running_thread_get_segment()->bm, a1, 4); + else + bm_access_range(running_thread_get_segment()->bm, a1, a1 + 4, eStore); + if ((a1 & 3) == 0) + return bm_aligned_store_has_conflict_with(thread_get_danger_set(), a1, 4); + else + return bm_has_conflict_with(thread_get_danger_set(), a1, a1 + 4, eStore); } Bool bm_access_store_8_triggers_conflict(const Addr a1) { - bm_access_store_8(running_thread_get_segment()->bm, a1); - return bm_store_8_has_conflict_with(thread_get_danger_set(), a1); + if ((a1 & 7) == 0) + bm_access_aligned_store(running_thread_get_segment()->bm, a1, 8); + else if ((a1 & 3) == 0) + { + bm_access_aligned_store(running_thread_get_segment()->bm, a1 + 0, 4); + bm_access_aligned_store(running_thread_get_segment()->bm, a1 + 4, 4); + } + else + bm_access_range(running_thread_get_segment()->bm, a1, a1 + 8, eStore); + if ((a1 & 7) == 0) + return bm_aligned_store_has_conflict_with(thread_get_danger_set(), a1, 8); + else + return bm_has_conflict_with(thread_get_danger_set(), a1, a1 + 8, eStore); } Bool bm_access_store_triggers_conflict(const Addr a1, const Addr a2)