return cell;
return alignAllocation(cell, align, offset);
  public final VM_Address allocSlowOnce(boolean isScalar, int bytes,                                        boolean inGC)     throws VM_PragmaNoInline {        VM_Address cell = allocFast(isScalar, bytes, inGC);    if (!cell.isZero())       return cell;        int sizeClass = getSizeClass(bytes);    VM_Address current = currentBlock.get(sizeClass);    if (!current.isZero()) {      // zero the current (empty) free list if necessary      if (preserveFreeList())        flushFreeList(current, sizeClass, VM_Address.zero());      // find a free list which is not empty      current = BlockAllocator.getNextBlock(current);      while (!current.isZero()) {        cell = advanceToBlock(current, sizeClass);        if (!cell.isZero()) {          // this block has at least one free cell, so use it          currentBlock.set(sizeClass, current);          if (maintainInUse()) cellsInUse[sizeClass] = getInUse(current) + 1;          freeList.set(sizeClass, getNextCell(cell));          setNextCell(cell, VM_Address.zero()); // clear out the free list link          postAlloc(cell, currentBlock.get(sizeClass), sizeClass, bytes, inGC);          return cell;        }        current = BlockAllocator.getNextBlock(current);      }    }    cell = expandSizeClass(sizeClass);    if (cell.isZero())      return VM_Address.zero();    if (maintainInUse()) cellsInUse[sizeClass]++;    freeList.set(sizeClass, getNextCell(cell));    postAlloc(cell, currentBlock.get(sizeClass), sizeClass, bytes, inGC);    Memory.zeroSmall(cell, VM_Extent.fromIntZeroExtend(bytes));    return cell;  }