aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/arena.c12
-rw-r--r--mps/code/arenacl.c2
-rw-r--r--mps/code/arenavm.c6
-rw-r--r--mps/code/buffer.c18
-rw-r--r--mps/code/cbs.c2
-rw-r--r--mps/code/dumper.c2
-rw-r--r--mps/code/event.c7
-rw-r--r--mps/code/event.h36
-rw-r--r--mps/code/eventcnv.c52
-rw-r--r--mps/code/eventdef.h183
-rw-r--r--mps/code/eventgen.h1802
-rw-r--r--mps/code/eventgen.pl220
-rw-r--r--mps/code/eventpro.c48
-rw-r--r--mps/code/global.c2
-rw-r--r--mps/code/meter.c4
-rw-r--r--mps/code/pool.c6
-rw-r--r--mps/code/poolamc.c32
-rw-r--r--mps/code/poolams.c2
-rw-r--r--mps/code/poolawl.c2
-rw-r--r--mps/code/poollo.c2
-rw-r--r--mps/code/poolmfs.c2
-rw-r--r--mps/code/poolmrg.c2
-rw-r--r--mps/code/poolmv.c2
-rw-r--r--mps/code/poolmv2.c2
-rw-r--r--mps/code/poolmvff.c2
-rw-r--r--mps/code/pooln.c2
-rw-r--r--mps/code/poolsnc.c2
-rw-r--r--mps/code/reserv.c4
-rw-r--r--mps/code/root.c2
-rw-r--r--mps/code/seg.c12
-rw-r--r--mps/code/trace.c44
-rw-r--r--mps/code/vman.c8
-rw-r--r--mps/code/vmix.c8
-rw-r--r--mps/code/vmw3.c8
34 files changed, 1090 insertions, 1450 deletions
diff --git a/mps/code/arena.c b/mps/code/arena.c
index 704d13f60db..8a83b26fe5a 100644
--- a/mps/code/arena.c
+++ b/mps/code/arena.c
@@ -529,7 +529,7 @@ Res ArenaAlloc(Addr *baseReturn, SegPref pref, Size size, Pool pool,
529 if (res == ResOK) 529 if (res == ResOK)
530 goto goodAlloc; 530 goto goodAlloc;
531 } 531 }
532 EVENT_PWP(ArenaAllocFail, arena, size, pool); 532 EVENT3(ArenaAllocFail, arena, size, pool);
533 return res; 533 return res;
534 534
535goodAlloc: 535goodAlloc:
@@ -537,7 +537,7 @@ goodAlloc:
537 arena->lastTract = baseTract; 537 arena->lastTract = baseTract;
538 arena->lastTractBase = base; 538 arena->lastTractBase = base;
539 539
540 EVENT_PPAWP(ArenaAlloc, arena, baseTract, base, size, pool); 540 EVENT5(ArenaAlloc, arena, baseTract, base, size, pool);
541 *baseReturn = base; 541 *baseReturn = base;
542 return ResOK; 542 return ResOK;
543} 543}
@@ -577,7 +577,7 @@ void ArenaFree(Addr base, Size size, Pool pool)
577 ReservoirDeposit(reservoir, base, size); 577 ReservoirDeposit(reservoir, base, size);
578 } 578 }
579 579
580 EVENT_PAW(ArenaFree, arena, base, size); 580 EVENT3(ArenaFree, arena, base, size);
581 return; 581 return;
582} 582}
583 583
@@ -616,7 +616,7 @@ void ArenaSetSpareCommitLimit(Arena arena, Size limit)
616 arena->class->spareCommitExceeded(arena); 616 arena->class->spareCommitExceeded(arena);
617 } 617 }
618 618
619 EVENT_PW(SpareCommitLimitSet, arena, limit); 619 EVENT2(SpareCommitLimitSet, arena, limit);
620 return; 620 return;
621} 621}
622 622
@@ -658,7 +658,7 @@ Res ArenaSetCommitLimit(Arena arena, Size limit)
658 arena->commitLimit = limit; 658 arena->commitLimit = limit;
659 res = ResOK; 659 res = ResOK;
660 } 660 }
661 EVENT_PWU(CommitLimitSet, arena, limit, (res == ResOK)); 661 EVENT3(CommitLimitSet, arena, limit, (res == ResOK));
662 return res; 662 return res;
663} 663}
664 664
@@ -690,7 +690,7 @@ Res ArenaExtend(Arena arena, Addr base, Size size)
690 if (res != ResOK) 690 if (res != ResOK)
691 return res; 691 return res;
692 692
693 EVENT_PAW(ArenaExtend, arena, base, size); 693 EVENT3(ArenaExtend, arena, base, size);
694 return ResOK; 694 return ResOK;
695} 695}
696 696
diff --git a/mps/code/arenacl.c b/mps/code/arenacl.c
index 5d59abb9827..077c972dc9e 100644
--- a/mps/code/arenacl.c
+++ b/mps/code/arenacl.c
@@ -236,7 +236,7 @@ static Res ClientArenaInit(Arena *arenaReturn, ArenaClass class,
236 /* arena if the size is not a power of 2. */ 236 /* arena if the size is not a power of 2. */
237 arena->zoneShift = SizeFloorLog2(size >> MPS_WORD_SHIFT); 237 arena->zoneShift = SizeFloorLog2(size >> MPS_WORD_SHIFT);
238 238
239 EVENT_PWA(ArenaCreateCL, arena, size, base); 239 EVENT3(ArenaCreateCL, arena, size, base);
240 AVERT(ClientArena, clientArena); 240 AVERT(ClientArena, clientArena);
241 *arenaReturn = arena; 241 *arenaReturn = arena;
242 return ResOK; 242 return ResOK;
diff --git a/mps/code/arenavm.c b/mps/code/arenavm.c
index 81caf8bead5..b0d69b6b246 100644
--- a/mps/code/arenavm.c
+++ b/mps/code/arenavm.c
@@ -529,9 +529,9 @@ static Res VMArenaInit(Arena *arenaReturn, ArenaClass class, va_list args)
529 529
530 AVERT(VMArena, vmArena); 530 AVERT(VMArena, vmArena);
531 if ((ArenaClass)mps_arena_class_vm() == class) 531 if ((ArenaClass)mps_arena_class_vm() == class)
532 EVENT_PWW(ArenaCreateVM, arena, userSize, chunkSize); 532 EVENT3(ArenaCreateVM, arena, userSize, chunkSize);
533 else 533 else
534 EVENT_PWW(ArenaCreateVMNZ, arena, userSize, chunkSize); 534 EVENT3(ArenaCreateVMNZ, arena, userSize, chunkSize);
535 *arenaReturn = arena; 535 *arenaReturn = arena;
536 return ResOK; 536 return ResOK;
537 537
@@ -573,7 +573,7 @@ static void VMArenaFinish(Arena arena)
573 573
574 VMUnmap(arenaVM, VMBase(arenaVM), VMLimit(arenaVM)); 574 VMUnmap(arenaVM, VMBase(arenaVM), VMLimit(arenaVM));
575 VMDestroy(arenaVM); 575 VMDestroy(arenaVM);
576 EVENT_P(ArenaDestroy, vmArena); 576 EVENT1(ArenaDestroy, vmArena);
577} 577}
578 578
579 579
diff --git a/mps/code/buffer.c b/mps/code/buffer.c
index d8346c49e9c..95397240083 100644
--- a/mps/code/buffer.c
+++ b/mps/code/buffer.c
@@ -361,7 +361,7 @@ void BufferDetach(Buffer buffer, Pool pool)
361 ~(BufferModeATTACHED|BufferModeFLIPPED|BufferModeTRANSITION); 361 ~(BufferModeATTACHED|BufferModeFLIPPED|BufferModeTRANSITION);
362 BufferFrameSetState(buffer, BufferFrameDISABLED); 362 BufferFrameSetState(buffer, BufferFrameDISABLED);
363 363
364 EVENT_PW(BufferEmpty, buffer, spare); 364 EVENT2(BufferEmpty, buffer, spare);
365 } 365 }
366} 366}
367 367
@@ -416,7 +416,7 @@ void BufferFinish(Buffer buffer)
416 /* Finish off the generic buffer fields. */ 416 /* Finish off the generic buffer fields. */
417 RingFinish(&buffer->poolRing); 417 RingFinish(&buffer->poolRing);
418 418
419 EVENT_P(BufferFinish, buffer); 419 EVENT1(BufferFinish, buffer);
420} 420}
421 421
422 422
@@ -682,7 +682,7 @@ void BufferAttach(Buffer buffer, Addr base, Addr limit,
682 buffer->class->attach(buffer, base, limit, init, size); 682 buffer->class->attach(buffer, base, limit, init, size);
683 683
684 AVERT(Buffer, buffer); 684 AVERT(Buffer, buffer);
685 EVENT_PWAW(BufferFill, buffer, size, base, filled); 685 EVENT4(BufferFill, buffer, size, base, filled);
686} 686}
687 687
688 688
@@ -727,7 +727,7 @@ Res BufferFill(Addr *pReturn, Buffer buffer, Size size,
727 next <= buffer->poolLimit) { 727 next <= buffer->poolLimit) {
728 buffer->apStruct.alloc = next; 728 buffer->apStruct.alloc = next;
729 if (buffer->mode & BufferModeLOGGED) { 729 if (buffer->mode & BufferModeLOGGED) {
730 EVENT_PAW(BufferReserve, buffer, buffer->apStruct.init, size); 730 EVENT3(BufferReserve, buffer, buffer->apStruct.init, size);
731 } 731 }
732 *pReturn = buffer->apStruct.init; 732 *pReturn = buffer->apStruct.init;
733 return ResOK; 733 return ResOK;
@@ -752,7 +752,7 @@ Res BufferFill(Addr *pReturn, Buffer buffer, Size size,
752 BufferAttach(buffer, base, limit, base, size); 752 BufferAttach(buffer, base, limit, base, size);
753 753
754 if (buffer->mode & BufferModeLOGGED) { 754 if (buffer->mode & BufferModeLOGGED) {
755 EVENT_PAW(BufferReserve, buffer, buffer->apStruct.init, size); 755 EVENT3(BufferReserve, buffer, buffer->apStruct.init, size);
756 } 756 }
757 757
758 *pReturn = base; 758 *pReturn = base;
@@ -869,7 +869,7 @@ Bool BufferTrip(Buffer buffer, Addr p, Size size)
869 } else { 869 } else {
870 clientClass = (Addr)0; 870 clientClass = (Addr)0;
871 } 871 }
872 EVENT_PAWA(BufferCommit, buffer, p, size, clientClass); 872 EVENT4(BufferCommit, buffer, p, size, clientClass);
873 /* Of course, it's not _really_ unused unless you're not */ 873 /* Of course, it's not _really_ unused unless you're not */
874 /* using telemetry. This is a HACK @@@@. It should be */ 874 /* using telemetry. This is a HACK @@@@. It should be */
875 /* removed when telemetry is fixed to use its arguments. */ 875 /* removed when telemetry is fixed to use its arguments. */
@@ -1089,7 +1089,7 @@ static Res bufferTrivInit (Buffer buffer, Pool pool, va_list args)
1089 AVERT(Buffer, buffer); 1089 AVERT(Buffer, buffer);
1090 AVERT(Pool, pool); 1090 AVERT(Pool, pool);
1091 UNUSED(args); 1091 UNUSED(args);
1092 EVENT_PPU(BufferInit, buffer, pool, buffer->isMutator); 1092 EVENT3(BufferInit, buffer, pool, buffer->isMutator);
1093 return ResOK; 1093 return ResOK;
1094} 1094}
1095 1095
@@ -1299,7 +1299,7 @@ static Res segBufInit (Buffer buffer, Pool pool, va_list args)
1299 segbuf->rankSet = RankSetEMPTY; 1299 segbuf->rankSet = RankSetEMPTY;
1300 1300
1301 AVERT(SegBuf, segbuf); 1301 AVERT(SegBuf, segbuf);
1302 EVENT_PPU(BufferInitSeg, buffer, pool, buffer->isMutator); 1302 EVENT3(BufferInitSeg, buffer, pool, buffer->isMutator);
1303 return ResOK; 1303 return ResOK;
1304} 1304}
1305 1305
@@ -1513,7 +1513,7 @@ static Res rankBufInit (Buffer buffer, Pool pool, va_list args)
1513 BufferSetRankSet(buffer, RankSetSingle(rank)); 1513 BufferSetRankSet(buffer, RankSetSingle(rank));
1514 1514
1515 /* There's nothing to check that the superclass doesn't, so no AVERT. */ 1515 /* There's nothing to check that the superclass doesn't, so no AVERT. */
1516 EVENT_PPUU(BufferInitRank, buffer, pool, buffer->isMutator, rank); 1516 EVENT4(BufferInitRank, buffer, pool, buffer->isMutator, rank);
1517 return ResOK; 1517 return ResOK;
1518} 1518}
1519 1519
diff --git a/mps/code/cbs.c b/mps/code/cbs.c
index e3f5204e03e..c01ec28013d 100644
--- a/mps/code/cbs.c
+++ b/mps/code/cbs.c
@@ -313,7 +313,7 @@ Res CBSInit(Arena arena, CBS cbs, void *owner,
313 cbs->sig = CBSSig; 313 cbs->sig = CBSSig;
314 314
315 AVERT(CBS, cbs); 315 AVERT(CBS, cbs);
316 EVENT_PP(CBSInit, cbs, owner); 316 EVENT2(CBSInit, cbs, owner);
317 UNUSED(owner); /* @@@@ hack: unused in non-event varieties */ 317 UNUSED(owner); /* @@@@ hack: unused in non-event varieties */
318 CBSLeave(cbs); 318 CBSLeave(cbs);
319 return ResOK; 319 return ResOK;
diff --git a/mps/code/dumper.c b/mps/code/dumper.c
index b34fd02fb99..08edabe5726 100644
--- a/mps/code/dumper.c
+++ b/mps/code/dumper.c
@@ -136,7 +136,7 @@ int main(int argc, char *argv[]) {
136 } 136 }
137 137
138 switch(header[0]) { 138 switch(header[0]) {
139#define EVENT_CASE(X, type, code, always, kind, format) \ 139#define EVENT_CASE(X, type, code, always, kind, count, format) \
140 case Event ## type: \ 140 case Event ## type: \
141 readEvent(#type, #format, header[0], header[1], header[2]); \ 141 readEvent(#type, #format, header[0], header[1], header[2]); \
142 break; 142 break;
diff --git a/mps/code/event.c b/mps/code/event.c
index 19e387abcfc..d4b32f83a2c 100644
--- a/mps/code/event.c
+++ b/mps/code/event.c
@@ -37,7 +37,6 @@ static char eventBuffer[EventBufferSIZE];
37static Count eventUserCount; 37static Count eventUserCount;
38static Serial EventInternSerial; 38static Serial EventInternSerial;
39 39
40EventUnion EventMould; /* Used by macros in <code/event.h> */
41char *EventNext, *EventLimit; /* Used by macros in <code/event.h> */ 40char *EventNext, *EventLimit; /* Used by macros in <code/event.h> */
42Word EventKindControl; /* Bit set used to control output. */ 41Word EventKindControl; /* Bit set used to control output. */
43 42
@@ -145,7 +144,7 @@ Word EventInternString(const char *label)
145 144
146 id = (Word)EventInternSerial; 145 id = (Word)EventInternSerial;
147 ++EventInternSerial; 146 ++EventInternSerial;
148 EVENT_WS(Intern, id, StringLength(label), label); 147 EVENT2S(Intern, id, StringLength(label), label);
149 return id; 148 return id;
150} 149}
151 150
@@ -160,7 +159,7 @@ Word EventInternGenString(size_t len, const char *label)
160 159
161 id = (Word)EventInternSerial; 160 id = (Word)EventInternSerial;
162 ++EventInternSerial; 161 ++EventInternSerial;
163 EVENT_WS(Intern, id, len, label); 162 EVENT2S(Intern, id, len, label);
164 return id; 163 return id;
165} 164}
166 165
@@ -171,7 +170,7 @@ void EventLabelAddr(Addr addr, Word id)
171{ 170{
172 AVER((Serial)id < EventInternSerial); 171 AVER((Serial)id < EventInternSerial);
173 172
174 EVENT_AW(Label, addr, id); 173 EVENT2(Label, addr, id);
175} 174}
176 175
177 176
diff --git a/mps/code/event.h b/mps/code/event.h
index d2740e9d8b4..139460955fa 100644
--- a/mps/code/event.h
+++ b/mps/code/event.h
@@ -58,13 +58,12 @@ extern Res EventFlush(void);
58 */ 58 */
59 59
60/* Note that enum values can be up to fifteen bits long portably. */ 60/* Note that enum values can be up to fifteen bits long portably. */
61#define EVENT_ENUM(X, type, code, always, kind, format) \ 61#define EVENT_ENUM(X, type, code, always, kind, count, format) \
62 enum { \ 62 enum { \
63 Event##type##High = ((code >> 8) & 0xFF), \ 63 Event##type##High = ((code >> 8) & 0xFF), \
64 Event##type##Low = (code & 0xFF), \ 64 Event##type##Low = (code & 0xFF), \
65 Event##type##Always = always, \ 65 Event##type##Always = always, \
66 Event##type##Kind = EventKind##kind, \ 66 Event##type##Kind = EventKind##kind \
67 Event##type##Format = EventFormat##format \
68 }; 67 };
69 68
70EVENT_LIST(EVENT_ENUM, X) 69EVENT_LIST(EVENT_ENUM, X)
@@ -72,27 +71,24 @@ EVENT_LIST(EVENT_ENUM, X)
72 71
73/* Event writing support */ 72/* Event writing support */
74 73
75extern EventUnion EventMould; 74/* extern EventUnion EventMould; */
76extern char *EventNext, *EventLimit; 75extern char *EventNext, *EventLimit;
77extern Word EventKindControl; 76extern Word EventKindControl;
78 77
79#define EVENT_BEGIN(type) \ 78#define EVENT_BEGIN(name, size) \
80 BEGIN \ 79 BEGIN \
81 if(BS_IS_MEMBER(EventKindControl, ((Index)Event##type##Kind))) { \ 80 if(BS_IS_MEMBER(EventKindControl, ((Index)Event##name##Kind))) { \
82 size_t _length; 81 Event##name##Struct *_event; \
83 82 size_t _size = size_tAlignUp(size, MPS_PF_ALIGN); \
84#define EVENT_END(type, format, length) \ 83 if (_size > (size_t)(EventLimit - EventNext)) \
85 AVER(EventFormat##format == Event##type##Format); \ 84 EventFlush(); \
86 /* @@@@ As an interim measure, send the old event codes */ \ 85 AVER(_size <= (size_t)(EventLimit - EventNext)); \
87 EventMould.any.code = Event##type; \ 86 _event = (void *)EventNext; \
88 EventMould.any.clock = mps_clock(); \ 87 _event->code = Event##name; \
89 AVER(EventNext <= EventLimit); \ 88 _event->clock = mps_clock();
90 _length = size_tAlignUp(length, sizeof(Word)); \ 89
91 if(_length > (size_t)(EventLimit - EventNext)) \ 90#define EVENT_END(name, size) \
92 EventFlush(); /* @@@@ should pass length */ \ 91 EventNext += _size; \
93 AVER(_length <= (size_t)(EventLimit - EventNext)); \
94 mps_lib_memcpy(EventNext, &EventMould, _length); \
95 EventNext += _length; \
96 } \ 92 } \
97 END 93 END
98 94
diff --git a/mps/code/eventcnv.c b/mps/code/eventcnv.c
index ca51cf9022b..0f71680becd 100644
--- a/mps/code/eventcnv.c
+++ b/mps/code/eventcnv.c
@@ -459,79 +459,79 @@ static void readLog(EventProc proc)
459 case EventLabel: { 459 case EventLabel: {
460 switch (style) { 460 switch (style) {
461 case '\0': case 'C': { 461 case '\0': case 'C': {
462 EventString sym = LabelText(proc, event->aw.w1); 462 EventString sym = LabelText(proc, event->Label.f1);
463 printf(style == '\0' ? 463 printf(style == '\0' ?
464 " %08"PRIXLONGEST" " : 464 " %08"PRIXLONGEST" " :
465 ", %"PRIuLONGEST", ", 465 ", %"PRIuLONGEST", ",
466 (ulongest_t)event->aw.a0); 466 (ulongest_t)event->Label.f0);
467 if (sym != NULL) { 467 if (sym != NULL) {
468 printStr(sym, (style == 'C')); 468 printStr(sym, (style == 'C'));
469 } else { 469 } else {
470 printf(style == '\0' ? 470 printf(style == '\0' ?
471 "sym %05"PRIXLONGEST : 471 "sym %05"PRIXLONGEST :
472 "sym %"PRIXLONGEST"\"", 472 "sym %"PRIXLONGEST"\"",
473 (ulongest_t)event->aw.w1); 473 (ulongest_t)event->Label.f1);
474 } 474 }
475 } break; 475 } break;
476 case 'L': { 476 case 'L': {
477 printf(" %"PRIXLONGEST" %"PRIXLONGEST, 477 printf(" %"PRIXLONGEST" %"PRIXLONGEST,
478 (ulongest_t)event->aw.a0, 478 (ulongest_t)event->Label.f0,
479 (ulongest_t)event->aw.w1); 479 (ulongest_t)event->Label.f1);
480 } break; 480 } break;
481 } 481 }
482 } break; 482 } break;
483 case EventMeterValues: { 483 case EventMeterValues: {
484 switch (style) { 484 switch (style) {
485 case '\0': { 485 case '\0': {
486 if (event->pddwww.w3 == 0) { 486 if (event->MeterValues.f3 == 0) {
487 printf(" %08"PRIXLONGEST" 0 N/A N/A N/A N/A", 487 printf(" %08"PRIXLONGEST" 0 N/A N/A N/A N/A",
488 (ulongest_t)event->pddwww.p0); 488 (ulongest_t)event->MeterValues.f0);
489 } else { 489 } else {
490 double mean = event->pddwww.d1 / (double)event->pddwww.w3; 490 double mean = event->MeterValues.f1 / (double)event->MeterValues.f3;
491 /* .stddev: stddev = sqrt(meanSquared - mean^2), but see */ 491 /* .stddev: stddev = sqrt(meanSquared - mean^2), but see */
492 /* <code/meter.c#limitation.variance>. */ 492 /* <code/meter.c#limitation.variance>. */
493 double stddev = sqrt(fabs(event->pddwww.d2 493 double stddev = sqrt(fabs(event->MeterValues.f2
494 - (mean * mean))); 494 - (mean * mean)));
495 printf(" %08"PRIXLONGEST" %8u %8u %8u %#8.3g %#8.3g", 495 printf(" %08"PRIXLONGEST" %8u %8u %8u %#8.3g %#8.3g",
496 (ulongest_t)event->pddwww.p0, (uint)event->pddwww.w3, 496 (ulongest_t)event->MeterValues.f0, (uint)event->MeterValues.f3,
497 (uint)event->pddwww.w4, (uint)event->pddwww.w5, 497 (uint)event->MeterValues.f4, (uint)event->MeterValues.f5,
498 mean, stddev); 498 mean, stddev);
499 } 499 }
500 printAddr(proc, (Addr)event->pddwww.p0); 500 printAddr(proc, (Addr)event->MeterValues.f0);
501 } break; 501 } break;
502 case 'C': { 502 case 'C': {
503 putchar(','); 503 putchar(',');
504 printAddr(proc, (Addr)event->pddwww.p0); 504 printAddr(proc, (Addr)event->MeterValues.f0);
505 printf(", %.10G, %.10G, %u, %u, %u", 505 printf(", %.10G, %.10G, %u, %u, %u",
506 event->pddwww.d1, event->pddwww.d2, 506 event->MeterValues.f1, event->MeterValues.f2,
507 (uint)event->pddwww.w3, (uint)event->pddwww.w4, 507 (uint)event->MeterValues.f3, (uint)event->MeterValues.f4,
508 (uint)event->pddwww.w5); 508 (uint)event->MeterValues.f5);
509 } break; 509 } break;
510 case 'L': { 510 case 'L': {
511 printf(" %"PRIXLONGEST" %#.10G %#.10G %X %X %X", 511 printf(" %"PRIXLONGEST" %#.10G %#.10G %X %X %X",
512 (ulongest_t)event->pddwww.p0, 512 (ulongest_t)event->MeterValues.f0,
513 event->pddwww.d1, event->pddwww.d2, 513 event->MeterValues.f1, event->MeterValues.f2,
514 (uint)event->pddwww.w3, (uint)event->pddwww.w4, 514 (uint)event->MeterValues.f3, (uint)event->MeterValues.f4,
515 (uint)event->pddwww.w5); 515 (uint)event->MeterValues.f5);
516 } break; 516 } break;
517 } 517 }
518 } break; 518 } break;
519 case EventPoolInit: { /* pool, arena, class */ 519 case EventPoolInit: { /* pool, arena, class */
520 printf(styleConv, (ulongest_t)event->ppp.p0); 520 printf(styleConv, (ulongest_t)event->PoolInit.f0);
521 printf(styleConv, (ulongest_t)event->ppp.p1); 521 printf(styleConv, (ulongest_t)event->PoolInit.f1);
522 /* class is a Pointer, but we label them, so call printAddr */ 522 /* class is a Pointer, but we label them, so call printAddr */
523 if (style != 'L') { 523 if (style != 'L') {
524 if (style == 'C') putchar(','); 524 if (style == 'C') putchar(',');
525 printAddr(proc, (Addr)event->ppp.p2); 525 printAddr(proc, (Addr)event->PoolInit.f2);
526 } else 526 } else
527 printf(styleConv, (ulongest_t)event->ppp.p2); 527 printf(styleConv, (ulongest_t)event->PoolInit.f2);
528 } break; 528 } break;
529 default: 529 default:
530 for (i = 0; i < argCount; ++i) { 530 for (i = 0; i < argCount; ++i) {
531 switch(code) { 531 switch(code) {
532#define EVENT_CASE(X, name, code, always, kind, format) \ 532#define EVENT_CASE(X, name, code, always, kind, count, format) \
533 case code: { \ 533 case code: { \
534 printArg(proc, EVENT_##format##_FIELD_PTR(event, i), \ 534 printArg(proc, EVENT##count##_FIELD_PTR(name, event, i), \
535 eventFormat[i], styleConv); \ 535 eventFormat[i], styleConv); \
536 } break; 536 } break;
537 EVENT_LIST(EVENT_CASE, X) 537 EVENT_LIST(EVENT_CASE, X)
diff --git a/mps/code/eventdef.h b/mps/code/eventdef.h
index a9903e5dbea..266f6550dad 100644
--- a/mps/code/eventdef.h
+++ b/mps/code/eventdef.h
@@ -48,7 +48,8 @@
48 * varieties, not currently used; 48 * varieties, not currently used;
49 * - Kind: Category into which this event falls, without the 49 * - Kind: Category into which this event falls, without the
50 * leading "EventKind"; 50 * leading "EventKind";
51 * - Format: Character sequence indicating the format of the event 51 * - Parameter Count
52 * - Format: Tuple indicating the format of the event
52 * parameters, similar to writef (Pointer, Addr, Word, Unsigned, 53 * parameters, similar to writef (Pointer, Addr, Word, Unsigned,
53 * String, Double). 54 * String, Double).
54 */ 55 */
@@ -56,103 +57,103 @@
56/* FIXME: Work out why not-in-use events were not in use and restore or delete them. */ 57/* FIXME: Work out why not-in-use events were not in use and restore or delete them. */
57 58
58#define EVENT_LIST(EVENT, X) \ 59#define EVENT_LIST(EVENT, X) \
59 EVENT(X, AMCGenCreate , 0x0001, TRUE, Pool, PP) \ 60 EVENT(X, AMCGenCreate , 0x0001, TRUE, Pool, 2, (P,P)) \
60 EVENT(X, AMCGenDestroy , 0x0002, TRUE, Pool, P) \ 61 EVENT(X, AMCGenDestroy , 0x0002, TRUE, Pool, 1, (P)) \
61 EVENT(X, AMCInit , 0x0003, TRUE, Pool, PP) \ 62 EVENT(X, AMCInit , 0x0003, TRUE, Pool, 2, (P,P)) \
62 EVENT(X, AMCFinish , 0x0004, TRUE, Pool, P) \ 63 EVENT(X, AMCFinish , 0x0004, TRUE, Pool, 1, (P)) \
63 EVENT(X, ArenaCreateVM , 0x0005, TRUE, Arena, PWW) \ 64 EVENT(X, ArenaCreateVM , 0x0005, TRUE, Arena, 3, (P,W,W)) \
64 EVENT(X, ArenaCreateVMNZ , 0x0006, TRUE, Arena, PWW) \ 65 EVENT(X, ArenaCreateVMNZ , 0x0006, TRUE, Arena, 3, (P,W,W)) \
65 EVENT(X, ArenaWriteFaults , 0x0007, TRUE, Trace, PW) \ 66 EVENT(X, ArenaWriteFaults , 0x0007, TRUE, Trace, 2, (P,W)) \
66 EVENT(X, MeterInit , 0x0008, TRUE, Pool, PP) \ 67 EVENT(X, MeterInit , 0x0008, TRUE, Pool, 2, (P,P)) \
67 EVENT(X, MeterValues , 0x0009, TRUE, Pool, PDDWWW) \ 68 EVENT(X, MeterValues , 0x0009, TRUE, Pool, 6, (P,D,D,W,W,W)) \
68 EVENT(X, AMCScanBegin , 0x000a, TRUE, Seg, PPP) \ 69 EVENT(X, AMCScanBegin , 0x000a, TRUE, Seg, 3, (P,P,P)) \
69 EVENT(X, AMCScanEnd , 0x000b, TRUE, Seg, PPP) \ 70 EVENT(X, AMCScanEnd , 0x000b, TRUE, Seg, 3, (P,P,P)) \
70 EVENT(X, AMCFix , 0x000c, TRUE, Ref, 0) \ 71 EVENT(X, AMCFix , 0x000c, TRUE, Ref, 0, ()) \
71 EVENT(X, AMCFixInPlace , 0x000d, TRUE, Ref, 0) \ 72 EVENT(X, AMCFixInPlace , 0x000d, TRUE, Ref, 0, ()) \
72 EVENT(X, AMCFixForward , 0x000e, TRUE, Ref, A) \ 73 EVENT(X, AMCFixForward , 0x000e, TRUE, Ref, 1, (A)) \
73 EVENT(X, AMCReclaim , 0x000f, TRUE, Seg, PPP) \ 74 EVENT(X, AMCReclaim , 0x000f, TRUE, Seg, 3, (P,P,P)) \
74 /* EVENT(X, AMCTraceEnd , 0x0010, TRUE, Trace, PPP) */ \ 75 /* EVENT(X, AMCTraceEnd , 0x0010, TRUE, Trace, 3, (P,P,P)) */ \
75 EVENT(X, ArenaCreateCL , 0x0011, TRUE, Arena, PWA) \ 76 EVENT(X, ArenaCreateCL , 0x0011, TRUE, Arena, 3, (P,W,A)) \
76 EVENT(X, ArenaDestroy , 0x0012, TRUE, Arena, P) \ 77 EVENT(X, ArenaDestroy , 0x0012, TRUE, Arena, 1, (P)) \
77 EVENT(X, SegAlloc , 0x0013, TRUE, Seg, PPAWP) \ 78 EVENT(X, SegAlloc , 0x0013, TRUE, Seg, 5, (P,P,A,W,P)) \
78 EVENT(X, SegFree , 0x0014, TRUE, Seg, PP) \ 79 EVENT(X, SegFree , 0x0014, TRUE, Seg, 2, (P,P)) \
79 EVENT(X, PoolInit , 0x0015, TRUE, Pool, PPP) \ 80 EVENT(X, PoolInit , 0x0015, TRUE, Pool, 3, (P,P,P)) \
80 EVENT(X, PoolFinish , 0x0016, TRUE, Pool, P) \ 81 EVENT(X, PoolFinish , 0x0016, TRUE, Pool, 1, (P)) \
81 EVENT(X, PoolAlloc , 0x0017, TRUE, Object, PAW) \ 82 EVENT(X, PoolAlloc , 0x0017, TRUE, Object, 3, (P,A,W)) \
82 EVENT(X, PoolFree , 0x0018, TRUE, Object, PAW) \ 83 EVENT(X, PoolFree , 0x0018, TRUE, Object, 3, (P,A,W)) \
83 EVENT(X, CBSInit , 0x0019, TRUE, Pool, PP) \ 84 EVENT(X, CBSInit , 0x0019, TRUE, Pool, 2, (P,P)) \
84 EVENT(X, Intern , 0x001a, TRUE, User, WS) \ 85 EVENT(X, Intern , 0x001a, TRUE, User, 2, (W,S)) \
85 EVENT(X, Label , 0x001b, TRUE, User, AW) \ 86 EVENT(X, Label , 0x001b, TRUE, User, 2, (A,W)) \
86 EVENT(X, TraceStart , 0x001c, TRUE, Trace, PPP) \ 87 EVENT(X, TraceStart , 0x001c, TRUE, Trace, 3, (P,P,P)) \
87 EVENT(X, TraceCreate , 0x001d, TRUE, Trace, PPPU) \ 88 EVENT(X, TraceCreate , 0x001d, TRUE, Trace, 4, (P,P,P,U)) \
88 EVENT(X, TraceDestroy , 0x001e, TRUE, Trace, P) \ 89 EVENT(X, TraceDestroy , 0x001e, TRUE, Trace, 1, (P)) \
89 EVENT(X, SegSetGrey , 0x001f, TRUE, Seg, PPU) \ 90 EVENT(X, SegSetGrey , 0x001f, TRUE, Seg, 3, (P,P,U)) \
90 EVENT(X, TraceFlipBegin , 0x0020, TRUE, Trace, PP) \ 91 EVENT(X, TraceFlipBegin , 0x0020, TRUE, Trace, 2, (P,P)) \
91 EVENT(X, TraceFlipEnd , 0x0021, TRUE, Trace, PP) \ 92 EVENT(X, TraceFlipEnd , 0x0021, TRUE, Trace, 2, (P,P)) \
92 EVENT(X, TraceReclaim , 0x0022, TRUE, Seg, P) \ 93 EVENT(X, TraceReclaim , 0x0022, TRUE, Seg, 1, (P)) \
93 /* EVENT(X, TraceScan , 0x0023, TRUE, Seg, UUPPP) */ \ 94 /* EVENT(X, TraceScan , 0x0023, TRUE, Seg, 5, (U,U,P,P,P)) */ \
94 EVENT(X, TraceAccess , 0x0024, TRUE, Seg, PPU) \ 95 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 */ \ 96 /* TracePoll's kind isn't really Trace, but then it isn't Seg either */ \
96 EVENT(X, TracePoll , 0x0025, TRUE, Trace, PP) \ 97 EVENT(X, TracePoll , 0x0025, TRUE, Trace, 2, (P,P)) \
97 EVENT(X, TraceFix , 0x0026, TRUE, Ref, PPAU) \ 98 EVENT(X, TraceFix , 0x0026, TRUE, Ref, 4, (P,P,A,U)) \
98 EVENT(X, TraceFixSeg , 0x0027, TRUE, Ref, P) \ 99 EVENT(X, TraceFixSeg , 0x0027, TRUE, Ref, 1, (P)) \
99 EVENT(X, TraceFixWhite , 0x0028, TRUE, Ref, 0) \ 100 EVENT(X, TraceFixWhite , 0x0028, TRUE, Ref, 0, ()) \
100 /* TraceScanArea{Tagged} abuses kind, see .kind.abuse */ \ 101 /* TraceScanArea{Tagged} abuses kind, see .kind.abuse */ \
101 EVENT(X, TraceScanArea , 0x0029, TRUE, Seg, PPP) \ 102 EVENT(X, TraceScanArea , 0x0029, TRUE, Seg, 3, (P,P,P)) \
102 EVENT(X, TraceScanAreaTagged , 0x002a, TRUE, Seg, PPP) \ 103 EVENT(X, TraceScanAreaTagged , 0x002a, TRUE, Seg, 3, (P,P,P)) \
103 EVENT(X, VMCreate , 0x002b, TRUE, Arena, PAA) \ 104 EVENT(X, VMCreate , 0x002b, TRUE, Arena, 3, (P,A,A)) \
104 EVENT(X, VMDestroy , 0x002c, TRUE, Arena, P) \ 105 EVENT(X, VMDestroy , 0x002c, TRUE, Arena, 1, (P)) \
105 EVENT(X, VMMap , 0x002d, TRUE, Seg, PAA) \ 106 EVENT(X, VMMap , 0x002d, TRUE, Seg, 3, (P,A,A)) \
106 EVENT(X, VMUnmap , 0x002e, TRUE, Seg, PAA) \ 107 EVENT(X, VMUnmap , 0x002e, TRUE, Seg, 3, (P,A,A)) \
107 EVENT(X, ArenaExtend , 0x002f, TRUE, Arena, PAW) \ 108 EVENT(X, ArenaExtend , 0x002f, TRUE, Arena, 3, (P,A,W)) \
108 EVENT(X, ArenaRetract , 0x0030, TRUE, Arena, PAW) \ 109 EVENT(X, ArenaRetract , 0x0030, TRUE, Arena, 3, (P,A,W)) \
109 EVENT(X, TraceSegGreyen , 0x0031, TRUE, Seg, PPU) \ 110 EVENT(X, TraceSegGreyen , 0x0031, TRUE, Seg, 3, (P,P,U)) \
110 /* RootScanned abuses kind, see .kind.abuse */ \ 111 /* RootScanned abuses kind, see .kind.abuse */ \
111 EVENT(X, RootScan , 0x0032, TRUE, Seg, PWW) \ 112 EVENT(X, RootScan , 0x0032, TRUE, Seg, 3, (P,W,W)) \
112 /* TraceStep abuses kind, see .kind.abuse */ \ 113 /* TraceStep abuses kind, see .kind.abuse */ \
113 EVENT(X, TraceStep , 0x0033, TRUE, Seg, PP) \ 114 EVENT(X, TraceStep , 0x0033, TRUE, Seg, 2, (P,P)) \
114 EVENT(X, BufferReserve , 0x0034, TRUE, Object, PAW) \ 115 EVENT(X, BufferReserve , 0x0034, TRUE, Object, 3, (P,A,W)) \
115 EVENT(X, BufferCommit , 0x0035, TRUE, Object, PAWA) \ 116 EVENT(X, BufferCommit , 0x0035, TRUE, Object, 4, (P,A,W,A)) \
116 /* BufferInit/Finish abuse kind, see .kind.abuse */ \ 117 /* BufferInit/Finish abuse kind, see .kind.abuse */ \
117 EVENT(X, BufferInit , 0x0036, TRUE, Pool, PPU) \ 118 EVENT(X, BufferInit , 0x0036, TRUE, Pool, 3, (P,P,U)) \
118 EVENT(X, BufferFinish , 0x0037, TRUE, Pool, P) \ 119 EVENT(X, BufferFinish , 0x0037, TRUE, Pool, 1, (P)) \
119 /* EVENT(X, MVTFinish , 0x0038, TRUE, Pool, P) */ \ 120 /* EVENT(X, MVTFinish , 0x0038, TRUE, Pool, 1, (P)) */ \
120 EVENT(X, BufferFill , 0x0039, TRUE, Seg, PWAW) \ 121 EVENT(X, BufferFill , 0x0039, TRUE, Seg, 4, (P,W,A,W)) \
121 EVENT(X, BufferEmpty , 0x003A, TRUE, Seg, PW) \ 122 EVENT(X, BufferEmpty , 0x003A, TRUE, Seg, 2, (P,W)) \
122 EVENT(X, SegAllocFail , 0x003B, TRUE, Seg, PWP) \ 123 EVENT(X, SegAllocFail , 0x003B, TRUE, Seg, 3, (P,W,P)) \
123 EVENT(X, TraceScanSeg , 0x003C, TRUE, Seg, UUPP) \ 124 EVENT(X, TraceScanSeg , 0x003C, TRUE, Seg, 4, (U,U,P,P)) \
124 /* TraceScanSingleRef abuses kind, see .kind.abuse */ \ 125 /* TraceScanSingleRef abuses kind, see .kind.abuse */ \
125 EVENT(X, TraceScanSingleRef , 0x003D, TRUE, Seg, UUPA) \ 126 EVENT(X, TraceScanSingleRef , 0x003D, TRUE, Seg, 4, (U,U,P,A)) \
126 EVENT(X, TraceStatCondemn , 0x003E, TRUE, Trace, PWWWWDD) \ 127 EVENT(X, TraceStatCondemn , 0x003E, TRUE, Trace, 7, (P,W,W,W,W,D,D)) \
127 EVENT(X, TraceStatScan , 0x003F, TRUE, Trace, PWWWWWWWWWWWW) \ 128 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, PWWWWWWWWW) \ 129 EVENT(X, TraceStatFix , 0x0040, TRUE, Trace, 10, (P,W,W,W,W,W,W,W,W,W)) \
129 EVENT(X, TraceStatReclaim , 0x0041, TRUE, Trace, PWW) \ 130 EVENT(X, TraceStatReclaim , 0x0041, TRUE, Trace, 3, (P,W,W)) \
130 EVENT(X, PoolInitMVFF , 0x0042, TRUE, Pool, PPWWWUUU) \ 131 EVENT(X, PoolInitMVFF , 0x0042, TRUE, Pool, 8, (P,P,W,W,W,U,U,U)) \
131 EVENT(X, PoolInitMV , 0x0043, TRUE, Pool, PPWWW) \ 132 EVENT(X, PoolInitMV , 0x0043, TRUE, Pool, 5, (P,P,W,W,W)) \
132 EVENT(X, PoolInitMFS , 0x0044, TRUE, Pool, PPWW) \ 133 EVENT(X, PoolInitMFS , 0x0044, TRUE, Pool, 4, (P,P,W,W)) \
133 EVENT(X, PoolInitEPVM , 0x0045, TRUE, Pool, PPPUU) \ 134 EVENT(X, PoolInitEPVM , 0x0045, TRUE, Pool, 5, (P,P,P,U,U)) \
134 EVENT(X, PoolInitEPDL , 0x0046, TRUE, Pool, PPUWWW) \ 135 EVENT(X, PoolInitEPDL , 0x0046, TRUE, Pool, 6, (P,P,U,W,W,W)) \
135 EVENT(X, PoolInitAMS , 0x0047, TRUE, Pool, PPP) \ 136 EVENT(X, PoolInitAMS , 0x0047, TRUE, Pool, 3, (P,P,P)) \
136 EVENT(X, PoolInitAMC , 0x0048, TRUE, Pool, PP) \ 137 EVENT(X, PoolInitAMC , 0x0048, TRUE, Pool, 2, (P,P)) \
137 EVENT(X, PoolInitAMCZ , 0x0049, TRUE, Pool, PP) \ 138 EVENT(X, PoolInitAMCZ , 0x0049, TRUE, Pool, 2, (P,P)) \
138 EVENT(X, PoolInitAWL , 0x004A, TRUE, Pool, PP) \ 139 EVENT(X, PoolInitAWL , 0x004A, TRUE, Pool, 2, (P,P)) \
139 EVENT(X, PoolInitLO , 0x004B, TRUE, Pool, PP) \ 140 EVENT(X, PoolInitLO , 0x004B, TRUE, Pool, 2, (P,P)) \
140 EVENT(X, PoolInitSNC , 0x004C, TRUE, Pool, PP) \ 141 EVENT(X, PoolInitSNC , 0x004C, TRUE, Pool, 2, (P,P)) \
141 EVENT(X, PoolInitMVT , 0x004D, TRUE, Pool, PWWWWW) \ 142 EVENT(X, PoolInitMVT , 0x004D, TRUE, Pool, 6, (P,W,W,W,W,W)) \
142 EVENT(X, BufferInitEPVM , 0x0050, TRUE, Pool, PPU) \ 143 EVENT(X, BufferInitEPVM , 0x0050, TRUE, Pool, 3, (P,P,U)) \
143 EVENT(X, BufferInitSeg , 0x0051, TRUE, Pool, PPU) \ 144 EVENT(X, BufferInitSeg , 0x0051, TRUE, Pool, 3, (P,P,U)) \
144 EVENT(X, BufferInitRank , 0x0052, TRUE, Pool, PPUU) \ 145 EVENT(X, BufferInitRank , 0x0052, TRUE, Pool, 4, (P,P,U,U)) \
145 /* PoolPush/Pop go under Object, because they're user ops. */ \ 146 /* PoolPush/Pop go under Object, because they're user ops. */ \
146 EVENT(X, PoolPush , 0x0060, TRUE, Object, P) \ 147 EVENT(X, PoolPush , 0x0060, TRUE, Object, 1, (P)) \
147 EVENT(X, PoolPop , 0x0061, TRUE, Object, PU) \ 148 EVENT(X, PoolPop , 0x0061, TRUE, Object, 2, (P,U)) \
148 EVENT(X, ReservoirLimitSet , 0x0062, TRUE, Arena, PW) \ 149 EVENT(X, ReservoirLimitSet , 0x0062, TRUE, Arena, 2, (P,W)) \
149 EVENT(X, CommitLimitSet , 0x0063, TRUE, Arena, PWU) \ 150 EVENT(X, CommitLimitSet , 0x0063, TRUE, Arena, 3, (P,W,U)) \
150 EVENT(X, SpareCommitLimitSet , 0x0064, TRUE, Arena, PW) \ 151 EVENT(X, SpareCommitLimitSet , 0x0064, TRUE, Arena, 2, (P,W)) \
151 EVENT(X, ArenaAlloc , 0x0065, TRUE, Arena, PPAWP) \ 152 EVENT(X, ArenaAlloc , 0x0065, TRUE, Arena, 5, (P,P,A,W,P)) \
152 EVENT(X, ArenaFree , 0x0066, TRUE, Arena, PAW) \ 153 EVENT(X, ArenaFree , 0x0066, TRUE, Arena, 3, (P,A,W)) \
153 EVENT(X, ArenaAllocFail , 0x0067, TRUE, Arena, PWP) \ 154 EVENT(X, ArenaAllocFail , 0x0067, TRUE, Arena, 3, (P,W,P)) \
154 EVENT(X, SegMerge , 0x0068, TRUE, Seg, PPP) \ 155 EVENT(X, SegMerge , 0x0068, TRUE, Seg, 3, (P,P,P)) \
155 EVENT(X, SegSplit , 0x0069, TRUE, Seg, PPPA) 156 EVENT(X, SegSplit , 0x0069, TRUE, Seg, 4, (P,P,P,A))
156 157
157/* Remember to update EventNameMAX and EventCodeMAX in eventcom.h! */ 158/* Remember to update EventNameMAX and EventCodeMAX in eventcom.h! */
158 159
diff --git a/mps/code/eventgen.h b/mps/code/eventgen.h
index 354673cde13..a3e95f1a23e 100644
--- a/mps/code/eventgen.h
+++ b/mps/code/eventgen.h
@@ -9,1002 +9,842 @@
9 9
10#ifdef EVENT 10#ifdef EVENT
11 11
12typedef struct { 12#include "eventdef.h"
13 Word code;
14 Word clock;
15} Event0Struct;
16 13
17#define EVENT_0_FIELD_PTR(event, i) \ 14typedef void *EventFP;
18 (NULL) 15typedef Addr EventFA;
16typedef Word EventFW;
17typedef unsigned EventFU;
18typedef EventStringStruct EventFS;
19typedef double EventFD;
19 20
20typedef struct { 21typedef struct EventAnyStruct {
21 Word code; 22 Word code;
22 Word clock; 23 Word clock;
23 Addr a0; 24} EventAnyStruct;
24} EventAStruct;
25
26#define EVENT_A_FIELD_PTR(event, i) \
27 (((i) == 0) ? (void *)&((event)->a.a0) \
28 : NULL)
29 25
30typedef struct { 26#define EVENT_STRUCT(X, name, _code, always, kind, count, format) \
31 Word code; 27 typedef struct Event##name##Struct { \
32 Word clock; 28 Word code; \
33 Addr a0; 29 Word clock; \
34 Word w1; 30 EVENT_STRUCT_FIELDS_##count format \
35} EventAWStruct; 31 } Event##name##Struct;
36 32
37#define EVENT_AW_FIELD_PTR(event, i) \ 33#define EVENT_STRUCT_FIELDS_0()
38 (((i) == 0) ? (void *)&((event)->aw.a0) \
39 : ((i) == 1) ? (void *)&((event)->aw.w1) \
40 : NULL)
41 34
42typedef struct { 35/*
43 Word code; 36 for i in range(0, 20): print "#define EVENT_STRUCT_FIELDS_%d(%s) \\\n%s\n" % (i, ", ".join(["p%s" % j for j in range(0, i)]), " \\\n".join(" EventF##p%d f%d;" % (j, j) for j in range(0,i)))
44 Word clock; 37 */
45 void * p0;
46} EventPStruct;
47
48#define EVENT_P_FIELD_PTR(event, i) \
49 (((i) == 0) ? (void *)&((event)->p.p0) \
50 : NULL)
51
52typedef struct {
53 Word code;
54 Word clock;
55 void * p0;
56 Addr a1;
57 Addr a2;
58} EventPAAStruct;
59
60#define EVENT_PAA_FIELD_PTR(event, i) \
61 (((i) == 0) ? (void *)&((event)->paa.p0) \
62 : ((i) == 1) ? (void *)&((event)->paa.a1) \
63 : ((i) == 2) ? (void *)&((event)->paa.a2) \
64 : NULL)
65
66typedef struct {
67 Word code;
68 Word clock;
69 void * p0;
70 Addr a1;
71 Word w2;
72} EventPAWStruct;
73
74#define EVENT_PAW_FIELD_PTR(event, i) \
75 (((i) == 0) ? (void *)&((event)->paw.p0) \
76 : ((i) == 1) ? (void *)&((event)->paw.a1) \
77 : ((i) == 2) ? (void *)&((event)->paw.w2) \
78 : NULL)
79
80typedef struct {
81 Word code;
82 Word clock;
83 void * p0;
84 Addr a1;
85 Word w2;
86 Addr a3;
87} EventPAWAStruct;
88
89#define EVENT_PAWA_FIELD_PTR(event, i) \
90 (((i) == 0) ? (void *)&((event)->pawa.p0) \
91 : ((i) == 1) ? (void *)&((event)->pawa.a1) \
92 : ((i) == 2) ? (void *)&((event)->pawa.w2) \
93 : ((i) == 3) ? (void *)&((event)->pawa.a3) \
94 : NULL)
95
96typedef struct {
97 Word code;
98 Word clock;
99 void * p0;
100 double d1;
101 double d2;
102 Word w3;
103 Word w4;
104 Word w5;
105} EventPDDWWWStruct;
106
107#define EVENT_PDDWWW_FIELD_PTR(event, i) \
108 (((i) == 0) ? (void *)&((event)->pddwww.p0) \
109 : ((i) == 1) ? (void *)&((event)->pddwww.d1) \
110 : ((i) == 2) ? (void *)&((event)->pddwww.d2) \
111 : ((i) == 3) ? (void *)&((event)->pddwww.w3) \
112 : ((i) == 4) ? (void *)&((event)->pddwww.w4) \
113 : ((i) == 5) ? (void *)&((event)->pddwww.w5) \
114 : NULL)
115
116typedef struct {
117 Word code;
118 Word clock;
119 void * p0;
120 void * p1;
121} EventPPStruct;
122 38
123#define EVENT_PP_FIELD_PTR(event, i) \ 39#define EVENT_STRUCT_FIELDS_1(p0) \
124 (((i) == 0) ? (void *)&((event)->pp.p0) \ 40 EventF##p0 f0;
125 : ((i) == 1) ? (void *)&((event)->pp.p1) \ 41
126 : NULL) 42#define EVENT_STRUCT_FIELDS_2(p0, p1) \
43 EventF##p0 f0; \
44 EventF##p1 f1;
45
46#define EVENT_STRUCT_FIELDS_3(p0, p1, p2) \
47 EventF##p0 f0; \
48 EventF##p1 f1; \
49 EventF##p2 f2;
50
51#define EVENT_STRUCT_FIELDS_4(p0, p1, p2, p3) \
52 EventF##p0 f0; \
53 EventF##p1 f1; \
54 EventF##p2 f2; \
55 EventF##p3 f3;
56
57#define EVENT_STRUCT_FIELDS_5(p0, p1, p2, p3, p4) \
58 EventF##p0 f0; \
59 EventF##p1 f1; \
60 EventF##p2 f2; \
61 EventF##p3 f3; \
62 EventF##p4 f4;
63
64#define EVENT_STRUCT_FIELDS_6(p0, p1, p2, p3, p4, p5) \
65 EventF##p0 f0; \
66 EventF##p1 f1; \
67 EventF##p2 f2; \
68 EventF##p3 f3; \
69 EventF##p4 f4; \
70 EventF##p5 f5;
71
72#define EVENT_STRUCT_FIELDS_7(p0, p1, p2, p3, p4, p5, p6) \
73 EventF##p0 f0; \
74 EventF##p1 f1; \
75 EventF##p2 f2; \
76 EventF##p3 f3; \
77 EventF##p4 f4; \
78 EventF##p5 f5; \
79 EventF##p6 f6;
80
81#define EVENT_STRUCT_FIELDS_8(p0, p1, p2, p3, p4, p5, p6, p7) \
82 EventF##p0 f0; \
83 EventF##p1 f1; \
84 EventF##p2 f2; \
85 EventF##p3 f3; \
86 EventF##p4 f4; \
87 EventF##p5 f5; \
88 EventF##p6 f6; \
89 EventF##p7 f7;
90
91#define EVENT_STRUCT_FIELDS_9(p0, p1, p2, p3, p4, p5, p6, p7, p8) \
92 EventF##p0 f0; \
93 EventF##p1 f1; \
94 EventF##p2 f2; \
95 EventF##p3 f3; \
96 EventF##p4 f4; \
97 EventF##p5 f5; \
98 EventF##p6 f6; \
99 EventF##p7 f7; \
100 EventF##p8 f8;
101
102#define EVENT_STRUCT_FIELDS_10(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) \
103 EventF##p0 f0; \
104 EventF##p1 f1; \
105 EventF##p2 f2; \
106 EventF##p3 f3; \
107 EventF##p4 f4; \
108 EventF##p5 f5; \
109 EventF##p6 f6; \
110 EventF##p7 f7; \
111 EventF##p8 f8; \
112 EventF##p9 f9;
113
114#define EVENT_STRUCT_FIELDS_11(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
115 EventF##p0 f0; \
116 EventF##p1 f1; \
117 EventF##p2 f2; \
118 EventF##p3 f3; \
119 EventF##p4 f4; \
120 EventF##p5 f5; \
121 EventF##p6 f6; \
122 EventF##p7 f7; \
123 EventF##p8 f8; \
124 EventF##p9 f9; \
125 EventF##p10 f10;
126
127#define EVENT_STRUCT_FIELDS_12(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) \
128 EventF##p0 f0; \
129 EventF##p1 f1; \
130 EventF##p2 f2; \
131 EventF##p3 f3; \
132 EventF##p4 f4; \
133 EventF##p5 f5; \
134 EventF##p6 f6; \
135 EventF##p7 f7; \
136 EventF##p8 f8; \
137 EventF##p9 f9; \
138 EventF##p10 f10; \
139 EventF##p11 f11;
140
141#define EVENT_STRUCT_FIELDS_13(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) \
142 EventF##p0 f0; \
143 EventF##p1 f1; \
144 EventF##p2 f2; \
145 EventF##p3 f3; \
146 EventF##p4 f4; \
147 EventF##p5 f5; \
148 EventF##p6 f6; \
149 EventF##p7 f7; \
150 EventF##p8 f8; \
151 EventF##p9 f9; \
152 EventF##p10 f10; \
153 EventF##p11 f11; \
154 EventF##p12 f12;
155
156#define EVENT_STRUCT_FIELDS_14(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) \
157 EventF##p0 f0; \
158 EventF##p1 f1; \
159 EventF##p2 f2; \
160 EventF##p3 f3; \
161 EventF##p4 f4; \
162 EventF##p5 f5; \
163 EventF##p6 f6; \
164 EventF##p7 f7; \
165 EventF##p8 f8; \
166 EventF##p9 f9; \
167 EventF##p10 f10; \
168 EventF##p11 f11; \
169 EventF##p12 f12; \
170 EventF##p13 f13;
171
172#define EVENT_STRUCT_FIELDS_15(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) \
173 EventF##p0 f0; \
174 EventF##p1 f1; \
175 EventF##p2 f2; \
176 EventF##p3 f3; \
177 EventF##p4 f4; \
178 EventF##p5 f5; \
179 EventF##p6 f6; \
180 EventF##p7 f7; \
181 EventF##p8 f8; \
182 EventF##p9 f9; \
183 EventF##p10 f10; \
184 EventF##p11 f11; \
185 EventF##p12 f12; \
186 EventF##p13 f13; \
187 EventF##p14 f14;
188
189#define EVENT_STRUCT_FIELDS_16(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) \
190 EventF##p0 f0; \
191 EventF##p1 f1; \
192 EventF##p2 f2; \
193 EventF##p3 f3; \
194 EventF##p4 f4; \
195 EventF##p5 f5; \
196 EventF##p6 f6; \
197 EventF##p7 f7; \
198 EventF##p8 f8; \
199 EventF##p9 f9; \
200 EventF##p10 f10; \
201 EventF##p11 f11; \
202 EventF##p12 f12; \
203 EventF##p13 f13; \
204 EventF##p14 f14; \
205 EventF##p15 f15;
206
207#define EVENT_STRUCT_FIELDS_17(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) \
208 EventF##p0 f0; \
209 EventF##p1 f1; \
210 EventF##p2 f2; \
211 EventF##p3 f3; \
212 EventF##p4 f4; \
213 EventF##p5 f5; \
214 EventF##p6 f6; \
215 EventF##p7 f7; \
216 EventF##p8 f8; \
217 EventF##p9 f9; \
218 EventF##p10 f10; \
219 EventF##p11 f11; \
220 EventF##p12 f12; \
221 EventF##p13 f13; \
222 EventF##p14 f14; \
223 EventF##p15 f15; \
224 EventF##p16 f16;
225
226#define EVENT_STRUCT_FIELDS_18(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) \
227 EventF##p0 f0; \
228 EventF##p1 f1; \
229 EventF##p2 f2; \
230 EventF##p3 f3; \
231 EventF##p4 f4; \
232 EventF##p5 f5; \
233 EventF##p6 f6; \
234 EventF##p7 f7; \
235 EventF##p8 f8; \
236 EventF##p9 f9; \
237 EventF##p10 f10; \
238 EventF##p11 f11; \
239 EventF##p12 f12; \
240 EventF##p13 f13; \
241 EventF##p14 f14; \
242 EventF##p15 f15; \
243 EventF##p16 f16; \
244 EventF##p17 f17;
245
246#define EVENT_STRUCT_FIELDS_19(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) \
247 EventF##p0 f0; \
248 EventF##p1 f1; \
249 EventF##p2 f2; \
250 EventF##p3 f3; \
251 EventF##p4 f4; \
252 EventF##p5 f5; \
253 EventF##p6 f6; \
254 EventF##p7 f7; \
255 EventF##p8 f8; \
256 EventF##p9 f9; \
257 EventF##p10 f10; \
258 EventF##p11 f11; \
259 EventF##p12 f12; \
260 EventF##p13 f13; \
261 EventF##p14 f14; \
262 EventF##p15 f15; \
263 EventF##p16 f16; \
264 EventF##p17 f17; \
265 EventF##p18 f18;
266
267EVENT_LIST(EVENT_STRUCT, X)
268
269
270#define EVENT_UNION_MEMBER(X, name, code, always, kind, count, format) \
271 Event##name##Struct name;
272
273typedef union EventUnion {
274 EventAnyStruct any;
275 EVENT_LIST(EVENT_UNION_MEMBER, X)
276} EventUnion, *Event;
277
278
279#define EVENT2S(name, p0, length, string) \
280 BEGIN \
281 size_t _string_len = (length); \
282 size_t size; \
283 AVER(_string_len < EventStringLengthMAX); \
284 size = offsetof(Event##name##Struct, f1.str) + _string_len; \
285 EVENT_BEGIN(name, size) \
286 _event->f0 = (p0); \
287 _event->f1.len = _string_len; \
288 mps_lib_memcpy(_event->f1.str, (string), _string_len); \
289 EVENT_END(name, size); \
290 END
291
292#define EVENT0(name) \
293 EVENT_BEGIN(name, 0) \
294 EVENT_END(name, 0)
295
296/*
297 for i in range(1,20): print "#define EVENT%d(name, %s) \\\n EVENT_BEGIN(name, sizeof(Event##name##Struct)) \\\n%s \\\n EVENT_END(name, sizeof(Event##name##Struct))\n" % (i, ", ".join(["p%d" % j for j in range(0, i)]), " \\\n".join([" _event->f%d = (p%d);" % (j, j) for j in range(0, i)]))
298 */
127 299
128typedef struct { 300#define EVENT1(name, p0) \
129 Word code; 301 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
130 Word clock; 302 _event->f0 = (p0); \
131 void * p0; 303 EVENT_END(name, sizeof(Event##name##Struct))
132 void * p1; 304
133 Addr a2; 305#define EVENT2(name, p0, p1) \
134 unsigned u3; 306 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
135} EventPPAUStruct; 307 _event->f0 = (p0); \
136 308 _event->f1 = (p1); \
137#define EVENT_PPAU_FIELD_PTR(event, i) \ 309 EVENT_END(name, sizeof(Event##name##Struct))
138 (((i) == 0) ? (void *)&((event)->ppau.p0) \ 310
139 : ((i) == 1) ? (void *)&((event)->ppau.p1) \ 311#define EVENT3(name, p0, p1, p2) \
140 : ((i) == 2) ? (void *)&((event)->ppau.a2) \ 312 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
141 : ((i) == 3) ? (void *)&((event)->ppau.u3) \ 313 _event->f0 = (p0); \
142 : NULL) 314 _event->f1 = (p1); \
143 315 _event->f2 = (p2); \
144typedef struct { 316 EVENT_END(name, sizeof(Event##name##Struct))
145 Word code; 317
146 Word clock; 318#define EVENT4(name, p0, p1, p2, p3) \
147 void * p0; 319 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
148 void * p1; 320 _event->f0 = (p0); \
149 Addr a2; 321 _event->f1 = (p1); \
150 Word w3; 322 _event->f2 = (p2); \
151 void * p4; 323 _event->f3 = (p3); \
152} EventPPAWPStruct; 324 EVENT_END(name, sizeof(Event##name##Struct))
153 325
154#define EVENT_PPAWP_FIELD_PTR(event, i) \ 326#define EVENT5(name, p0, p1, p2, p3, p4) \
155 (((i) == 0) ? (void *)&((event)->ppawp.p0) \ 327 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
156 : ((i) == 1) ? (void *)&((event)->ppawp.p1) \ 328 _event->f0 = (p0); \
157 : ((i) == 2) ? (void *)&((event)->ppawp.a2) \ 329 _event->f1 = (p1); \
158 : ((i) == 3) ? (void *)&((event)->ppawp.w3) \ 330 _event->f2 = (p2); \
159 : ((i) == 4) ? (void *)&((event)->ppawp.p4) \ 331 _event->f3 = (p3); \
160 : NULL) 332 _event->f4 = (p4); \
161 333 EVENT_END(name, sizeof(Event##name##Struct))
162typedef struct { 334
163 Word code; 335#define EVENT6(name, p0, p1, p2, p3, p4, p5) \
164 Word clock; 336 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
165 void * p0; 337 _event->f0 = (p0); \
166 void * p1; 338 _event->f1 = (p1); \
167 void * p2; 339 _event->f2 = (p2); \
168} EventPPPStruct; 340 _event->f3 = (p3); \
169 341 _event->f4 = (p4); \
170#define EVENT_PPP_FIELD_PTR(event, i) \ 342 _event->f5 = (p5); \
171 (((i) == 0) ? (void *)&((event)->ppp.p0) \ 343 EVENT_END(name, sizeof(Event##name##Struct))
172 : ((i) == 1) ? (void *)&((event)->ppp.p1) \ 344
173 : ((i) == 2) ? (void *)&((event)->ppp.p2) \ 345#define EVENT7(name, p0, p1, p2, p3, p4, p5, p6) \
174 : NULL) 346 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
175 347 _event->f0 = (p0); \
176typedef struct { 348 _event->f1 = (p1); \
177 Word code; 349 _event->f2 = (p2); \
178 Word clock; 350 _event->f3 = (p3); \
179 void * p0; 351 _event->f4 = (p4); \
180 void * p1; 352 _event->f5 = (p5); \
181 void * p2; 353 _event->f6 = (p6); \
182 Addr a3; 354 EVENT_END(name, sizeof(Event##name##Struct))
183} EventPPPAStruct; 355
184 356#define EVENT8(name, p0, p1, p2, p3, p4, p5, p6, p7) \
185#define EVENT_PPPA_FIELD_PTR(event, i) \ 357 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
186 (((i) == 0) ? (void *)&((event)->pppa.p0) \ 358 _event->f0 = (p0); \
187 : ((i) == 1) ? (void *)&((event)->pppa.p1) \ 359 _event->f1 = (p1); \
188 : ((i) == 2) ? (void *)&((event)->pppa.p2) \ 360 _event->f2 = (p2); \
189 : ((i) == 3) ? (void *)&((event)->pppa.a3) \ 361 _event->f3 = (p3); \
190 : NULL) 362 _event->f4 = (p4); \
191 363 _event->f5 = (p5); \
192typedef struct { 364 _event->f6 = (p6); \
193 Word code; 365 _event->f7 = (p7); \
194 Word clock; 366 EVENT_END(name, sizeof(Event##name##Struct))
195 void * p0; 367
196 void * p1; 368#define EVENT9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
197 void * p2; 369 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
198 unsigned u3; 370 _event->f0 = (p0); \
199} EventPPPUStruct; 371 _event->f1 = (p1); \
200 372 _event->f2 = (p2); \
201#define EVENT_PPPU_FIELD_PTR(event, i) \ 373 _event->f3 = (p3); \
202 (((i) == 0) ? (void *)&((event)->pppu.p0) \ 374 _event->f4 = (p4); \
203 : ((i) == 1) ? (void *)&((event)->pppu.p1) \ 375 _event->f5 = (p5); \
204 : ((i) == 2) ? (void *)&((event)->pppu.p2) \ 376 _event->f6 = (p6); \
205 : ((i) == 3) ? (void *)&((event)->pppu.u3) \ 377 _event->f7 = (p7); \
206 : NULL) 378 _event->f8 = (p8); \
207 379 EVENT_END(name, sizeof(Event##name##Struct))
208typedef struct { 380
209 Word code; 381#define EVENT10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) \
210 Word clock; 382 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
211 void * p0; 383 _event->f0 = (p0); \
212 void * p1; 384 _event->f1 = (p1); \
213 void * p2; 385 _event->f2 = (p2); \
214 unsigned u3; 386 _event->f3 = (p3); \
215 unsigned u4; 387 _event->f4 = (p4); \
216} EventPPPUUStruct; 388 _event->f5 = (p5); \
217 389 _event->f6 = (p6); \
218#define EVENT_PPPUU_FIELD_PTR(event, i) \ 390 _event->f7 = (p7); \
219 (((i) == 0) ? (void *)&((event)->pppuu.p0) \ 391 _event->f8 = (p8); \
220 : ((i) == 1) ? (void *)&((event)->pppuu.p1) \ 392 _event->f9 = (p9); \
221 : ((i) == 2) ? (void *)&((event)->pppuu.p2) \ 393 EVENT_END(name, sizeof(Event##name##Struct))
222 : ((i) == 3) ? (void *)&((event)->pppuu.u3) \ 394
223 : ((i) == 4) ? (void *)&((event)->pppuu.u4) \ 395#define EVENT11(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
224 : NULL) 396 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
225 397 _event->f0 = (p0); \
226typedef struct { 398 _event->f1 = (p1); \
227 Word code; 399 _event->f2 = (p2); \
228 Word clock; 400 _event->f3 = (p3); \
229 void * p0; 401 _event->f4 = (p4); \
230 void * p1; 402 _event->f5 = (p5); \
231 unsigned u2; 403 _event->f6 = (p6); \
232} EventPPUStruct; 404 _event->f7 = (p7); \
233 405 _event->f8 = (p8); \
234#define EVENT_PPU_FIELD_PTR(event, i) \ 406 _event->f9 = (p9); \
235 (((i) == 0) ? (void *)&((event)->ppu.p0) \ 407 _event->f10 = (p10); \
236 : ((i) == 1) ? (void *)&((event)->ppu.p1) \ 408 EVENT_END(name, sizeof(Event##name##Struct))
237 : ((i) == 2) ? (void *)&((event)->ppu.u2) \ 409
238 : NULL) 410#define EVENT12(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) \
239 411 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
240typedef struct { 412 _event->f0 = (p0); \
241 Word code; 413 _event->f1 = (p1); \
242 Word clock; 414 _event->f2 = (p2); \
243 void * p0; 415 _event->f3 = (p3); \
244 void * p1; 416 _event->f4 = (p4); \
245 unsigned u2; 417 _event->f5 = (p5); \
246 unsigned u3; 418 _event->f6 = (p6); \
247} EventPPUUStruct; 419 _event->f7 = (p7); \
248 420 _event->f8 = (p8); \
249#define EVENT_PPUU_FIELD_PTR(event, i) \ 421 _event->f9 = (p9); \
250 (((i) == 0) ? (void *)&((event)->ppuu.p0) \ 422 _event->f10 = (p10); \
251 : ((i) == 1) ? (void *)&((event)->ppuu.p1) \ 423 _event->f11 = (p11); \
252 : ((i) == 2) ? (void *)&((event)->ppuu.u2) \ 424 EVENT_END(name, sizeof(Event##name##Struct))
253 : ((i) == 3) ? (void *)&((event)->ppuu.u3) \ 425
254 : NULL) 426#define EVENT13(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) \
255 427 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
256typedef struct { 428 _event->f0 = (p0); \
257 Word code; 429 _event->f1 = (p1); \
258 Word clock; 430 _event->f2 = (p2); \
259 void * p0; 431 _event->f3 = (p3); \
260 void * p1; 432 _event->f4 = (p4); \
261 unsigned u2; 433 _event->f5 = (p5); \
262 Word w3; 434 _event->f6 = (p6); \
263 Word w4; 435 _event->f7 = (p7); \
264 Word w5; 436 _event->f8 = (p8); \
265} EventPPUWWWStruct; 437 _event->f9 = (p9); \
266 438 _event->f10 = (p10); \
267#define EVENT_PPUWWW_FIELD_PTR(event, i) \ 439 _event->f11 = (p11); \
268 (((i) == 0) ? (void *)&((event)->ppuwww.p0) \ 440 _event->f12 = (p12); \
269 : ((i) == 1) ? (void *)&((event)->ppuwww.p1) \ 441 EVENT_END(name, sizeof(Event##name##Struct))
270 : ((i) == 2) ? (void *)&((event)->ppuwww.u2) \ 442
271 : ((i) == 3) ? (void *)&((event)->ppuwww.w3) \ 443#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) \
272 : ((i) == 4) ? (void *)&((event)->ppuwww.w4) \ 444 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
273 : ((i) == 5) ? (void *)&((event)->ppuwww.w5) \ 445 _event->f0 = (p0); \
274 : NULL) 446 _event->f1 = (p1); \
275 447 _event->f2 = (p2); \
276typedef struct { 448 _event->f3 = (p3); \
277 Word code; 449 _event->f4 = (p4); \
278 Word clock; 450 _event->f5 = (p5); \
279 void * p0; 451 _event->f6 = (p6); \
280 void * p1; 452 _event->f7 = (p7); \
281 Word w2; 453 _event->f8 = (p8); \
282 Word w3; 454 _event->f9 = (p9); \
283} EventPPWWStruct; 455 _event->f10 = (p10); \
284 456 _event->f11 = (p11); \
285#define EVENT_PPWW_FIELD_PTR(event, i) \ 457 _event->f12 = (p12); \
286 (((i) == 0) ? (void *)&((event)->ppww.p0) \ 458 _event->f13 = (p13); \
287 : ((i) == 1) ? (void *)&((event)->ppww.p1) \ 459 EVENT_END(name, sizeof(Event##name##Struct))
288 : ((i) == 2) ? (void *)&((event)->ppww.w2) \ 460
289 : ((i) == 3) ? (void *)&((event)->ppww.w3) \ 461#define EVENT15(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) \
290 : NULL) 462 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
291 463 _event->f0 = (p0); \
292typedef struct { 464 _event->f1 = (p1); \
293 Word code; 465 _event->f2 = (p2); \
294 Word clock; 466 _event->f3 = (p3); \
295 void * p0; 467 _event->f4 = (p4); \
296 void * p1; 468 _event->f5 = (p5); \
297 Word w2; 469 _event->f6 = (p6); \
298 Word w3; 470 _event->f7 = (p7); \
299 Word w4; 471 _event->f8 = (p8); \
300} EventPPWWWStruct; 472 _event->f9 = (p9); \
301 473 _event->f10 = (p10); \
302#define EVENT_PPWWW_FIELD_PTR(event, i) \ 474 _event->f11 = (p11); \
303 (((i) == 0) ? (void *)&((event)->ppwww.p0) \ 475 _event->f12 = (p12); \
304 : ((i) == 1) ? (void *)&((event)->ppwww.p1) \ 476 _event->f13 = (p13); \
305 : ((i) == 2) ? (void *)&((event)->ppwww.w2) \ 477 _event->f14 = (p14); \
306 : ((i) == 3) ? (void *)&((event)->ppwww.w3) \ 478 EVENT_END(name, sizeof(Event##name##Struct))
307 : ((i) == 4) ? (void *)&((event)->ppwww.w4) \ 479
308 : NULL) 480#define EVENT16(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) \
309 481 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
310typedef struct { 482 _event->f0 = (p0); \
311 Word code; 483 _event->f1 = (p1); \
312 Word clock; 484 _event->f2 = (p2); \
313 void * p0; 485 _event->f3 = (p3); \
314 void * p1; 486 _event->f4 = (p4); \
315 Word w2; 487 _event->f5 = (p5); \
316 Word w3; 488 _event->f6 = (p6); \
317 Word w4; 489 _event->f7 = (p7); \
318 unsigned u5; 490 _event->f8 = (p8); \
319 unsigned u6; 491 _event->f9 = (p9); \
320 unsigned u7; 492 _event->f10 = (p10); \
321} EventPPWWWUUUStruct; 493 _event->f11 = (p11); \
322 494 _event->f12 = (p12); \
323#define EVENT_PPWWWUUU_FIELD_PTR(event, i) \ 495 _event->f13 = (p13); \
324 (((i) == 0) ? (void *)&((event)->ppwwwuuu.p0) \ 496 _event->f14 = (p14); \
325 : ((i) == 1) ? (void *)&((event)->ppwwwuuu.p1) \ 497 _event->f15 = (p15); \
326 : ((i) == 2) ? (void *)&((event)->ppwwwuuu.w2) \ 498 EVENT_END(name, sizeof(Event##name##Struct))
327 : ((i) == 3) ? (void *)&((event)->ppwwwuuu.w3) \ 499
328 : ((i) == 4) ? (void *)&((event)->ppwwwuuu.w4) \ 500#define EVENT17(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) \
329 : ((i) == 5) ? (void *)&((event)->ppwwwuuu.u5) \ 501 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
330 : ((i) == 6) ? (void *)&((event)->ppwwwuuu.u6) \ 502 _event->f0 = (p0); \
331 : ((i) == 7) ? (void *)&((event)->ppwwwuuu.u7) \ 503 _event->f1 = (p1); \
332 : NULL) 504 _event->f2 = (p2); \
333 505 _event->f3 = (p3); \
334typedef struct { 506 _event->f4 = (p4); \
335 Word code; 507 _event->f5 = (p5); \
336 Word clock; 508 _event->f6 = (p6); \
337 void * p0; 509 _event->f7 = (p7); \
338 unsigned u1; 510 _event->f8 = (p8); \
339} EventPUStruct; 511 _event->f9 = (p9); \
512 _event->f10 = (p10); \
513 _event->f11 = (p11); \
514 _event->f12 = (p12); \
515 _event->f13 = (p13); \
516 _event->f14 = (p14); \
517 _event->f15 = (p15); \
518 _event->f16 = (p16); \
519 EVENT_END(name, sizeof(Event##name##Struct))
520
521#define EVENT18(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) \
522 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
523 _event->f0 = (p0); \
524 _event->f1 = (p1); \
525 _event->f2 = (p2); \
526 _event->f3 = (p3); \
527 _event->f4 = (p4); \
528 _event->f5 = (p5); \
529 _event->f6 = (p6); \
530 _event->f7 = (p7); \
531 _event->f8 = (p8); \
532 _event->f9 = (p9); \
533 _event->f10 = (p10); \
534 _event->f11 = (p11); \
535 _event->f12 = (p12); \
536 _event->f13 = (p13); \
537 _event->f14 = (p14); \
538 _event->f15 = (p15); \
539 _event->f16 = (p16); \
540 _event->f17 = (p17); \
541 EVENT_END(name, sizeof(Event##name##Struct))
542
543#define EVENT19(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) \
544 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
545 _event->f0 = (p0); \
546 _event->f1 = (p1); \
547 _event->f2 = (p2); \
548 _event->f3 = (p3); \
549 _event->f4 = (p4); \
550 _event->f5 = (p5); \
551 _event->f6 = (p6); \
552 _event->f7 = (p7); \
553 _event->f8 = (p8); \
554 _event->f9 = (p9); \
555 _event->f10 = (p10); \
556 _event->f11 = (p11); \
557 _event->f12 = (p12); \
558 _event->f13 = (p13); \
559 _event->f14 = (p14); \
560 _event->f15 = (p15); \
561 _event->f16 = (p16); \
562 _event->f17 = (p17); \
563 _event->f18 = (p18); \
564 EVENT_END(name, sizeof(Event##name##Struct))
565
566
567#define EVENT0_FIELD_PTR(name, event, i) NULL
568
569/*
570 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)]))
571 */
340 572
341#define EVENT_PU_FIELD_PTR(event, i) \ 573#define EVENT1_FIELD_PTR(name, event, i) ( \
342 (((i) == 0) ? (void *)&((event)->pu.p0) \ 574 ((i) == 0) ? (void *)&((event)->name.f0)\
343 : ((i) == 1) ? (void *)&((event)->pu.u1) \ 575 : NULL)
344 : NULL) 576
577#define EVENT2_FIELD_PTR(name, event, i) ( \
578 ((i) == 0) ? (void *)&((event)->name.f0) \
579 : ((i) == 1) ? (void *)&((event)->name.f1)\
580 : NULL)
581
582#define EVENT3_FIELD_PTR(name, event, i) ( \
583 ((i) == 0) ? (void *)&((event)->name.f0) \
584 : ((i) == 1) ? (void *)&((event)->name.f1) \
585 : ((i) == 2) ? (void *)&((event)->name.f2)\
586 : NULL)
587
588#define EVENT4_FIELD_PTR(name, event, i) ( \
589 ((i) == 0) ? (void *)&((event)->name.f0) \
590 : ((i) == 1) ? (void *)&((event)->name.f1) \
591 : ((i) == 2) ? (void *)&((event)->name.f2) \
592 : ((i) == 3) ? (void *)&((event)->name.f3)\
593 : NULL)
594
595#define EVENT5_FIELD_PTR(name, event, i) ( \
596 ((i) == 0) ? (void *)&((event)->name.f0) \
597 : ((i) == 1) ? (void *)&((event)->name.f1) \
598 : ((i) == 2) ? (void *)&((event)->name.f2) \
599 : ((i) == 3) ? (void *)&((event)->name.f3) \
600 : ((i) == 4) ? (void *)&((event)->name.f4)\
601 : NULL)
602
603#define EVENT6_FIELD_PTR(name, event, i) ( \
604 ((i) == 0) ? (void *)&((event)->name.f0) \
605 : ((i) == 1) ? (void *)&((event)->name.f1) \
606 : ((i) == 2) ? (void *)&((event)->name.f2) \
607 : ((i) == 3) ? (void *)&((event)->name.f3) \
608 : ((i) == 4) ? (void *)&((event)->name.f4) \
609 : ((i) == 5) ? (void *)&((event)->name.f5)\
610 : NULL)
611
612#define EVENT7_FIELD_PTR(name, event, i) ( \
613 ((i) == 0) ? (void *)&((event)->name.f0) \
614 : ((i) == 1) ? (void *)&((event)->name.f1) \
615 : ((i) == 2) ? (void *)&((event)->name.f2) \
616 : ((i) == 3) ? (void *)&((event)->name.f3) \
617 : ((i) == 4) ? (void *)&((event)->name.f4) \
618 : ((i) == 5) ? (void *)&((event)->name.f5) \
619 : ((i) == 6) ? (void *)&((event)->name.f6)\
620 : NULL)
621
622#define EVENT8_FIELD_PTR(name, event, i) ( \
623 ((i) == 0) ? (void *)&((event)->name.f0) \
624 : ((i) == 1) ? (void *)&((event)->name.f1) \
625 : ((i) == 2) ? (void *)&((event)->name.f2) \
626 : ((i) == 3) ? (void *)&((event)->name.f3) \
627 : ((i) == 4) ? (void *)&((event)->name.f4) \
628 : ((i) == 5) ? (void *)&((event)->name.f5) \
629 : ((i) == 6) ? (void *)&((event)->name.f6) \
630 : ((i) == 7) ? (void *)&((event)->name.f7)\
631 : NULL)
632
633#define EVENT9_FIELD_PTR(name, event, i) ( \
634 ((i) == 0) ? (void *)&((event)->name.f0) \
635 : ((i) == 1) ? (void *)&((event)->name.f1) \
636 : ((i) == 2) ? (void *)&((event)->name.f2) \
637 : ((i) == 3) ? (void *)&((event)->name.f3) \
638 : ((i) == 4) ? (void *)&((event)->name.f4) \
639 : ((i) == 5) ? (void *)&((event)->name.f5) \
640 : ((i) == 6) ? (void *)&((event)->name.f6) \
641 : ((i) == 7) ? (void *)&((event)->name.f7) \
642 : ((i) == 8) ? (void *)&((event)->name.f8)\
643 : NULL)
644
645#define EVENT10_FIELD_PTR(name, event, i) ( \
646 ((i) == 0) ? (void *)&((event)->name.f0) \
647 : ((i) == 1) ? (void *)&((event)->name.f1) \
648 : ((i) == 2) ? (void *)&((event)->name.f2) \
649 : ((i) == 3) ? (void *)&((event)->name.f3) \
650 : ((i) == 4) ? (void *)&((event)->name.f4) \
651 : ((i) == 5) ? (void *)&((event)->name.f5) \
652 : ((i) == 6) ? (void *)&((event)->name.f6) \
653 : ((i) == 7) ? (void *)&((event)->name.f7) \
654 : ((i) == 8) ? (void *)&((event)->name.f8) \
655 : ((i) == 9) ? (void *)&((event)->name.f9)\
656 : NULL)
657
658#define EVENT11_FIELD_PTR(name, event, i) ( \
659 ((i) == 0) ? (void *)&((event)->name.f0) \
660 : ((i) == 1) ? (void *)&((event)->name.f1) \
661 : ((i) == 2) ? (void *)&((event)->name.f2) \
662 : ((i) == 3) ? (void *)&((event)->name.f3) \
663 : ((i) == 4) ? (void *)&((event)->name.f4) \
664 : ((i) == 5) ? (void *)&((event)->name.f5) \
665 : ((i) == 6) ? (void *)&((event)->name.f6) \
666 : ((i) == 7) ? (void *)&((event)->name.f7) \
667 : ((i) == 8) ? (void *)&((event)->name.f8) \
668 : ((i) == 9) ? (void *)&((event)->name.f9) \
669 : ((i) == 10) ? (void *)&((event)->name.f10)\
670 : NULL)
671
672#define EVENT12_FIELD_PTR(name, event, i) ( \
673 ((i) == 0) ? (void *)&((event)->name.f0) \
674 : ((i) == 1) ? (void *)&((event)->name.f1) \
675 : ((i) == 2) ? (void *)&((event)->name.f2) \
676 : ((i) == 3) ? (void *)&((event)->name.f3) \
677 : ((i) == 4) ? (void *)&((event)->name.f4) \
678 : ((i) == 5) ? (void *)&((event)->name.f5) \
679 : ((i) == 6) ? (void *)&((event)->name.f6) \
680 : ((i) == 7) ? (void *)&((event)->name.f7) \
681 : ((i) == 8) ? (void *)&((event)->name.f8) \
682 : ((i) == 9) ? (void *)&((event)->name.f9) \
683 : ((i) == 10) ? (void *)&((event)->name.f10) \
684 : ((i) == 11) ? (void *)&((event)->name.f11)\
685 : NULL)
686
687#define EVENT13_FIELD_PTR(name, event, i) ( \
688 ((i) == 0) ? (void *)&((event)->name.f0) \
689 : ((i) == 1) ? (void *)&((event)->name.f1) \
690 : ((i) == 2) ? (void *)&((event)->name.f2) \
691 : ((i) == 3) ? (void *)&((event)->name.f3) \
692 : ((i) == 4) ? (void *)&((event)->name.f4) \
693 : ((i) == 5) ? (void *)&((event)->name.f5) \
694 : ((i) == 6) ? (void *)&((event)->name.f6) \
695 : ((i) == 7) ? (void *)&((event)->name.f7) \
696 : ((i) == 8) ? (void *)&((event)->name.f8) \
697 : ((i) == 9) ? (void *)&((event)->name.f9) \
698 : ((i) == 10) ? (void *)&((event)->name.f10) \
699 : ((i) == 11) ? (void *)&((event)->name.f11) \
700 : ((i) == 12) ? (void *)&((event)->name.f12)\
701 : NULL)
702
703#define EVENT14_FIELD_PTR(name, event, i) ( \
704 ((i) == 0) ? (void *)&((event)->name.f0) \
705 : ((i) == 1) ? (void *)&((event)->name.f1) \
706 : ((i) == 2) ? (void *)&((event)->name.f2) \
707 : ((i) == 3) ? (void *)&((event)->name.f3) \
708 : ((i) == 4) ? (void *)&((event)->name.f4) \
709 : ((i) == 5) ? (void *)&((event)->name.f5) \
710 : ((i) == 6) ? (void *)&((event)->name.f6) \
711 : ((i) == 7) ? (void *)&((event)->name.f7) \
712 : ((i) == 8) ? (void *)&((event)->name.f8) \
713 : ((i) == 9) ? (void *)&((event)->name.f9) \
714 : ((i) == 10) ? (void *)&((event)->name.f10) \
715 : ((i) == 11) ? (void *)&((event)->name.f11) \
716 : ((i) == 12) ? (void *)&((event)->name.f12) \
717 : ((i) == 13) ? (void *)&((event)->name.f13)\
718 : NULL)
719
720#define EVENT15_FIELD_PTR(name, event, i) ( \
721 ((i) == 0) ? (void *)&((event)->name.f0) \
722 : ((i) == 1) ? (void *)&((event)->name.f1) \
723 : ((i) == 2) ? (void *)&((event)->name.f2) \
724 : ((i) == 3) ? (void *)&((event)->name.f3) \
725 : ((i) == 4) ? (void *)&((event)->name.f4) \
726 : ((i) == 5) ? (void *)&((event)->name.f5) \
727 : ((i) == 6) ? (void *)&((event)->name.f6) \
728 : ((i) == 7) ? (void *)&((event)->name.f7) \
729 : ((i) == 8) ? (void *)&((event)->name.f8) \
730 : ((i) == 9) ? (void *)&((event)->name.f9) \
731 : ((i) == 10) ? (void *)&((event)->name.f10) \
732 : ((i) == 11) ? (void *)&((event)->name.f11) \
733 : ((i) == 12) ? (void *)&((event)->name.f12) \
734 : ((i) == 13) ? (void *)&((event)->name.f13) \
735 : ((i) == 14) ? (void *)&((event)->name.f14)\
736 : NULL)
737
738#define EVENT16_FIELD_PTR(name, event, i) ( \
739 ((i) == 0) ? (void *)&((event)->name.f0) \
740 : ((i) == 1) ? (void *)&((event)->name.f1) \
741 : ((i) == 2) ? (void *)&((event)->name.f2) \
742 : ((i) == 3) ? (void *)&((event)->name.f3) \
743 : ((i) == 4) ? (void *)&((event)->name.f4) \
744 : ((i) == 5) ? (void *)&((event)->name.f5) \
745 : ((i) == 6) ? (void *)&((event)->name.f6) \
746 : ((i) == 7) ? (void *)&((event)->name.f7) \
747 : ((i) == 8) ? (void *)&((event)->name.f8) \
748 : ((i) == 9) ? (void *)&((event)->name.f9) \
749 : ((i) == 10) ? (void *)&((event)->name.f10) \
750 : ((i) == 11) ? (void *)&((event)->name.f11) \
751 : ((i) == 12) ? (void *)&((event)->name.f12) \
752 : ((i) == 13) ? (void *)&((event)->name.f13) \
753 : ((i) == 14) ? (void *)&((event)->name.f14) \
754 : ((i) == 15) ? (void *)&((event)->name.f15)\
755 : NULL)
756
757#define EVENT17_FIELD_PTR(name, event, i) ( \
758 ((i) == 0) ? (void *)&((event)->name.f0) \
759 : ((i) == 1) ? (void *)&((event)->name.f1) \
760 : ((i) == 2) ? (void *)&((event)->name.f2) \
761 : ((i) == 3) ? (void *)&((event)->name.f3) \
762 : ((i) == 4) ? (void *)&((event)->name.f4) \
763 : ((i) == 5) ? (void *)&((event)->name.f5) \
764 : ((i) == 6) ? (void *)&((event)->name.f6) \
765 : ((i) == 7) ? (void *)&((event)->name.f7) \
766 : ((i) == 8) ? (void *)&((event)->name.f8) \
767 : ((i) == 9) ? (void *)&((event)->name.f9) \
768 : ((i) == 10) ? (void *)&((event)->name.f10) \
769 : ((i) == 11) ? (void *)&((event)->name.f11) \
770 : ((i) == 12) ? (void *)&((event)->name.f12) \
771 : ((i) == 13) ? (void *)&((event)->name.f13) \
772 : ((i) == 14) ? (void *)&((event)->name.f14) \
773 : ((i) == 15) ? (void *)&((event)->name.f15) \
774 : ((i) == 16) ? (void *)&((event)->name.f16)\
775 : NULL)
776
777#define EVENT18_FIELD_PTR(name, event, i) ( \
778 ((i) == 0) ? (void *)&((event)->name.f0) \
779 : ((i) == 1) ? (void *)&((event)->name.f1) \
780 : ((i) == 2) ? (void *)&((event)->name.f2) \
781 : ((i) == 3) ? (void *)&((event)->name.f3) \
782 : ((i) == 4) ? (void *)&((event)->name.f4) \
783 : ((i) == 5) ? (void *)&((event)->name.f5) \
784 : ((i) == 6) ? (void *)&((event)->name.f6) \
785 : ((i) == 7) ? (void *)&((event)->name.f7) \
786 : ((i) == 8) ? (void *)&((event)->name.f8) \
787 : ((i) == 9) ? (void *)&((event)->name.f9) \
788 : ((i) == 10) ? (void *)&((event)->name.f10) \
789 : ((i) == 11) ? (void *)&((event)->name.f11) \
790 : ((i) == 12) ? (void *)&((event)->name.f12) \
791 : ((i) == 13) ? (void *)&((event)->name.f13) \
792 : ((i) == 14) ? (void *)&((event)->name.f14) \
793 : ((i) == 15) ? (void *)&((event)->name.f15) \
794 : ((i) == 16) ? (void *)&((event)->name.f16) \
795 : ((i) == 17) ? (void *)&((event)->name.f17)\
796 : NULL)
797
798#define EVENT19_FIELD_PTR(name, event, i) ( \
799 ((i) == 0) ? (void *)&((event)->name.f0) \
800 : ((i) == 1) ? (void *)&((event)->name.f1) \
801 : ((i) == 2) ? (void *)&((event)->name.f2) \
802 : ((i) == 3) ? (void *)&((event)->name.f3) \
803 : ((i) == 4) ? (void *)&((event)->name.f4) \
804 : ((i) == 5) ? (void *)&((event)->name.f5) \
805 : ((i) == 6) ? (void *)&((event)->name.f6) \
806 : ((i) == 7) ? (void *)&((event)->name.f7) \
807 : ((i) == 8) ? (void *)&((event)->name.f8) \
808 : ((i) == 9) ? (void *)&((event)->name.f9) \
809 : ((i) == 10) ? (void *)&((event)->name.f10) \
810 : ((i) == 11) ? (void *)&((event)->name.f11) \
811 : ((i) == 12) ? (void *)&((event)->name.f12) \
812 : ((i) == 13) ? (void *)&((event)->name.f13) \
813 : ((i) == 14) ? (void *)&((event)->name.f14) \
814 : ((i) == 15) ? (void *)&((event)->name.f15) \
815 : ((i) == 16) ? (void *)&((event)->name.f16) \
816 : ((i) == 17) ? (void *)&((event)->name.f17) \
817 : ((i) == 18) ? (void *)&((event)->name.f18)\
818 : NULL)
345 819
346typedef struct {
347 Word code;
348 Word clock;
349 void * p0;
350 Word w1;
351} EventPWStruct;
352 820
353#define EVENT_PW_FIELD_PTR(event, i) \ 821#else /* EVENT not */
354 (((i) == 0) ? (void *)&((event)->pw.p0) \
355 : ((i) == 1) ? (void *)&((event)->pw.w1) \
356 : NULL)
357 822
358typedef struct { 823#define EVENT0(name) NOOP
359 Word code;
360 Word clock;
361 void * p0;
362 Word w1;
363 Addr a2;
364} EventPWAStruct;
365
366#define EVENT_PWA_FIELD_PTR(event, i) \
367 (((i) == 0) ? (void *)&((event)->pwa.p0) \
368 : ((i) == 1) ? (void *)&((event)->pwa.w1) \
369 : ((i) == 2) ? (void *)&((event)->pwa.a2) \
370 : NULL)
371
372typedef struct {
373 Word code;
374 Word clock;
375 void * p0;
376 Word w1;
377 Addr a2;
378 Word w3;
379} EventPWAWStruct;
380
381#define EVENT_PWAW_FIELD_PTR(event, i) \
382 (((i) == 0) ? (void *)&((event)->pwaw.p0) \
383 : ((i) == 1) ? (void *)&((event)->pwaw.w1) \
384 : ((i) == 2) ? (void *)&((event)->pwaw.a2) \
385 : ((i) == 3) ? (void *)&((event)->pwaw.w3) \
386 : NULL)
387
388typedef struct {
389 Word code;
390 Word clock;
391 void * p0;
392 Word w1;
393 void * p2;
394} EventPWPStruct;
395
396#define EVENT_PWP_FIELD_PTR(event, i) \
397 (((i) == 0) ? (void *)&((event)->pwp.p0) \
398 : ((i) == 1) ? (void *)&((event)->pwp.w1) \
399 : ((i) == 2) ? (void *)&((event)->pwp.p2) \
400 : NULL)
401
402typedef struct {
403 Word code;
404 Word clock;
405 void * p0;
406 Word w1;
407 unsigned u2;
408} EventPWUStruct;
409
410#define EVENT_PWU_FIELD_PTR(event, i) \
411 (((i) == 0) ? (void *)&((event)->pwu.p0) \
412 : ((i) == 1) ? (void *)&((event)->pwu.w1) \
413 : ((i) == 2) ? (void *)&((event)->pwu.u2) \
414 : NULL)
415
416typedef struct {
417 Word code;
418 Word clock;
419 void * p0;
420 Word w1;
421 Word w2;
422} EventPWWStruct;
423
424#define EVENT_PWW_FIELD_PTR(event, i) \
425 (((i) == 0) ? (void *)&((event)->pww.p0) \
426 : ((i) == 1) ? (void *)&((event)->pww.w1) \
427 : ((i) == 2) ? (void *)&((event)->pww.w2) \
428 : NULL)
429
430typedef struct {
431 Word code;
432 Word clock;
433 void * p0;
434 Word w1;
435 Word w2;
436 Word w3;
437 Word w4;
438 double d5;
439 double d6;
440} EventPWWWWDDStruct;
441
442#define EVENT_PWWWWDD_FIELD_PTR(event, i) \
443 (((i) == 0) ? (void *)&((event)->pwwwwdd.p0) \
444 : ((i) == 1) ? (void *)&((event)->pwwwwdd.w1) \
445 : ((i) == 2) ? (void *)&((event)->pwwwwdd.w2) \
446 : ((i) == 3) ? (void *)&((event)->pwwwwdd.w3) \
447 : ((i) == 4) ? (void *)&((event)->pwwwwdd.w4) \
448 : ((i) == 5) ? (void *)&((event)->pwwwwdd.d5) \
449 : ((i) == 6) ? (void *)&((event)->pwwwwdd.d6) \
450 : NULL)
451
452typedef struct {
453 Word code;
454 Word clock;
455 void * p0;
456 Word w1;
457 Word w2;
458 Word w3;
459 Word w4;
460 Word w5;
461} EventPWWWWWStruct;
462
463#define EVENT_PWWWWW_FIELD_PTR(event, i) \
464 (((i) == 0) ? (void *)&((event)->pwwwww.p0) \
465 : ((i) == 1) ? (void *)&((event)->pwwwww.w1) \
466 : ((i) == 2) ? (void *)&((event)->pwwwww.w2) \
467 : ((i) == 3) ? (void *)&((event)->pwwwww.w3) \
468 : ((i) == 4) ? (void *)&((event)->pwwwww.w4) \
469 : ((i) == 5) ? (void *)&((event)->pwwwww.w5) \
470 : NULL)
471
472typedef struct {
473 Word code;
474 Word clock;
475 void * p0;
476 Word w1;
477 Word w2;
478 Word w3;
479 Word w4;
480 Word w5;
481 Word w6;
482 Word w7;
483 Word w8;
484 Word w9;
485} EventPWWWWWWWWWStruct;
486
487#define EVENT_PWWWWWWWWW_FIELD_PTR(event, i) \
488 (((i) == 0) ? (void *)&((event)->pwwwwwwwww.p0) \
489 : ((i) == 1) ? (void *)&((event)->pwwwwwwwww.w1) \
490 : ((i) == 2) ? (void *)&((event)->pwwwwwwwww.w2) \
491 : ((i) == 3) ? (void *)&((event)->pwwwwwwwww.w3) \
492 : ((i) == 4) ? (void *)&((event)->pwwwwwwwww.w4) \
493 : ((i) == 5) ? (void *)&((event)->pwwwwwwwww.w5) \
494 : ((i) == 6) ? (void *)&((event)->pwwwwwwwww.w6) \
495 : ((i) == 7) ? (void *)&((event)->pwwwwwwwww.w7) \
496 : ((i) == 8) ? (void *)&((event)->pwwwwwwwww.w8) \
497 : ((i) == 9) ? (void *)&((event)->pwwwwwwwww.w9) \
498 : NULL)
499
500typedef struct {
501 Word code;
502 Word clock;
503 void * p0;
504 Word w1;
505 Word w2;
506 Word w3;
507 Word w4;
508 Word w5;
509 Word w6;
510 Word w7;
511 Word w8;
512 Word w9;
513 Word w10;
514 Word w11;
515 Word w12;
516} EventPWWWWWWWWWWWWStruct;
517
518#define EVENT_PWWWWWWWWWWWW_FIELD_PTR(event, i) \
519 (((i) == 0) ? (void *)&((event)->pwwwwwwwwwwww.p0) \
520 : ((i) == 1) ? (void *)&((event)->pwwwwwwwwwwww.w1) \
521 : ((i) == 2) ? (void *)&((event)->pwwwwwwwwwwww.w2) \
522 : ((i) == 3) ? (void *)&((event)->pwwwwwwwwwwww.w3) \
523 : ((i) == 4) ? (void *)&((event)->pwwwwwwwwwwww.w4) \
524 : ((i) == 5) ? (void *)&((event)->pwwwwwwwwwwww.w5) \
525 : ((i) == 6) ? (void *)&((event)->pwwwwwwwwwwww.w6) \
526 : ((i) == 7) ? (void *)&((event)->pwwwwwwwwwwww.w7) \
527 : ((i) == 8) ? (void *)&((event)->pwwwwwwwwwwww.w8) \
528 : ((i) == 9) ? (void *)&((event)->pwwwwwwwwwwww.w9) \
529 : ((i) == 10) ? (void *)&((event)->pwwwwwwwwwwww.w10) \
530 : ((i) == 11) ? (void *)&((event)->pwwwwwwwwwwww.w11) \
531 : ((i) == 12) ? (void *)&((event)->pwwwwwwwwwwww.w12) \
532 : NULL)
533
534typedef struct {
535 Word code;
536 Word clock;
537 unsigned u0;
538 unsigned u1;
539 void * p2;
540 Addr a3;
541} EventUUPAStruct;
542
543#define EVENT_UUPA_FIELD_PTR(event, i) \
544 (((i) == 0) ? (void *)&((event)->uupa.u0) \
545 : ((i) == 1) ? (void *)&((event)->uupa.u1) \
546 : ((i) == 2) ? (void *)&((event)->uupa.p2) \
547 : ((i) == 3) ? (void *)&((event)->uupa.a3) \
548 : NULL)
549
550typedef struct {
551 Word code;
552 Word clock;
553 unsigned u0;
554 unsigned u1;
555 void * p2;
556 void * p3;
557} EventUUPPStruct;
558
559#define EVENT_UUPP_FIELD_PTR(event, i) \
560 (((i) == 0) ? (void *)&((event)->uupp.u0) \
561 : ((i) == 1) ? (void *)&((event)->uupp.u1) \
562 : ((i) == 2) ? (void *)&((event)->uupp.p2) \
563 : ((i) == 3) ? (void *)&((event)->uupp.p3) \
564 : NULL)
565
566typedef struct {
567 Word code;
568 Word clock;
569 unsigned u0;
570 unsigned u1;
571 void * p2;
572 void * p3;
573 void * p4;
574} EventUUPPPStruct;
575
576#define EVENT_UUPPP_FIELD_PTR(event, i) \
577 (((i) == 0) ? (void *)&((event)->uuppp.u0) \
578 : ((i) == 1) ? (void *)&((event)->uuppp.u1) \
579 : ((i) == 2) ? (void *)&((event)->uuppp.p2) \
580 : ((i) == 3) ? (void *)&((event)->uuppp.p3) \
581 : ((i) == 4) ? (void *)&((event)->uuppp.p4) \
582 : NULL)
583
584typedef struct {
585 Word code;
586 Word clock;
587 Word w0;
588 EventStringStruct s1;
589} EventWSStruct;
590
591#define EVENT_WS_FIELD_PTR(event, i) \
592 (((i) == 0) ? (void *)&((event)->ws.w0) \
593 : ((i) == 1) ? (void *)&((event)->ws.s1) \
594 : NULL)
595
596
597typedef union {
598 Event0Struct any;
599 EventAStruct a;
600 EventAWStruct aw;
601 EventPStruct p;
602 EventPAAStruct paa;
603 EventPAWStruct paw;
604 EventPAWAStruct pawa;
605 EventPDDWWWStruct pddwww;
606 EventPPStruct pp;
607 EventPPAUStruct ppau;
608 EventPPAWPStruct ppawp;
609 EventPPPStruct ppp;
610 EventPPPAStruct pppa;
611 EventPPPUStruct pppu;
612 EventPPPUUStruct pppuu;
613 EventPPUStruct ppu;
614 EventPPUUStruct ppuu;
615 EventPPUWWWStruct ppuwww;
616 EventPPWWStruct ppww;
617 EventPPWWWStruct ppwww;
618 EventPPWWWUUUStruct ppwwwuuu;
619 EventPUStruct pu;
620 EventPWStruct pw;
621 EventPWAStruct pwa;
622 EventPWAWStruct pwaw;
623 EventPWPStruct pwp;
624 EventPWUStruct pwu;
625 EventPWWStruct pww;
626 EventPWWWWDDStruct pwwwwdd;
627 EventPWWWWWStruct pwwwww;
628 EventPWWWWWWWWWStruct pwwwwwwwww;
629 EventPWWWWWWWWWWWWStruct pwwwwwwwwwwww;
630 EventUUPAStruct uupa;
631 EventUUPPStruct uupp;
632 EventUUPPPStruct uuppp;
633 EventWSStruct ws;
634} EventUnion;
635
636
637#define EVENT_0(type) \
638 EVENT_BEGIN(type) \
639 EVENT_END(type, 0, sizeof(Event0Struct))
640
641#define EVENT_A(type, _a0) \
642 EVENT_BEGIN(type) \
643 EventMould.a.a0 = (_a0); \
644 EVENT_END(type, A, sizeof(EventAStruct))
645
646#define EVENT_AW(type, _a0, _w1) \
647 EVENT_BEGIN(type) \
648 EventMould.aw.a0 = (_a0); \
649 EventMould.aw.w1 = (_w1); \
650 EVENT_END(type, AW, sizeof(EventAWStruct))
651
652#define EVENT_P(type, _p0) \
653 EVENT_BEGIN(type) \
654 EventMould.p.p0 = (_p0); \
655 EVENT_END(type, P, sizeof(EventPStruct))
656
657#define EVENT_PAA(type, _p0, _a1, _a2) \
658 EVENT_BEGIN(type) \
659 EventMould.paa.p0 = (_p0); \
660 EventMould.paa.a1 = (_a1); \
661 EventMould.paa.a2 = (_a2); \
662 EVENT_END(type, PAA, sizeof(EventPAAStruct))
663
664#define EVENT_PAW(type, _p0, _a1, _w2) \
665 EVENT_BEGIN(type) \
666 EventMould.paw.p0 = (_p0); \
667 EventMould.paw.a1 = (_a1); \
668 EventMould.paw.w2 = (_w2); \
669 EVENT_END(type, PAW, sizeof(EventPAWStruct))
670
671#define EVENT_PAWA(type, _p0, _a1, _w2, _a3) \
672 EVENT_BEGIN(type) \
673 EventMould.pawa.p0 = (_p0); \
674 EventMould.pawa.a1 = (_a1); \
675 EventMould.pawa.w2 = (_w2); \
676 EventMould.pawa.a3 = (_a3); \
677 EVENT_END(type, PAWA, sizeof(EventPAWAStruct))
678
679#define EVENT_PDDWWW(type, _p0, _d1, _d2, _w3, _w4, _w5) \
680 EVENT_BEGIN(type) \
681 EventMould.pddwww.p0 = (_p0); \
682 EventMould.pddwww.d1 = (_d1); \
683 EventMould.pddwww.d2 = (_d2); \
684 EventMould.pddwww.w3 = (_w3); \
685 EventMould.pddwww.w4 = (_w4); \
686 EventMould.pddwww.w5 = (_w5); \
687 EVENT_END(type, PDDWWW, sizeof(EventPDDWWWStruct))
688
689#define EVENT_PP(type, _p0, _p1) \
690 EVENT_BEGIN(type) \
691 EventMould.pp.p0 = (_p0); \
692 EventMould.pp.p1 = (_p1); \
693 EVENT_END(type, PP, sizeof(EventPPStruct))
694
695#define EVENT_PPAU(type, _p0, _p1, _a2, _u3) \
696 EVENT_BEGIN(type) \
697 EventMould.ppau.p0 = (_p0); \
698 EventMould.ppau.p1 = (_p1); \
699 EventMould.ppau.a2 = (_a2); \
700 EventMould.ppau.u3 = (_u3); \
701 EVENT_END(type, PPAU, sizeof(EventPPAUStruct))
702
703#define EVENT_PPAWP(type, _p0, _p1, _a2, _w3, _p4) \
704 EVENT_BEGIN(type) \
705 EventMould.ppawp.p0 = (_p0); \
706 EventMould.ppawp.p1 = (_p1); \
707 EventMould.ppawp.a2 = (_a2); \
708 EventMould.ppawp.w3 = (_w3); \
709 EventMould.ppawp.p4 = (_p4); \
710 EVENT_END(type, PPAWP, sizeof(EventPPAWPStruct))
711
712#define EVENT_PPP(type, _p0, _p1, _p2) \
713 EVENT_BEGIN(type) \
714 EventMould.ppp.p0 = (_p0); \
715 EventMould.ppp.p1 = (_p1); \
716 EventMould.ppp.p2 = (_p2); \
717 EVENT_END(type, PPP, sizeof(EventPPPStruct))
718
719#define EVENT_PPPA(type, _p0, _p1, _p2, _a3) \
720 EVENT_BEGIN(type) \
721 EventMould.pppa.p0 = (_p0); \
722 EventMould.pppa.p1 = (_p1); \
723 EventMould.pppa.p2 = (_p2); \
724 EventMould.pppa.a3 = (_a3); \
725 EVENT_END(type, PPPA, sizeof(EventPPPAStruct))
726
727#define EVENT_PPPU(type, _p0, _p1, _p2, _u3) \
728 EVENT_BEGIN(type) \
729 EventMould.pppu.p0 = (_p0); \
730 EventMould.pppu.p1 = (_p1); \
731 EventMould.pppu.p2 = (_p2); \
732 EventMould.pppu.u3 = (_u3); \
733 EVENT_END(type, PPPU, sizeof(EventPPPUStruct))
734
735#define EVENT_PPPUU(type, _p0, _p1, _p2, _u3, _u4) \
736 EVENT_BEGIN(type) \
737 EventMould.pppuu.p0 = (_p0); \
738 EventMould.pppuu.p1 = (_p1); \
739 EventMould.pppuu.p2 = (_p2); \
740 EventMould.pppuu.u3 = (_u3); \
741 EventMould.pppuu.u4 = (_u4); \
742 EVENT_END(type, PPPUU, sizeof(EventPPPUUStruct))
743
744#define EVENT_PPU(type, _p0, _p1, _u2) \
745 EVENT_BEGIN(type) \
746 EventMould.ppu.p0 = (_p0); \
747 EventMould.ppu.p1 = (_p1); \
748 EventMould.ppu.u2 = (_u2); \
749 EVENT_END(type, PPU, sizeof(EventPPUStruct))
750
751#define EVENT_PPUU(type, _p0, _p1, _u2, _u3) \
752 EVENT_BEGIN(type) \
753 EventMould.ppuu.p0 = (_p0); \
754 EventMould.ppuu.p1 = (_p1); \
755 EventMould.ppuu.u2 = (_u2); \
756 EventMould.ppuu.u3 = (_u3); \
757 EVENT_END(type, PPUU, sizeof(EventPPUUStruct))
758
759#define EVENT_PPUWWW(type, _p0, _p1, _u2, _w3, _w4, _w5) \
760 EVENT_BEGIN(type) \
761 EventMould.ppuwww.p0 = (_p0); \
762 EventMould.ppuwww.p1 = (_p1); \
763 EventMould.ppuwww.u2 = (_u2); \
764 EventMould.ppuwww.w3 = (_w3); \
765 EventMould.ppuwww.w4 = (_w4); \
766 EventMould.ppuwww.w5 = (_w5); \
767 EVENT_END(type, PPUWWW, sizeof(EventPPUWWWStruct))
768
769#define EVENT_PPWW(type, _p0, _p1, _w2, _w3) \
770 EVENT_BEGIN(type) \
771 EventMould.ppww.p0 = (_p0); \
772 EventMould.ppww.p1 = (_p1); \
773 EventMould.ppww.w2 = (_w2); \
774 EventMould.ppww.w3 = (_w3); \
775 EVENT_END(type, PPWW, sizeof(EventPPWWStruct))
776
777#define EVENT_PPWWW(type, _p0, _p1, _w2, _w3, _w4) \
778 EVENT_BEGIN(type) \
779 EventMould.ppwww.p0 = (_p0); \
780 EventMould.ppwww.p1 = (_p1); \
781 EventMould.ppwww.w2 = (_w2); \
782 EventMould.ppwww.w3 = (_w3); \
783 EventMould.ppwww.w4 = (_w4); \
784 EVENT_END(type, PPWWW, sizeof(EventPPWWWStruct))
785
786#define EVENT_PPWWWUUU(type, _p0, _p1, _w2, _w3, _w4, _u5, _u6, _u7) \
787 EVENT_BEGIN(type) \
788 EventMould.ppwwwuuu.p0 = (_p0); \
789 EventMould.ppwwwuuu.p1 = (_p1); \
790 EventMould.ppwwwuuu.w2 = (_w2); \
791 EventMould.ppwwwuuu.w3 = (_w3); \
792 EventMould.ppwwwuuu.w4 = (_w4); \
793 EventMould.ppwwwuuu.u5 = (_u5); \
794 EventMould.ppwwwuuu.u6 = (_u6); \
795 EventMould.ppwwwuuu.u7 = (_u7); \
796 EVENT_END(type, PPWWWUUU, sizeof(EventPPWWWUUUStruct))
797
798#define EVENT_PU(type, _p0, _u1) \
799 EVENT_BEGIN(type) \
800 EventMould.pu.p0 = (_p0); \
801 EventMould.pu.u1 = (_u1); \
802 EVENT_END(type, PU, sizeof(EventPUStruct))
803
804#define EVENT_PW(type, _p0, _w1) \
805 EVENT_BEGIN(type) \
806 EventMould.pw.p0 = (_p0); \
807 EventMould.pw.w1 = (_w1); \
808 EVENT_END(type, PW, sizeof(EventPWStruct))
809
810#define EVENT_PWA(type, _p0, _w1, _a2) \
811 EVENT_BEGIN(type) \
812 EventMould.pwa.p0 = (_p0); \
813 EventMould.pwa.w1 = (_w1); \
814 EventMould.pwa.a2 = (_a2); \
815 EVENT_END(type, PWA, sizeof(EventPWAStruct))
816
817#define EVENT_PWAW(type, _p0, _w1, _a2, _w3) \
818 EVENT_BEGIN(type) \
819 EventMould.pwaw.p0 = (_p0); \
820 EventMould.pwaw.w1 = (_w1); \
821 EventMould.pwaw.a2 = (_a2); \
822 EventMould.pwaw.w3 = (_w3); \
823 EVENT_END(type, PWAW, sizeof(EventPWAWStruct))
824
825#define EVENT_PWP(type, _p0, _w1, _p2) \
826 EVENT_BEGIN(type) \
827 EventMould.pwp.p0 = (_p0); \
828 EventMould.pwp.w1 = (_w1); \
829 EventMould.pwp.p2 = (_p2); \
830 EVENT_END(type, PWP, sizeof(EventPWPStruct))
831
832#define EVENT_PWU(type, _p0, _w1, _u2) \
833 EVENT_BEGIN(type) \
834 EventMould.pwu.p0 = (_p0); \
835 EventMould.pwu.w1 = (_w1); \
836 EventMould.pwu.u2 = (_u2); \
837 EVENT_END(type, PWU, sizeof(EventPWUStruct))
838
839#define EVENT_PWW(type, _p0, _w1, _w2) \
840 EVENT_BEGIN(type) \
841 EventMould.pww.p0 = (_p0); \
842 EventMould.pww.w1 = (_w1); \
843 EventMould.pww.w2 = (_w2); \
844 EVENT_END(type, PWW, sizeof(EventPWWStruct))
845
846#define EVENT_PWWWWDD(type, _p0, _w1, _w2, _w3, _w4, _d5, _d6) \
847 EVENT_BEGIN(type) \
848 EventMould.pwwwwdd.p0 = (_p0); \
849 EventMould.pwwwwdd.w1 = (_w1); \
850 EventMould.pwwwwdd.w2 = (_w2); \
851 EventMould.pwwwwdd.w3 = (_w3); \
852 EventMould.pwwwwdd.w4 = (_w4); \
853 EventMould.pwwwwdd.d5 = (_d5); \
854 EventMould.pwwwwdd.d6 = (_d6); \
855 EVENT_END(type, PWWWWDD, sizeof(EventPWWWWDDStruct))
856
857#define EVENT_PWWWWW(type, _p0, _w1, _w2, _w3, _w4, _w5) \
858 EVENT_BEGIN(type) \
859 EventMould.pwwwww.p0 = (_p0); \
860 EventMould.pwwwww.w1 = (_w1); \
861 EventMould.pwwwww.w2 = (_w2); \
862 EventMould.pwwwww.w3 = (_w3); \
863 EventMould.pwwwww.w4 = (_w4); \
864 EventMould.pwwwww.w5 = (_w5); \
865 EVENT_END(type, PWWWWW, sizeof(EventPWWWWWStruct))
866
867#define EVENT_PWWWWWWWWW(type, _p0, _w1, _w2, _w3, _w4, _w5, _w6, _w7, _w8, _w9) \
868 EVENT_BEGIN(type) \
869 EventMould.pwwwwwwwww.p0 = (_p0); \
870 EventMould.pwwwwwwwww.w1 = (_w1); \
871 EventMould.pwwwwwwwww.w2 = (_w2); \
872 EventMould.pwwwwwwwww.w3 = (_w3); \
873 EventMould.pwwwwwwwww.w4 = (_w4); \
874 EventMould.pwwwwwwwww.w5 = (_w5); \
875 EventMould.pwwwwwwwww.w6 = (_w6); \
876 EventMould.pwwwwwwwww.w7 = (_w7); \
877 EventMould.pwwwwwwwww.w8 = (_w8); \
878 EventMould.pwwwwwwwww.w9 = (_w9); \
879 EVENT_END(type, PWWWWWWWWW, sizeof(EventPWWWWWWWWWStruct))
880
881#define EVENT_PWWWWWWWWWWWW(type, _p0, _w1, _w2, _w3, _w4, _w5, _w6, _w7, _w8, _w9, _w10, _w11, _w12) \
882 EVENT_BEGIN(type) \
883 EventMould.pwwwwwwwwwwww.p0 = (_p0); \
884 EventMould.pwwwwwwwwwwww.w1 = (_w1); \
885 EventMould.pwwwwwwwwwwww.w2 = (_w2); \
886 EventMould.pwwwwwwwwwwww.w3 = (_w3); \
887 EventMould.pwwwwwwwwwwww.w4 = (_w4); \
888 EventMould.pwwwwwwwwwwww.w5 = (_w5); \
889 EventMould.pwwwwwwwwwwww.w6 = (_w6); \
890 EventMould.pwwwwwwwwwwww.w7 = (_w7); \
891 EventMould.pwwwwwwwwwwww.w8 = (_w8); \
892 EventMould.pwwwwwwwwwwww.w9 = (_w9); \
893 EventMould.pwwwwwwwwwwww.w10 = (_w10); \
894 EventMould.pwwwwwwwwwwww.w11 = (_w11); \
895 EventMould.pwwwwwwwwwwww.w12 = (_w12); \
896 EVENT_END(type, PWWWWWWWWWWWW, sizeof(EventPWWWWWWWWWWWWStruct))
897
898#define EVENT_UUPA(type, _u0, _u1, _p2, _a3) \
899 EVENT_BEGIN(type) \
900 EventMould.uupa.u0 = (_u0); \
901 EventMould.uupa.u1 = (_u1); \
902 EventMould.uupa.p2 = (_p2); \
903 EventMould.uupa.a3 = (_a3); \
904 EVENT_END(type, UUPA, sizeof(EventUUPAStruct))
905
906#define EVENT_UUPP(type, _u0, _u1, _p2, _p3) \
907 EVENT_BEGIN(type) \
908 EventMould.uupp.u0 = (_u0); \
909 EventMould.uupp.u1 = (_u1); \
910 EventMould.uupp.p2 = (_p2); \
911 EventMould.uupp.p3 = (_p3); \
912 EVENT_END(type, UUPP, sizeof(EventUUPPStruct))
913
914#define EVENT_UUPPP(type, _u0, _u1, _p2, _p3, _p4) \
915 EVENT_BEGIN(type) \
916 EventMould.uuppp.u0 = (_u0); \
917 EventMould.uuppp.u1 = (_u1); \
918 EventMould.uuppp.p2 = (_p2); \
919 EventMould.uuppp.p3 = (_p3); \
920 EventMould.uuppp.p4 = (_p4); \
921 EVENT_END(type, UUPPP, sizeof(EventUUPPPStruct))
922
923#define EVENT_WS(type, _w0, _l1, _s1) \
924 EVENT_BEGIN(type) \
925 size_t _string_len; \
926 EventMould.ws.w0 = (_w0); \
927 _string_len = (_l1); \
928 AVER(_string_len < EventStringLengthMAX); \
929 EventMould.ws.s1.len = (EventStringLen)_string_len; \
930 mps_lib_memcpy(EventMould.ws.s1.str, _s1, _string_len); \
931 EVENT_END(type, WS, offsetof(EventWSStruct, s1.str) + _string_len)
932
933#define EventFormat0 0
934#define EventFormatA 1
935#define EventFormatAW 2
936#define EventFormatP 3
937#define EventFormatPAA 4
938#define EventFormatPAW 5
939#define EventFormatPAWA 6
940#define EventFormatPDDWWW 7
941#define EventFormatPP 8
942#define EventFormatPPAU 9
943#define EventFormatPPAWP 10
944#define EventFormatPPP 11
945#define EventFormatPPPA 12
946#define EventFormatPPPU 13
947#define EventFormatPPPUU 14
948#define EventFormatPPU 15
949#define EventFormatPPUU 16
950#define EventFormatPPUWWW 17
951#define EventFormatPPWW 18
952#define EventFormatPPWWW 19
953#define EventFormatPPWWWUUU 20
954#define EventFormatPU 21
955#define EventFormatPW 22
956#define EventFormatPWA 23
957#define EventFormatPWAW 24
958#define EventFormatPWP 25
959#define EventFormatPWU 26
960#define EventFormatPWW 27
961#define EventFormatPWWWWDD 28
962#define EventFormatPWWWWW 29
963#define EventFormatPWWWWWWWWW 30
964#define EventFormatPWWWWWWWWWWWW 31
965#define EventFormatUUPA 32
966#define EventFormatUUPP 33
967#define EventFormatUUPPP 34
968#define EventFormatWS 35
969 824
970#else /* EVENT not */ 825/*
826 for i in range(1,20): print "#define EVENT%d(name, %s) NOOP" % (i, ", ".join(["p%d" % j for j in range(0, i)]))
827 */
971 828
972#define EVENT_0(type) NOOP 829#define EVENT1(name, p0) NOOP
973#define EVENT_A(type, p0) NOOP 830#define EVENT2(name, p0, p1) NOOP
974#define EVENT_AW(type, p0, p1) NOOP 831#define EVENT3(name, p0, p1, p2) NOOP
975#define EVENT_P(type, p0) NOOP 832#define EVENT4(name, p0, p1, p2, p3) NOOP
976#define EVENT_PAA(type, p0, p1, p2) NOOP 833#define EVENT5(name, p0, p1, p2, p3, p4) NOOP
977#define EVENT_PAW(type, p0, p1, p2) NOOP 834#define EVENT6(name, p0, p1, p2, p3, p4, p5) NOOP
978#define EVENT_PAWA(type, p0, p1, p2, p3) NOOP 835#define EVENT7(name, p0, p1, p2, p3, p4, p5, p6) NOOP
979#define EVENT_PDDWWW(type, p0, p1, p2, p3, p4, p5) NOOP 836#define EVENT8(name, p0, p1, p2, p3, p4, p5, p6, p7) NOOP
980#define EVENT_PP(type, p0, p1) NOOP 837#define EVENT9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8) NOOP
981#define EVENT_PPAU(type, p0, p1, p2, p3) NOOP 838#define EVENT10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) NOOP
982#define EVENT_PPAWP(type, p0, p1, p2, p3, p4) NOOP 839#define EVENT11(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) NOOP
983#define EVENT_PPP(type, p0, p1, p2) NOOP 840#define EVENT12(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) NOOP
984#define EVENT_PPPA(type, p0, p1, p2, p3) NOOP 841#define EVENT13(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) NOOP
985#define EVENT_PPPU(type, p0, p1, p2, p3) NOOP 842#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) NOOP
986#define EVENT_PPPUU(type, p0, p1, p2, p3, p4) NOOP 843#define EVENT15(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) NOOP
987#define EVENT_PPU(type, p0, p1, p2) NOOP 844#define EVENT16(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) NOOP
988#define EVENT_PPUU(type, p0, p1, p2, p3) NOOP 845#define EVENT17(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) NOOP
989#define EVENT_PPUWWW(type, p0, p1, p2, p3, p4, p5) NOOP 846#define EVENT18(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) NOOP
990#define EVENT_PPWW(type, p0, p1, p2, p3) NOOP 847#define EVENT19(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) NOOP
991#define EVENT_PPWWW(type, p0, p1, p2, p3, p4) NOOP
992#define EVENT_PPWWWUUU(type, p0, p1, p2, p3, p4, p5, p6, p7) NOOP
993#define EVENT_PU(type, p0, p1) NOOP
994#define EVENT_PW(type, p0, p1) NOOP
995#define EVENT_PWA(type, p0, p1, p2) NOOP
996#define EVENT_PWAW(type, p0, p1, p2, p3) NOOP
997#define EVENT_PWP(type, p0, p1, p2) NOOP
998#define EVENT_PWU(type, p0, p1, p2) NOOP
999#define EVENT_PWW(type, p0, p1, p2) NOOP
1000#define EVENT_PWWWWDD(type, p0, p1, p2, p3, p4, p5, p6) NOOP
1001#define EVENT_PWWWWW(type, p0, p1, p2, p3, p4, p5) NOOP
1002#define EVENT_PWWWWWWWWW(type, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) NOOP
1003#define EVENT_PWWWWWWWWWWWW(type, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) NOOP
1004#define EVENT_UUPA(type, p0, p1, p2, p3) NOOP
1005#define EVENT_UUPP(type, p0, p1, p2, p3) NOOP
1006#define EVENT_UUPPP(type, p0, p1, p2, p3, p4) NOOP
1007#define EVENT_WS(type, p0, p1, l1) NOOP
1008 848
1009#endif /* EVENT */ 849#endif /* EVENT */
1010 850
diff --git a/mps/code/eventgen.pl b/mps/code/eventgen.pl
deleted file mode 100644
index 48fba15f9af..00000000000
--- a/mps/code/eventgen.pl
+++ /dev/null
@@ -1,220 +0,0 @@
1#!/usr/local/bin/perl -w
2# impl.pl.eventgen: GENERATOR FOR <code/eventgen.h>
3#
4# $Id$
5# Copyright (c) 2001 Ravenbrook Limited. See end of file for license.
6#
7# .how: Invoke this script in the src directory. It works by scanning
8# eventdef.h and then creating a file eventgen.h that includes the
9# necessary types and macros.
10#
11# You will need to have eventgen.h claimed, and you should
12# remember to check it in afterwards.
13
14$ID = substr(q$Id$, 4, -1);
15
16%Formats = ();
17
18%Types = (
19 "D", "double",
20 "S", "EventStringStruct",
21 "U", "unsigned",
22 "W", "Word",
23 "A", "Addr",
24 "P", "void *",
25 );
26
27
28#### Discover formats
29
30
31open(C, "<eventdef.h") || die "Can't open $_";
32while(<C>) {
33 if(/EVENT\(X,[^,]*,[^,]*,[^,]*,[^,]*, ([A-Z]+)\)/) {
34 $Formats{$1} = 1 if(!defined($Formats{$1}));
35 }
36}
37close(C);
38
39
40#### Generate eventgen.h
41
42
43open(H, ">eventgen.h") || die "Can't open eventgen.h for output";
44
45print H "/* <code/eventgen.h> -- Automatic event header
46 *
47 * \$Id\$
48 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license.
49 *
50 * DO NOT EDIT THIS FILE!
51 * This file was generated by $ID
52 */\n\n";
53
54
55print H "#ifdef EVENT\n\n";
56
57
58#### Generate structure definitions and accessors
59
60
61foreach $format ("", sort(keys(%Formats))) {
62 $fmt = ($format eq "") ? "0" : $format;
63 print H "typedef struct {\n";
64 print H " Word code;\n Word clock;\n";
65 for($i = 0; $i < length($format); $i++) {
66 $c = substr($format, $i, 1);
67 if($c eq "S") {
68 die "String must be at end of format" if($i+1 != length($format));
69 }
70 if(!defined($Types{$c})) {
71 die "Can't find type for format code >$c<.";
72 } else {
73 print H " ", $Types{$c}, " \l$c$i;\n";
74 }
75 }
76 print H "} Event${fmt}Struct;\n\n";
77
78 print H "#define EVENT_${fmt}_FIELD_PTR(event, i) \\\n (";
79 for($i = 0; $i < length($format); $i++) {
80 $c = substr($format, $i, 1);
81 print H "((i) == $i) ? (void *)&((event)->\L$fmt.$c\E$i) \\\n : ";
82 }
83 print H "NULL)\n\n";
84}
85
86
87#### Generate union type
88
89
90print H "\ntypedef union {\n Event0Struct any;\n";
91
92foreach $format (sort(keys(%Formats))) {
93 print H " Event${format}Struct \L$format;\n";
94}
95print H "} EventUnion;\n\n\n";
96
97
98#### Generate writer macros
99
100
101foreach $format ("", sort(keys(%Formats))) {
102 $fmt = ($format eq "") ? "0" : $format;
103
104 print H "#define EVENT_$fmt(type";
105 for($i = 0; $i < length($format); $i++) {
106 $c = substr($format, $i, 1);
107 if($c eq "S") {
108 print H ", _l$i, _s$i";
109 } else {
110 print H ", _\l$c$i";
111 }
112 }
113 print H ") \\\n";
114
115 print H " EVENT_BEGIN(type) \\\n";
116
117 if(($i = index($format, "S")) != -1) {
118 print H " size_t _string_len; \\\n";
119 }
120
121 for($i = 0; $i < length($format); $i++) {
122 $c = substr($format, $i, 1);
123 if($c eq "S") {
124 print H " _string_len = (_l$i); \\\n";
125 print H " AVER(_string_len < EventStringLengthMAX); \\\n";
126 print H " EventMould.\L$fmt.s$i.len = "
127 . "(EventStringLen)_string_len; \\\n";
128 print H " mps_lib_memcpy(EventMould.\L$fmt.s$i.str, "
129 . "_s$i, _string_len); \\\n";
130 } else {
131 print H " EventMould.\L$fmt.$c$i = (_$c$i); \\\n";
132 }
133 }
134
135 if(($i = index($format, "S")) != -1) {
136 print H " EVENT_END(type, $fmt, "
137 . "offsetof(Event${fmt}Struct, s$i.str) "
138 . "+ _string_len)\n\n";
139 } else {
140 print H " EVENT_END(type, $fmt, "
141 . "sizeof(Event${fmt}Struct))\n\n";
142 }
143}
144
145
146#### Generate format codes
147
148
149$C = 0;
150foreach $format ("0", sort(keys(%Formats))) {
151 print H "#define EventFormat$format $C\n";
152 $C++;
153}
154
155
156#### Generate dummies for non-event varieties
157
158
159print H "\n#else /* EVENT not */\n\n";
160
161
162print H "#define EVENT_0(type) NOOP\n";
163
164foreach $format (sort(keys(%Formats))) {
165 print H "#define EVENT_$format(type";
166 for($i = 0; $i < length($format); $i++) {
167 print H ", p$i";
168 }
169 if(($i = index($format, "S")) != -1) {
170 print H ", l$i";
171 }
172 print H ") NOOP\n";
173}
174
175
176print H "\n#endif /* EVENT */\n";
177
178
179close(H);
180
181
182# C. COPYRIGHT AND LICENSE
183#
184# Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>.
185# All rights reserved. This is an open source license. Contact
186# Ravenbrook for commercial licensing options.
187#
188# Redistribution and use in source and binary forms, with or without
189# modification, are permitted provided that the following conditions are
190# met:
191#
192# 1. Redistributions of source code must retain the above copyright
193# notice, this list of conditions and the following disclaimer.
194#
195# 2. Redistributions in binary form must reproduce the above copyright
196# notice, this list of conditions and the following disclaimer in the
197# documentation and/or other materials provided with the distribution.
198#
199# 3. Redistributions in any form must be accompanied by information on how
200# to obtain complete source code for this software and any accompanying
201# software that uses this software. The source code must either be
202# included in the distribution or be available for no more than the cost
203# of distribution plus a nominal fee, and must be freely redistributable
204# under reasonable conditions. For an executable file, complete source
205# code means the source code for all modules it contains. It does not
206# include source code for modules or files that typically accompany the
207# major components of the operating system on which the executable file
208# runs.
209#
210# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
211# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
212# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
213# PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE
214# COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
215# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
216# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
217# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
218# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
219# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
220# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/mps/code/eventpro.c b/mps/code/eventpro.c
index b9926034632..1c1e498fc10 100644
--- a/mps/code/eventpro.c
+++ b/mps/code/eventpro.c
@@ -58,7 +58,9 @@ struct EventProcStruct {
58 * of the structure. This has to agree with the writing (EVENT_END). 58 * of the structure. This has to agree with the writing (EVENT_END).
59 */ 59 */
60 60
61#define EventSizeAlign(size) sizeAlignUp(size, sizeof(Word)) 61/* FIXME: MPS_PF_ALIGN should be read from event file header? */
62
63#define EventSizeAlign(size) sizeAlignUp(size, MPS_PF_ALIGN)
62 64
63 65
64 66
@@ -75,11 +77,33 @@ typedef struct {
75 char *format; 77 char *format;
76} eventRecord; 78} eventRecord;
77 79
80#define EVENT0_FORMAT() ""
81/* for i in range(1,20): print "#define EVENT%d_FORMAT(%s) %s" % (i, ", ".join(["p%d" % j for j in range(0, i)]), " ".join(["#p%d" % j for j in range(0, i)])) */
82#define EVENT1_FORMAT(p0) #p0
83#define EVENT2_FORMAT(p0, p1) #p0 #p1
84#define EVENT3_FORMAT(p0, p1, p2) #p0 #p1 #p2
85#define EVENT4_FORMAT(p0, p1, p2, p3) #p0 #p1 #p2 #p3
86#define EVENT5_FORMAT(p0, p1, p2, p3, p4) #p0 #p1 #p2 #p3 #p4
87#define EVENT6_FORMAT(p0, p1, p2, p3, p4, p5) #p0 #p1 #p2 #p3 #p4 #p5
88#define EVENT7_FORMAT(p0, p1, p2, p3, p4, p5, p6) #p0 #p1 #p2 #p3 #p4 #p5 #p6
89#define EVENT8_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7
90#define EVENT9_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8
91#define EVENT10_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9
92#define EVENT11_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10
93#define EVENT12_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11
94#define EVENT13_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12
95#define EVENT14_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13
96#define EVENT15_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14
97#define EVENT16_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14 #p15
98#define EVENT17_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14 #p15 #p16
99#define EVENT18_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14 #p15 #p16 #p17
100#define EVENT19_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14 #p15 #p16 #p17 #p18
101
78static eventRecord eventTypes[] = { 102static eventRecord eventTypes[] = {
79 {0, "(unused)", 0, 0, "0"}, 103 {0, "(unused)", 0, 0, "0"},
80#define EVENT_INIT(X, name, code, always, kind, format) \ 104#define EVENT_INIT(X, name, code, always, kind, count, format) \
81 {Event##name, #name, code, \ 105 {Event##name, #name, code, \
82 EventSizeAlign(sizeof(Event##format##Struct)), #format}, 106 EventSizeAlign(sizeof(Event##name##Struct)), EVENT##count##_FORMAT format},
83 EVENT_LIST(EVENT_INIT, X) 107 EVENT_LIST(EVENT_INIT, X)
84}; 108};
85 109
@@ -246,7 +270,7 @@ EventString LabelText(EventProc proc, Word id)
246 270
247/* EventRead -- read one event from the file and allocate descriptor */ 271/* EventRead -- read one event from the file and allocate descriptor */
248 272
249#define internStrOffset (offsetof(EventWSStruct, s1.str)) 273#define internStrOffset (offsetof(EventInternStruct, f1.str))
250 274
251Res EventRead(Event *eventReturn, EventProc proc) 275Res EventRead(Event *eventReturn, EventProc proc)
252{ 276{
@@ -278,9 +302,9 @@ Res EventRead(Event *eventReturn, EventProc proc)
278 internStrOffset - sizeof(EventType)); 302 internStrOffset - sizeof(EventType));
279 if (res != ResOK) return res; 303 if (res != ResOK) return res;
280 /* read the rest */ 304 /* read the rest */
281 res = proc->reader(proc->readerP, &(event->ws.s1.str), 305 res = proc->reader(proc->readerP, &event->Intern.f1.str,
282 /* Length must agree with EVENT_WS. */ 306 /* Length must agree with EVENT_WS. */
283 EventSizeAlign(internStrOffset + event->ws.s1.len) 307 EventSizeAlign(internStrOffset + event->Intern.f1.len)
284 - internStrOffset); 308 - internStrOffset);
285 if (res != ResOK) return res; 309 if (res != ResOK) return res;
286 } else { 310 } else {
@@ -308,8 +332,8 @@ Res EventRecord(EventProc proc, Event event, Word etime)
308 Symbol sym = malloc(sizeof(symbolStruct)); 332 Symbol sym = malloc(sizeof(symbolStruct));
309 333
310 if (sym == NULL) return ResMEMORY; 334 if (sym == NULL) return ResMEMORY;
311 sym->id = event->ws.w0; 335 sym->id = event->Intern.f0;
312 res = eventStringCopy(&(sym->name), &(event->ws.s1)); 336 res = eventStringCopy(&sym->name, &event->Intern.f1);
313 if (res != ResOK) { 337 if (res != ResOK) {
314 free(sym); 338 free(sym);
315 return res; 339 return res;
@@ -321,12 +345,12 @@ Res EventRecord(EventProc proc, Event event, Word etime)
321 void *entry; 345 void *entry;
322 346
323 if (label == NULL) return ResMEMORY; 347 if (label == NULL) return ResMEMORY;
324 label->id = event->aw.w1; 348 label->id = event->Label.f1;
325 if (!proc->partialLog) { 349 if (!proc->partialLog) {
326 assert(TableLookup(&entry, proc->internTable, label->id)); 350 assert(TableLookup(&entry, proc->internTable, label->id));
327 } 351 }
328 label->time = etime; 352 label->time = etime;
329 label->addr = event->aw.a0; 353 label->addr = event->Label.f0;
330 if (TableLookup(&entry, proc->labelTable, (Word)label->addr)) 354 if (TableLookup(&entry, proc->labelTable, (Word)label->addr))
331 res = TableRedefine(proc->labelTable, (Word)label->addr, label); 355 res = TableRedefine(proc->labelTable, (Word)label->addr, label);
332 else 356 else
@@ -383,8 +407,8 @@ Res EventProcCreate(EventProc *procReturn, Bool partial,
383 if (proc == NULL) return ResMEMORY; 407 if (proc == NULL) return ResMEMORY;
384 408
385 /* check event struct access */ 409 /* check event struct access */
386 assert(CHECKFIELD(EventUnion, any.code, EventWSStruct, code)); 410 assert(CHECKFIELD(EventUnion, any.code, EventInternStruct, code));
387 assert(CHECKFIELD(EventUnion, any.clock, EventWSStruct, clock)); 411 assert(CHECKFIELD(EventUnion, any.clock, EventInternStruct, clock));
388 /* check use of labelTable */ 412 /* check use of labelTable */
389#if !defined(MPS_OS_FR) 413#if !defined(MPS_OS_FR)
390 /* GCC -ansi -pedantic -Werror on FreeBSD will fail here 414 /* GCC -ansi -pedantic -Werror on FreeBSD will fail here
diff --git a/mps/code/global.c b/mps/code/global.c
index ede40309f4a..9f06af73cca 100644
--- a/mps/code/global.c
+++ b/mps/code/global.c
@@ -370,7 +370,7 @@ void GlobalsFinish(Globals arenaGlobals)
370 AVERT(Globals, arenaGlobals); 370 AVERT(Globals, arenaGlobals);
371 arena = GlobalsArena(arenaGlobals); 371 arena = GlobalsArena(arenaGlobals);
372 372
373 STATISTIC_STAT(EVENT_PW(ArenaWriteFaults, arena, 373 STATISTIC_STAT(EVENT2(ArenaWriteFaults, arena,
374 arena->writeBarrierHitCount)); 374 arena->writeBarrierHitCount));
375 375
376 arenaGlobals->sig = SigInvalid; 376 arenaGlobals->sig = SigInvalid;
diff --git a/mps/code/meter.c b/mps/code/meter.c
index a5369091eb4..48f7abeb425 100644
--- a/mps/code/meter.c
+++ b/mps/code/meter.c
@@ -31,7 +31,7 @@ void MeterInit(Meter meter, char *name, void *owner)
31 31
32 sym = EventInternString(name); 32 sym = EventInternString(name);
33 EventLabelAddr((Addr)meter, sym); /* see .trans.label */ 33 EventLabelAddr((Addr)meter, sym); /* see .trans.label */
34 EVENT_PP(MeterInit, meter, owner); 34 EVENT2(MeterInit, meter, owner);
35 UNUSED(owner); /* @@@@ hack */ 35 UNUSED(owner); /* @@@@ hack */
36} 36}
37 37
@@ -98,7 +98,7 @@ Res MeterWrite(Meter meter, mps_lib_FILE *stream)
98 98
99void MeterEmit(Meter meter) 99void MeterEmit(Meter meter)
100{ 100{
101 EVENT_PDDWWW(MeterValues, meter, meter->total, meter->meanSquared, 101 EVENT6(MeterValues, meter, meter->total, meter->meanSquared,
102 meter->count, meter->max, meter->min); 102 meter->count, meter->max, meter->min);
103 UNUSED(meter); /* @@@@ hack */ 103 UNUSED(meter); /* @@@@ hack */
104} 104}
diff --git a/mps/code/pool.c b/mps/code/pool.c
index e2578cf3497..14c687bbdf7 100644
--- a/mps/code/pool.c
+++ b/mps/code/pool.c
@@ -250,7 +250,7 @@ void PoolFinish(Pool pool)
250 RingFinish(&pool->bufferRing); 250 RingFinish(&pool->bufferRing);
251 RingFinish(&pool->arenaRing); 251 RingFinish(&pool->arenaRing);
252 252
253 EVENT_P(PoolFinish, pool); 253 EVENT1(PoolFinish, pool);
254} 254}
255 255
256 256
@@ -311,7 +311,7 @@ Res PoolAlloc(Addr *pReturn, Pool pool, Size size,
311 pool->fillMutatorSize += size; 311 pool->fillMutatorSize += size;
312 ArenaGlobals(PoolArena(pool))->fillMutatorSize += size; 312 ArenaGlobals(PoolArena(pool))->fillMutatorSize += size;
313 313
314 EVENT_PAW(PoolAlloc, pool, *pReturn, size); 314 EVENT3(PoolAlloc, pool, *pReturn, size);
315 315
316 return ResOK; 316 return ResOK;
317} 317}
@@ -328,7 +328,7 @@ void PoolFree(Pool pool, Addr old, Size size)
328 AVER(size > 0); 328 AVER(size > 0);
329 (*pool->class->free)(pool, old, size); 329 (*pool->class->free)(pool, old, size);
330 330
331 EVENT_PAW(PoolFree, pool, old, size); 331 EVENT3(PoolFree, pool, old, size);
332} 332}
333 333
334 334
diff --git a/mps/code/poolamc.c b/mps/code/poolamc.c
index bea60caa03e..52f7b85e027 100644
--- a/mps/code/poolamc.c
+++ b/mps/code/poolamc.c
@@ -705,7 +705,7 @@ static Res amcGenCreate(amcGen *genReturn, AMC amc, Serial genNr)
705 AVERT(amcGen, gen); 705 AVERT(amcGen, gen);
706 706
707 RingAppend(&amc->genRing, &gen->amcRing); 707 RingAppend(&amc->genRing, &gen->amcRing);
708 EVENT_PP(AMCGenCreate, amc, gen); 708 EVENT2(AMCGenCreate, amc, gen);
709 *genReturn = gen; 709 *genReturn = gen;
710 return ResOK; 710 return ResOK;
711 711
@@ -728,7 +728,7 @@ static void amcGenDestroy(amcGen gen)
728 AVER(gen->segs == 0); 728 AVER(gen->segs == 0);
729 AVER(gen->pgen.totalSize == 0); 729 AVER(gen->pgen.totalSize == 0);
730 730
731 EVENT_P(AMCGenDestroy, gen); 731 EVENT1(AMCGenDestroy, gen);
732 arena = PoolArena(amcGenPool(gen)); 732 arena = PoolArena(amcGenPool(gen));
733 gen->sig = SigInvalid; 733 gen->sig = SigInvalid;
734 RingRemove(&gen->amcRing); 734 RingRemove(&gen->amcRing);
@@ -1011,11 +1011,11 @@ static Res amcInitComm(Pool pool, RankSet rankSet, va_list arg)
1011 amc->gensBooted = TRUE; 1011 amc->gensBooted = TRUE;
1012 1012
1013 AVERT(AMC, amc); 1013 AVERT(AMC, amc);
1014 EVENT_PP(AMCInit, pool, amc); 1014 EVENT2(AMCInit, pool, amc);
1015 if(rankSet == RankSetEMPTY) 1015 if(rankSet == RankSetEMPTY)
1016 EVENT_PP(PoolInitAMCZ, pool, pool->format); 1016 EVENT2(PoolInitAMCZ, pool, pool->format);
1017 else 1017 else
1018 EVENT_PP(PoolInitAMC, pool, pool->format); 1018 EVENT2(PoolInitAMC, pool, pool->format);
1019 return ResOK; 1019 return ResOK;
1020 1020
1021failGenAlloc: 1021failGenAlloc:
@@ -1053,7 +1053,7 @@ static void AMCFinish(Pool pool)
1053 amc = Pool2AMC(pool); 1053 amc = Pool2AMC(pool);
1054 AVERT(AMC, amc); 1054 AVERT(AMC, amc);
1055 1055
1056 EVENT_P(AMCFinish, amc); 1056 EVENT1(AMCFinish, amc);
1057 1057
1058 /* @@@@ Make sure that segments aren't buffered by forwarding */ 1058 /* @@@@ Make sure that segments aren't buffered by forwarding */
1059 /* buffers. This is a hack which allows the pool to be destroyed */ 1059 /* buffers. This is a hack which allows the pool to be destroyed */
@@ -1436,7 +1436,7 @@ static Res amcScanNailedOnce(Bool *totalReturn, Bool *moreReturn,
1436 1436
1437 UNUSED(amc); /* Actually only unused when telemetry is off. @@@@ */ 1437 UNUSED(amc); /* Actually only unused when telemetry is off. @@@@ */
1438 1438
1439 EVENT_PPP(AMCScanBegin, amc, seg, ss); /* @@@@ use own event */ 1439 EVENT3(AMCScanBegin, amc, seg, ss); /* @@@@ use own event */
1440 1440
1441 format = pool->format; 1441 format = pool->format;
1442 amcSegNailboard(seg)->newMarks = FALSE; 1442 amcSegNailboard(seg)->newMarks = FALSE;
@@ -1491,7 +1491,7 @@ static Res amcScanNailedOnce(Bool *totalReturn, Bool *moreReturn,
1491 AVER(p == limit); 1491 AVER(p == limit);
1492 1492
1493returnGood: 1493returnGood:
1494 EVENT_PPP(AMCScanEnd, amc, seg, ss); /* @@@@ use own event */ 1494 EVENT3(AMCScanEnd, amc, seg, ss); /* @@@@ use own event */
1495 1495
1496 AVER(bytesScanned <= SegSize(seg)); 1496 AVER(bytesScanned <= SegSize(seg));
1497 ss->scannedSize += bytesScanned; 1497 ss->scannedSize += bytesScanned;
@@ -1601,7 +1601,7 @@ static Res AMCScan(Bool *totalReturn, ScanState ss, Pool pool, Seg seg)
1601 return amcScanNailed(totalReturn, ss, pool, seg, amc); 1601 return amcScanNailed(totalReturn, ss, pool, seg, amc);
1602 } 1602 }
1603 1603
1604 EVENT_PPP(AMCScanBegin, amc, seg, ss); 1604 EVENT3(AMCScanBegin, amc, seg, ss);
1605 1605
1606 base = AddrAdd(SegBase(seg), format->headerSize); 1606 base = AddrAdd(SegBase(seg), format->headerSize);
1607 /* <design/poolamc/#seg-scan.loop> */ 1607 /* <design/poolamc/#seg-scan.loop> */
@@ -1637,7 +1637,7 @@ static Res AMCScan(Bool *totalReturn, ScanState ss, Pool pool, Seg seg)
1637 } 1637 }
1638 1638
1639 ss->scannedSize += AddrOffset(base, limit); 1639 ss->scannedSize += AddrOffset(base, limit);
1640 EVENT_PPP(AMCScanEnd, amc, seg, ss); 1640 EVENT3(AMCScanEnd, amc, seg, ss);
1641 1641
1642 *totalReturn = TRUE; 1642 *totalReturn = TRUE;
1643 return ResOK; 1643 return ResOK;
@@ -1666,7 +1666,7 @@ static void amcFixInPlace(Pool pool, Seg seg, ScanState ss, Ref *refIO)
1666 /* segment. */ 1666 /* segment. */
1667 AVER(ref < SegLimit(seg)); 1667 AVER(ref < SegLimit(seg));
1668 1668
1669 EVENT_0(AMCFixInPlace); 1669 EVENT0(AMCFixInPlace);
1670 if(amcSegHasNailboard(seg)) { 1670 if(amcSegHasNailboard(seg)) {
1671 Bool wasMarked = amcNailGetAndSetMark(seg, ref); 1671 Bool wasMarked = amcNailGetAndSetMark(seg, ref);
1672 /* If there are no new marks (i.e., no new traces for which we */ 1672 /* If there are no new marks (i.e., no new traces for which we */
@@ -1751,7 +1751,7 @@ Res AMCFix(Pool pool, ScanState ss, Seg seg, Ref *refIO)
1751 AVERT_CRITICAL(ScanState, ss); 1751 AVERT_CRITICAL(ScanState, ss);
1752 AVERT_CRITICAL(Seg, seg); 1752 AVERT_CRITICAL(Seg, seg);
1753 AVER_CRITICAL(refIO != NULL); 1753 AVER_CRITICAL(refIO != NULL);
1754 EVENT_0(AMCFix); 1754 EVENT0(AMCFix);
1755 1755
1756 /* For the moment, assume that the object was already marked. */ 1756 /* For the moment, assume that the object was already marked. */
1757 /* (See <design/fix/#protocol.was-marked>.) */ 1757 /* (See <design/fix/#protocol.was-marked>.) */
@@ -1814,7 +1814,7 @@ Res AMCFix(Pool pool, ScanState ss, Seg seg, Ref *refIO)
1814 } 1814 }
1815 /* Object is not preserved yet (neither moved, nor nailed) */ 1815 /* Object is not preserved yet (neither moved, nor nailed) */
1816 /* so should be preserved by forwarding. */ 1816 /* so should be preserved by forwarding. */
1817 EVENT_A(AMCFixForward, newRef); 1817 EVENT1(AMCFixForward, newRef);
1818 /* <design/fix/#protocol.was-marked> */ 1818 /* <design/fix/#protocol.was-marked> */
1819 ss->wasMarked = FALSE; 1819 ss->wasMarked = FALSE;
1820 1820
@@ -1901,7 +1901,7 @@ static Res AMCHeaderFix(Pool pool, ScanState ss, Seg seg, Ref *refIO)
1901 AVERT_CRITICAL(ScanState, ss); 1901 AVERT_CRITICAL(ScanState, ss);
1902 AVERT_CRITICAL(Seg, seg); 1902 AVERT_CRITICAL(Seg, seg);
1903 AVER_CRITICAL(refIO != NULL); 1903 AVER_CRITICAL(refIO != NULL);
1904 EVENT_0(AMCFix); 1904 EVENT0(AMCFix);
1905 1905
1906 /* For the moment, assume that the object was already marked. */ 1906 /* For the moment, assume that the object was already marked. */
1907 /* (See <design/fix/#protocol.was-marked>.) */ 1907 /* (See <design/fix/#protocol.was-marked>.) */
@@ -1964,7 +1964,7 @@ static Res AMCHeaderFix(Pool pool, ScanState ss, Seg seg, Ref *refIO)
1964 } 1964 }
1965 /* object is not preserved yet (neither moved, nor nailed) */ 1965 /* object is not preserved yet (neither moved, nor nailed) */
1966 /* so should be preserved by forwarding */ 1966 /* so should be preserved by forwarding */
1967 EVENT_A(AMCFixForward, newRef); 1967 EVENT1(AMCFixForward, newRef);
1968 /* <design/fix/#protocol.was-marked> */ 1968 /* <design/fix/#protocol.was-marked> */
1969 ss->wasMarked = FALSE; 1969 ss->wasMarked = FALSE;
1970 1970
@@ -2166,7 +2166,7 @@ static void AMCReclaim(Pool pool, Trace trace, Seg seg)
2166 gen = amcSegGen(seg); 2166 gen = amcSegGen(seg);
2167 AVERT_CRITICAL(amcGen, gen); 2167 AVERT_CRITICAL(amcGen, gen);
2168 2168
2169 EVENT_PPP(AMCReclaim, gen, trace, seg); 2169 EVENT3(AMCReclaim, gen, trace, seg);
2170 2170
2171 /* This switching needs to be more complex for multiple traces. */ 2171 /* This switching needs to be more complex for multiple traces. */
2172 AVER_CRITICAL(TraceSetIsSingle(PoolArena(pool)->busyTraces)); 2172 AVER_CRITICAL(TraceSetIsSingle(PoolArena(pool)->busyTraces));
diff --git a/mps/code/poolams.c b/mps/code/poolams.c
index 913195aab7c..6696fbf7d36 100644
--- a/mps/code/poolams.c
+++ b/mps/code/poolams.c
@@ -749,7 +749,7 @@ static Res AMSInit(Pool pool, va_list args)
749 /* references, the alloc and white tables cannot be shared. */ 749 /* references, the alloc and white tables cannot be shared. */
750 res = AMSInitInternal(Pool2AMS(pool), format, chain, !supportAmbiguous); 750 res = AMSInitInternal(Pool2AMS(pool), format, chain, !supportAmbiguous);
751 if (res == ResOK) { 751 if (res == ResOK) {
752 EVENT_PPP(PoolInitAMS, pool, PoolArena(pool), format); 752 EVENT3(PoolInitAMS, pool, PoolArena(pool), format);
753 } 753 }
754 return res; 754 return res;
755} 755}
diff --git a/mps/code/poolawl.c b/mps/code/poolawl.c
index bb010854a6a..e1fcbd94b4e 100644
--- a/mps/code/poolawl.c
+++ b/mps/code/poolawl.c
@@ -523,7 +523,7 @@ static Res AWLInit(Pool pool, va_list arg)
523 awl->sig = AWLSig; 523 awl->sig = AWLSig;
524 524
525 AVERT(AWL, awl); 525 AVERT(AWL, awl);
526 EVENT_PP(PoolInitAWL, pool, format); 526 EVENT2(PoolInitAWL, pool, format);
527 return ResOK; 527 return ResOK;
528 528
529failGenInit: 529failGenInit:
diff --git a/mps/code/poollo.c b/mps/code/poollo.c
index c4a5872af54..3ad825905a2 100644
--- a/mps/code/poollo.c
+++ b/mps/code/poollo.c
@@ -502,7 +502,7 @@ static Res LOInit(Pool pool, va_list arg)
502 502
503 lo->sig = LOSig; 503 lo->sig = LOSig;
504 AVERT(LO, lo); 504 AVERT(LO, lo);
505 EVENT_PP(PoolInitLO, pool, format); 505 EVENT2(PoolInitLO, pool, format);
506 return ResOK; 506 return ResOK;
507 507
508failGenInit: 508failGenInit:
diff --git a/mps/code/poolmfs.c b/mps/code/poolmfs.c
index 6ce145b2d42..4e31e87fccf 100644
--- a/mps/code/poolmfs.c
+++ b/mps/code/poolmfs.c
@@ -106,7 +106,7 @@ static Res MFSInit(Pool pool, va_list arg)
106 mfs->sig = MFSSig; 106 mfs->sig = MFSSig;
107 107
108 AVERT(MFS, mfs); 108 AVERT(MFS, mfs);
109 EVENT_PPP(PoolInit, pool, arena, ClassOfPool(pool)); 109 EVENT3(PoolInit, pool, arena, ClassOfPool(pool));
110 return ResOK; 110 return ResOK;
111} 111}
112 112
diff --git a/mps/code/poolmrg.c b/mps/code/poolmrg.c
index 73ec8ac81f1..68ab417090f 100644
--- a/mps/code/poolmrg.c
+++ b/mps/code/poolmrg.c
@@ -635,7 +635,7 @@ static Res MRGInit(Pool pool, va_list args)
635 DIAG_PRINTF(( "mrg->extendBy = %u, MRGGuardiansPerSeg = %u\n", 635 DIAG_PRINTF(( "mrg->extendBy = %u, MRGGuardiansPerSeg = %u\n",
636 (unsigned int) mrg->extendBy, 636 (unsigned int) mrg->extendBy,
637 (unsigned int) MRGGuardiansPerSeg(mrg) )); 637 (unsigned int) MRGGuardiansPerSeg(mrg) ));
638 EVENT_PPP(PoolInit, pool, PoolArena(pool), ClassOfPool(pool)); 638 EVENT3(PoolInit, pool, PoolArena(pool), ClassOfPool(pool));
639 return ResOK; 639 return ResOK;
640} 640}
641 641
diff --git a/mps/code/poolmv.c b/mps/code/poolmv.c
index ae71bb40804..48e02150c0a 100644
--- a/mps/code/poolmv.c
+++ b/mps/code/poolmv.c
@@ -235,7 +235,7 @@ static Res MVInit(Pool pool, va_list arg)
235 235
236 mv->sig = MVSig; 236 mv->sig = MVSig;
237 AVERT(MV, mv); 237 AVERT(MV, mv);
238 EVENT_PPWWW(PoolInitMV, pool, arena, extendBy, avgSize, maxSize); 238 EVENT5(PoolInitMV, pool, arena, extendBy, avgSize, maxSize);
239 return ResOK; 239 return ResOK;
240} 240}
241 241
diff --git a/mps/code/poolmv2.c b/mps/code/poolmv2.c
index 974112b7abe..46dc70fff7c 100644
--- a/mps/code/poolmv2.c
+++ b/mps/code/poolmv2.c
@@ -312,7 +312,7 @@ static Res MVTInit(Pool pool, va_list arg)
312 mvt->sig = MVTSig; 312 mvt->sig = MVTSig;
313 313
314 AVERT(MVT, mvt); 314 AVERT(MVT, mvt);
315 EVENT_PWWWWW(PoolInitMVT, pool, minSize, meanSize, maxSize, 315 EVENT6(PoolInitMVT, pool, minSize, meanSize, maxSize,
316 reserveDepth, fragLimit); 316 reserveDepth, fragLimit);
317 return ResOK; 317 return ResOK;
318 318
diff --git a/mps/code/poolmvff.c b/mps/code/poolmvff.c
index f13c94893aa..65fab127c45 100644
--- a/mps/code/poolmvff.c
+++ b/mps/code/poolmvff.c
@@ -473,7 +473,7 @@ static Res MVFFInit(Pool pool, va_list arg)
473 473
474 mvff->sig = MVFFSig; 474 mvff->sig = MVFFSig;
475 AVERT(MVFF, mvff); 475 AVERT(MVFF, mvff);
476 EVENT_PPWWWUUU(PoolInitMVFF, pool, arena, extendBy, avgSize, align, 476 EVENT8(PoolInitMVFF, pool, arena, extendBy, avgSize, align,
477 slotHigh, arenaHigh, firstFit); 477 slotHigh, arenaHigh, firstFit);
478 return ResOK; 478 return ResOK;
479 479
diff --git a/mps/code/pooln.c b/mps/code/pooln.c
index 08c1d19ce10..a22d81c23a2 100644
--- a/mps/code/pooln.c
+++ b/mps/code/pooln.c
@@ -39,7 +39,7 @@ static Res NInit(Pool pool, va_list args)
39 /* Initialize pool-specific structures. */ 39 /* Initialize pool-specific structures. */
40 40
41 AVERT(PoolN, poolN); 41 AVERT(PoolN, poolN);
42 EVENT_PPP(PoolInit, pool, PoolArena(pool), ClassOfPool(pool)); 42 EVENT3(PoolInit, pool, PoolArena(pool), ClassOfPool(pool));
43 return ResOK; 43 return ResOK;
44} 44}
45 45
diff --git a/mps/code/poolsnc.c b/mps/code/poolsnc.c
index c9b1c20098e..bda17d488fd 100644
--- a/mps/code/poolsnc.c
+++ b/mps/code/poolsnc.c
@@ -382,7 +382,7 @@ static Res SNCInit(Pool pool, va_list arg)
382 snc->sig = SNCSig; 382 snc->sig = SNCSig;
383 383
384 AVERT(SNC, snc); 384 AVERT(SNC, snc);
385 EVENT_PP(PoolInitSNC, pool, format); 385 EVENT2(PoolInitSNC, pool, format);
386 return ResOK; 386 return ResOK;
387} 387}
388 388
diff --git a/mps/code/reserv.c b/mps/code/reserv.c
index cc739291e3c..d50e02b931f 100644
--- a/mps/code/reserv.c
+++ b/mps/code/reserv.c
@@ -41,7 +41,7 @@ static Res ResPoolInit(Pool pool, va_list arg)
41 41
42 UNUSED(arg); 42 UNUSED(arg);
43 /* Caller will set sig and AVERT. */ 43 /* Caller will set sig and AVERT. */
44 EVENT_PPP(PoolInit, pool, PoolArena(pool), ClassOfPool(pool)); 44 EVENT3(PoolInit, pool, PoolArena(pool), ClassOfPool(pool));
45 return ResOK; 45 return ResOK;
46} 46}
47 47
@@ -340,7 +340,7 @@ void ReservoirSetLimit(Reservoir reservoir, Size size)
340 340
341 AVER(SizeIsAligned(needed, ArenaAlign(arena))); 341 AVER(SizeIsAligned(needed, ArenaAlign(arena)));
342 /* Emit event now, so subsequent change can be ascribed to it. */ 342 /* Emit event now, so subsequent change can be ascribed to it. */
343 EVENT_PW(ReservoirLimitSet, arena, size); 343 EVENT2(ReservoirLimitSet, arena, size);
344 344
345 if (needed > reservoir->reservoirSize) { 345 if (needed > reservoir->reservoirSize) {
346 /* Try to grow the reservoir */ 346 /* Try to grow the reservoir */
diff --git a/mps/code/root.c b/mps/code/root.c
index bd2dd21f5ea..374497e4a77 100644
--- a/mps/code/root.c
+++ b/mps/code/root.c
@@ -506,7 +506,7 @@ Res RootScan(ScanState ss, Root root)
506 AVER(res == ResOK); 506 AVER(res == ResOK);
507 root->grey = TraceSetDiff(root->grey, ss->traces); 507 root->grey = TraceSetDiff(root->grey, ss->traces);
508 rootSetSummary(root, ScanStateSummary(ss)); 508 rootSetSummary(root, ScanStateSummary(ss));
509 EVENT_PWW(RootScan, root, ss->traces, ScanStateSummary(ss)); 509 EVENT3(RootScan, root, ss->traces, ScanStateSummary(ss));
510 510
511failScan: 511failScan:
512 if (root->pm != AccessSetEMPTY) { 512 if (root->pm != AccessSetEMPTY) {
diff --git a/mps/code/seg.c b/mps/code/seg.c
index 3f95ba4ec88..4ea3f0c8aaa 100644
--- a/mps/code/seg.c
+++ b/mps/code/seg.c
@@ -91,7 +91,7 @@ Res SegAlloc(Seg *segReturn, SegClass class, SegPref pref,
91 if (res != ResOK) 91 if (res != ResOK)
92 goto failInit; 92 goto failInit;
93 93
94 EVENT_PPAWP(SegAlloc, arena, seg, SegBase(seg), size, pool); 94 EVENT5(SegAlloc, arena, seg, SegBase(seg), size, pool);
95 *segReturn = seg; 95 *segReturn = seg;
96 return ResOK; 96 return ResOK;
97 97
@@ -100,7 +100,7 @@ failInit:
100failControl: 100failControl:
101 ArenaFree(base, size, pool); 101 ArenaFree(base, size, pool);
102failArena: 102failArena:
103 EVENT_PWP(SegAllocFail, arena, size, pool); 103 EVENT3(SegAllocFail, arena, size, pool);
104 return res; 104 return res;
105} 105}
106 106
@@ -128,7 +128,7 @@ void SegFree(Seg seg)
128 ControlFree(arena, seg, class->size); 128 ControlFree(arena, seg, class->size);
129 ArenaFree(base, size, pool); 129 ArenaFree(base, size, pool);
130 130
131 EVENT_PP(SegFree, arena, seg); 131 EVENT2(SegFree, arena, seg);
132 return; 132 return;
133} 133}
134 134
@@ -526,7 +526,7 @@ Res SegMerge(Seg *mergedSegReturn, Seg segLo, Seg segHi,
526 if (ResOK != res) 526 if (ResOK != res)
527 goto failMerge; 527 goto failMerge;
528 528
529 EVENT_PPP(SegMerge, segLo, segLo, segHi); 529 EVENT3(SegMerge, segLo, segLo, segHi);
530 /* Deallocate segHi object */ 530 /* Deallocate segHi object */
531 ControlFree(arena, segHi, class->size); 531 ControlFree(arena, segHi, class->size);
532 AVERT(Seg, segLo); 532 AVERT(Seg, segLo);
@@ -585,7 +585,7 @@ Res SegSplit(Seg *segLoReturn, Seg *segHiReturn, Seg seg, Addr at,
585 if (ResOK != res) 585 if (ResOK != res)
586 goto failSplit; 586 goto failSplit;
587 587
588 EVENT_PPPA(SegSplit, seg, segNew, seg, at); 588 EVENT4(SegSplit, seg, segNew, seg, at);
589 AVERT(Seg, seg); 589 AVERT(Seg, seg);
590 AVERT(Seg, segNew); 590 AVERT(Seg, segNew);
591 *segLoReturn = seg; 591 *segLoReturn = seg;
@@ -1214,7 +1214,7 @@ static void gcSegSetGrey(Seg seg, TraceSet grey)
1214 ShieldLower(arena, seg, AccessREAD); 1214 ShieldLower(arena, seg, AccessREAD);
1215 } 1215 }
1216 1216
1217 EVENT_PPU(SegSetGrey, arena, seg, grey); 1217 EVENT3(SegSetGrey, arena, seg, grey);
1218} 1218}
1219 1219
1220 1220
diff --git a/mps/code/trace.c b/mps/code/trace.c
index a12800d4dd9..c362a4809cf 100644
--- a/mps/code/trace.c
+++ b/mps/code/trace.c
@@ -531,7 +531,7 @@ static void traceFlip(Trace trace)
531 AVER(trace->state == TraceUNFLIPPED); 531 AVER(trace->state == TraceUNFLIPPED);
532 AVER(!TraceSetIsMember(arena->flippedTraces, trace)); 532 AVER(!TraceSetIsMember(arena->flippedTraces, trace));
533 533
534 EVENT_PP(TraceFlipBegin, trace, arena); 534 EVENT2(TraceFlipBegin, trace, arena);
535 535
536 traceFlipBuffers(ArenaGlobals(arena)); 536 traceFlipBuffers(ArenaGlobals(arena));
537 537
@@ -586,7 +586,7 @@ static void traceFlip(Trace trace)
586 trace->state = TraceFLIPPED; 586 trace->state = TraceFLIPPED;
587 arena->flippedTraces = TraceSetAdd(arena->flippedTraces, trace); 587 arena->flippedTraces = TraceSetAdd(arena->flippedTraces, trace);
588 588
589 EVENT_PP(TraceFlipEnd, trace, arena); 589 EVENT2(TraceFlipEnd, trace, arena);
590 590
591 ShieldResume(arena); 591 ShieldResume(arena);
592 592
@@ -736,7 +736,7 @@ void TraceDestroy(Trace trace)
736 ChainEndGC(trace->chain, trace); 736 ChainEndGC(trace->chain, trace);
737 } 737 }
738 738
739 STATISTIC_STAT(EVENT_PWWWWWWWWWWWW 739 STATISTIC_STAT(EVENT13
740 (TraceStatScan, trace, 740 (TraceStatScan, trace,
741 trace->rootScanCount, trace->rootScanSize, 741 trace->rootScanCount, trace->rootScanSize,
742 trace->rootCopiedSize, 742 trace->rootCopiedSize,
@@ -746,7 +746,7 @@ void TraceDestroy(Trace trace)
746 trace->singleCopiedSize, 746 trace->singleCopiedSize,
747 trace->readBarrierHitCount, trace->greySegMax, 747 trace->readBarrierHitCount, trace->greySegMax,
748 trace->pointlessScanCount)); 748 trace->pointlessScanCount));
749 STATISTIC_STAT(EVENT_PWWWWWWWWW 749 STATISTIC_STAT(EVENT10
750 (TraceStatFix, trace, 750 (TraceStatFix, trace,
751 trace->fixRefCount, trace->segRefCount, 751 trace->fixRefCount, trace->segRefCount,
752 trace->whiteSegRefCount, 752 trace->whiteSegRefCount,
@@ -754,14 +754,14 @@ void TraceDestroy(Trace trace)
754 trace->forwardedCount, trace->forwardedSize, 754 trace->forwardedCount, trace->forwardedSize,
755 trace->preservedInPlaceCount, 755 trace->preservedInPlaceCount,
756 trace->preservedInPlaceSize)); 756 trace->preservedInPlaceSize));
757 STATISTIC_STAT(EVENT_PWW 757 STATISTIC_STAT(EVENT3
758 (TraceStatReclaim, trace, 758 (TraceStatReclaim, trace,
759 trace->reclaimCount, trace->reclaimSize)); 759 trace->reclaimCount, trace->reclaimSize));
760 760
761 trace->sig = SigInvalid; 761 trace->sig = SigInvalid;
762 trace->arena->busyTraces = TraceSetDel(trace->arena->busyTraces, trace); 762 trace->arena->busyTraces = TraceSetDel(trace->arena->busyTraces, trace);
763 trace->arena->flippedTraces = TraceSetDel(trace->arena->flippedTraces, trace); 763 trace->arena->flippedTraces = TraceSetDel(trace->arena->flippedTraces, trace);
764 EVENT_P(TraceDestroy, trace); 764 EVENT1(TraceDestroy, trace);
765} 765}
766 766
767 767
@@ -775,7 +775,7 @@ static void traceReclaim(Trace trace)
775 775
776 AVER(trace->state == TraceRECLAIM); 776 AVER(trace->state == TraceRECLAIM);
777 777
778 EVENT_P(TraceReclaim, trace); 778 EVENT1(TraceReclaim, trace);
779 arena = trace->arena; 779 arena = trace->arena;
780 if(SegFirst(&seg, arena)) { 780 if(SegFirst(&seg, arena)) {
781 Addr base; 781 Addr base;
@@ -1034,7 +1034,7 @@ static Res traceScanSegRes(TraceSet ts, Rank rank, Arena arena, Seg seg)
1034 1034
1035 /* The reason for scanning a segment is that it's grey. */ 1035 /* The reason for scanning a segment is that it's grey. */
1036 AVER(TraceSetInter(ts, SegGrey(seg)) != TraceSetEMPTY); 1036 AVER(TraceSetInter(ts, SegGrey(seg)) != TraceSetEMPTY);
1037 EVENT_UUPP(TraceScanSeg, ts, rank, arena, seg); 1037 EVENT4(TraceScanSeg, ts, rank, arena, seg);
1038 1038
1039 white = traceSetWhiteUnion(ts, arena); 1039 white = traceSetWhiteUnion(ts, arena);
1040 1040
@@ -1140,7 +1140,7 @@ void TraceSegAccess(Arena arena, Seg seg, AccessSet mode)
1140 /* RefSetUNIV). */ 1140 /* RefSetUNIV). */
1141 AVER((mode & SegSM(seg) & AccessWRITE) == 0 || SegSummary(seg) != RefSetUNIV); 1141 AVER((mode & SegSM(seg) & AccessWRITE) == 0 || SegSummary(seg) != RefSetUNIV);
1142 1142
1143 EVENT_PPU(TraceAccess, arena, seg, mode); 1143 EVENT3(TraceAccess, arena, seg, mode);
1144 1144
1145 if((mode & SegSM(seg) & AccessREAD) != 0) { /* read barrier? */ 1145 if((mode & SegSM(seg) & AccessREAD) != 0) { /* read barrier? */
1146 /* Pick set of traces to scan for: */ 1146 /* Pick set of traces to scan for: */
@@ -1192,7 +1192,7 @@ Res TraceFix(ScanState ss, Ref *refIO)
1192 ref = *refIO; 1192 ref = *refIO;
1193 1193
1194 STATISTIC(++ss->fixRefCount); 1194 STATISTIC(++ss->fixRefCount);
1195 EVENT_PPAU(TraceFix, ss, refIO, ref, ss->rank); 1195 EVENT4(TraceFix, ss, refIO, ref, ss->rank);
1196 1196
1197 TRACT_OF_ADDR(&tract, ss->arena, ref); 1197 TRACT_OF_ADDR(&tract, ss->arena, ref);
1198 if(tract) { 1198 if(tract) {
@@ -1202,8 +1202,8 @@ Res TraceFix(ScanState ss, Ref *refIO)
1202 Res res; 1202 Res res;
1203 STATISTIC(++ss->segRefCount); 1203 STATISTIC(++ss->segRefCount);
1204 STATISTIC(++ss->whiteSegRefCount); 1204 STATISTIC(++ss->whiteSegRefCount);
1205 EVENT_P(TraceFixSeg, seg); 1205 EVENT1(TraceFixSeg, seg);
1206 EVENT_0(TraceFixWhite); 1206 EVENT0(TraceFixWhite);
1207 pool = TractPool(tract); 1207 pool = TractPool(tract);
1208 /* Could move the rank switch here from the class-specific */ 1208 /* Could move the rank switch here from the class-specific */
1209 /* fix methods. */ 1209 /* fix methods. */
@@ -1228,7 +1228,7 @@ Res TraceFix(ScanState ss, Ref *refIO)
1228 Seg seg; 1228 Seg seg;
1229 if(TRACT_SEG(&seg, tract)) { 1229 if(TRACT_SEG(&seg, tract)) {
1230 ++ss->segRefCount; 1230 ++ss->segRefCount;
1231 EVENT_P(TraceFixSeg, seg); 1231 EVENT1(TraceFixSeg, seg);
1232 } 1232 }
1233 }); 1233 });
1234 } 1234 }
@@ -1259,7 +1259,7 @@ Res TraceFixEmergency(ScanState ss, Ref *refIO)
1259 ref = *refIO; 1259 ref = *refIO;
1260 1260
1261 STATISTIC(++ss->fixRefCount); 1261 STATISTIC(++ss->fixRefCount);
1262 EVENT_PPAU(TraceFix, ss, refIO, ref, ss->rank); 1262 EVENT4(TraceFix, ss, refIO, ref, ss->rank);
1263 1263
1264 TRACT_OF_ADDR(&tract, ss->arena, ref); 1264 TRACT_OF_ADDR(&tract, ss->arena, ref);
1265 if(tract) { 1265 if(tract) {
@@ -1268,8 +1268,8 @@ Res TraceFixEmergency(ScanState ss, Ref *refIO)
1268 if(TRACT_SEG(&seg, tract)) { 1268 if(TRACT_SEG(&seg, tract)) {
1269 STATISTIC(++ss->segRefCount); 1269 STATISTIC(++ss->segRefCount);
1270 STATISTIC(++ss->whiteSegRefCount); 1270 STATISTIC(++ss->whiteSegRefCount);
1271 EVENT_P(TraceFixSeg, seg); 1271 EVENT1(TraceFixSeg, seg);
1272 EVENT_0(TraceFixWhite); 1272 EVENT0(TraceFixWhite);
1273 pool = TractPool(tract); 1273 pool = TractPool(tract);
1274 PoolFixEmergency(pool, ss, seg, refIO); 1274 PoolFixEmergency(pool, ss, seg, refIO);
1275 } 1275 }
@@ -1281,7 +1281,7 @@ Res TraceFixEmergency(ScanState ss, Ref *refIO)
1281 Seg seg; 1281 Seg seg;
1282 if(TRACT_SEG(&seg, tract)) { 1282 if(TRACT_SEG(&seg, tract)) {
1283 ++ss->segRefCount; 1283 ++ss->segRefCount;
1284 EVENT_P(TraceFixSeg, seg); 1284 EVENT1(TraceFixSeg, seg);
1285 } 1285 }
1286 }); 1286 });
1287 } 1287 }
@@ -1308,7 +1308,7 @@ static Res traceScanSingleRefRes(TraceSet ts, Rank rank, Arena arena,
1308 Res res; 1308 Res res;
1309 ScanStateStruct ss; 1309 ScanStateStruct ss;
1310 1310
1311 EVENT_UUPA(TraceScanSingleRef, ts, rank, arena, (Addr)refIO); 1311 EVENT4(TraceScanSingleRef, ts, rank, arena, (Addr)refIO);
1312 1312
1313 white = traceSetWhiteUnion(ts, arena); 1313 white = traceSetWhiteUnion(ts, arena);
1314 if(ZoneSetInter(SegSummary(seg), white) == ZoneSetEMPTY) { 1314 if(ZoneSetInter(SegSummary(seg), white) == ZoneSetEMPTY) {
@@ -1379,7 +1379,7 @@ Res TraceScanArea(ScanState ss, Addr *base, Addr *limit)
1379 AVER(limit != NULL); 1379 AVER(limit != NULL);
1380 AVER(base < limit); 1380 AVER(base < limit);
1381 1381
1382 EVENT_PPP(TraceScanArea, ss, base, limit); 1382 EVENT3(TraceScanArea, ss, base, limit);
1383 1383
1384 TRACE_SCAN_BEGIN(ss) { 1384 TRACE_SCAN_BEGIN(ss) {
1385 p = base; 1385 p = base;
@@ -1427,7 +1427,7 @@ Res TraceScanAreaMasked(ScanState ss, Addr *base, Addr *limit, Word mask)
1427 AVER(limit != NULL); 1427 AVER(limit != NULL);
1428 AVER(base < limit); 1428 AVER(base < limit);
1429 1429
1430 EVENT_PPP(TraceScanAreaTagged, ss, base, limit); 1430 EVENT3(TraceScanAreaTagged, ss, base, limit);
1431 1431
1432 TRACE_SCAN_BEGIN(ss) { 1432 TRACE_SCAN_BEGIN(ss) {
1433 p = base; 1433 p = base;
@@ -1652,7 +1652,7 @@ void TraceStart(Trace trace, double mortality, double finishingTime)
1652 res = RootsIterate(ArenaGlobals(arena), rootGrey, (void *)trace); 1652 res = RootsIterate(ArenaGlobals(arena), rootGrey, (void *)trace);
1653 AVER(res == ResOK); 1653 AVER(res == ResOK);
1654 1654
1655 STATISTIC_STAT(EVENT_PW(ArenaWriteFaults, arena, arena->writeBarrierHitCount)); 1655 STATISTIC_STAT(EVENT2(ArenaWriteFaults, arena, arena->writeBarrierHitCount));
1656 1656
1657 /* Calculate the rate of scanning. */ 1657 /* Calculate the rate of scanning. */
1658 { 1658 {
@@ -1672,7 +1672,7 @@ void TraceStart(Trace trace, double mortality, double finishingTime)
1672 1672
1673 /* @@ DIAG for rate of scanning here. */ 1673 /* @@ DIAG for rate of scanning here. */
1674 1674
1675 STATISTIC_STAT(EVENT_PWWWWDD(TraceStatCondemn, trace, 1675 STATISTIC_STAT(EVENT7(TraceStatCondemn, trace,
1676 trace->condemned, trace->notCondemned, 1676 trace->condemned, trace->notCondemned,
1677 trace->foundation, trace->rate, 1677 trace->foundation, trace->rate,
1678 mortality, finishingTime)); 1678 mortality, finishingTime));
diff --git a/mps/code/vman.c b/mps/code/vman.c
index ef31935b91e..c4d4060f89a 100644
--- a/mps/code/vman.c
+++ b/mps/code/vman.c
@@ -93,7 +93,7 @@ Res VMCreate(VM *vmReturn, Size size)
93 93
94 AVERT(VM, vm); 94 AVERT(VM, vm);
95 95
96 EVENT_PAA(VMCreate, vm, vm->base, vm->limit); 96 EVENT3(VMCreate, vm, vm->base, vm->limit);
97 *vmReturn = vm; 97 *vmReturn = vm;
98 return ResOK; 98 return ResOK;
99} 99}
@@ -114,7 +114,7 @@ void VMDestroy(VM vm)
114 vm->sig = SigInvalid; 114 vm->sig = SigInvalid;
115 free(vm); 115 free(vm);
116 116
117 EVENT_P(VMDestroy, vm); 117 EVENT1(VMDestroy, vm);
118} 118}
119 119
120 120
@@ -176,7 +176,7 @@ Res VMMap(VM vm, Addr base, Addr limit)
176 176
177 vm->mapped += size; 177 vm->mapped += size;
178 178
179 EVENT_PAA(VMMap, vm, base, limit); 179 EVENT3(VMMap, vm, base, limit);
180 return ResOK; 180 return ResOK;
181} 181}
182 182
@@ -200,7 +200,7 @@ void VMUnmap(VM vm, Addr base, Addr limit)
200 AVER(vm->mapped >= size); 200 AVER(vm->mapped >= size);
201 vm->mapped -= size; 201 vm->mapped -= size;
202 202
203 EVENT_PAA(VMUnmap, vm, base, limit); 203 EVENT3(VMUnmap, vm, base, limit);
204} 204}
205 205
206 206
diff --git a/mps/code/vmix.c b/mps/code/vmix.c
index 0718dd982fa..bc26b647dc8 100644
--- a/mps/code/vmix.c
+++ b/mps/code/vmix.c
@@ -159,7 +159,7 @@ Res VMCreate(VM *vmReturn, Size size)
159 159
160 AVERT(VM, vm); 160 AVERT(VM, vm);
161 161
162 EVENT_PAA(VMCreate, vm, vm->base, vm->limit); 162 EVENT3(VMCreate, vm, vm->base, vm->limit);
163 DIAG_SINGLEF(( 163 DIAG_SINGLEF((
164 "VM_ix_Create_ok", 164 "VM_ix_Create_ok",
165 "[$W..<$W>..$W)", 165 "[$W..<$W>..$W)",
@@ -206,7 +206,7 @@ void VMDestroy(VM vm)
206 (size_t)SizeAlignUp(sizeof(VMStruct), vm->align)); 206 (size_t)SizeAlignUp(sizeof(VMStruct), vm->align));
207 AVER(r == 0); 207 AVER(r == 0);
208 208
209 EVENT_P(VMDestroy, vm); 209 EVENT1(VMDestroy, vm);
210} 210}
211 211
212 212
@@ -277,7 +277,7 @@ Res VMMap(VM vm, Addr base, Addr limit)
277 277
278 vm->mapped += size; 278 vm->mapped += size;
279 279
280 EVENT_PAA(VMMap, vm, base, limit); 280 EVENT3(VMMap, vm, base, limit);
281 return ResOK; 281 return ResOK;
282} 282}
283 283
@@ -306,7 +306,7 @@ void VMUnmap(VM vm, Addr base, Addr limit)
306 306
307 vm->mapped -= size; 307 vm->mapped -= size;
308 308
309 EVENT_PAA(VMUnmap, vm, base, limit); 309 EVENT3(VMUnmap, vm, base, limit);
310} 310}
311 311
312 312
diff --git a/mps/code/vmw3.c b/mps/code/vmw3.c
index 554209687d3..1100f7ebbe8 100644
--- a/mps/code/vmw3.c
+++ b/mps/code/vmw3.c
@@ -140,7 +140,7 @@ Res VMCreate(VM *vmReturn, Size size)
140 vm->sig = VMSig; 140 vm->sig = VMSig;
141 AVERT(VM, vm); 141 AVERT(VM, vm);
142 142
143 EVENT_PAA(VMCreate, vm, vm->base, vm->limit); 143 EVENT3(VMCreate, vm, vm->base, vm->limit);
144 *vmReturn = vm; 144 *vmReturn = vm;
145 return ResOK; 145 return ResOK;
146 146
@@ -170,7 +170,7 @@ void VMDestroy(VM vm)
170 170
171 b = VirtualFree((LPVOID)vm, (SIZE_T)0, MEM_RELEASE); 171 b = VirtualFree((LPVOID)vm, (SIZE_T)0, MEM_RELEASE);
172 AVER(b != 0); 172 AVER(b != 0);
173 EVENT_P(VMDestroy, vm); 173 EVENT1(VMDestroy, vm);
174} 174}
175 175
176 176
@@ -240,7 +240,7 @@ Res VMMap(VM vm, Addr base, Addr limit)
240 240
241 vm->mapped += AddrOffset(base, limit); 241 vm->mapped += AddrOffset(base, limit);
242 242
243 EVENT_PAA(VMMap, vm, base, limit); 243 EVENT3(VMMap, vm, base, limit);
244 return ResOK; 244 return ResOK;
245} 245}
246 246
@@ -266,7 +266,7 @@ void VMUnmap(VM vm, Addr base, Addr limit)
266 AVER(b != 0); /* .assume.free.success */ 266 AVER(b != 0); /* .assume.free.success */
267 vm->mapped -= AddrOffset(base, limit); 267 vm->mapped -= AddrOffset(base, limit);
268 268
269 EVENT_PAA(VMUnmap, vm, base, limit); 269 EVENT3(VMUnmap, vm, base, limit);
270} 270}
271 271
272 272