diff options
Diffstat (limited to 'mps/code')
| -rw-r--r-- | mps/code/config.h | 57 | ||||
| -rw-r--r-- | mps/code/event.h | 51 | ||||
| -rw-r--r-- | mps/code/eventcom.h | 2 | ||||
| -rw-r--r-- | mps/code/eventdef.h | 172 |
4 files changed, 148 insertions, 134 deletions
diff --git a/mps/code/config.h b/mps/code/config.h index 29abad920f7..e27ee92ddca 100644 --- a/mps/code/config.h +++ b/mps/code/config.h | |||
| @@ -286,6 +286,63 @@ | |||
| 286 | #define EventBufferSIZE ((size_t)4096) | 286 | #define EventBufferSIZE ((size_t)4096) |
| 287 | #define EventStringLengthMAX ((size_t)255) /* Not including NUL */ | 287 | #define EventStringLengthMAX ((size_t)255) /* Not including NUL */ |
| 288 | 288 | ||
| 289 | /* EVENT_CLOCK -- fast event timestamp clock | ||
| 290 | * | ||
| 291 | * On platforms that support it, we want to stamp events with a very cheap | ||
| 292 | * and fast high-resolution timer. | ||
| 293 | */ | ||
| 294 | |||
| 295 | /* http://msdn.microsoft.com/en-US/library/twchhe95%28v=vs.100%29.aspx */ | ||
| 296 | #if (defined(MPS_ARCH_I3) || defined(MPS_ARCH_I6)) && defined(MPS_BUILD_MV) | ||
| 297 | |||
| 298 | #pragma intrinsic(__rdtsc) | ||
| 299 | typedef unsigned __int64 EventClock; | ||
| 300 | #define EVENT_CLOCK(lvalue) \ | ||
| 301 | BEGIN \ | ||
| 302 | (lvalue) = __rdtsc(); \ | ||
| 303 | END | ||
| 304 | |||
| 305 | /* http://clang.llvm.org/docs/LanguageExtensions.html#builtins */ | ||
| 306 | #elif defined(MPS_BUILD_LL) | ||
| 307 | |||
| 308 | #if __has_builtin(__builtin_readcyclecounter) | ||
| 309 | |||
| 310 | typedef unsigned long long EventClock; | ||
| 311 | #define EVENT_CLOCK(lvalue) \ | ||
| 312 | BEGIN \ | ||
| 313 | (lvalue) = __builtin_readcyclecounter(); \ | ||
| 314 | END | ||
| 315 | |||
| 316 | #endif /* __has_builtin(__builtin_readcyclecounter) */ | ||
| 317 | |||
| 318 | #endif | ||
| 319 | |||
| 320 | /* Assemble the rdtsc instruction */ | ||
| 321 | #if !defined(EVENT_CLOCK) && \ | ||
| 322 | (defined(MPS_ARCH_I3) || defined(MPS_ARCH_I6)) && \ | ||
| 323 | (defined(MPS_BUILD_GC) || defined(MPS_BUILD_LL)) | ||
| 324 | |||
| 325 | /* Use __extension__ to enable use of a 64-bit type on 32-bit pedantic GCC */ | ||
| 326 | __extension__ typedef unsigned long long EventClock; | ||
| 327 | #define EVENT_CLOCK(lvalue) \ | ||
| 328 | BEGIN \ | ||
| 329 | unsigned _l, _h; \ | ||
| 330 | __asm__ __volatile__("rdtsc" : "=a"(_l), "=d"(_h)); \ | ||
| 331 | (lvalue) = ((EventClock)_h << 32) | _l; \ | ||
| 332 | END | ||
| 333 | |||
| 334 | #endif | ||
| 335 | |||
| 336 | /* no fast clock, use plinth, probably from the C library */ | ||
| 337 | #ifndef EVENT_CLOCK | ||
| 338 | |||
| 339 | #define EVENT_CLOCK(lvalue) \ | ||
| 340 | BEGIN \ | ||
| 341 | (lvalue) = mps_clock(); \ | ||
| 342 | END | ||
| 343 | |||
| 344 | #endif | ||
| 345 | |||
| 289 | 346 | ||
| 290 | /* Assert Buffer */ | 347 | /* Assert Buffer */ |
| 291 | 348 | ||
diff --git a/mps/code/event.h b/mps/code/event.h index fed563f6117..131e95496c2 100644 --- a/mps/code/event.h +++ b/mps/code/event.h | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #ifndef event_h | 15 | #ifndef event_h |
| 16 | #define event_h | 16 | #define event_h |
| 17 | 17 | ||
| 18 | #include "config.h" /* for EVENT_CLOCK */ | ||
| 18 | #include "eventcom.h" | 19 | #include "eventcom.h" |
| 19 | #include "mpm.h" | 20 | #include "mpm.h" |
| 20 | #include "eventdef.h" | 21 | #include "eventdef.h" |
| @@ -38,53 +39,10 @@ extern char *EventNext, *EventLimit; | |||
| 38 | extern Word EventKindControl; | 39 | extern Word EventKindControl; |
| 39 | 40 | ||
| 40 | 41 | ||
| 41 | /* EVENT_CLOCK -- fast event timestamp clock | ||
| 42 | * | ||
| 43 | * On platforms that support it, we want to stamp events with a very cheap | ||
| 44 | * and fast high-resolution timer. | ||
| 45 | */ | ||
| 46 | |||
| 47 | /* http://clang.llvm.org/docs/LanguageExtensions.html#builtins */ | ||
| 48 | #if defined(MPS_BUILD_LL) && __has_builtin(__builtin_readcyclecounter) | ||
| 49 | |||
| 50 | #define EVENT_CLOCK(lvalue) \ | ||
| 51 | BEGIN \ | ||
| 52 | (lvalue) = __builtin_readcyclecounter(); \ | ||
| 53 | END | ||
| 54 | |||
| 55 | /* http://msdn.microsoft.com/en-US/library/twchhe95%28v=vs.100%29.aspx */ | ||
| 56 | #elif (defined(MPS_ARCH_I3) || defined(MPS_ARCH_I6)) && defined(MPS_BUILD_MV) | ||
| 57 | |||
| 58 | #pragma intrinsic(__rdtsc) | ||
| 59 | #define EVENT_CLOCK(lvalue) \ | ||
| 60 | BEGIN \ | ||
| 61 | (lvalue) = __rdtsc(); \ | ||
| 62 | END | ||
| 63 | |||
| 64 | /* Assemble the rdtsc instruction */ | ||
| 65 | #elif (defined(MPS_ARCH_I3) || defined(MPS_ARCH_I6)) && \ | ||
| 66 | (defined(MPS_BUILD_GC) || defined(MPS_BUILD_LL)) | ||
| 67 | |||
| 68 | #define EVENT_CLOCK(lvalue) \ | ||
| 69 | BEGIN \ | ||
| 70 | unsigned _l, _h; \ | ||
| 71 | __asm__ __volatile__("rdtsc" : "=a"(_l), "=d"(_h)); \ | ||
| 72 | (lvalue) = ((unsigned long long)_h << 32) | _l; \ | ||
| 73 | END | ||
| 74 | |||
| 75 | #else /* no fast clock, use plinth, probably from the C library */ | ||
| 76 | |||
| 77 | #define EVENT_CLOCK(lvalue) \ | ||
| 78 | BEGIN \ | ||
| 79 | (lvalue) = mps_clock(); \ | ||
| 80 | END | ||
| 81 | |||
| 82 | #endif | ||
| 83 | |||
| 84 | |||
| 85 | #define EVENT_BEGIN(name, structSize) \ | 42 | #define EVENT_BEGIN(name, structSize) \ |
| 86 | BEGIN \ | 43 | BEGIN \ |
| 87 | if(BS_IS_MEMBER(EventKindControl, ((Index)Event##name##Kind))) { \ | 44 | if(Event##name##Always && \ |
| 45 | BS_IS_MEMBER(EventKindControl, ((Index)Event##name##Kind))) { \ | ||
| 88 | Event##name##Struct *_event; \ | 46 | Event##name##Struct *_event; \ |
| 89 | size_t _size = size_tAlignUp(structSize, MPS_PF_ALIGN); \ | 47 | size_t _size = size_tAlignUp(structSize, MPS_PF_ALIGN); \ |
| 90 | if (_size > (size_t)(EventLimit - EventNext)) \ | 48 | if (_size > (size_t)(EventLimit - EventNext)) \ |
| @@ -93,8 +51,7 @@ extern Word EventKindControl; | |||
| 93 | _event = (void *)EventNext; \ | 51 | _event = (void *)EventNext; \ |
| 94 | _event->code = Event##name##Code; \ | 52 | _event->code = Event##name##Code; \ |
| 95 | _event->size = (EventSize)_size; \ | 53 | _event->size = (EventSize)_size; \ |
| 96 | { unsigned l, h; __asm__ __volatile__("rdtsc":"=a"(l),"=d"(h)); \ | 54 | EVENT_CLOCK(_event->clock); |
| 97 | _event->clock = ((unsigned long long)h << 32) | l; } | ||
| 98 | 55 | ||
| 99 | #define EVENT_END(name, size) \ | 56 | #define EVENT_END(name, size) \ |
| 100 | EventNext += _size; \ | 57 | EventNext += _size; \ |
diff --git a/mps/code/eventcom.h b/mps/code/eventcom.h index 1871859c23a..1bf0a67c311 100644 --- a/mps/code/eventcom.h +++ b/mps/code/eventcom.h | |||
| @@ -10,13 +10,13 @@ | |||
| 10 | #define eventcom_h | 10 | #define eventcom_h |
| 11 | 11 | ||
| 12 | #include <limits.h> | 12 | #include <limits.h> |
| 13 | #include "config.h" /* for EventClock */ | ||
| 13 | #include "mpmtypes.h" /* for Word */ | 14 | #include "mpmtypes.h" /* for Word */ |
| 14 | #include "eventdef.h" | 15 | #include "eventdef.h" |
| 15 | 16 | ||
| 16 | 17 | ||
| 17 | /* Types for event fields */ | 18 | /* Types for event fields */ |
| 18 | 19 | ||
| 19 | typedef unsigned long long EventClock; | ||
| 20 | typedef unsigned short EventCode; | 20 | typedef unsigned short EventCode; |
| 21 | typedef unsigned EventKind; | 21 | typedef unsigned EventKind; |
| 22 | typedef unsigned short EventSize; | 22 | typedef unsigned short EventSize; |
diff --git a/mps/code/eventdef.h b/mps/code/eventdef.h index 9cb66e3dbe9..aaffd6cf43d 100644 --- a/mps/code/eventdef.h +++ b/mps/code/eventdef.h | |||
| @@ -56,103 +56,103 @@ | |||
| 56 | 56 | ||
| 57 | #define EVENT_LIST(EVENT, X) \ | 57 | #define EVENT_LIST(EVENT, X) \ |
| 58 | /* 0123456789012345678 <- don't exceed without changing EventNameMAX */ \ | 58 | /* 0123456789012345678 <- don't exceed without changing EventNameMAX */ \ |
| 59 | EVENT(X, AMCGenCreate , 0x0001, TRUE, Pool, 2, (P,P)) \ | 59 | EVENT(X, AMCGenCreate , 0x0001, TRUE, Pool, 2, (P,P)) \ |
| 60 | EVENT(X, AMCGenDestroy , 0x0002, TRUE, Pool, 1, (P)) \ | 60 | EVENT(X, AMCGenDestroy , 0x0002, TRUE, Pool, 1, (P)) \ |
| 61 | EVENT(X, AMCInit , 0x0003, TRUE, Pool, 2, (P,P)) \ | 61 | EVENT(X, AMCInit , 0x0003, TRUE, Pool, 2, (P,P)) \ |
| 62 | EVENT(X, AMCFinish , 0x0004, TRUE, Pool, 1, (P)) \ | 62 | EVENT(X, AMCFinish , 0x0004, TRUE, Pool, 1, (P)) \ |
| 63 | EVENT(X, ArenaCreateVM , 0x0005, TRUE, Arena, 3, (P,W,W)) \ | 63 | EVENT(X, ArenaCreateVM , 0x0005, TRUE, Arena, 3, (P,W,W)) \ |
| 64 | EVENT(X, ArenaCreateVMNZ , 0x0006, TRUE, Arena, 3, (P,W,W)) \ | 64 | EVENT(X, ArenaCreateVMNZ , 0x0006, TRUE, Arena, 3, (P,W,W)) \ |
| 65 | EVENT(X, ArenaWriteFaults , 0x0007, TRUE, Trace, 2, (P,W)) \ | 65 | EVENT(X, ArenaWriteFaults , 0x0007, TRUE, Trace, 2, (P,W)) \ |
| 66 | EVENT(X, MeterInit , 0x0008, TRUE, Pool, 2, (P,P)) \ | 66 | EVENT(X, MeterInit , 0x0008, TRUE, Pool, 2, (P,P)) \ |
| 67 | EVENT(X, MeterValues , 0x0009, TRUE, Pool, 6, (P,D,D,W,W,W)) \ | 67 | EVENT(X, MeterValues , 0x0009, TRUE, Pool, 6, (P,D,D,W,W,W)) \ |
| 68 | EVENT(X, AMCScanBegin , 0x000a, TRUE, Seg, 3, (P,P,P)) \ | 68 | EVENT(X, AMCScanBegin , 0x000a, TRUE, Seg, 3, (P,P,P)) \ |
| 69 | EVENT(X, AMCScanEnd , 0x000b, TRUE, Seg, 3, (P,P,P)) \ | 69 | EVENT(X, AMCScanEnd , 0x000b, TRUE, Seg, 3, (P,P,P)) \ |
| 70 | EVENT(X, AMCFix , 0x000c, TRUE, Ref, 0, ()) \ | 70 | EVENT(X, AMCFix , 0x000c, FALSE, Ref, 0, ()) \ |
| 71 | EVENT(X, AMCFixInPlace , 0x000d, TRUE, Ref, 0, ()) \ | 71 | EVENT(X, AMCFixInPlace , 0x000d, FALSE, Ref, 0, ()) \ |
| 72 | EVENT(X, AMCFixForward , 0x000e, TRUE, Ref, 1, (A)) \ | 72 | EVENT(X, AMCFixForward , 0x000e, FALSE, Ref, 1, (A)) \ |
| 73 | EVENT(X, AMCReclaim , 0x000f, TRUE, Seg, 3, (P,P,P)) \ | 73 | EVENT(X, AMCReclaim , 0x000f, TRUE, Seg, 3, (P,P,P)) \ |
| 74 | /* EVENT(X, AMCTraceEnd , 0x0010, TRUE, Trace, 3, (P,P,P)) */ \ | 74 | /* EVENT(X, AMCTraceEnd , 0x0010, TRUE, Trace, 3, (P,P,P)) */ \ |
| 75 | EVENT(X, ArenaCreateCL , 0x0011, TRUE, Arena, 3, (P,W,A)) \ | 75 | EVENT(X, ArenaCreateCL , 0x0011, TRUE, Arena, 3, (P,W,A)) \ |
| 76 | EVENT(X, ArenaDestroy , 0x0012, TRUE, Arena, 1, (P)) \ | 76 | EVENT(X, ArenaDestroy , 0x0012, TRUE, Arena, 1, (P)) \ |
| 77 | EVENT(X, SegAlloc , 0x0013, TRUE, Seg, 5, (P,P,A,W,P)) \ | 77 | EVENT(X, SegAlloc , 0x0013, TRUE, Seg, 5, (P,P,A,W,P)) \ |
| 78 | EVENT(X, SegFree , 0x0014, TRUE, Seg, 2, (P,P)) \ | 78 | EVENT(X, SegFree , 0x0014, TRUE, Seg, 2, (P,P)) \ |
| 79 | EVENT(X, PoolInit , 0x0015, TRUE, Pool, 3, (P,P,P)) \ | 79 | EVENT(X, PoolInit , 0x0015, TRUE, Pool, 3, (P,P,P)) \ |
| 80 | EVENT(X, PoolFinish , 0x0016, TRUE, Pool, 1, (P)) \ | 80 | EVENT(X, PoolFinish , 0x0016, TRUE, Pool, 1, (P)) \ |
| 81 | EVENT(X, PoolAlloc , 0x0017, TRUE, Object, 3, (P,A,W)) \ | 81 | EVENT(X, PoolAlloc , 0x0017, TRUE, Object, 3, (P,A,W)) \ |
| 82 | EVENT(X, PoolFree , 0x0018, TRUE, Object, 3, (P,A,W)) \ | 82 | EVENT(X, PoolFree , 0x0018, TRUE, Object, 3, (P,A,W)) \ |
| 83 | EVENT(X, CBSInit , 0x0019, TRUE, Pool, 2, (P,P)) \ | 83 | EVENT(X, CBSInit , 0x0019, TRUE, Pool, 2, (P,P)) \ |
| 84 | EVENT(X, Intern , 0x001a, TRUE, User, 2, (W,S)) \ | 84 | EVENT(X, Intern , 0x001a, TRUE, User, 2, (W,S)) \ |
| 85 | EVENT(X, Label , 0x001b, TRUE, User, 2, (A,W)) \ | 85 | EVENT(X, Label , 0x001b, TRUE, User, 2, (A,W)) \ |
| 86 | EVENT(X, TraceStart , 0x001c, TRUE, Trace, 3, (P,P,P)) \ | 86 | EVENT(X, TraceStart , 0x001c, TRUE, Trace, 3, (P,P,P)) \ |
| 87 | EVENT(X, TraceCreate , 0x001d, TRUE, Trace, 4, (P,P,P,U)) \ | 87 | EVENT(X, TraceCreate , 0x001d, TRUE, Trace, 4, (P,P,P,U)) \ |
| 88 | EVENT(X, TraceDestroy , 0x001e, TRUE, Trace, 1, (P)) \ | 88 | EVENT(X, TraceDestroy , 0x001e, TRUE, Trace, 1, (P)) \ |
| 89 | EVENT(X, SegSetGrey , 0x001f, TRUE, Seg, 3, (P,P,U)) \ | 89 | EVENT(X, SegSetGrey , 0x001f, TRUE, Seg, 3, (P,P,U)) \ |
| 90 | EVENT(X, TraceFlipBegin , 0x0020, TRUE, Trace, 2, (P,P)) \ | 90 | EVENT(X, TraceFlipBegin , 0x0020, TRUE, Trace, 2, (P,P)) \ |
| 91 | EVENT(X, TraceFlipEnd , 0x0021, TRUE, Trace, 2, (P,P)) \ | 91 | EVENT(X, TraceFlipEnd , 0x0021, TRUE, Trace, 2, (P,P)) \ |
| 92 | EVENT(X, TraceReclaim , 0x0022, TRUE, Seg, 1, (P)) \ | 92 | EVENT(X, TraceReclaim , 0x0022, TRUE, Seg, 1, (P)) \ |
| 93 | /* EVENT(X, TraceScan , 0x0023, TRUE, Seg, 5, (U,U,P,P,P)) */ \ | 93 | /* EVENT(X, TraceScan , 0x0023, TRUE, Seg, 5, (U,U,P,P,P)) */ \ |
| 94 | EVENT(X, TraceAccess , 0x0024, TRUE, Seg, 3, (P,P,U)) \ | 94 | EVENT(X, TraceAccess , 0x0024, TRUE, Seg, 3, (P,P,U)) \ |
| 95 | /* TracePoll's kind isn't really Trace, but then it isn't Seg either */ \ | 95 | /* TracePoll's kind isn't really Trace, but then it isn't Seg either */ \ |
| 96 | EVENT(X, TracePoll , 0x0025, TRUE, Trace, 2, (P,P)) \ | 96 | EVENT(X, TracePoll , 0x0025, TRUE, Trace, 2, (P,P)) \ |
| 97 | EVENT(X, TraceFix , 0x0026, TRUE, Ref, 4, (P,P,A,U)) \ | 97 | EVENT(X, TraceFix , 0x0026, FALSE, Ref, 4, (P,P,A,U)) \ |
| 98 | EVENT(X, TraceFixSeg , 0x0027, TRUE, Ref, 1, (P)) \ | 98 | EVENT(X, TraceFixSeg , 0x0027, FALSE, Ref, 1, (P)) \ |
| 99 | EVENT(X, TraceFixWhite , 0x0028, TRUE, Ref, 0, ()) \ | 99 | EVENT(X, TraceFixWhite , 0x0028, FALSE, Ref, 0, ()) \ |
| 100 | /* TraceScanArea{Tagged} abuses kind, see .kind.abuse */ \ | 100 | /* TraceScanArea{Tagged} abuses kind, see .kind.abuse */ \ |
| 101 | EVENT(X, TraceScanArea , 0x0029, TRUE, Seg, 3, (P,P,P)) \ | 101 | EVENT(X, TraceScanArea , 0x0029, TRUE, Seg, 3, (P,P,P)) \ |
| 102 | EVENT(X, TraceScanAreaTagged, 0x002a, TRUE, Seg, 3, (P,P,P)) \ | 102 | EVENT(X, TraceScanAreaTagged, 0x002a, TRUE, Seg, 3, (P,P,P)) \ |
| 103 | EVENT(X, VMCreate , 0x002b, TRUE, Arena, 3, (P,A,A)) \ | 103 | EVENT(X, VMCreate , 0x002b, TRUE, Arena, 3, (P,A,A)) \ |
| 104 | EVENT(X, VMDestroy , 0x002c, TRUE, Arena, 1, (P)) \ | 104 | EVENT(X, VMDestroy , 0x002c, TRUE, Arena, 1, (P)) \ |
| 105 | EVENT(X, VMMap , 0x002d, TRUE, Seg, 3, (P,A,A)) \ | 105 | EVENT(X, VMMap , 0x002d, TRUE, Seg, 3, (P,A,A)) \ |
| 106 | EVENT(X, VMUnmap , 0x002e, TRUE, Seg, 3, (P,A,A)) \ | 106 | EVENT(X, VMUnmap , 0x002e, TRUE, Seg, 3, (P,A,A)) \ |
| 107 | EVENT(X, ArenaExtend , 0x002f, TRUE, Arena, 3, (P,A,W)) \ | 107 | EVENT(X, ArenaExtend , 0x002f, TRUE, Arena, 3, (P,A,W)) \ |
| 108 | EVENT(X, ArenaRetract , 0x0030, TRUE, Arena, 3, (P,A,W)) \ | 108 | EVENT(X, ArenaRetract , 0x0030, TRUE, Arena, 3, (P,A,W)) \ |
| 109 | EVENT(X, TraceSegGreyen , 0x0031, TRUE, Seg, 3, (P,P,U)) \ | 109 | EVENT(X, TraceSegGreyen , 0x0031, TRUE, Seg, 3, (P,P,U)) \ |
| 110 | /* RootScanned abuses kind, see .kind.abuse */ \ | 110 | /* RootScanned abuses kind, see .kind.abuse */ \ |
| 111 | EVENT(X, RootScan , 0x0032, TRUE, Seg, 3, (P,W,W)) \ | 111 | EVENT(X, RootScan , 0x0032, TRUE, Seg, 3, (P,W,W)) \ |
| 112 | /* TraceStep abuses kind, see .kind.abuse */ \ | 112 | /* TraceStep abuses kind, see .kind.abuse */ \ |
| 113 | EVENT(X, TraceStep , 0x0033, TRUE, Seg, 2, (P,P)) \ | 113 | EVENT(X, TraceStep , 0x0033, TRUE, Seg, 2, (P,P)) \ |
| 114 | EVENT(X, BufferReserve , 0x0034, TRUE, Object, 3, (P,A,W)) \ | 114 | EVENT(X, BufferReserve , 0x0034, TRUE, Object, 3, (P,A,W)) \ |
| 115 | EVENT(X, BufferCommit , 0x0035, TRUE, Object, 4, (P,A,W,A)) \ | 115 | EVENT(X, BufferCommit , 0x0035, TRUE, Object, 4, (P,A,W,A)) \ |
| 116 | /* BufferInit/Finish abuse kind, see .kind.abuse */ \ | 116 | /* BufferInit/Finish abuse kind, see .kind.abuse */ \ |
| 117 | EVENT(X, BufferInit , 0x0036, TRUE, Pool, 3, (P,P,U)) \ | 117 | EVENT(X, BufferInit , 0x0036, TRUE, Pool, 3, (P,P,U)) \ |
| 118 | EVENT(X, BufferFinish , 0x0037, TRUE, Pool, 1, (P)) \ | 118 | EVENT(X, BufferFinish , 0x0037, TRUE, Pool, 1, (P)) \ |
| 119 | /* EVENT(X, MVTFinish , 0x0038, TRUE, Pool, 1, (P)) */ \ | 119 | /* EVENT(X, MVTFinish , 0x0038, TRUE, Pool, 1, (P)) */ \ |
| 120 | EVENT(X, BufferFill , 0x0039, TRUE, Seg, 4, (P,W,A,W)) \ | 120 | EVENT(X, BufferFill , 0x0039, TRUE, Seg, 4, (P,W,A,W)) \ |
| 121 | EVENT(X, BufferEmpty , 0x003A, TRUE, Seg, 2, (P,W)) \ | 121 | EVENT(X, BufferEmpty , 0x003A, TRUE, Seg, 2, (P,W)) \ |
| 122 | EVENT(X, SegAllocFail , 0x003B, TRUE, Seg, 3, (P,W,P)) \ | 122 | EVENT(X, SegAllocFail , 0x003B, TRUE, Seg, 3, (P,W,P)) \ |
| 123 | EVENT(X, TraceScanSeg , 0x003C, TRUE, Seg, 4, (U,U,P,P)) \ | 123 | EVENT(X, TraceScanSeg , 0x003C, TRUE, Seg, 4, (U,U,P,P)) \ |
| 124 | /* TraceScanSingleRef abuses kind, see .kind.abuse */ \ | 124 | /* TraceScanSingleRef abuses kind, see .kind.abuse */ \ |
| 125 | EVENT(X, TraceScanSingleRef , 0x003D, TRUE, Seg, 4, (U,U,P,A)) \ | 125 | EVENT(X, TraceScanSingleRef , 0x003D, TRUE, Seg, 4, (U,U,P,A)) \ |
| 126 | EVENT(X, TraceStatCondemn , 0x003E, TRUE, Trace, 7, (P,W,W,W,W,D,D)) \ | 126 | EVENT(X, TraceStatCondemn , 0x003E, TRUE, Trace, 7, (P,W,W,W,W,D,D)) \ |
| 127 | EVENT(X, TraceStatScan , 0x003F, TRUE, Trace, 13, (P,W,W,W,W,W,W,W,W,W,W,W,W)) \ | 127 | EVENT(X, TraceStatScan , 0x003F, TRUE, Trace, 13, (P,W,W,W,W,W,W,W,W,W,W,W,W)) \ |
| 128 | EVENT(X, TraceStatFix , 0x0040, TRUE, Trace, 10, (P,W,W,W,W,W,W,W,W,W)) \ | 128 | EVENT(X, TraceStatFix , 0x0040, TRUE, Trace, 10, (P,W,W,W,W,W,W,W,W,W)) \ |
| 129 | EVENT(X, TraceStatReclaim , 0x0041, TRUE, Trace, 3, (P,W,W)) \ | 129 | EVENT(X, TraceStatReclaim , 0x0041, TRUE, Trace, 3, (P,W,W)) \ |
| 130 | EVENT(X, PoolInitMVFF , 0x0042, TRUE, Pool, 8, (P,P,W,W,W,U,U,U)) \ | 130 | EVENT(X, PoolInitMVFF , 0x0042, TRUE, Pool, 8, (P,P,W,W,W,U,U,U)) \ |
| 131 | EVENT(X, PoolInitMV , 0x0043, TRUE, Pool, 5, (P,P,W,W,W)) \ | 131 | EVENT(X, PoolInitMV , 0x0043, TRUE, Pool, 5, (P,P,W,W,W)) \ |
| 132 | EVENT(X, PoolInitMFS , 0x0044, TRUE, Pool, 4, (P,P,W,W)) \ | 132 | EVENT(X, PoolInitMFS , 0x0044, TRUE, Pool, 4, (P,P,W,W)) \ |
| 133 | EVENT(X, PoolInitEPVM , 0x0045, TRUE, Pool, 5, (P,P,P,U,U)) \ | 133 | EVENT(X, PoolInitEPVM , 0x0045, TRUE, Pool, 5, (P,P,P,U,U)) \ |
| 134 | EVENT(X, PoolInitEPDL , 0x0046, TRUE, Pool, 6, (P,P,U,W,W,W)) \ | 134 | EVENT(X, PoolInitEPDL , 0x0046, TRUE, Pool, 6, (P,P,U,W,W,W)) \ |
| 135 | EVENT(X, PoolInitAMS , 0x0047, TRUE, Pool, 3, (P,P,P)) \ | 135 | EVENT(X, PoolInitAMS , 0x0047, TRUE, Pool, 3, (P,P,P)) \ |
| 136 | EVENT(X, PoolInitAMC , 0x0048, TRUE, Pool, 2, (P,P)) \ | 136 | EVENT(X, PoolInitAMC , 0x0048, TRUE, Pool, 2, (P,P)) \ |
| 137 | EVENT(X, PoolInitAMCZ , 0x0049, TRUE, Pool, 2, (P,P)) \ | 137 | EVENT(X, PoolInitAMCZ , 0x0049, TRUE, Pool, 2, (P,P)) \ |
| 138 | EVENT(X, PoolInitAWL , 0x004A, TRUE, Pool, 2, (P,P)) \ | 138 | EVENT(X, PoolInitAWL , 0x004A, TRUE, Pool, 2, (P,P)) \ |
| 139 | EVENT(X, PoolInitLO , 0x004B, TRUE, Pool, 2, (P,P)) \ | 139 | EVENT(X, PoolInitLO , 0x004B, TRUE, Pool, 2, (P,P)) \ |
| 140 | EVENT(X, PoolInitSNC , 0x004C, TRUE, Pool, 2, (P,P)) \ | 140 | EVENT(X, PoolInitSNC , 0x004C, TRUE, Pool, 2, (P,P)) \ |
| 141 | EVENT(X, PoolInitMVT , 0x004D, TRUE, Pool, 6, (P,W,W,W,W,W)) \ | 141 | EVENT(X, PoolInitMVT , 0x004D, TRUE, Pool, 6, (P,W,W,W,W,W)) \ |
| 142 | EVENT(X, BufferInitEPVM , 0x0050, TRUE, Pool, 3, (P,P,U)) \ | 142 | EVENT(X, BufferInitEPVM , 0x0050, TRUE, Pool, 3, (P,P,U)) \ |
| 143 | EVENT(X, BufferInitSeg , 0x0051, TRUE, Pool, 3, (P,P,U)) \ | 143 | EVENT(X, BufferInitSeg , 0x0051, TRUE, Pool, 3, (P,P,U)) \ |
| 144 | EVENT(X, BufferInitRank , 0x0052, TRUE, Pool, 4, (P,P,U,U)) \ | 144 | EVENT(X, BufferInitRank , 0x0052, TRUE, Pool, 4, (P,P,U,U)) \ |
| 145 | /* PoolPush/Pop go under Object, because they're user ops. */ \ | 145 | /* PoolPush/Pop go under Object, because they're user ops. */ \ |
| 146 | EVENT(X, PoolPush , 0x0060, TRUE, Object, 1, (P)) \ | 146 | EVENT(X, PoolPush , 0x0060, TRUE, Object, 1, (P)) \ |
| 147 | EVENT(X, PoolPop , 0x0061, TRUE, Object, 2, (P,U)) \ | 147 | EVENT(X, PoolPop , 0x0061, TRUE, Object, 2, (P,U)) \ |
| 148 | EVENT(X, ReservoirLimitSet , 0x0062, TRUE, Arena, 2, (P,W)) \ | 148 | EVENT(X, ReservoirLimitSet , 0x0062, TRUE, Arena, 2, (P,W)) \ |
| 149 | EVENT(X, CommitLimitSet , 0x0063, TRUE, Arena, 3, (P,W,U)) \ | 149 | EVENT(X, CommitLimitSet , 0x0063, TRUE, Arena, 3, (P,W,U)) \ |
| 150 | EVENT(X, SpareCommitLimitSet, 0x0064, TRUE, Arena, 2, (P,W)) \ | 150 | EVENT(X, SpareCommitLimitSet, 0x0064, TRUE, Arena, 2, (P,W)) \ |
| 151 | EVENT(X, ArenaAlloc , 0x0065, TRUE, Arena, 5, (P,P,A,W,P)) \ | 151 | EVENT(X, ArenaAlloc , 0x0065, TRUE, Arena, 5, (P,P,A,W,P)) \ |
| 152 | EVENT(X, ArenaFree , 0x0066, TRUE, Arena, 3, (P,A,W)) \ | 152 | EVENT(X, ArenaFree , 0x0066, TRUE, Arena, 3, (P,A,W)) \ |
| 153 | EVENT(X, ArenaAllocFail , 0x0067, TRUE, Arena, 3, (P,W,P)) \ | 153 | EVENT(X, ArenaAllocFail , 0x0067, TRUE, Arena, 3, (P,W,P)) \ |
| 154 | EVENT(X, SegMerge , 0x0068, TRUE, Seg, 3, (P,P,P)) \ | 154 | EVENT(X, SegMerge , 0x0068, TRUE, Seg, 3, (P,P,P)) \ |
| 155 | EVENT(X, SegSplit , 0x0069, TRUE, Seg, 4, (P,P,P,A)) | 155 | EVENT(X, SegSplit , 0x0069, TRUE, Seg, 4, (P,P,P,A)) |
| 156 | 156 | ||
| 157 | /* Remember to update EventNameMAX and EventCodeMAX in eventcom.h! */ | 157 | /* Remember to update EventNameMAX and EventCodeMAX in eventcom.h! */ |
| 158 | 158 | ||