| Index: src/spaces.h
|
| diff --git a/src/spaces.h b/src/spaces.h
|
| index 9841a5fddfbab1d00e389537c0f320efa7069d82..57e7c1fac5bf190467d0f4ae5522924dbce683c1 100644
|
| --- a/src/spaces.h
|
| +++ b/src/spaces.h
|
| @@ -99,8 +99,11 @@ class AllocationInfo;
|
| // its page offset by 32. Therefore, the object area in a page starts at the
|
| // 256th byte (8K/32). Bytes 0 to 255 do not need the remembered set, so that
|
| // the first two words (64 bits) in a page can be used for other purposes.
|
| -// TODO(X64): This description only represents the 32-bit layout.
|
| -// On the 64-bit platform, we add an offset to the start of the remembered set.
|
| +//
|
| +// On the 64-bit platform, we add an offset to the start of the remembered set,
|
| +// and pointers are aligned to 8-byte pointer size. This means that we need
|
| +// only 128 bytes for the RSet, and only get two bytes free in the RSet's RSet.
|
| +// For this reason we add an offset to get room for the Page data at the start.
|
| //
|
| // The mark-compact collector transforms a map pointer into a page index and a
|
| // page offset. The map space can have up to 1024 pages, and 8M bytes (1024 *
|
| @@ -118,7 +121,7 @@ class Page {
|
| // from [page_addr .. page_addr + kPageSize[
|
| //
|
| // Note that this function only works for addresses in normal paged
|
| - // spaces and addresses in the first 8K of large object pages (ie,
|
| + // spaces and addresses in the first 8K of large object pages (i.e.,
|
| // the start of large objects but not necessarily derived pointers
|
| // within them).
|
| INLINE(static Page* FromAddress(Address a)) {
|
| @@ -218,7 +221,7 @@ class Page {
|
| // Page size mask.
|
| static const intptr_t kPageAlignmentMask = (1 << kPageSizeBits) - 1;
|
|
|
| - // The offset of the remembered set in a page, in addition to the empty words
|
| + // The offset of the remembered set in a page, in addition to the empty bytes
|
| // formed as the remembered bits of the remembered set itself.
|
| #ifdef V8_TARGET_ARCH_X64
|
| static const int kRSetOffset = 4 * kPointerSize; // Room for four pointers.
|
| @@ -234,7 +237,7 @@ class Page {
|
| // to align start of rset to a uint32_t address.
|
| static const int kObjectStartOffset = 256;
|
|
|
| - // The start offset of the remembered set in a page.
|
| + // The start offset of the used part of the remembered set in a page.
|
| static const int kRSetStartOffset = kRSetOffset +
|
| kObjectStartOffset / kBitsPerPointer;
|
|
|
| @@ -264,16 +267,16 @@ class Page {
|
| // low-order bit for large object pages will be cleared.
|
| int is_normal_page;
|
|
|
| - // The following fields overlap with remembered set, they can only
|
| + // The following fields may overlap with remembered set, they can only
|
| // be used in the mark-compact collector when remembered set is not
|
| // used.
|
|
|
| - // The allocation pointer after relocating objects to this page.
|
| - Address mc_relocation_top;
|
| -
|
| // The index of the page in its owner space.
|
| int mc_page_index;
|
|
|
| + // The allocation pointer after relocating objects to this page.
|
| + Address mc_relocation_top;
|
| +
|
| // The forwarding address of the first live object in this page.
|
| Address mc_first_forwarded;
|
|
|
| @@ -1165,7 +1168,7 @@ class NewSpace : public Space {
|
| // The start address of the space and a bit mask. Anding an address in the
|
| // new space with the mask will result in the start address.
|
| Address start() { return start_; }
|
| - uint32_t mask() { return address_mask_; }
|
| + uintptr_t mask() { return address_mask_; }
|
|
|
| // The allocation top and limit addresses.
|
| Address* allocation_top_address() { return &allocation_info_.top; }
|
|
|