aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorRichard Brooksby2012-08-21 22:48:11 +0100
committerRichard Brooksby2012-08-21 22:48:11 +0100
commit4009b8a55918aa368510106468e153039986fffc (patch)
tree46efac076c43461993fb5038fba438fea6e9fd49 /mps/code
parentab85e6ff329c0237cbe3160f2e10b70ab9c0a182 (diff)
downloademacs-4009b8a55918aa368510106468e153039986fffc.tar.gz
emacs-4009b8a55918aa368510106468e153039986fffc.zip
Abolishing eventgen.pl. event structures are now expanded by the preprocessor.
Abolishing event formats. Each event now has its own structure. Event parameters are now written directly into the event buffer, rather than being copied twice. Copied from Perforce Change: 179010 ServerID: perforce.ravenbrook.com
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