if (trace > 0) VM.sysWriteln("GC Message: startupRendezvous  leaving as ", myNumber);
if (verbose > 0) VM.sysWriteln("GC Message: startupRendezvous  leaving as ", myNumber);
  public void startupRendezvous () throws VM_PragmaUninterruptible {    int myProcessorId = VM_Processor.getCurrentProcessorId();    VM_CollectorThread th = VM_Magic.threadAsCollectorThread(VM_Thread.getCurrentThread());    int myNumber = th.getGCOrdinal();    if (trace > 0)      VM.sysWriteln("GC Message: SynchronizationBarrier.startupRendezvous: proc ", myProcessorId, " ordinal ", myNumber);    if ( myNumber > 1 ) {   // non-designated guys just wait for designated guy to finish      barrier.arrive(8888); // wait for designated guy to do his job      VM_Magic.isync();     // so subsequent instructions won't see stale values      if (trace > 0) VM.sysWriteln("GC Message: startupRendezvous  leaving as ", myNumber);      return;               // leave barrier    }    // Thread with gcOrdinal==1 must detect processors whose active threads are    // stuck in Native C, block them there, and make them non-participants    //    waitABit(5);          // give missing threads a chance to show up    int numParticipating = 0;    for (int i = 1; i <= VM_Scheduler.numProcessors; i++) {      if ( VM_Scheduler.processors[i].lockInCIfInC() ) { // can't be true for self	  if (trace > 0) VM.sysWriteln("GC Message: excluding processor ", i);	  removeProcessor(i);      }      else	numParticipating++;    }    if ( !VM.BuildForSingleVirtualProcessor && VM_Scheduler.processors[VM_Scheduler.nativeDPndx]!=null) {      // If it is the NativeProcessor (its collector thread) that is executing here      // just fall thru to end, to set our entryCount, sync & return. Else, decide      // what to do with the NativeProcessor      if ( myProcessorId == VM_Scheduler.nativeDPndx ) {	if (trace > 0) 	    VM.sysWriteln("GC Message: startupRendezvous: NativeProcessor has ordinal 1, will participate");      }      else {	int loopCount = 1;	VM_Processor ndvp = VM_Scheduler.processors[VM_Scheduler.nativeDPndx];	if ( VM_Scheduler.processors[VM_Scheduler.nativeDPndx].blockInWaitIfInWait() ) {	    if (trace > 0) VM.sysWriteln("GC Message: startupRendezvous  excluding NATIVE DAEMON PROCESSOR");	    removeProcessor( VM_Scheduler.nativeDPndx );	}      }      // include NativeDaemonProcessor in set of processors to rendezvous      maxProcessorId = VM_Scheduler.numProcessors + 1;    }  // !VM.BuildForSingleVirtualProcessor    else {      // compiled ForSingleProcessor: there is no nativeDaemonProcessor       maxProcessorId = VM_Scheduler.numProcessors;    }    if (trace > 0) 	VM.sysWriteln("GC Message: startupRendezvous  numParticipating = ", numParticipating);    barrier.setTarget(numParticipating);    barrier.arrive(8888);    // all setup now complete and we can proceed    VM_Magic.sync();   // update main memory so other processors will see it in "while" loop    VM_Magic.isync();  // so subsequent instructions won't see stale values    if (trace > 0) 	VM.sysWriteln("GC Message: startupRendezvous  designated proc leaving");  }  // startupRendezvous