|
From: <sv...@va...> - 2008-06-05 08:53:35
|
Author: bart
Date: 2008-06-05 09:53:42 +0100 (Thu, 05 Jun 2008)
New Revision: 8190
Log:
Manual inlining.
Modified:
trunk/exp-drd/Makefile.am
trunk/exp-drd/drd_thread.c
Modified: trunk/exp-drd/Makefile.am
===================================================================
--- trunk/exp-drd/Makefile.am 2008-06-05 08:29:53 UTC (rev 8189)
+++ trunk/exp-drd/Makefile.am 2008-06-05 08:53:42 UTC (rev 8190)
@@ -89,7 +89,6 @@
DRD_SOURCES_COMMON = \
drd_barrier.c \
- drd_bitmap.c \
drd_clientobj.c \
drd_clientreq.c \
drd_cond.c \
Modified: trunk/exp-drd/drd_thread.c
===================================================================
--- trunk/exp-drd/drd_thread.c 2008-06-05 08:29:53 UTC (rev 8189)
+++ trunk/exp-drd/drd_thread.c 2008-06-05 08:53:42 UTC (rev 8190)
@@ -39,7 +39,11 @@
#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.
static void thread_append_segment(const DrdThreadId tid,
@@ -748,20 +752,43 @@
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_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)
|