flushRememberedSets();
  private final void processAllWork() throws VM_PragmaNoInline {    if (verbose >= 4) VM.psysWriteln("  Working on GC in parallel");    do {      if (verbose >= 5) VM.psysWriteln("    processing root locations");      while (!rootLocations.isEmpty()) {	VM_Address loc = rootLocations.pop();	traceObjectLocation(loc, true);      }      if (verbose >= 5) VM.psysWriteln("    processing interior root locations");      while (!interiorRootLocations.isEmpty()) {	VM_Address obj = interiorRootLocations.pop1();	VM_Address interiorLoc = interiorRootLocations.pop2();	VM_Address interior = VM_Magic.getMemoryAddress(interiorLoc);	VM_Address newInterior = traceInteriorReference(obj, interior, true);	VM_Magic.setMemoryAddress(interiorLoc, newInterior);      }      if (verbose >= 5) VM.psysWriteln("    processing gray objects");      while (!values.isEmpty()) {	VM_Address v = values.pop();	ScanObject.scan(v);  // NOT traceObject      }      if (verbose >= 5) VM.psysWriteln("    processing locations");      while (!locations.isEmpty()) {	VM_Address loc = locations.pop();	traceObjectLocation(loc, false);      }          } while (!(rootLocations.isEmpty() && interiorRootLocations.isEmpty()	       && values.isEmpty() && locations.isEmpty()));    if (verbose >= 4) VM.psysWriteln("    waiting at barrier");    VM_CollectorThread.gcBarrier.rendezvous();  }