* Crank up the memcheck event-counting system, and enhance it to
name the events, rather than just number them, which makes it a
lot easier to use
* Based on that, fill in some fast-path cases
{LOAD,STORE}V{4,2,1}. The assembly code looks about the same
length as it did before, on x86. Fast-path cases for the
stack have yet to be done.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3538 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/memcheck/mac_shared.h b/memcheck/mac_shared.h
index 44d9d05..815cfff 100644
--- a/memcheck/mac_shared.h
+++ b/memcheck/mac_shared.h
@@ -171,21 +171,27 @@
VgpToolCC;
/* Define to collect detailed performance info. */
-/* #define MAC_PROFILE_MEMORY */
+#define MAC_PROFILE_MEMORY
#ifdef MAC_PROFILE_MEMORY
-# define N_PROF_EVENTS 150
+# define N_PROF_EVENTS 500
-extern UInt MAC_(event_ctr)[N_PROF_EVENTS];
+extern UInt MAC_(event_ctr)[N_PROF_EVENTS];
+extern HChar* MAC_(event_ctr_name)[N_PROF_EVENTS];
-# define PROF_EVENT(ev) \
- do { tl_assert((ev) >= 0 && (ev) < N_PROF_EVENTS); \
- MAC_(event_ctr)[ev]++; \
+# define PROF_EVENT(ev, name) \
+ do { tl_assert((ev) >= 0 && (ev) < N_PROF_EVENTS); \
+ /* crude and inaccurate check to ensure the same */ \
+ /* event isn't being used with > 1 name */ \
+ if (MAC_(event_ctr_name)[ev]) \
+ tl_assert(name == MAC_(event_ctr_name)[ev]); \
+ MAC_(event_ctr)[ev]++; \
+ MAC_(event_ctr_name)[ev] = (name); \
} while (False);
#else
-# define PROF_EVENT(ev) /* */
+# define PROF_EVENT(ev, name) /* */
#endif /* MAC_PROFILE_MEMORY */
@@ -437,7 +443,7 @@
\
void VGA_REGPARM(1) MAC_(new_mem_stack_4)(Addr new_SP) \
{ \
- PROF_EVENT(110); \
+ PROF_EVENT(110, "new_mem_stack_4"); \
if (VG_IS_4_ALIGNED(new_SP)) { \
ALIGNED4_NEW ( new_SP ); \
} else { \
@@ -447,7 +453,7 @@
\
void VGA_REGPARM(1) MAC_(die_mem_stack_4)(Addr new_SP) \
{ \
- PROF_EVENT(120); \
+ PROF_EVENT(120, "die_mem_stack_4"); \
if (VG_IS_4_ALIGNED(new_SP)) { \
ALIGNED4_DIE ( new_SP-4 ); \
} else { \
@@ -457,7 +463,7 @@
\
void VGA_REGPARM(1) MAC_(new_mem_stack_8)(Addr new_SP) \
{ \
- PROF_EVENT(111); \
+ PROF_EVENT(111, "new_mem_stack_8"); \
if (VG_IS_8_ALIGNED(new_SP)) { \
ALIGNED8_NEW ( new_SP ); \
} else if (VG_IS_4_ALIGNED(new_SP)) { \
@@ -470,7 +476,7 @@
\
void VGA_REGPARM(1) MAC_(die_mem_stack_8)(Addr new_SP) \
{ \
- PROF_EVENT(121); \
+ PROF_EVENT(121, "die_mem_stack_8"); \
if (VG_IS_8_ALIGNED(new_SP)) { \
ALIGNED8_DIE ( new_SP-8 ); \
} else if (VG_IS_4_ALIGNED(new_SP)) { \
@@ -483,7 +489,7 @@
\
void VGA_REGPARM(1) MAC_(new_mem_stack_12)(Addr new_SP) \
{ \
- PROF_EVENT(112); \
+ PROF_EVENT(112, "new_mem_stack_12"); \
if (VG_IS_8_ALIGNED(new_SP)) { \
ALIGNED8_NEW ( new_SP ); \
ALIGNED4_NEW ( new_SP+8 ); \
@@ -497,7 +503,7 @@
\
void VGA_REGPARM(1) MAC_(die_mem_stack_12)(Addr new_SP) \
{ \
- PROF_EVENT(122); \
+ PROF_EVENT(122, "die_mem_stack_12"); \
/* Note the -12 in the test */ \
if (VG_IS_8_ALIGNED(new_SP-12)) { \
ALIGNED8_DIE ( new_SP-12 ); \
@@ -512,7 +518,7 @@
\
void VGA_REGPARM(1) MAC_(new_mem_stack_16)(Addr new_SP) \
{ \
- PROF_EVENT(113); \
+ PROF_EVENT(113, "new_mem_stack_16"); \
if (VG_IS_8_ALIGNED(new_SP)) { \
ALIGNED8_NEW ( new_SP ); \
ALIGNED8_NEW ( new_SP+8 ); \
@@ -527,7 +533,7 @@
\
void VGA_REGPARM(1) MAC_(die_mem_stack_16)(Addr new_SP) \
{ \
- PROF_EVENT(123); \
+ PROF_EVENT(123, "die_mem_stack_16"); \
if (VG_IS_8_ALIGNED(new_SP)) { \
ALIGNED8_DIE ( new_SP-16 ); \
ALIGNED8_DIE ( new_SP-8 ); \
@@ -542,7 +548,7 @@
\
void VGA_REGPARM(1) MAC_(new_mem_stack_32)(Addr new_SP) \
{ \
- PROF_EVENT(114); \
+ PROF_EVENT(114, "new_mem_stack_32"); \
if (VG_IS_8_ALIGNED(new_SP)) { \
ALIGNED8_NEW ( new_SP ); \
ALIGNED8_NEW ( new_SP+8 ); \
@@ -561,7 +567,7 @@
\
void VGA_REGPARM(1) MAC_(die_mem_stack_32)(Addr new_SP) \
{ \
- PROF_EVENT(124); \
+ PROF_EVENT(124, "die_mem_stack_32"); \
if (VG_IS_8_ALIGNED(new_SP)) { \
ALIGNED8_DIE ( new_SP-32 ); \
ALIGNED8_DIE ( new_SP-24 ); \
@@ -580,13 +586,13 @@
\
void MAC_(new_mem_stack) ( Addr a, SizeT len ) \
{ \
- PROF_EVENT(115); \
+ PROF_EVENT(115, "new_mem_stack"); \
UNALIGNED_NEW ( a, len ); \
} \
\
void MAC_(die_mem_stack) ( Addr a, SizeT len ) \
{ \
- PROF_EVENT(125); \
+ PROF_EVENT(125, "die_mem_stack"); \
UNALIGNED_DIE ( a, len ); \
}