public static void computeAllRoots(AddressDequeue rootLocations, AddressPairDequeue interiorRootLocations) { AddressPairDequeue codeLocations = MM_Interface.MOVES_OBJECTS ? interiorRootLocations : null;
public static void computeAllRoots(AddressDeque rootLocations, AddressPairDeque interiorRootLocations) { AddressPairDeque codeLocations = MM_Interface.MOVES_OBJECTS ? interiorRootLocations : null;
  public static void computeAllRoots(AddressDequeue rootLocations,				     AddressPairDequeue interiorRootLocations) {    AddressPairDequeue codeLocations = MM_Interface.MOVES_OBJECTS ? interiorRootLocations : null;    ScanStatics.scanStatics(rootLocations);    while (true) {      int threadIndex = threadCounter.increment();      if (threadIndex >= VM_Scheduler.threads.length) break;      VM_Thread th = VM_Scheduler.threads[threadIndex];      if (th == null) continue;      // See comment of ScanThread.scanThread      //      VM_Address thAddr = VM_Magic.objectAsAddress(th);      VM_Thread th2 = VM_Magic.addressAsThread(Plan.traceObject(thAddr, true));      if (VM_Magic.objectAsAddress(th2).EQ(thAddr))	ScanObject.rootScan(th);      ScanObject.rootScan(th.stack);      if (th.jniEnv != null) {	ScanObject.rootScan(th.jniEnv);	ScanObject.rootScan(th.jniEnv.refsArray());      }      ScanObject.rootScan(th.contextRegisters);      ScanObject.rootScan(th.contextRegisters.gprs);      ScanObject.rootScan(th.hardwareExceptionRegisters);      ScanObject.rootScan(th.hardwareExceptionRegisters.gprs);      ScanThread.scanThread(th2, rootLocations, codeLocations);    }    ScanObject.rootScan(VM_Magic.objectAsAddress(VM_Scheduler.threads));    rendezvous(4200);  }