Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > VSs_impls > VSs__MC_shared_impl
diff VSs.c @ 2:f2ed1c379fe7
code nearly complete.. about to begin debugging
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Wed, 30 May 2012 15:02:38 -0700 |
| parents | 67a3a05a39c0 |
| children | 468b8638ff92 |
line diff
1.1 --- a/VSs.c Thu May 24 07:34:21 2012 -0700 1.2 +++ b/VSs.c Wed May 30 15:02:38 2012 -0700 1.3 @@ -11,16 +11,16 @@ 1.4 #include "Queue_impl/PrivateQueue.h" 1.5 #include "Hash_impl/PrivateHash.h" 1.6 1.7 -#include "VOMP.h" 1.8 -#include "VOMP_Counter_Recording.h" 1.9 +#include "VSs.h" 1.10 +#include "VSs_Counter_Recording.h" 1.11 1.12 //========================================================================== 1.13 1.14 void 1.15 -VOMP__init(); 1.16 +VSs__init(); 1.17 1.18 void 1.19 -VOMP__init_Helper(); 1.20 +VSs__init_Helper(); 1.21 //========================================================================== 1.22 1.23 1.24 @@ -32,24 +32,24 @@ 1.25 * 1.26 *There's a pattern for the outside sequential code to interact with the 1.27 * VMS_HW code. 1.28 - *The VMS_HW system is inside a boundary.. every VOMP system is in its 1.29 + *The VMS_HW system is inside a boundary.. every VSs system is in its 1.30 * own directory that contains the functions for each of the processor types. 1.31 * One of the processor types is the "seed" processor that starts the 1.32 * cascade of creating all the processors that do the work. 1.33 *So, in the directory is a file called "EntryPoint.c" that contains the 1.34 * function, named appropriately to the work performed, that the outside 1.35 * sequential code calls. This function follows a pattern: 1.36 - *1) it calls VOMP__init() 1.37 + *1) it calls VSs__init() 1.38 *2) it creates the initial data for the seed processor, which is passed 1.39 * in to the function 1.40 - *3) it creates the seed VOMP processor, with the data to start it with. 1.41 - *4) it calls startVOMPThenWaitUntilWorkDone 1.42 + *3) it creates the seed VSs processor, with the data to start it with. 1.43 + *4) it calls startVSsThenWaitUntilWorkDone 1.44 *5) it gets the returnValue from the transfer struc and returns that 1.45 * from the function 1.46 * 1.47 - *For now, a new VOMP system has to be created via VOMP__init every 1.48 + *For now, a new VSs system has to be created via VSs__init every 1.49 * time an entry point function is called -- later, might add letting the 1.50 - * VOMP system be created once, and let all the entry points just reuse 1.51 + * VSs system be created once, and let all the entry points just reuse 1.52 * it -- want to be as simple as possible now, and see by using what makes 1.53 * sense for later.. 1.54 */ 1.55 @@ -72,41 +72,41 @@ 1.56 * any of the data reachable from initData passed in to here 1.57 */ 1.58 void 1.59 -VOMP__create_seed_procr_and_do_work( TopLevelFnPtr fnPtr, void *initData ) 1.60 - { VOMPSemEnv *semEnv; 1.61 +VSs__create_seed_slave_and_do_work( TopLevelFnPtr fnPtr, void *initData ) 1.62 + { VSsSemEnv *semEnv; 1.63 SlaveVP *seedPr; 1.64 1.65 - VOMP__init(); //normal multi-thd 1.66 + VSs__init(); //normal multi-thd 1.67 1.68 semEnv = _VMSMasterEnv->semanticEnv; 1.69 1.70 - //VOMP starts with one processor, which is put into initial environ, 1.71 + //VSs starts with one processor, which is put into initial environ, 1.72 // and which then calls create() to create more, thereby expanding work 1.73 - seedPr = VOMP__create_procr_helper( fnPtr, initData, 1.74 + seedPr = VSs__create_slave_helper( fnPtr, initData, 1.75 semEnv, semEnv->nextCoreToGetNewPr++ ); 1.76 1.77 resume_slaveVP( seedPr, semEnv ); 1.78 1.79 VMS_SS__start_the_work_then_wait_until_done(); //normal multi-thd 1.80 1.81 - VOMP__cleanup_after_shutdown(); 1.82 + VSs__cleanup_after_shutdown(); 1.83 } 1.84 1.85 1.86 int32 1.87 -VOMP__giveMinWorkUnitCycles( float32 percentOverhead ) 1.88 +VSs__giveMinWorkUnitCycles( float32 percentOverhead ) 1.89 { 1.90 return MIN_WORK_UNIT_CYCLES; 1.91 } 1.92 1.93 int32 1.94 -VOMP__giveIdealNumWorkUnits() 1.95 +VSs__giveIdealNumWorkUnits() 1.96 { 1.97 return NUM_ANIM_SLOTS * NUM_CORES; 1.98 } 1.99 1.100 int32 1.101 -VOMP__give_number_of_cores_to_schedule_onto() 1.102 +VSs__give_number_of_cores_to_schedule_onto() 1.103 { 1.104 return NUM_CORES; 1.105 } 1.106 @@ -115,8 +115,8 @@ 1.107 * saves jump point, and second jumps back several times to get reliable time 1.108 */ 1.109 void 1.110 -VOMP__start_primitive() 1.111 - { saveLowTimeStampCountInto( ((VOMPSemEnv *)(_VMSMasterEnv->semanticEnv))-> 1.112 +VSs__start_primitive() 1.113 + { saveLowTimeStampCountInto( ((VSsSemEnv *)(_VMSMasterEnv->semanticEnv))-> 1.114 primitiveStartTime ); 1.115 } 1.116 1.117 @@ -126,17 +126,17 @@ 1.118 * also to throw out any "weird" values due to OS interrupt or TSC rollover 1.119 */ 1.120 int32 1.121 -VOMP__end_primitive_and_give_cycles() 1.122 +VSs__end_primitive_and_give_cycles() 1.123 { int32 endTime, startTime; 1.124 //TODO: fix by repeating time-measurement 1.125 saveLowTimeStampCountInto( endTime ); 1.126 - startTime =((VOMPSemEnv*)(_VMSMasterEnv->semanticEnv))->primitiveStartTime; 1.127 + startTime =((VSsSemEnv*)(_VMSMasterEnv->semanticEnv))->primitiveStartTime; 1.128 return (endTime - startTime); 1.129 } 1.130 1.131 //=========================================================================== 1.132 1.133 -/*Initializes all the data-structures for a VOMP system -- but doesn't 1.134 +/*Initializes all the data-structures for a VSs system -- but doesn't 1.135 * start it running yet! 1.136 * 1.137 *This runs in the main thread -- before VMS starts up 1.138 @@ -147,13 +147,13 @@ 1.139 * for creating the seed processor and then starting the work. 1.140 */ 1.141 void 1.142 -VOMP__init() 1.143 +VSs__init() 1.144 { 1.145 VMS_SS__init(); 1.146 //masterEnv, a global var, now is partially set up by init_VMS 1.147 // after this, have VMS_int__malloc and VMS_int__free available 1.148 1.149 - VOMP__init_Helper(); 1.150 + VSs__init_Helper(); 1.151 } 1.152 1.153 1.154 @@ -164,25 +164,25 @@ 1.155 } 1.156 1.157 void 1.158 -VOMP__init_Helper() 1.159 - { VOMPSemEnv *semanticEnv; 1.160 +VSs__init_Helper() 1.161 + { VSsSemEnv *semanticEnv; 1.162 PrivQueueStruc **readyVPQs; 1.163 int coreIdx, i, j; 1.164 1.165 //Hook up the semantic layer's plug-ins to the Master virt procr 1.166 - _VMSMasterEnv->requestHandler = &VOMP__Request_Handler; 1.167 - _VMSMasterEnv->slaveAssigner = &VOMP__assign_slaveVP_to_slot; 1.168 + _VMSMasterEnv->requestHandler = &VSs__Request_Handler; 1.169 + _VMSMasterEnv->slaveAssigner = &VSs__assign_slaveVP_to_slot; 1.170 #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS 1.171 - _VMSMasterEnv->counterHandler = &VOMP__counter_handler; 1.172 + _VMSMasterEnv->counterHandler = &VSs__counter_handler; 1.173 #endif 1.174 1.175 //create the semantic layer's environment (all its data) and add to 1.176 // the master environment 1.177 - semanticEnv = VMS_int__malloc( sizeof( VOMPSemEnv ) ); 1.178 + semanticEnv = VMS_int__malloc( sizeof( VSsSemEnv ) ); 1.179 _VMSMasterEnv->semanticEnv = semanticEnv; 1.180 1.181 #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS 1.182 - VOMP__init_counter_data_structs(); 1.183 + VSs__init_counter_data_structs(); 1.184 #endif 1.185 semanticEnv->shutdownInitiated = FALSE; 1.186 for(i=0;i<NUM_CORES;++i){ 1.187 @@ -219,7 +219,7 @@ 1.188 semanticEnv->nextCoreToGetNewPr = 0; 1.189 semanticEnv->numSlaveVP = 0; 1.190 1.191 - semanticEnv->commHashTbl = makeHashTable( 1<<16, &VMS_int__free );//start big 1.192 + semanticEnv->argPtrHashTbl = makeHashTable( 1<<16, &VMS_int__free );//start big 1.193 1.194 //TODO: bug -- turn these arrays into dyn arrays to eliminate limit 1.195 //semanticEnv->singletonHasBeenExecutedFlags = makeDynArrayInfo( ); 1.196 @@ -235,11 +235,11 @@ 1.197 } 1.198 1.199 1.200 -/*Frees any memory allocated by VOMP__init() then calls VMS_int__shutdown 1.201 +/*Frees any memory allocated by VSs__init() then calls VMS_int__shutdown 1.202 */ 1.203 void 1.204 -VOMP__cleanup_after_shutdown() 1.205 - { VOMPSemEnv *semanticEnv; 1.206 +VSs__cleanup_after_shutdown() 1.207 + { VSsSemEnv *semanticEnv; 1.208 1.209 semanticEnv = _VMSMasterEnv->semanticEnv; 1.210 1.211 @@ -374,10 +374,10 @@ 1.212 1.213 /* 1.214 */ 1.215 - SlaveVP * 1.216 -VOMP__create_procr_with( TopLevelFnPtr fnPtr, void *initData, 1.217 +SlaveVP * 1.218 +VSs__create_slave_with( TopLevelFnPtr fnPtr, void *initData, 1.219 SlaveVP *creatingPr ) 1.220 - { VOMPSemReq reqData; 1.221 + { VSsSemReq reqData; 1.222 1.223 //the semantic request data is on the stack and disappears when this 1.224 // call returns -- it's guaranteed to remain in the VP's stack for as 1.225 @@ -386,26 +386,26 @@ 1.226 reqData.coreToAssignOnto = -1; //means round-robin assign 1.227 reqData.fnPtr = fnPtr; 1.228 reqData.initData = initData; 1.229 - reqData.sendPr = creatingPr; 1.230 + reqData.callingSlv = creatingPr; 1.231 1.232 VMS_WL__send_create_slaveVP_req( &reqData, creatingPr ); 1.233 1.234 return creatingPr->dataRetFromReq; 1.235 } 1.236 1.237 - SlaveVP * 1.238 -VOMP__create_procr_with_affinity( TopLevelFnPtr fnPtr, void *initData, 1.239 +SlaveVP * 1.240 +VSs__create_slave_with_affinity( TopLevelFnPtr fnPtr, void *initData, 1.241 SlaveVP *creatingPr, int32 coreToAssignOnto ) 1.242 - { VOMPSemReq reqData; 1.243 + { VSsSemReq reqData; 1.244 1.245 //the semantic request data is on the stack and disappears when this 1.246 // call returns -- it's guaranteed to remain in the VP's stack for as 1.247 // long as the VP is suspended. 1.248 - reqData.reqType = 0; //know type because in a VMS create req 1.249 - reqData.coreToAssignOnto = coreToAssignOnto; 1.250 + reqData.reqType = create_slave; 1.251 + reqData.coreToAssignOnto = coreToAssignOnto; 1.252 reqData.fnPtr = fnPtr; 1.253 reqData.initData = initData; 1.254 - reqData.sendPr = creatingPr; 1.255 + reqData.callingSlv = creatingPr; 1.256 1.257 VMS_WL__send_create_slaveVP_req( &reqData, creatingPr ); 1.258 1.259 @@ -413,182 +413,62 @@ 1.260 } 1.261 1.262 1.263 - void 1.264 -VOMP__dissipate_procr( SlaveVP *procrToDissipate ) 1.265 +void 1.266 +VSs__dissipate_slave( SlaveVP *slaveToDissipate ) 1.267 { 1.268 - VMS_WL__send_dissipate_req( procrToDissipate ); 1.269 + VMS_WL__send_dissipate_req( slaveToDissipate ); 1.270 } 1.271 1.272 1.273 //=========================================================================== 1.274 1.275 -void * 1.276 -VOMP__malloc_to( int32 sizeToMalloc, SlaveVP *owningPr ) 1.277 - { VOMPSemReq reqData; 1.278 1.279 - reqData.reqType = malloc_req; 1.280 - reqData.sendPr = owningPr; 1.281 - reqData.sizeToMalloc = sizeToMalloc; 1.282 +//=========================================================================== 1.283 +/*Returns a taskID, which can be used to communicate between tasks with 1.284 + * send-receive, or to use other kinds of constructs with tasks. 1.285 + */ 1.286 +int32 1.287 +VSs__submit_task( VSsTaskType *taskType, void *args, SlaveVP *animSlv) 1.288 + { VSsSemReq reqData; 1.289 1.290 - VMS_WL__send_sem_request( &reqData, owningPr ); 1.291 - 1.292 - return owningPr->dataRetFromReq; 1.293 + reqData.reqType = submit_task; 1.294 + reqData.callingSlv = animSlv; 1.295 + reqData.taskType = taskType; 1.296 + reqData.args = args; 1.297 + 1.298 + 1.299 + VMS_WL__send_sem_request( &reqData, animSlv ); 1.300 + return animSlv->dataRetFromReq; 1.301 } 1.302 1.303 - 1.304 -/*Sends request to Master, which does the work of freeing 1.305 +/*NOTE: if want, don't need to send the animating SlaveVP around.. 1.306 + * instead, can make a single slave per core, and coreCtrlr looks up the 1.307 + * slave from having the core number. 1.308 + * 1.309 + *But, to stay compatible with all the other VMS languages, leave it in.. 1.310 + * 1.311 + *This call is the last to happen in every task. It causes the slave to 1.312 + * suspend and get the next task out of the task-queue. Notice there is no 1.313 + * assigner here.. only one slave, no slave ReadyQ, and so on.. 1.314 + *Can either make the assigner take the next task out of the taskQ, or can 1.315 + * leave all as it is, and make task-end take the next task. 1.316 + *Note: this fits the case in the new VMS for no-context tasks, so will use 1.317 + * the built-in taskQ of new VMS, and should be local and much faster. 1.318 + * 1.319 + *The task-stub is saved in the animSlv, so the request handler will get it 1.320 + * from there, along with the task-type which has arg types, and so on.. 1.321 */ 1.322 void 1.323 -VOMP__free( void *ptrToFree, SlaveVP *owningPr ) 1.324 - { VOMPSemReq reqData; 1.325 +VSs__end_task( SlaveVP *animSlv ) 1.326 + { VSsSemReq reqData; 1.327 1.328 - reqData.reqType = free_req; 1.329 - reqData.sendPr = owningPr; 1.330 - reqData.ptrToFree = ptrToFree; 1.331 - 1.332 - VMS_WL__send_sem_request( &reqData, owningPr ); 1.333 + reqData.reqType = end_task; 1.334 + reqData.callingSlv = animSlv; 1.335 + 1.336 + VMS_WL__send_sem_request( &reqData, animSlv ); 1.337 } 1.338 1.339 - 1.340 -void 1.341 -VOMP__transfer_ownership_of_from_to( void *data, SlaveVP *oldOwnerSlv, 1.342 - SlaveVP *newOwnerPr ) 1.343 - { 1.344 - //TODO: put in the ownership system that automatically frees when no 1.345 - // owners of data left -- will need keeper for keeping data around when 1.346 - // future created processors might need it but don't exist yet 1.347 - } 1.348 - 1.349 - 1.350 -void 1.351 -VOMP__add_ownership_by_to( SlaveVP *newOwnerSlv, void *data ) 1.352 - { 1.353 - 1.354 - } 1.355 - 1.356 - 1.357 -void 1.358 -VOMP__remove_ownership_by_from( SlaveVP *loserSlv, void *dataLosing ) 1.359 - { 1.360 - 1.361 - } 1.362 - 1.363 - 1.364 -/*Causes the VOMP system to remove internal ownership, so data won't be 1.365 - * freed when VOMP shuts down, and will persist in the external program. 1.366 - * 1.367 - *Must be called from the processor that currently owns the data. 1.368 - * 1.369 - *IMPL: Transferring ownership touches two different virtual processor's 1.370 - * state -- which means it has to be done carefully -- the VMS rules for 1.371 - * semantic layers say that a work-unit is only allowed to touch the 1.372 - * virtual processor it is part of, and that only a single work-unit per 1.373 - * virtual processor be assigned to a slave at a time. So, this has to 1.374 - * modify the virtual processor that owns the work-unit that called this 1.375 - * function, then create a request to have the other processor modified. 1.376 - *However, in this case, the TO processor is the outside, and transfers 1.377 - * are only allowed to be called by the giver-upper, so can mark caller of 1.378 - * this function as no longer owner, and return -- done. 1.379 - */ 1.380 -void 1.381 -VOMP__transfer_ownership_to_outside( void *data ) 1.382 - { 1.383 - //TODO: removeAllOwnersFrom( data ); 1.384 - } 1.385 - 1.386 - 1.387 -//=========================================================================== 1.388 - 1.389 -void 1.390 -VOMP__send_of_type_to( SlaveVP *sendPr, void *msg, const int type, 1.391 - SlaveVP *receivePr) 1.392 - { VOMPSemReq reqData; 1.393 - 1.394 - reqData.receivePr = receivePr; 1.395 - reqData.sendPr = sendPr; 1.396 - reqData.reqType = send_type; 1.397 - reqData.msgType = type; 1.398 - reqData.msg = msg; 1.399 - reqData.nextReqInHashEntry = NULL; 1.400 - 1.401 - //On ownership -- remove inside the send and let ownership sit in limbo 1.402 - // as a potential in an entry in the hash table, when this receive msg 1.403 - // gets paired to a send, the ownership gets added to the receivePr -- 1.404 - // the next work-unit in the receivePr's trace will have ownership. 1.405 - VMS_WL__send_sem_request( &reqData, sendPr ); 1.406 - 1.407 - //When come back from suspend, no longer own data reachable from msg 1.408 - //TODO: release ownership here 1.409 - } 1.410 - 1.411 -void 1.412 -VOMP__send_from_to( void *msg, SlaveVP *sendPr, SlaveVP *receivePr ) 1.413 - { VOMPSemReq reqData; 1.414 - 1.415 - //hash on the receiver, 'cause always know it, but sometimes want to 1.416 - // receive from anonymous sender 1.417 - 1.418 - reqData.receivePr = receivePr; 1.419 - reqData.sendPr = sendPr; 1.420 - reqData.reqType = send_from_to; 1.421 - reqData.msg = msg; 1.422 - reqData.nextReqInHashEntry = NULL; 1.423 - 1.424 - VMS_WL__send_sem_request( &reqData, sendPr ); 1.425 - } 1.426 - 1.427 - 1.428 -//=========================================================================== 1.429 - 1.430 -void * 1.431 -VOMP__receive_any_to( SlaveVP *receivePr ) 1.432 - { 1.433 - 1.434 - } 1.435 - 1.436 -void * 1.437 -VOMP__receive_type_to( const int type, SlaveVP *receivePr ) 1.438 - { DEBUG__printf1(dbgRqstHdlr,"WL: receive type to: %d", receivePr->slaveID); 1.439 - VOMPSemReq reqData; 1.440 - 1.441 - reqData.receivePr = receivePr; 1.442 - reqData.reqType = receive_type; 1.443 - reqData.msgType = type; 1.444 - reqData.nextReqInHashEntry = NULL; 1.445 - 1.446 - VMS_WL__send_sem_request( &reqData, receivePr ); 1.447 - 1.448 - return receivePr->dataRetFromReq; 1.449 - } 1.450 - 1.451 - 1.452 - 1.453 -/*Call this at point receiving virt pr wants in-coming data. 1.454 - * 1.455 - *The reason receivePr must call this is that it modifies the receivPr 1.456 - * loc structure directly -- and the VMS rules state a virtual processor 1.457 - * loc structure can only be modified by itself. 1.458 - */ 1.459 -void * 1.460 -VOMP__receive_from_to( SlaveVP *sendPr, SlaveVP *receivePr ) 1.461 - { DEBUG__printf2(dbgRqstHdlr,"WL: receive from %d to: %d", sendPr->slaveID, receivePr->slaveID); 1.462 - VOMPSemReq reqData; 1.463 - 1.464 - //hash on the receiver, 'cause always know it, but sometimes want to 1.465 - // receive from anonymous sender 1.466 - 1.467 - reqData.receivePr = receivePr; 1.468 - reqData.sendPr = sendPr; 1.469 - reqData.reqType = receive_from_to; 1.470 - reqData.nextReqInHashEntry = NULL; 1.471 - 1.472 - VMS_WL__send_sem_request( &reqData, receivePr ); 1.473 - 1.474 - return receivePr->dataRetFromReq; 1.475 - } 1.476 - 1.477 - 1.478 -//=========================================================================== 1.479 +//========================================================================== 1.480 // 1.481 /*A function singleton is a function whose body executes exactly once, on a 1.482 * single core, no matter how many times the fuction is called and no 1.483 @@ -601,16 +481,16 @@ 1.484 */ 1.485 1.486 /*asm function declarations*/ 1.487 -void asm_save_ret_to_singleton(VOMPSingleton *singletonPtrAddr); 1.488 -void asm_write_ret_from_singleton(VOMPSingleton *singletonPtrAddr); 1.489 +void asm_save_ret_to_singleton(VSsSingleton *singletonPtrAddr); 1.490 +void asm_write_ret_from_singleton(VSsSingleton *singletonPtrAddr); 1.491 1.492 /*Fn singleton uses ID as index into array of singleton structs held in the 1.493 * semantic environment. 1.494 */ 1.495 void 1.496 -VOMP__start_fn_singleton( int32 singletonID, SlaveVP *animPr ) 1.497 +VSs__start_fn_singleton( int32 singletonID, SlaveVP *animPr ) 1.498 { 1.499 - VOMPSemReq reqData; 1.500 + VSsSemReq reqData; 1.501 1.502 // 1.503 reqData.reqType = singleton_fn_start; 1.504 @@ -619,7 +499,7 @@ 1.505 VMS_WL__send_sem_request( &reqData, animPr ); 1.506 if( animPr->dataRetFromReq ) //will be 0 or addr of label in end singleton 1.507 { 1.508 - VOMPSemEnv *semEnv = VMS_int__give_sem_env_for( animPr ); 1.509 + VSsSemEnv *semEnv = VMS_int__give_sem_env_for( animPr ); 1.510 asm_write_ret_from_singleton(&(semEnv->fnSingletons[ singletonID])); 1.511 } 1.512 } 1.513 @@ -629,9 +509,9 @@ 1.514 * location. 1.515 */ 1.516 void 1.517 -VOMP__start_data_singleton( VOMPSingleton **singletonAddr, SlaveVP *animPr ) 1.518 +VSs__start_data_singleton( VSsSingleton **singletonAddr, SlaveVP *animPr ) 1.519 { 1.520 - VOMPSemReq reqData; 1.521 + VSsSemReq reqData; 1.522 1.523 if( *singletonAddr && (*singletonAddr)->hasFinished ) 1.524 goto JmpToEndSingleton; 1.525 @@ -658,13 +538,13 @@ 1.526 * inside is shared by all invocations of a given singleton ID. 1.527 */ 1.528 void 1.529 -VOMP__end_fn_singleton( int32 singletonID, SlaveVP *animPr ) 1.530 +VSs__end_fn_singleton( int32 singletonID, SlaveVP *animPr ) 1.531 { 1.532 - VOMPSemReq reqData; 1.533 + VSsSemReq reqData; 1.534 1.535 //don't need this addr until after at least one singleton has reached 1.536 // this function 1.537 - VOMPSemEnv *semEnv = VMS_int__give_sem_env_for( animPr ); 1.538 + VSsSemEnv *semEnv = VMS_int__give_sem_env_for( animPr ); 1.539 asm_write_ret_from_singleton(&(semEnv->fnSingletons[ singletonID])); 1.540 1.541 reqData.reqType = singleton_fn_end; 1.542 @@ -677,9 +557,9 @@ 1.543 } 1.544 1.545 void 1.546 -VOMP__end_data_singleton( VOMPSingleton **singletonPtrAddr, SlaveVP *animPr ) 1.547 +VSs__end_data_singleton( VSsSingleton **singletonPtrAddr, SlaveVP *animPr ) 1.548 { 1.549 - VOMPSemReq reqData; 1.550 + VSsSemReq reqData; 1.551 1.552 //don't need this addr until after singleton struct has reached 1.553 // this function for first time 1.554 @@ -709,10 +589,10 @@ 1.555 * between as work-code. 1.556 */ 1.557 void 1.558 -VOMP__animate_short_fn_in_isolation( PtrToAtomicFn ptrToFnToExecInMaster, 1.559 +VSs__animate_short_fn_in_isolation( PtrToAtomicFn ptrToFnToExecInMaster, 1.560 void *data, SlaveVP *animPr ) 1.561 { 1.562 - VOMPSemReq reqData; 1.563 + VSsSemReq reqData; 1.564 1.565 // 1.566 reqData.reqType = atomic; 1.567 @@ -737,12 +617,12 @@ 1.568 *If NULL, then write requesting into the field and resume. 1.569 */ 1.570 void 1.571 -VOMP__start_transaction( int32 transactionID, SlaveVP *animPr ) 1.572 +VSs__start_transaction( int32 transactionID, SlaveVP *animPr ) 1.573 { 1.574 - VOMPSemReq reqData; 1.575 + VSsSemReq reqData; 1.576 1.577 // 1.578 - reqData.sendPr = animPr; 1.579 + reqData.callingSlv = animPr; 1.580 reqData.reqType = trans_start; 1.581 reqData.transID = transactionID; 1.582 1.583 @@ -759,12 +639,12 @@ 1.584 * resumes both. 1.585 */ 1.586 void 1.587 -VOMP__end_transaction( int32 transactionID, SlaveVP *animPr ) 1.588 +VSs__end_transaction( int32 transactionID, SlaveVP *animPr ) 1.589 { 1.590 - VOMPSemReq reqData; 1.591 + VSsSemReq reqData; 1.592 1.593 // 1.594 - reqData.sendPr = animPr; 1.595 + reqData.callingSlv = animPr; 1.596 reqData.reqType = trans_end; 1.597 reqData.transID = transactionID; 1.598
