]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Manual inlining.
authorBart Van Assche <bvanassche@acm.org>
Thu, 5 Jun 2008 08:53:42 +0000 (08:53 +0000)
committerBart Van Assche <bvanassche@acm.org>
Thu, 5 Jun 2008 08:53:42 +0000 (08:53 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8190

exp-drd/Makefile.am
exp-drd/drd_thread.c

index 15a4b8d82f4efeebf55c1f040e55bcbd550b3a0a..ef2441efa5bb804da7a22f2ca8f4a2ffca7ff39f 100644 (file)
@@ -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            \
index a26f3ed8d04caaf849d7866b369a501dda3a0fb6..d20739d4816845e48d2f84fbbffa93573d28195d 100644 (file)
 #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)