| Index: src/spaces.h
|
| diff --git a/src/spaces.h b/src/spaces.h
|
| index 22e971ef2b7fd82c6d171cf1da83d967e3c7958c..95bb40a0637ff1f6e74ec623c57f4bc131512499 100644
|
| --- a/src/spaces.h
|
| +++ b/src/spaces.h
|
| @@ -164,19 +164,25 @@ class MarkBit {
|
|
|
|
|
| // Bitmap is a sequence of cells each containing fixed number of bits.
|
| -template<typename StorageDescriptor>
|
| class Bitmap {
|
| public:
|
| static const uint32_t kBitsPerCell = 32;
|
| static const uint32_t kBitsPerCellLog2 = 5;
|
| static const uint32_t kBitIndexMask = kBitsPerCell - 1;
|
|
|
| + static const size_t kLength =
|
| + (1 << kPageSizeBits) >> (kPointerSizeLog2);
|
| +
|
| + static const size_t kSize =
|
| + (1 << kPageSizeBits) >> (kPointerSizeLog2 + kBitsPerByteLog2);
|
| +
|
| +
|
| static int CellsForLength(int length) {
|
| return (length + kBitsPerCell - 1) >> kBitsPerCellLog2;
|
| }
|
|
|
| int CellsCount() {
|
| - return StorageDescriptor::CellsCount(this->address());
|
| + return CellsForLength(kLength);
|
| }
|
|
|
| static int SizeFor(int cells_count) {
|
| @@ -395,14 +401,8 @@ class MemoryChunk {
|
| static const size_t kHeaderSize = kPointerSize + kPointerSize + kPointerSize +
|
| kPointerSize + kPointerSize + kPointerSize + kPointerSize + kPointerSize;
|
|
|
| - static const size_t kMarksBitmapLength =
|
| - (1 << kPageSizeBits) >> (kPointerSizeLog2);
|
| -
|
| - static const size_t kMarksBitmapSize =
|
| - (1 << kPageSizeBits) >> (kPointerSizeLog2 + kBitsPerByteLog2);
|
| -
|
| static const int kBodyOffset =
|
| - CODE_POINTER_ALIGN(MAP_POINTER_ALIGN(kHeaderSize + kMarksBitmapSize));
|
| + CODE_POINTER_ALIGN(MAP_POINTER_ALIGN(kHeaderSize + Bitmap::kSize));
|
|
|
| // The start offset of the object area in a page. Aligned to both maps and
|
| // code alignment to be suitable for both. Also aligned to 32 words because
|
| @@ -424,18 +424,8 @@ class MemoryChunk {
|
| // ---------------------------------------------------------------------
|
| // Markbits support
|
|
|
| - class BitmapStorageDescriptor {
|
| - public:
|
| - INLINE(static int CellsCount(Address addr)) {
|
| - return Bitmap<BitmapStorageDescriptor>::CellsForLength(
|
| - kMarksBitmapLength);
|
| - }
|
| - };
|
| -
|
| - typedef Bitmap<BitmapStorageDescriptor> MarkbitsBitmap;
|
| -
|
| - inline MarkbitsBitmap* markbits() {
|
| - return MarkbitsBitmap::FromAddress(address() + kHeaderSize);
|
| + inline Bitmap* markbits() {
|
| + return Bitmap::FromAddress(address() + kHeaderSize);
|
| }
|
|
|
| void PrintMarkbits() { markbits()->Print(); }
|
| @@ -558,11 +548,11 @@ class Page : public MemoryChunk {
|
| static const int kMaxHeapObjectSize = kObjectAreaSize;
|
|
|
| static const int kFirstUsedCell =
|
| - (kObjectStartOffset/kPointerSize) >> MarkbitsBitmap::kBitsPerCellLog2;
|
| + (kObjectStartOffset/kPointerSize) >> Bitmap::kBitsPerCellLog2;
|
|
|
| static const int kLastUsedCell =
|
| ((kPageSize - kPointerSize)/kPointerSize) >>
|
| - MarkbitsBitmap::kBitsPerCellLog2;
|
| + Bitmap::kBitsPerCellLog2;
|
|
|
| inline void ClearGCFields();
|
|
|
| @@ -1870,6 +1860,10 @@ class NewSpace : public Space {
|
| return to_space_.current_page();
|
| }
|
|
|
| + NewSpacePage* InactivePage() {
|
| + return from_space_.current_page();
|
| + }
|
| +
|
| private:
|
| Address chunk_base_;
|
| uintptr_t chunk_size_;
|
|
|