Beispiel #1
0
void Pass::fiberEntryLeader(uint64_t argOnInitialize, uint64_t argOnRun) {
  cout << "leader" << endl;

  Fiber* me = (Fiber*) argOnInitialize;

  int32_t ret = sceFiberSwitch(me->nextFiber, (uint64_t) me, &argOnRun);
  assert(ret == SCE_OK);
}
Beispiel #2
0
void Pass::fiberEntryFollower(uint64_t argOnInitialize, uint64_t argOnRun) {
  cout << "follower" << endl;

  Fiber* me = (Fiber*) argOnInitialize;

  threadMethod1(me->spheres, me->iteration, *me->directory, me->deferSaving);
  int32_t ret = sceFiberSwitch(me->nextFiber, (uint64_t) me, &argOnRun);
  assert(ret == SCE_OK);
}
Beispiel #3
0
void co_switch(cothread_t cothread)
{

   uint32_t argOnReturn = 0;
   if(cothread == (cothread_t)1){
     co_active_ = cothread;
     sceFiberReturnToThread(0, NULL);
   }else{
		 SceFiber* theFiber = (SceFiber*)cothread;
		 if(co_active_ == (cothread_t)1){
			 co_active_ = cothread;
			 sceFiberRun(theFiber, 0, &argOnReturn);
		 }else{
			 co_active_ = cothread;
			 sceFiberSwitch(theFiber, 0, &argOnReturn);
		 }
   }
}