diff options
| author | Richard Brooksby | 2012-08-26 15:31:40 +0100 |
|---|---|---|
| committer | Richard Brooksby | 2012-08-26 15:31:40 +0100 |
| commit | 0506bc8cbfd4861aff2ce9032c6a712094931ff6 (patch) | |
| tree | 5c84f77b480d44208a68a5ece2c53bda44275b71 /mps/code | |
| parent | 3208f37aefaa8c7152ff70722ab4cd2eb2b4b300 (diff) | |
| parent | 64f400c160c5246de16d69ff56d88176656c27ff (diff) | |
| download | emacs-0506bc8cbfd4861aff2ce9032c6a712094931ff6.tar.gz emacs-0506bc8cbfd4861aff2ce9032c6a712094931ff6.zip | |
Using fast clock to timestamp events, making event logging much quicker.
Copied from Perforce
Change: 179055
ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
| -rw-r--r-- | mps/code/event.h | 48 | ||||
| -rw-r--r-- | mps/code/eventcnv.c | 15 | ||||
| -rw-r--r-- | mps/code/eventcom.h | 291 |
3 files changed, 73 insertions, 281 deletions
diff --git a/mps/code/event.h b/mps/code/event.h index 1f113cc47a0..fed563f6117 100644 --- a/mps/code/event.h +++ b/mps/code/event.h | |||
| @@ -37,6 +37,51 @@ extern Res EventFlush(void); | |||
| 37 | extern char *EventNext, *EventLimit; | 37 | extern char *EventNext, *EventLimit; |
| 38 | extern Word EventKindControl; | 38 | extern Word EventKindControl; |
| 39 | 39 | ||
| 40 | |||
| 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 | |||
| 40 | #define EVENT_BEGIN(name, structSize) \ | 85 | #define EVENT_BEGIN(name, structSize) \ |
| 41 | BEGIN \ | 86 | BEGIN \ |
| 42 | if(BS_IS_MEMBER(EventKindControl, ((Index)Event##name##Kind))) { \ | 87 | if(BS_IS_MEMBER(EventKindControl, ((Index)Event##name##Kind))) { \ |
| @@ -48,7 +93,8 @@ extern Word EventKindControl; | |||
| 48 | _event = (void *)EventNext; \ | 93 | _event = (void *)EventNext; \ |
| 49 | _event->code = Event##name##Code; \ | 94 | _event->code = Event##name##Code; \ |
| 50 | _event->size = (EventSize)_size; \ | 95 | _event->size = (EventSize)_size; \ |
| 51 | _event->clock = mps_clock(); | 96 | { unsigned l, h; __asm__ __volatile__("rdtsc":"=a"(l),"=d"(h)); \ |
| 97 | _event->clock = ((unsigned long long)h << 32) | l; } | ||
| 52 | 98 | ||
| 53 | #define EVENT_END(name, size) \ | 99 | #define EVENT_END(name, size) \ |
| 54 | EventNext += _size; \ | 100 | EventNext += _size; \ |
diff --git a/mps/code/eventcnv.c b/mps/code/eventcnv.c index 423625f3f27..4fac8bbc4d8 100644 --- a/mps/code/eventcnv.c +++ b/mps/code/eventcnv.c | |||
| @@ -35,7 +35,7 @@ typedef unsigned int uint; | |||
| 35 | typedef unsigned long ulong; | 35 | typedef unsigned long ulong; |
| 36 | 36 | ||
| 37 | 37 | ||
| 38 | static Word eventTime; /* current event time */ | 38 | static EventClock eventTime; /* current event time */ |
| 39 | 39 | ||
| 40 | 40 | ||
| 41 | /* event counters */ | 41 | /* event counters */ |
| @@ -404,7 +404,6 @@ static void readLog(EventProc proc) | |||
| 404 | 404 | ||
| 405 | while (TRUE) { /* loop for each event */ | 405 | while (TRUE) { /* loop for each event */ |
| 406 | char *eventFormat; | 406 | char *eventFormat; |
| 407 | size_t argCount, i; | ||
| 408 | Event event; | 407 | Event event; |
| 409 | EventCode code; | 408 | EventCode code; |
| 410 | Res res; | 409 | Res res; |
| @@ -431,6 +430,7 @@ static void readLog(EventProc proc) | |||
| 431 | 430 | ||
| 432 | /* Output event. */ | 431 | /* Output event. */ |
| 433 | if (verbose) { | 432 | if (verbose) { |
| 433 | size_t argCount; | ||
| 434 | eventFormat = EventCode2Format(code); | 434 | eventFormat = EventCode2Format(code); |
| 435 | argCount = strlen(eventFormat); | 435 | argCount = strlen(eventFormat); |
| 436 | if (eventFormat[0] == '0') argCount = 0; | 436 | if (eventFormat[0] == '0') argCount = 0; |
| @@ -527,8 +527,11 @@ static void readLog(EventProc proc) | |||
| 527 | printf(styleConv, (ulongest_t)event->PoolInit.f2); | 527 | printf(styleConv, (ulongest_t)event->PoolInit.f2); |
| 528 | } break; | 528 | } break; |
| 529 | default: | 529 | default: |
| 530 | for (i = 0; i < argCount; ++i) | 530 | { |
| 531 | printArg(proc, EventField(event, i), eventFormat[i], styleConv); | 531 | unsigned i; |
| 532 | for (i = 0; i < argCount; ++i) | ||
| 533 | printArg(proc, EventField(event, i), eventFormat[i], styleConv); | ||
| 534 | } | ||
| 532 | } | 535 | } |
| 533 | 536 | ||
| 534 | if (style == 'L') putchar(')'); | 537 | if (style == 'L') putchar(')'); |
| @@ -553,7 +556,7 @@ static void readLog(EventProc proc) | |||
| 553 | printf("(t"); | 556 | printf("(t"); |
| 554 | } break; | 557 | } break; |
| 555 | case 'C': { | 558 | case 'C': { |
| 556 | printf("%lu", eventTime+1); | 559 | printf("%llu", eventTime+1); |
| 557 | } break; | 560 | } break; |
| 558 | } | 561 | } |
| 559 | reportEventResults(totalEventCount); | 562 | reportEventResults(totalEventCount); |
| @@ -565,7 +568,7 @@ static void readLog(EventProc proc) | |||
| 565 | if (eventEnabled[c]) | 568 | if (eventEnabled[c]) |
| 566 | printf(" %04X %s\n", (unsigned)c, EventCode2Name(c)); | 569 | printf(" %04X %s\n", (unsigned)c, EventCode2Name(c)); |
| 567 | if (bucketSize == 0) | 570 | if (bucketSize == 0) |
| 568 | printf("\nevent clock stopped at %"PRIuLONGEST"\n", (ulongest_t)eventTime); | 571 | printf("\nevent clock stopped at %llu\n", eventTime); |
| 569 | } | 572 | } |
| 570 | } | 573 | } |
| 571 | } | 574 | } |
diff --git a/mps/code/eventcom.h b/mps/code/eventcom.h index 45f45b128ed..1871859c23a 100644 --- a/mps/code/eventcom.h +++ b/mps/code/eventcom.h | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | 16 | ||
| 17 | /* Types for event fields */ | 17 | /* Types for event fields */ |
| 18 | 18 | ||
| 19 | typedef unsigned long long EventClock; | ||
| 19 | typedef unsigned short EventCode; | 20 | typedef unsigned short EventCode; |
| 20 | typedef unsigned EventKind; | 21 | typedef unsigned EventKind; |
| 21 | typedef unsigned short EventSize; | 22 | typedef unsigned short EventSize; |
| @@ -85,27 +86,27 @@ typedef double EventFD; | |||
| 85 | 86 | ||
| 86 | /* | 87 | /* |
| 87 | for i in range(0, 15): | 88 | for i in range(0, 15): |
| 88 | print "#define EVENT%d_STRUCT(%s) struct { EventCode code; EventSize size; Word clock; %s }" % ( | 89 | print "#define EVENT%d_STRUCT(%s) struct { EventCode code; EventSize size; EventClock clock; %s }" % ( |
| 89 | i, | 90 | i, |
| 90 | ", ".join(["p%s" % j for j in range(0, i)]), | 91 | ", ".join(["p%s" % j for j in range(0, i)]), |
| 91 | " ".join("EventF##p%d f%d;" % (j, j) for j in range(0,i)) | 92 | " ".join("EventF##p%d f%d;" % (j, j) for j in range(0,i)) |
| 92 | ) | 93 | ) |
| 93 | */ | 94 | */ |
| 94 | #define EVENT0_STRUCT() struct { EventCode code; EventSize size; Word clock; } | 95 | #define EVENT0_STRUCT() struct { EventCode code; EventSize size; EventClock clock; } |
| 95 | #define EVENT1_STRUCT(p0) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; } | 96 | #define EVENT1_STRUCT(p0) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; } |
| 96 | #define EVENT2_STRUCT(p0, p1) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; } | 97 | #define EVENT2_STRUCT(p0, p1) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; } |
| 97 | #define EVENT3_STRUCT(p0, p1, p2) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; } | 98 | #define EVENT3_STRUCT(p0, p1, p2) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; } |
| 98 | #define EVENT4_STRUCT(p0, p1, p2, p3) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; } | 99 | #define EVENT4_STRUCT(p0, p1, p2, p3) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; } |
| 99 | #define EVENT5_STRUCT(p0, p1, p2, p3, p4) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; } | 100 | #define EVENT5_STRUCT(p0, p1, p2, p3, p4) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; } |
| 100 | #define EVENT6_STRUCT(p0, p1, p2, p3, p4, p5) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; } | 101 | #define EVENT6_STRUCT(p0, p1, p2, p3, p4, p5) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; } |
| 101 | #define EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; } | 102 | #define EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; } |
| 102 | #define EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; } | 103 | #define EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; } |
| 103 | #define EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; } | 104 | #define EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; } |
| 104 | #define EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; } | 105 | #define EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; } |
| 105 | #define EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; } | 106 | #define EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; } |
| 106 | #define EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; EventF##p11 f11; } | 107 | #define EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; EventF##p11 f11; } |
| 107 | #define EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; EventF##p11 f11; EventF##p12 f12; } | 108 | #define EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; EventF##p11 f11; EventF##p12 f12; } |
| 108 | #define EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; EventF##p11 f11; EventF##p12 f12; EventF##p13 f13; } | 109 | #define EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) struct { EventCode code; EventSize size; EventClock clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; EventF##p11 f11; EventF##p12 f12; EventF##p13 f13; } |
| 109 | 110 | ||
| 110 | /* Common prefix for all event structures. The size field allows an event | 111 | /* Common prefix for all event structures. The size field allows an event |
| 111 | reader to skip over events whose codes it does not recognise. */ | 112 | reader to skip over events whose codes it does not recognise. */ |
| @@ -133,264 +134,6 @@ typedef union EventUnion { | |||
| 133 | } EventUnion, *Event; | 134 | } EventUnion, *Event; |
| 134 | 135 | ||
| 135 | 136 | ||
| 136 | #if 0 | ||
| 137 | /* FIXME: Eliminate this in favour of some sort of table? */ | ||
| 138 | |||
| 139 | #define EVENT0_FIELD_PTR(name, event, i) NULL | ||
| 140 | |||
| 141 | /* | ||
| 142 | for i in range(1,20): print "#define EVENT%d_FIELD_PTR(name, event, i) ( \\\n %s\\\n : NULL)\n" % (i, " \\\n : ".join(["((i) == %d) ? (void *)&((event)->name.f%d)" % (j, j) for j in range(0, i)])) | ||
| 143 | */ | ||
| 144 | |||
| 145 | #define EVENT1_FIELD_PTR(name, event, i) ( \ | ||
| 146 | ((i) == 0) ? (void *)&((event)->name.f0)\ | ||
| 147 | : NULL) | ||
| 148 | |||
| 149 | #define EVENT2_FIELD_PTR(name, event, i) ( \ | ||
| 150 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 151 | : ((i) == 1) ? (void *)&((event)->name.f1)\ | ||
| 152 | : NULL) | ||
| 153 | |||
| 154 | #define EVENT3_FIELD_PTR(name, event, i) ( \ | ||
| 155 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 156 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 157 | : ((i) == 2) ? (void *)&((event)->name.f2)\ | ||
| 158 | : NULL) | ||
| 159 | |||
| 160 | #define EVENT4_FIELD_PTR(name, event, i) ( \ | ||
| 161 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 162 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 163 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 164 | : ((i) == 3) ? (void *)&((event)->name.f3)\ | ||
| 165 | : NULL) | ||
| 166 | |||
| 167 | #define EVENT5_FIELD_PTR(name, event, i) ( \ | ||
| 168 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 169 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 170 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 171 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 172 | : ((i) == 4) ? (void *)&((event)->name.f4)\ | ||
| 173 | : NULL) | ||
| 174 | |||
| 175 | #define EVENT6_FIELD_PTR(name, event, i) ( \ | ||
| 176 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 177 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 178 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 179 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 180 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 181 | : ((i) == 5) ? (void *)&((event)->name.f5)\ | ||
| 182 | : NULL) | ||
| 183 | |||
| 184 | #define EVENT7_FIELD_PTR(name, event, i) ( \ | ||
| 185 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 186 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 187 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 188 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 189 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 190 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 191 | : ((i) == 6) ? (void *)&((event)->name.f6)\ | ||
| 192 | : NULL) | ||
| 193 | |||
| 194 | #define EVENT8_FIELD_PTR(name, event, i) ( \ | ||
| 195 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 196 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 197 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 198 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 199 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 200 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 201 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 202 | : ((i) == 7) ? (void *)&((event)->name.f7)\ | ||
| 203 | : NULL) | ||
| 204 | |||
| 205 | #define EVENT9_FIELD_PTR(name, event, i) ( \ | ||
| 206 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 207 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 208 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 209 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 210 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 211 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 212 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 213 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 214 | : ((i) == 8) ? (void *)&((event)->name.f8)\ | ||
| 215 | : NULL) | ||
| 216 | |||
| 217 | #define EVENT10_FIELD_PTR(name, event, i) ( \ | ||
| 218 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 219 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 220 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 221 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 222 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 223 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 224 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 225 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 226 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 227 | : ((i) == 9) ? (void *)&((event)->name.f9)\ | ||
| 228 | : NULL) | ||
| 229 | |||
| 230 | #define EVENT11_FIELD_PTR(name, event, i) ( \ | ||
| 231 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 232 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 233 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 234 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 235 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 236 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 237 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 238 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 239 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 240 | : ((i) == 9) ? (void *)&((event)->name.f9) \ | ||
| 241 | : ((i) == 10) ? (void *)&((event)->name.f10)\ | ||
| 242 | : NULL) | ||
| 243 | |||
| 244 | #define EVENT12_FIELD_PTR(name, event, i) ( \ | ||
| 245 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 246 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 247 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 248 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 249 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 250 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 251 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 252 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 253 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 254 | : ((i) == 9) ? (void *)&((event)->name.f9) \ | ||
| 255 | : ((i) == 10) ? (void *)&((event)->name.f10) \ | ||
| 256 | : ((i) == 11) ? (void *)&((event)->name.f11)\ | ||
| 257 | : NULL) | ||
| 258 | |||
| 259 | #define EVENT13_FIELD_PTR(name, event, i) ( \ | ||
| 260 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 261 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 262 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 263 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 264 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 265 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 266 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 267 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 268 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 269 | : ((i) == 9) ? (void *)&((event)->name.f9) \ | ||
| 270 | : ((i) == 10) ? (void *)&((event)->name.f10) \ | ||
| 271 | : ((i) == 11) ? (void *)&((event)->name.f11) \ | ||
| 272 | : ((i) == 12) ? (void *)&((event)->name.f12)\ | ||
| 273 | : NULL) | ||
| 274 | |||
| 275 | #define EVENT14_FIELD_PTR(name, event, i) ( \ | ||
| 276 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 277 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 278 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 279 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 280 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 281 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 282 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 283 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 284 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 285 | : ((i) == 9) ? (void *)&((event)->name.f9) \ | ||
| 286 | : ((i) == 10) ? (void *)&((event)->name.f10) \ | ||
| 287 | : ((i) == 11) ? (void *)&((event)->name.f11) \ | ||
| 288 | : ((i) == 12) ? (void *)&((event)->name.f12) \ | ||
| 289 | : ((i) == 13) ? (void *)&((event)->name.f13)\ | ||
| 290 | : NULL) | ||
| 291 | |||
| 292 | #define EVENT15_FIELD_PTR(name, event, i) ( \ | ||
| 293 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 294 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 295 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 296 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 297 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 298 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 299 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 300 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 301 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 302 | : ((i) == 9) ? (void *)&((event)->name.f9) \ | ||
| 303 | : ((i) == 10) ? (void *)&((event)->name.f10) \ | ||
| 304 | : ((i) == 11) ? (void *)&((event)->name.f11) \ | ||
| 305 | : ((i) == 12) ? (void *)&((event)->name.f12) \ | ||
| 306 | : ((i) == 13) ? (void *)&((event)->name.f13) \ | ||
| 307 | : ((i) == 14) ? (void *)&((event)->name.f14)\ | ||
| 308 | : NULL) | ||
| 309 | |||
| 310 | #define EVENT16_FIELD_PTR(name, event, i) ( \ | ||
| 311 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 312 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 313 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 314 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 315 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 316 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 317 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 318 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 319 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 320 | : ((i) == 9) ? (void *)&((event)->name.f9) \ | ||
| 321 | : ((i) == 10) ? (void *)&((event)->name.f10) \ | ||
| 322 | : ((i) == 11) ? (void *)&((event)->name.f11) \ | ||
| 323 | : ((i) == 12) ? (void *)&((event)->name.f12) \ | ||
| 324 | : ((i) == 13) ? (void *)&((event)->name.f13) \ | ||
| 325 | : ((i) == 14) ? (void *)&((event)->name.f14) \ | ||
| 326 | : ((i) == 15) ? (void *)&((event)->name.f15)\ | ||
| 327 | : NULL) | ||
| 328 | |||
| 329 | #define EVENT17_FIELD_PTR(name, event, i) ( \ | ||
| 330 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 331 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 332 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 333 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 334 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 335 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 336 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 337 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 338 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 339 | : ((i) == 9) ? (void *)&((event)->name.f9) \ | ||
| 340 | : ((i) == 10) ? (void *)&((event)->name.f10) \ | ||
| 341 | : ((i) == 11) ? (void *)&((event)->name.f11) \ | ||
| 342 | : ((i) == 12) ? (void *)&((event)->name.f12) \ | ||
| 343 | : ((i) == 13) ? (void *)&((event)->name.f13) \ | ||
| 344 | : ((i) == 14) ? (void *)&((event)->name.f14) \ | ||
| 345 | : ((i) == 15) ? (void *)&((event)->name.f15) \ | ||
| 346 | : ((i) == 16) ? (void *)&((event)->name.f16)\ | ||
| 347 | : NULL) | ||
| 348 | |||
| 349 | #define EVENT18_FIELD_PTR(name, event, i) ( \ | ||
| 350 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 351 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 352 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 353 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 354 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 355 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 356 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 357 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 358 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 359 | : ((i) == 9) ? (void *)&((event)->name.f9) \ | ||
| 360 | : ((i) == 10) ? (void *)&((event)->name.f10) \ | ||
| 361 | : ((i) == 11) ? (void *)&((event)->name.f11) \ | ||
| 362 | : ((i) == 12) ? (void *)&((event)->name.f12) \ | ||
| 363 | : ((i) == 13) ? (void *)&((event)->name.f13) \ | ||
| 364 | : ((i) == 14) ? (void *)&((event)->name.f14) \ | ||
| 365 | : ((i) == 15) ? (void *)&((event)->name.f15) \ | ||
| 366 | : ((i) == 16) ? (void *)&((event)->name.f16) \ | ||
| 367 | : ((i) == 17) ? (void *)&((event)->name.f17)\ | ||
| 368 | : NULL) | ||
| 369 | |||
| 370 | #define EVENT19_FIELD_PTR(name, event, i) ( \ | ||
| 371 | ((i) == 0) ? (void *)&((event)->name.f0) \ | ||
| 372 | : ((i) == 1) ? (void *)&((event)->name.f1) \ | ||
| 373 | : ((i) == 2) ? (void *)&((event)->name.f2) \ | ||
| 374 | : ((i) == 3) ? (void *)&((event)->name.f3) \ | ||
| 375 | : ((i) == 4) ? (void *)&((event)->name.f4) \ | ||
| 376 | : ((i) == 5) ? (void *)&((event)->name.f5) \ | ||
| 377 | : ((i) == 6) ? (void *)&((event)->name.f6) \ | ||
| 378 | : ((i) == 7) ? (void *)&((event)->name.f7) \ | ||
| 379 | : ((i) == 8) ? (void *)&((event)->name.f8) \ | ||
| 380 | : ((i) == 9) ? (void *)&((event)->name.f9) \ | ||
| 381 | : ((i) == 10) ? (void *)&((event)->name.f10) \ | ||
| 382 | : ((i) == 11) ? (void *)&((event)->name.f11) \ | ||
| 383 | : ((i) == 12) ? (void *)&((event)->name.f12) \ | ||
| 384 | : ((i) == 13) ? (void *)&((event)->name.f13) \ | ||
| 385 | : ((i) == 14) ? (void *)&((event)->name.f14) \ | ||
| 386 | : ((i) == 15) ? (void *)&((event)->name.f15) \ | ||
| 387 | : ((i) == 16) ? (void *)&((event)->name.f16) \ | ||
| 388 | : ((i) == 17) ? (void *)&((event)->name.f17) \ | ||
| 389 | : ((i) == 18) ? (void *)&((event)->name.f18)\ | ||
| 390 | : NULL) | ||
| 391 | #endif | ||
| 392 | |||
| 393 | |||
| 394 | #endif /* eventcom_h */ | 137 | #endif /* eventcom_h */ |
| 395 | 138 | ||
| 396 | 139 | ||