* 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 );                                  \
 }