Mercurial > cgi-bin > hgwebdir.cgi > PR > Applications > VReo > Reo__Matrix_Mult
view Reo__Matrix_Mult/Circuit.c @ 1:1b61e0c00512
almost working k=3, about to change to k=4
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Wed, 19 Feb 2014 09:27:10 -0800 |
| parents | c4b1849c05ef |
| children | 96deb7b4502e |
line source
1 #include <math.h>
2 #include <string.h>
3 #include "Reo__Matrix_Mult.h"
4 #include "Circuit.h"
6 VReoCircuit *create_circuit(SlaveVP *animVP) {
8 /* Declare variables. */
9 VReoCircuit *circuit;
10 VReoBridge *bridge, *bridges, **boundaryBridges;
11 VReoIsland *islands, *island;
12 VReoO1island *o1islands, *o1island;
13 VReoCheckerFn *bridgeReaderCheckerFns, *bridgeWriterCheckerFns;
14 VReoDoerFn *bridgeReaderDoerFns, *bridgeWriterDoerFns;
15 PrivQueueStruc *offerQ0, *offerQ1;
16 VReoPartnerQStruct *partnerQStruct0, *partnerQStruct1;
18 /* Allocate memory for bridges, islands, and the circuit. */
19 bridges = PR_WL__malloc(NUM_BRIDGES * sizeof(VReoBridge));
20 islands = PR_WL__malloc((NUM_ISLANDS == 0 ? 1 : NUM_ISLANDS) * sizeof(VReoIsland));
21 o1islands = PR_WL__malloc((NUM_O1ISLANDS == 0 ? 1 : NUM_O1ISLANDS) * sizeof(VReoO1island));
22 circuit = (VReoCircuit *) PR_WL__malloc(sizeof(VReoCircuit));
24 //
25 // INITIALIZE BRIDGES
26 //
28 /* Initialize bridge Broad_0. */
29 bridge = &(bridges[CKT_BRIDGE_Broad_0]);
30 bridge->buffer = NULL;
31 bridge->bridgeIsFull = FALSE;
32 bridge->writerType = None;
33 bridge->readerType = None;
34 bridge->waitingReaderVP = NULL;
35 bridge->waitingWriterVP = NULL;
36 bridge->readerPartnerQStruct = NULL;
37 bridge->writerPartnerQStruct = NULL;
39 /* Initialize bridge In_0. */
40 bridge = &(bridges[CKT_BRIDGE_In_0]);
41 bridge->buffer = NULL;
42 bridge->bridgeIsFull = FALSE;
43 bridge->waitingReaderVP = NULL;
44 bridge->waitingWriterVP = NULL;
45 bridge->readerPartnerQStruct = NULL;
46 bridge->writerPartnerQStruct = NULL;
48 /* Initialize bridge In_1. */
49 bridge = &(bridges[CKT_BRIDGE_In_1]);
50 bridge->buffer = NULL;
51 bridge->bridgeIsFull = FALSE;
52 bridge->waitingReaderVP = NULL;
53 bridge->waitingWriterVP = NULL;
54 bridge->readerPartnerQStruct = NULL;
55 bridge->writerPartnerQStruct = NULL;
57 /* Initialize bridge Out_0. */
58 bridge = &(bridges[CKT_BRIDGE_Out_0]);
59 bridge->buffer = NULL;
60 bridge->bridgeIsFull = FALSE;
61 bridge->waitingReaderVP = NULL;
62 bridge->waitingWriterVP = NULL;
63 bridge->readerPartnerQStruct = NULL;
64 bridge->writerPartnerQStruct = NULL;
66 /* Initialize bridge Out_1. */
67 bridge = &(bridges[CKT_BRIDGE_Out_1]);
68 bridge->buffer = NULL;
69 bridge->bridgeIsFull = FALSE;
70 bridge->waitingReaderVP = NULL;
71 bridge->waitingWriterVP = NULL;
72 bridge->readerPartnerQStruct = NULL;
73 bridge->writerPartnerQStruct = NULL;
75 /* Initialize bridge FIFO0. */
76 bridge = &(bridges[CKT_BRIDGE_FIFO0]);
77 bridge->buffer = NULL;
78 bridge->bridgeIsFull = FALSE;
79 bridge->waitingReaderVP = NULL;
80 bridge->waitingWriterVP = NULL;
81 bridge->readerPartnerQStruct = NULL;
82 bridge->writerPartnerQStruct = NULL;
84 /* Initialize bridge FIFO1. */
85 bridge = &(bridges[CKT_BRIDGE_FIFO1]);
86 bridge->buffer = malloc(1);
87 bridge->bridgeIsFull = TRUE;
88 bridge->waitingReaderVP = NULL;
89 bridge->waitingWriterVP = NULL;
90 bridge->readerPartnerQStruct = NULL;
91 bridge->writerPartnerQStruct = NULL;
93 /* Initialize bridge FIFO2. */
94 bridge = &(bridges[CKT_BRIDGE_FIFO2]);
95 bridge->buffer = NULL;
96 bridge->bridgeIsFull = FALSE;
97 bridge->waitingReaderVP = NULL;
98 bridge->waitingWriterVP = NULL;
99 bridge->readerPartnerQStruct = NULL;
100 bridge->writerPartnerQStruct = NULL;
102 /* Initialize bridge FIFO3. */
103 bridge = &(bridges[CKT_BRIDGE_FIFO3]);
104 bridge->buffer = malloc(1);
105 bridge->bridgeIsFull = TRUE;
106 bridge->waitingReaderVP = NULL;
107 bridge->waitingWriterVP = NULL;
108 bridge->readerPartnerQStruct = NULL;
109 bridge->writerPartnerQStruct = NULL;
111 /* Initialize boundary bridges. */
112 boundaryBridges = PR_WL__malloc(NUM_BOUNDARY_BRIDGES * sizeof(VReoBridge*));
113 boundaryBridges[0] = &(bridges[CKT_BRIDGE_Broad_0]);
114 boundaryBridges[1] = &(bridges[CKT_BRIDGE_In_0]);
115 boundaryBridges[2] = &(bridges[CKT_BRIDGE_In_1]);
116 boundaryBridges[3] = &(bridges[CKT_BRIDGE_Out_0]);
117 boundaryBridges[4] = &(bridges[CKT_BRIDGE_Out_1]);
119 //
120 // INITIALIZE ISLANDS
121 //
123 /* Initialize Island 0. */
124 island = &(islands[CKT_I0]);
126 island->numCheckerFns = 1;
127 island->numBridges = 4;
129 island->checkerFns = PR_WL__malloc(island->numCheckerFns * sizeof(VReoCheckerFn));
130 island->checkerFns[0] = &Checker_0__I0;
132 island->doerFns = PR_WL__malloc(island->numCheckerFns * sizeof(VReoDoerFn));
133 island->doerFns[0] = &Doer_0__I0;
135 island->bridges = PR_WL__malloc(island->numBridges * sizeof(VReoBridge *));
136 island->bridges[I0_BRIDGE_Broad_0] = &(bridges[CKT_BRIDGE_Broad_0]);
137 island->bridges[I0_BRIDGE_Broad_0Output1] = &(bridges[CKT_BRIDGE_Broad_0Output1]);
138 island->bridges[I0_BRIDGE_Broad_0Output2] = &(bridges[CKT_BRIDGE_Broad_0Output2]);
139 island->bridges[I0_BRIDGE_Out_1] = &(bridges[CKT_BRIDGE_Out_1]);
141 /*
142 * Initialize Island 0: register Island 0 as a reader on
143 * bridge Broad_0.
144 */
145 bridgeReaderCheckerFns = PR_WL__malloc( NUM_I0_CHECKERS_INVOLVE_BRIDGE_Broad_0 * sizeof(VReoCheckerFn *) );
146 bridgeReaderDoerFns = PR_WL__malloc( NUM_I0_CHECKERS_INVOLVE_BRIDGE_Broad_0 * sizeof(VReoDoerFn *) );
147 bridgeReaderCheckerFns[0] = (VReoCheckerFn) &CHECKER3_I0;
148 bridgeReaderDoerFns[0] = (VReoDoerFn) &DOER3_I0;
150 bridge = &(bridges[CKT_BRIDGE_Broad_0]);
151 bridge->reader = &(islands[CKT_I0]);
152 bridge->readerType = Island;
153 bridge->numReaderCheckerFns = NUM_I0_CHECKERS_INVOLVE_BRIDGE_Broad_0;
154 bridge->readerCheckerFns = (VReoCheckerFn *) bridgeReaderCheckerFns;
155 bridge->readerDoerFns = (VReoDoerFn *) bridgeReaderDoerFns;
157 /*
158 * Initialize Island 0: register Island 0 as a writer on
159 * bridge Broad_0Output1.
160 */
161 bridgeWriterCheckerFns = PR_WL__malloc( NUM_I0_CHECKERS_INVOLVE_BRIDGE_Broad_0Output1 * sizeof(VReoCheckerFn *) );
162 bridgeWriterDoerFns = PR_WL__malloc( NUM_I0_CHECKERS_INVOLVE_BRIDGE_Broad_0Output1 * sizeof(VReoDoerFn *) );
163 bridgeWriterCheckerFns[0] = (VReoCheckerFn) &CHECKER3_I0;
164 bridgeWriterDoerFns[0] = (VReoDoerFn) &DOER3_I0;
166 bridge = &(bridges[CKT_BRIDGE_Broad_0Output1]);
167 bridge->writer = &(islands[CKT_I0]);
168 bridge->writerType = Island;
169 bridge->numWriterCheckerFns = NUM_I0_CHECKERS_INVOLVE_BRIDGE_Broad_0Output1;
170 bridge->writerCheckerFns = (VReoCheckerFn *) bridgeWriterCheckerFns;
171 bridge->writerDoerFns = (VReoDoerFn *) bridgeWriterDoerFns;
173 /*
174 * Initialize Island 0: register Island 0 as a writer on
175 * bridge Broad_0Output2.
176 */
177 bridgeWriterCheckerFns = PR_WL__malloc( NUM_I0_CHECKERS_INVOLVE_BRIDGE_Broad_0Output2 * sizeof(VReoCheckerFn *) );
178 bridgeWriterDoerFns = PR_WL__malloc( NUM_I0_CHECKERS_INVOLVE_BRIDGE_Broad_0Output2 * sizeof(VReoDoerFn *) );
179 bridgeWriterCheckerFns[0] = (VReoCheckerFn) &CHECKER3_I0;
180 bridgeWriterDoerFns[0] = (VReoDoerFn) &DOER3_I0;
182 bridge = &(bridges[CKT_BRIDGE_Broad_0Output2]);
183 bridge->writer = &(islands[CKT_I0]);
184 bridge->writerType = Island;
185 bridge->numWriterCheckerFns = NUM_I0_CHECKERS_INVOLVE_BRIDGE_Broad_0Output2;
186 bridge->writerCheckerFns = (VReoCheckerFn *) bridgeWriterCheckerFns;
187 bridge->writerDoerFns = (VReoDoerFn *) bridgeWriterDoerFns;
189 /*
190 * Initialize Island 0: register Island 0 as a writer on
191 * bridge Out_1.
192 */
193 bridgeWriterCheckerFns = PR_WL__malloc( NUM_I0_CHECKERS_INVOLVE_BRIDGE_Out_1 * sizeof(VReoCheckerFn *) );
194 bridgeWriterDoerFns = PR_WL__malloc( NUM_I0_CHECKERS_INVOLVE_BRIDGE_Out_1 * sizeof(VReoDoerFn *) );
195 bridgeWriterCheckerFns[0] = (VReoCheckerFn) &CHECKER3_I0;
196 bridgeWriterDoerFns[0] = (VReoDoerFn) &DOER3_I0;
198 bridge = &(bridges[CKT_BRIDGE_Out_1]);
199 bridge->writer = &(islands[CKT_I0]);
200 bridge->writerType = Island;
201 bridge->numWriterCheckerFns = NUM_I0_CHECKERS_INVOLVE_BRIDGE_Out_1;
202 bridge->writerCheckerFns = (VReoCheckerFn *) bridgeWriterCheckerFns;
203 bridge->writerDoerFns = (VReoDoerFn *) bridgeWriterDoerFns;
205 /* Initialize Island 1. */
206 island = &(islands[CKT_I1]);
208 island->numCheckerFns = 1;
209 island->numBridges = 3;
211 island->checkerFns = PR_WL__malloc(island->numCheckerFns * sizeof(VReoCheckerFn));
212 island->checkerFns[0] = &Checker_0__I1;
214 island->doerFns = PR_WL__malloc(island->numCheckerFns * sizeof(VReoDoerFn));
215 island->doerFns[0] = &Doer_0__I1;
217 island->bridges = PR_WL__malloc(island->numBridges * sizeof(VReoBridge *));
218 island->bridges[I1_BRIDGE_X_0Input0] = &(bridges[CKT_BRIDGE_X_0Input0]);
219 island->bridges[I1_BRIDGE_In_0] = &(bridges[CKT_BRIDGE_In_0]);
220 island->bridges[I1_BRIDGE_In_0Output1] = &(bridges[CKT_BRIDGE_In_0Output1]);
222 /*
223 * Initialize Island 1: register Island 1 as a reader on
224 * bridge X_0Input0.
225 */
226 bridgeReaderCheckerFns = PR_WL__malloc( NUM_I1_CHECKERS_INVOLVE_BRIDGE_X_0Input0 * sizeof(VReoCheckerFn *) );
227 bridgeReaderDoerFns = PR_WL__malloc( NUM_I1_CHECKERS_INVOLVE_BRIDGE_X_0Input0 * sizeof(VReoDoerFn *) );
228 bridgeReaderCheckerFns[0] = (VReoCheckerFn) &CHECKER2_I1;
229 bridgeReaderDoerFns[0] = (VReoDoerFn) &DOER2_I1;
231 bridge = &(bridges[CKT_BRIDGE_X_0Input0]);
232 bridge->reader = &(islands[CKT_I1]);
233 bridge->readerType = Island;
234 bridge->numReaderCheckerFns = NUM_I1_CHECKERS_INVOLVE_BRIDGE_X_0Input0;
235 bridge->readerCheckerFns = (VReoCheckerFn *) bridgeReaderCheckerFns;
236 bridge->readerDoerFns = (VReoDoerFn *) bridgeReaderDoerFns;
238 /*
239 * Initialize Island 1: register Island 1 as a reader on
240 * bridge In_0.
241 */
242 bridgeReaderCheckerFns = PR_WL__malloc( NUM_I1_CHECKERS_INVOLVE_BRIDGE_In_0 * sizeof(VReoCheckerFn *) );
243 bridgeReaderDoerFns = PR_WL__malloc( NUM_I1_CHECKERS_INVOLVE_BRIDGE_In_0 * sizeof(VReoDoerFn *) );
244 bridgeReaderCheckerFns[0] = (VReoCheckerFn) &CHECKER2_I1;
245 bridgeReaderDoerFns[0] = (VReoDoerFn) &DOER2_I1;
247 bridge = &(bridges[CKT_BRIDGE_In_0]);
248 bridge->reader = &(islands[CKT_I1]);
249 bridge->readerType = Island;
250 bridge->numReaderCheckerFns = NUM_I1_CHECKERS_INVOLVE_BRIDGE_In_0;
251 bridge->readerCheckerFns = (VReoCheckerFn *) bridgeReaderCheckerFns;
252 bridge->readerDoerFns = (VReoDoerFn *) bridgeReaderDoerFns;
254 /*
255 * Initialize Island 1: register Island 1 as a writer on
256 * bridge In_0Output1.
257 */
258 bridgeWriterCheckerFns = PR_WL__malloc( NUM_I1_CHECKERS_INVOLVE_BRIDGE_In_0Output1 * sizeof(VReoCheckerFn *) );
259 bridgeWriterDoerFns = PR_WL__malloc( NUM_I1_CHECKERS_INVOLVE_BRIDGE_In_0Output1 * sizeof(VReoDoerFn *) );
260 bridgeWriterCheckerFns[0] = (VReoCheckerFn) &CHECKER2_I1;
261 bridgeWriterDoerFns[0] = (VReoDoerFn) &DOER2_I1;
263 bridge = &(bridges[CKT_BRIDGE_In_0Output1]);
264 bridge->writer = &(islands[CKT_I1]);
265 bridge->writerType = Island;
266 bridge->numWriterCheckerFns = NUM_I1_CHECKERS_INVOLVE_BRIDGE_In_0Output1;
267 bridge->writerCheckerFns = (VReoCheckerFn *) bridgeWriterCheckerFns;
268 bridge->writerDoerFns = (VReoDoerFn *) bridgeWriterDoerFns;
270 /* Initialize Island 2. */
271 island = &(islands[CKT_I2]);
273 island->numCheckerFns = 1;
274 island->numBridges = 3;
276 island->checkerFns = PR_WL__malloc(island->numCheckerFns * sizeof(VReoCheckerFn));
277 island->checkerFns[0] = &Checker_0__I2;
279 island->doerFns = PR_WL__malloc(island->numCheckerFns * sizeof(VReoDoerFn));
280 island->doerFns[0] = &Doer_0__I2;
282 island->bridges = PR_WL__malloc(island->numBridges * sizeof(VReoBridge *));
283 island->bridges[I2_BRIDGE_In_1] = &(bridges[CKT_BRIDGE_In_1]);
284 island->bridges[I2_BRIDGE_X_1Input0] = &(bridges[CKT_BRIDGE_X_1Input0]);
285 island->bridges[I2_BRIDGE_In_1Output0] = &(bridges[CKT_BRIDGE_In_1Output0]);
287 /*
288 * Initialize Island 2: register Island 2 as a reader on
289 * bridge In_1.
290 */
291 bridgeReaderCheckerFns = PR_WL__malloc( NUM_I2_CHECKERS_INVOLVE_BRIDGE_In_1 * sizeof(VReoCheckerFn *) );
292 bridgeReaderDoerFns = PR_WL__malloc( NUM_I2_CHECKERS_INVOLVE_BRIDGE_In_1 * sizeof(VReoDoerFn *) );
293 bridgeReaderCheckerFns[0] = (VReoCheckerFn) &CHECKER3_I2;
294 bridgeReaderDoerFns[0] = (VReoDoerFn) &DOER3_I2;
296 bridge = &(bridges[CKT_BRIDGE_In_1]);
297 bridge->reader = &(islands[CKT_I2]);
298 bridge->readerType = Island;
299 bridge->numReaderCheckerFns = NUM_I2_CHECKERS_INVOLVE_BRIDGE_In_1;
300 bridge->readerCheckerFns = (VReoCheckerFn *) bridgeReaderCheckerFns;
301 bridge->readerDoerFns = (VReoDoerFn *) bridgeReaderDoerFns;
303 /*
304 * Initialize Island 2: register Island 2 as a reader on
305 * bridge X_1Input0.
306 */
307 bridgeReaderCheckerFns = PR_WL__malloc( NUM_I2_CHECKERS_INVOLVE_BRIDGE_X_1Input0 * sizeof(VReoCheckerFn *) );
308 bridgeReaderDoerFns = PR_WL__malloc( NUM_I2_CHECKERS_INVOLVE_BRIDGE_X_1Input0 * sizeof(VReoDoerFn *) );
309 bridgeReaderCheckerFns[0] = (VReoCheckerFn) &CHECKER3_I2;
310 bridgeReaderDoerFns[0] = (VReoDoerFn) &DOER3_I2;
312 bridge = &(bridges[CKT_BRIDGE_X_1Input0]);
313 bridge->reader = &(islands[CKT_I2]);
314 bridge->readerType = Island;
315 bridge->numReaderCheckerFns = NUM_I2_CHECKERS_INVOLVE_BRIDGE_X_1Input0;
316 bridge->readerCheckerFns = (VReoCheckerFn *) bridgeReaderCheckerFns;
317 bridge->readerDoerFns = (VReoDoerFn *) bridgeReaderDoerFns;
319 /*
320 * Initialize Island 2: register Island 2 as a writer on
321 * bridge In_1Output0.
322 */
323 bridgeWriterCheckerFns = PR_WL__malloc( NUM_I2_CHECKERS_INVOLVE_BRIDGE_In_1Output0 * sizeof(VReoCheckerFn *) );
324 bridgeWriterDoerFns = PR_WL__malloc( NUM_I2_CHECKERS_INVOLVE_BRIDGE_In_1Output0 * sizeof(VReoDoerFn *) );
325 bridgeWriterCheckerFns[0] = (VReoCheckerFn) &CHECKER3_I2;
326 bridgeWriterDoerFns[0] = (VReoDoerFn) &DOER3_I2;
328 bridge = &(bridges[CKT_BRIDGE_In_1Output0]);
329 bridge->writer = &(islands[CKT_I2]);
330 bridge->writerType = Island;
331 bridge->numWriterCheckerFns = NUM_I2_CHECKERS_INVOLVE_BRIDGE_In_1Output0;
332 bridge->writerCheckerFns = (VReoCheckerFn *) bridgeWriterCheckerFns;
333 bridge->writerDoerFns = (VReoDoerFn *) bridgeWriterDoerFns;
335 /* Initialize O1Island 0. */
336 o1island = &(o1islands[CKT_O1I0]);
338 o1island->numBridges = 3;
339 o1island->bridges = PR_WL__malloc(o1island->numBridges * sizeof(VReoBridge *));
340 o1island->bridges[O1I0_BRIDGE_Out_0Input1] = &(bridges[CKT_BRIDGE_Out_0Input1]);
341 o1island->bridges[O1I0_BRIDGE_Out_0Input0] = &(bridges[CKT_BRIDGE_Out_0Input0]);
342 o1island->bridges[O1I0_BRIDGE_Out_0] = &(bridges[CKT_BRIDGE_Out_0]);
344 /*
345 * Initialize O1Island 0: create queues (queue 0 holds puts of input
346 * bridges; queue 1 holds gets of the output bridge).
347 */
348 offerQ0 = makePrivQ();
349 offerQ1 = makePrivQ();
351 partnerQStruct0 = PR_WL__malloc( sizeof(VReoPartnerQStruct) );
352 partnerQStruct0->numQs = 1;
353 partnerQStruct0->partnerQs = PR_WL__malloc( partnerQStruct0->numQs * sizeof(PrivQueueStruc *) );
354 partnerQStruct0->doerFns = PR_WL__malloc( partnerQStruct0->numQs * sizeof(VReoO1islandDoerFn) );
355 partnerQStruct0->doerFns[0] = &o1islandReadBridgeToWrittenBridgeDoer;
356 partnerQStruct0->partnerQs[0] = offerQ1;
358 partnerQStruct1 = PR_WL__malloc( sizeof(VReoPartnerQStruct) );
359 partnerQStruct1->numQs = 1;
360 partnerQStruct1->partnerQs = PR_WL__malloc( partnerQStruct1->numQs * sizeof(PrivQueueStruc *) );
361 partnerQStruct1->doerFns = PR_WL__malloc( partnerQStruct1->numQs * sizeof(VReoO1islandDoerFn) );
362 partnerQStruct1->doerFns[0] = &o1islandReadBridgeToWrittenBridgeDoer;
363 partnerQStruct1->partnerQs[0] = offerQ0;
365 /*
366 * Initialize O1Island 0: register O1Island 0 as a reader on
367 * bridge Out_0Input1.
368 */
369 bridge = &(bridges[CKT_BRIDGE_Out_0Input1]);
370 bridge->reader = &(o1island);
371 bridge->readerType = O1island;
372 bridge->readerPartnerQStruct = partnerQStruct0;
373 bridge->readerOfferQ = offerQ0;
375 /*
376 * Initialize O1Island 0: register O1Island 0 as a reader on
377 * bridge Out_0Input0.
378 */
379 bridge = &(bridges[CKT_BRIDGE_Out_0Input0]);
380 bridge->reader = &(o1island);
381 bridge->readerType = O1island;
382 bridge->readerPartnerQStruct = partnerQStruct0;
383 bridge->readerOfferQ = offerQ0;
385 /*
386 * Initialize O1Island 0: register O1Island 0 as the only
387 * writer on bridge Out_0.
388 */
389 bridge = &(bridges[CKT_BRIDGE_Out_0]);
390 bridge->writer = &(o1island);
391 bridge->writerType = O1island;
392 bridge->writerPartnerQStruct = partnerQStruct1;
393 bridge->writerOfferQ = offerQ1;
395 //
396 // INITIALIZE QUEUES
397 //
399 /* Assumption: (writerType != NULL) implies (writerType != VP) */
400 bridge = &(bridges[CKT_BRIDGE_Out_0Input1]);
401 if (bridge->writerType != None && bridge->bridgeIsFull)
402 writePrivQ( bridge, bridge->readerOfferQ );
404 /* Assumption: (writerType != NULL) implies (writerType != VP) */
405 bridge = &(bridges[CKT_BRIDGE_Out_0Input0]);
406 if (bridge->writerType != None && bridge->bridgeIsFull)
407 writePrivQ( bridge, bridge->readerOfferQ );
409 /* Assumption: (readerType != NULL) implies (readerType != VP) */
410 bridge = &(bridges[CKT_BRIDGE_Out_0]);
411 if (bridge->readerType != None && !bridge->bridgeIsFull)
412 writePrivQ( bridge, bridge->writerOfferQ );
414 //
415 // INITIALIZE CIRCUIT
416 //
418 /* Initialize circuit. */
419 circuit->numIslands = NUM_ISLANDS;
420 circuit->numO1islands = NUM_O1ISLANDS;
421 circuit->numBridges = NUM_BRIDGES;
422 circuit->islands = islands;
423 circuit->o1islands = o1islands;
424 circuit->bridges = bridges;
425 circuit->boundaryBridges = boundaryBridges;
426 circuit->VPs = NULL;
428 /* Return. */
429 return (circuit);
430 }
432 void create_VPs_w_init_and_connect( VReoCircuit *circuit, void **initDatums,
433 SlaveVP *animVP)
434 {
435 /* Declare variables. */
436 VReoBridge **boundaryBridges, *bridges, **bridgesForVP;
437 SlaveVP **VPs;
439 VPParams *prodParams;
440 VPParams *consParams;
442 /* Initialize (boundary) bridges. */
443 boundaryBridges = circuit->boundaryBridges;
444 bridges = circuit->bridges;
446 /* Allocate memory for VPs. */
447 VPs = PR_WL__malloc(NUM_VPs * sizeof(SlaveVP *));
449 /* Create Producer VP 0. */
450 bridgesForVP = PR_WL__malloc(1 * sizeof(VReoBridge *));
451 bridgesForVP[0] = boundaryBridges[CKT_VP_PROD0];
453 prodParams = PR_WL__malloc(sizeof(MatrixMultWorkUnit));
454 prodParams->inBridges = NULL;
455 prodParams->outBridges = bridgesForVP;
456 prodParams->initData = initDatums[CKT_VP_PROD0];
458 VPs[CKT_VP_PROD0] = VReo__create_VP(&producer_Fn, prodParams, circuit, animVP);
460 boundaryBridges[CKT_VP_PROD0]->writer = VPs[CKT_VP_PROD0];
461 boundaryBridges[CKT_VP_PROD0]->writerType = VP;
463 /* Create Producer VP 1. */
464 bridgesForVP = PR_WL__malloc(1 * sizeof(VReoBridge *));
465 bridgesForVP[0] = boundaryBridges[CKT_VP_PROD1];
467 prodParams = PR_WL__malloc(sizeof(MatrixMultWorkUnit));
468 prodParams->inBridges = NULL;
469 prodParams->outBridges = bridgesForVP;
470 prodParams->initData = initDatums[CKT_VP_PROD1];
472 VPs[CKT_VP_PROD1] = VReo__create_VP(&producer_Fn, prodParams, circuit, animVP);
474 boundaryBridges[CKT_VP_PROD1]->writer = VPs[CKT_VP_PROD1];
475 boundaryBridges[CKT_VP_PROD1]->writerType = VP;
477 /* Create Producer VP 2. */
478 bridgesForVP = PR_WL__malloc(1 * sizeof(VReoBridge *));
479 bridgesForVP[0] = boundaryBridges[CKT_VP_PROD2];
481 prodParams = PR_WL__malloc(sizeof(MatrixMultWorkUnit));
482 prodParams->inBridges = NULL;
483 prodParams->outBridges = bridgesForVP;
484 prodParams->initData = initDatums[CKT_VP_PROD2];
486 VPs[CKT_VP_PROD2] = VReo__create_VP(&producer_Fn, prodParams, circuit, animVP);
488 boundaryBridges[CKT_VP_PROD2]->writer = VPs[CKT_VP_PROD2];
489 boundaryBridges[CKT_VP_PROD2]->writerType = VP;
491 // /* Create Consumer VP 0. */
492 // consParams = PR_WL__malloc(sizeof(TestAppConsumerParams));
493 //
494 // //bridgesForVP = PR_WL__malloc(1 * sizeof(VReoBridge *));
495 // //bridgesForVP[0] = boundaryBridges[CKT_VP_CONS0];
496 //
497 // bridgesForVP = PR_WL__malloc(2 * sizeof(VReoBridge *));
498 // bridgesForVP[0] = bridges[CKT_BRIDGE_Out_0];
499 // bridgesForVP[0] = bridges[CKT_BRIDGE_Out_1];
500 //
501 // consParams->inBridges = bridgesForVP;
502 // consParams->outBridges = NULL;
503 //
504 // VPs[CKT_VP_CONS0] = VReo__create_VP(&consumer_Fn, consParams, circuit, animVP);
505 // boundaryBridges[CKT_VP_CONS0]->reader = VPs[CKT_VP_CONS0];
506 // boundaryBridges[CKT_VP_CONS0]->readerType = VP;
508 // /* Create Consumer VP 1. */
509 // consParams = PR_WL__malloc(sizeof(TestAppConsumerParams));
510 //
511 // //bridgesForVP = PR_WL__malloc(1 * sizeof(VReoBridge *));
512 // //bridgesForVP[0] = boundaryBridges[CKT_VP_CONS1];
513 //
514 // bridgesForVP = PR_WL__malloc(2 * sizeof(VReoBridge *));
515 // bridgesForVP[0] = bridges[CKT_BRIDGE_Out_0];
516 // bridgesForVP[0] = bridges[CKT_BRIDGE_Out_1];
517 //
518 // consParams->inBridges = bridgesForVP;
519 // consParams->outBridges = NULL;
520 //
521 // VPs[CKT_VP_CONS1] = VReo__create_VP(&consumer_Fn, consParams, circuit, animVP);
522 // boundaryBridges[CKT_VP_CONS1]->reader = VPs[CKT_VP_CONS1];
523 // boundaryBridges[CKT_VP_CONS1]->readerType = VP;
525 /* Create Consumer VP. */
526 consParams = PR_WL__malloc(sizeof(VPParams));
528 bridgesForVP = PR_WL__malloc(2 * sizeof(VReoBridge *));
529 bridgesForVP[0] = &(bridges[CKT_BRIDGE_Out_0]);
530 bridgesForVP[1] = &(bridges[CKT_BRIDGE_Out_1]);
532 consParams->inBridges = bridgesForVP;
533 consParams->outBridges = NULL;
534 consParams->initData = initDatums[CKT_VP_CONS0];
536 VPs[CKT_VP_CONS0] = VReo__create_VP(&consumer_Fn, consParams, circuit, animVP);
538 bridges[CKT_BRIDGE_Out_0].reader = VPs[CKT_VP_CONS0];
539 bridges[CKT_BRIDGE_Out_1].reader = VPs[CKT_VP_CONS0];
540 bridges[CKT_BRIDGE_Out_0].readerType = VP;
541 bridges[CKT_BRIDGE_Out_1].readerType = VP;
543 /* Start circuit. */
544 VReo__start_circuit(circuit, animVP);
545 }
547 //==============================================================================
549 /* Checkers for Island 0. */
551 bool32 Checker_0__I0( VReoIsland *island ) {
552 VReoBridge *bridgeBroad_0Output1, *bridgeBroad_0Output2, *bridgeOut_1, *bridgeBroad_0;
553 bool32 satisfied;
555 bridgeBroad_0Output1 = (island->bridges)[I0_BRIDGE_Broad_0Output1];
556 bridgeBroad_0Output2 = (island->bridges)[I0_BRIDGE_Broad_0Output2];
557 bridgeOut_1 = (island->bridges)[I0_BRIDGE_Out_1];
558 bridgeBroad_0 = (island->bridges)[I0_BRIDGE_Broad_0];
559 satisfied = READY_FOR_READ_BRIDGE_Broad_0 && READY_FOR_WRITE_BRIDGE_Broad_0Output1 && READY_FOR_WRITE_BRIDGE_Broad_0Output2 && READY_FOR_WRITE_BRIDGE_Out_1;
560 return satisfied;
561 }
563 /* Checkers for Island 1. */
565 bool32 Checker_0__I1( VReoIsland *island ) {
566 VReoBridge *bridgeX_0Input0, *bridgeIn_0, *bridgeIn_0Output1;
567 bool32 satisfied;
569 bridgeX_0Input0 = (island->bridges)[I1_BRIDGE_X_0Input0];
570 bridgeIn_0 = (island->bridges)[I1_BRIDGE_In_0];
571 bridgeIn_0Output1 = (island->bridges)[I1_BRIDGE_In_0Output1];
572 satisfied = READY_FOR_READ_BRIDGE_X_0Input0 && READY_FOR_READ_BRIDGE_In_0 && READY_FOR_WRITE_BRIDGE_In_0Output1;
573 return satisfied;
574 }
576 /* Checkers for Island 2. */
578 bool32 Checker_0__I2( VReoIsland *island ) {
579 VReoBridge *bridgeIn_1Output0, *bridgeIn_1, *bridgeX_1Input0;
580 bool32 satisfied;
582 bridgeIn_1Output0 = (island->bridges)[I2_BRIDGE_In_1Output0];
583 bridgeIn_1 = (island->bridges)[I2_BRIDGE_In_1];
584 bridgeX_1Input0 = (island->bridges)[I2_BRIDGE_X_1Input0];
585 satisfied = READY_FOR_READ_BRIDGE_In_1 && READY_FOR_READ_BRIDGE_X_1Input0 && READY_FOR_WRITE_BRIDGE_In_1Output0;
586 return satisfied;
587 }
589 //==============================================================================
591 /* Declaration of auxiliary doers. */
593 void Auxdoer_for_bridge_Broad_0( VReoBridge *bridge );
594 void Auxdoer_for_bridge_In_0( VReoBridge *bridge );
595 void Auxdoer_for_bridge_In_1( VReoBridge *bridge );
596 void Auxdoer_for_bridge_Out_0( VReoBridge *bridge );
597 void Auxdoer_for_bridge_Out_1( VReoBridge *bridge );
598 void Auxdoer_for_bridge_In_0Output1( VReoBridge *bridge );
599 void Auxdoer_for_bridge_Out_0Input1( VReoBridge *bridge );
601 void Auxdoer_for_bridge_Broad_0Output1( VReoBridge *bridge );
602 void Auxdoer_for_bridge_X_0Input0( VReoBridge *bridge );
604 void Auxdoer_for_bridge_In_1Output0( VReoBridge *bridge );
605 void Auxdoer_for_bridge_Out_0Input0( VReoBridge *bridge );
607 void Auxdoer_for_bridge_Broad_0Output2( VReoBridge *bridge );
608 void Auxdoer_for_bridge_X_1Input0( VReoBridge *bridge );
610 /* Doers for Island 0. */
612 void Doer_0__I0( VReoIsland *island ) {
613 VReoBridge *bridgeBroad_0Output1, *bridgeBroad_0Output2, *bridgeOut_1, *bridgeBroad_0;
615 /* Initialize bridges. */
616 bridgeBroad_0Output1 = (island->bridges)[I0_BRIDGE_Broad_0Output1];
617 bridgeBroad_0Output2 = (island->bridges)[I0_BRIDGE_Broad_0Output2];
618 bridgeOut_1 = (island->bridges)[I0_BRIDGE_Out_1];
619 bridgeBroad_0 = (island->bridges)[I0_BRIDGE_Broad_0];
621 /* Distribute data. */
622 bridgeBroad_0Output1->buffer = bridgeBroad_0->buffer;
623 bridgeBroad_0Output2->buffer = bridgeBroad_0->buffer;
624 bridgeOut_1->buffer = bridgeBroad_0->buffer;
626 /* Update bridge status. */
627 bridgeBroad_0->bridgeIsFull = FALSE;
628 bridgeBroad_0Output1->bridgeIsFull = TRUE;
629 bridgeBroad_0Output2->bridgeIsFull = TRUE;
630 bridgeOut_1->bridgeIsFull = TRUE;
632 /* Prepare reader VPs. */
633 PR_PI__make_slave_ready_for_lang(bridgeOut_1->waitingReaderVP, VReo_MAGIC_NUMBER);
634 bridgeOut_1->waitingReaderVP->dataRetFromReq = bridgeOut_1->buffer;
635 bridgeOut_1->waitingReaderVP = NULL;
636 bridgeOut_1->bridgeIsFull = FALSE;
638 /* Prepare writer VPs. */
639 PR_PI__make_slave_ready_for_lang(bridgeBroad_0->waitingWriterVP, VReo_MAGIC_NUMBER);
640 bridgeBroad_0->waitingWriterVP = NULL;
642 /* Call auxiliary doers to complete this transition. */
643 Auxdoer_for_bridge_Broad_0Output1(bridgeBroad_0Output1);
644 Auxdoer_for_bridge_Broad_0Output2(bridgeBroad_0Output2);
645 Auxdoer_for_bridge_Out_1(bridgeOut_1);
646 Auxdoer_for_bridge_Broad_0(bridgeBroad_0);
647 }
649 /* Doers for Island 1. */
651 void Doer_0__I1( VReoIsland *island ) {
652 VReoBridge *bridgeX_0Input0, *bridgeIn_0, *bridgeIn_0Output1;
654 /* Initialize bridges. */
655 bridgeX_0Input0 = (island->bridges)[I1_BRIDGE_X_0Input0];
656 bridgeIn_0 = (island->bridges)[I1_BRIDGE_In_0];
657 bridgeIn_0Output1 = (island->bridges)[I1_BRIDGE_In_0Output1];
659 /* Distribute data. */
660 bridgeIn_0Output1->buffer = bridgeIn_0->buffer;
662 /* Update bridge status. */
663 bridgeX_0Input0->bridgeIsFull = FALSE;
664 bridgeIn_0->bridgeIsFull = FALSE;
665 bridgeIn_0Output1->bridgeIsFull = TRUE;
667 /* Prepare reader VPs. */
669 /* Prepare writer VPs. */
670 PR_PI__make_slave_ready_for_lang(bridgeIn_0->waitingWriterVP, VReo_MAGIC_NUMBER);
671 bridgeIn_0->waitingWriterVP = NULL;
673 /* Call auxiliary doers to complete this transition. */
674 Auxdoer_for_bridge_X_0Input0(bridgeX_0Input0);
675 Auxdoer_for_bridge_In_0(bridgeIn_0);
676 Auxdoer_for_bridge_In_0Output1(bridgeIn_0Output1);
677 }
679 /* Doers for Island 2. */
681 void Doer_0__I2( VReoIsland *island ) {
682 VReoBridge *bridgeIn_1Output0, *bridgeIn_1, *bridgeX_1Input0;
684 /* Initialize bridges. */
685 bridgeIn_1Output0 = (island->bridges)[I2_BRIDGE_In_1Output0];
686 bridgeIn_1 = (island->bridges)[I2_BRIDGE_In_1];
687 bridgeX_1Input0 = (island->bridges)[I2_BRIDGE_X_1Input0];
689 /* Distribute data. */
690 bridgeIn_1Output0->buffer = bridgeIn_1->buffer;
692 /* Update bridge status. */
693 bridgeIn_1->bridgeIsFull = FALSE;
694 bridgeX_1Input0->bridgeIsFull = FALSE;
695 bridgeIn_1Output0->bridgeIsFull = TRUE;
697 /* Prepare reader VPs. */
699 /* Prepare writer VPs. */
700 PR_PI__make_slave_ready_for_lang(bridgeIn_1->waitingWriterVP, VReo_MAGIC_NUMBER);
701 bridgeIn_1->waitingWriterVP = NULL;
703 /* Call auxiliary doers to complete this transition. */
704 Auxdoer_for_bridge_In_1Output0(bridgeIn_1Output0);
705 Auxdoer_for_bridge_In_1(bridgeIn_1);
706 Auxdoer_for_bridge_X_1Input0(bridgeX_1Input0);
707 }
709 //==============================================================================
711 /* Auxiliary doers for input bridges. */
713 void Auxdoer_for_bridge_Broad_0( VReoBridge *bridge ) {
714 ;
715 }
717 void Auxdoer_for_bridge_In_0( VReoBridge *bridge ) {
718 ;
719 }
721 void Auxdoer_for_bridge_In_1( VReoBridge *bridge ) {
722 ;
723 }
725 /* Auxiliary doers for output bridges. */
727 void Auxdoer_for_bridge_Out_0( VReoBridge *bridge ) {
728 ;
729 }
731 void Auxdoer_for_bridge_Out_1( VReoBridge *bridge ) {
732 ;
733 }
735 /* Auxiliary doers for FIFO bridges. */
737 void Auxdoer_for_bridge_In_0Output1( VReoBridge *bridge ) {
738 int32 numCheckerFns;
739 VReoIsland *islandOnOtherSide;
740 VReoCheckerFn *checkerFns;
741 VReoDoerFn *doerFns;
743 VReoO1island *o1islandOnOtherSide;
744 VReoPartnerQStruct *partnerQstruct;
746 if (bridge->readerType == Island) {
747 islandOnOtherSide = (VReoIsland*) bridge->reader;
748 numCheckerFns = bridge->numReaderCheckerFns;
749 checkerFns = bridge->readerCheckerFns;
750 doerFns = bridge->readerDoerFns;
752 VReo__check_an_island( islandOnOtherSide, numCheckerFns, checkerFns, doerFns );
753 }
755 else if (bridge->readerType == O1island) {
756 o1islandOnOtherSide = (VReoO1island *)bridge->reader;
757 partnerQstruct = bridge->readerPartnerQStruct;
759 VReo__check_an_o1island_that_reads_bridge( o1islandOnOtherSide, bridge, partnerQstruct );
760 }
761 }
762 void Auxdoer_for_bridge_Out_0Input1( VReoBridge *bridge ) {
763 int32 numCheckerFns;
764 VReoIsland *islandOnOtherSide;
765 VReoCheckerFn *checkerFns;
766 VReoDoerFn *doerFns;
768 VReoO1island *o1islandOnOtherSide;
769 VReoPartnerQStruct *partnerQstruct;
771 if (bridge->writerType == Island) {
772 islandOnOtherSide = (VReoIsland*) bridge->writer;
773 numCheckerFns = bridge->numWriterCheckerFns;
774 checkerFns = bridge->writerCheckerFns;
775 doerFns = bridge->writerDoerFns;
777 VReo__check_an_island( islandOnOtherSide, numCheckerFns, checkerFns, doerFns );
778 }
780 else if (bridge->writerType == O1island) {
781 o1islandOnOtherSide = (VReoO1island *)bridge->writer;
782 partnerQstruct = bridge->writerPartnerQStruct;
784 VReo__check_an_o1island_that_writes_bridge( o1islandOnOtherSide, bridge, partnerQstruct );
785 }
786 }
788 void Auxdoer_for_bridge_Broad_0Output1( VReoBridge *bridge ) {
789 int32 numCheckerFns;
790 VReoIsland *islandOnOtherSide;
791 VReoCheckerFn *checkerFns;
792 VReoDoerFn *doerFns;
794 VReoO1island *o1islandOnOtherSide;
795 VReoPartnerQStruct *partnerQstruct;
797 if (bridge->readerType == Island) {
798 islandOnOtherSide = (VReoIsland*) bridge->reader;
799 numCheckerFns = bridge->numReaderCheckerFns;
800 checkerFns = bridge->readerCheckerFns;
801 doerFns = bridge->readerDoerFns;
803 VReo__check_an_island( islandOnOtherSide, numCheckerFns, checkerFns, doerFns );
804 }
806 else if (bridge->readerType == O1island) {
807 o1islandOnOtherSide = (VReoO1island *)bridge->reader;
808 partnerQstruct = bridge->readerPartnerQStruct;
810 VReo__check_an_o1island_that_reads_bridge( o1islandOnOtherSide, bridge, partnerQstruct );
811 }
812 }
813 void Auxdoer_for_bridge_X_0Input0( VReoBridge *bridge ) {
814 int32 numCheckerFns;
815 VReoIsland *islandOnOtherSide;
816 VReoCheckerFn *checkerFns;
817 VReoDoerFn *doerFns;
819 VReoO1island *o1islandOnOtherSide;
820 VReoPartnerQStruct *partnerQstruct;
822 if (bridge->writerType == Island) {
823 islandOnOtherSide = (VReoIsland*) bridge->writer;
824 numCheckerFns = bridge->numWriterCheckerFns;
825 checkerFns = bridge->writerCheckerFns;
826 doerFns = bridge->writerDoerFns;
828 VReo__check_an_island( islandOnOtherSide, numCheckerFns, checkerFns, doerFns );
829 }
831 else if (bridge->writerType == O1island) {
832 o1islandOnOtherSide = (VReoO1island *)bridge->writer;
833 partnerQstruct = bridge->writerPartnerQStruct;
835 VReo__check_an_o1island_that_writes_bridge( o1islandOnOtherSide, bridge, partnerQstruct );
836 }
837 }
839 void Auxdoer_for_bridge_In_1Output0( VReoBridge *bridge ) {
840 int32 numCheckerFns;
841 VReoIsland *islandOnOtherSide;
842 VReoCheckerFn *checkerFns;
843 VReoDoerFn *doerFns;
845 VReoO1island *o1islandOnOtherSide;
846 VReoPartnerQStruct *partnerQstruct;
848 if (bridge->readerType == Island) {
849 islandOnOtherSide = (VReoIsland*) bridge->reader;
850 numCheckerFns = bridge->numReaderCheckerFns;
851 checkerFns = bridge->readerCheckerFns;
852 doerFns = bridge->readerDoerFns;
854 VReo__check_an_island( islandOnOtherSide, numCheckerFns, checkerFns, doerFns );
855 }
857 else if (bridge->readerType == O1island) {
858 o1islandOnOtherSide = (VReoO1island *)bridge->reader;
859 partnerQstruct = bridge->readerPartnerQStruct;
861 VReo__check_an_o1island_that_reads_bridge( o1islandOnOtherSide, bridge, partnerQstruct );
862 }
863 }
864 void Auxdoer_for_bridge_Out_0Input0( VReoBridge *bridge ) {
865 int32 numCheckerFns;
866 VReoIsland *islandOnOtherSide;
867 VReoCheckerFn *checkerFns;
868 VReoDoerFn *doerFns;
870 VReoO1island *o1islandOnOtherSide;
871 VReoPartnerQStruct *partnerQstruct;
873 if (bridge->writerType == Island) {
874 islandOnOtherSide = (VReoIsland*) bridge->writer;
875 numCheckerFns = bridge->numWriterCheckerFns;
876 checkerFns = bridge->writerCheckerFns;
877 doerFns = bridge->writerDoerFns;
879 VReo__check_an_island( islandOnOtherSide, numCheckerFns, checkerFns, doerFns );
880 }
882 else if (bridge->writerType == O1island) {
883 o1islandOnOtherSide = (VReoO1island *)bridge->writer;
884 partnerQstruct = bridge->writerPartnerQStruct;
886 VReo__check_an_o1island_that_writes_bridge( o1islandOnOtherSide, bridge, partnerQstruct );
887 }
888 }
890 void Auxdoer_for_bridge_Broad_0Output2( VReoBridge *bridge ) {
891 int32 numCheckerFns;
892 VReoIsland *islandOnOtherSide;
893 VReoCheckerFn *checkerFns;
894 VReoDoerFn *doerFns;
896 VReoO1island *o1islandOnOtherSide;
897 VReoPartnerQStruct *partnerQstruct;
899 if (bridge->readerType == Island) {
900 islandOnOtherSide = (VReoIsland*) bridge->reader;
901 numCheckerFns = bridge->numReaderCheckerFns;
902 checkerFns = bridge->readerCheckerFns;
903 doerFns = bridge->readerDoerFns;
905 VReo__check_an_island( islandOnOtherSide, numCheckerFns, checkerFns, doerFns );
906 }
908 else if (bridge->readerType == O1island) {
909 o1islandOnOtherSide = (VReoO1island *)bridge->reader;
910 partnerQstruct = bridge->readerPartnerQStruct;
912 VReo__check_an_o1island_that_reads_bridge( o1islandOnOtherSide, bridge, partnerQstruct );
913 }
914 }
915 void Auxdoer_for_bridge_X_1Input0( VReoBridge *bridge ) {
916 int32 numCheckerFns;
917 VReoIsland *islandOnOtherSide;
918 VReoCheckerFn *checkerFns;
919 VReoDoerFn *doerFns;
921 VReoO1island *o1islandOnOtherSide;
922 VReoPartnerQStruct *partnerQstruct;
924 if (bridge->writerType == Island) {
925 islandOnOtherSide = (VReoIsland*) bridge->writer;
926 numCheckerFns = bridge->numWriterCheckerFns;
927 checkerFns = bridge->writerCheckerFns;
928 doerFns = bridge->writerDoerFns;
930 VReo__check_an_island( islandOnOtherSide, numCheckerFns, checkerFns, doerFns );
931 }
933 else if (bridge->writerType == O1island) {
934 o1islandOnOtherSide = (VReoO1island *)bridge->writer;
935 partnerQstruct = bridge->writerPartnerQStruct;
937 VReo__check_an_o1island_that_writes_bridge( o1islandOnOtherSide, bridge, partnerQstruct );
938 }
939 }
