Reviewers: Vyacheslav Egorov,
Description:
Turn visitor_id into a byte field and free back one word in Map.
Please review this at http://codereview.chromium.org/3364007/show
Affected files:
M src/objects-inl.h
M src/objects.h
M src/objects.cc
Index: src/objects-inl.h
diff --git a/src/objects-inl.h b/src/objects-inl.h
index
2a54062f0a00019247f92d25b25ff85326e4e764..bac224f4e9fe044813e081dbba0592fe4a1e3ba6
100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -2109,7 +2109,16 @@ void ExternalFloatArray::set(int index, float value)
{
}
-INT_ACCESSORS(Map, visitor_id, kScavengerCallbackOffset)
+int Map::visitor_id() {
+ return READ_BYTE_FIELD(this, kVisitorIdOffset);
+}
+
+
+void Map::set_visitor_id(int id) {
+ ASSERT(0 <= id && id < 256);
+ WRITE_BYTE_FIELD(this, kVisitorIdOffset, static_cast<byte>(id));
+}
+
int Map::instance_size() {
return READ_BYTE_FIELD(this, kInstanceSizeOffset) << kPointerSizeLog2;
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
9b43d245f440fa014d39f347d0b0b4ec4e9207cd..6a46c26a795bdac8b47398c3cb1ed9c3996c44ad
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -2126,9 +2126,6 @@ Object* NormalizedMapCache::Get(JSObject* obj,
PropertyNormalizationMode mode) {
// The cached map should match newly created normalized map
bit-by-bit.
Object* fresh = fast->CopyNormalized(mode);
if (!fresh->IsFailure()) {
- // Copy the unused byte so that the assertion below works.
- Map::cast(fresh)->address()[Map::kUnusedOffset] =
- Map::cast(result)->address()[Map::kUnusedOffset];
ASSERT(memcmp(Map::cast(fresh)->address(),
Map::cast(result)->address(),
Map::kSize) == 0);
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index
11d65ef44b6c9265c5b3a7c245e90d84520fcbd8..ca668b4d2d5bfa10b77fac12ed6a977d253f3ad5
100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -3245,8 +3245,7 @@ class Map: public HeapObject {
static const int kInstanceDescriptorsOffset =
kConstructorOffset + kPointerSize;
static const int kCodeCacheOffset = kInstanceDescriptorsOffset +
kPointerSize;
- static const int kScavengerCallbackOffset = kCodeCacheOffset +
kPointerSize;
- static const int kPadStart = kScavengerCallbackOffset + kPointerSize;
+ static const int kPadStart = kCodeCacheOffset + kPointerSize;
static const int kSize = MAP_POINTER_ALIGN(kPadStart);
// Layout of pointer fields. Heap iteration code relies on them
@@ -3263,9 +3262,8 @@ class Map: public HeapObject {
static const int kPreAllocatedPropertyFieldsByte = 2;
static const int kPreAllocatedPropertyFieldsOffset =
kInstanceSizesOffset + kPreAllocatedPropertyFieldsByte;
- // The byte at position 3 is not in use at the moment.
- static const int kUnusedByte = 3;
- static const int kUnusedOffset = kInstanceSizesOffset + kUnusedByte;
+ static const int kVisitorIdByte = 3;
+ static const int kVisitorIdOffset = kInstanceSizesOffset +
kVisitorIdByte;
// Byte offsets within kInstanceAttributesOffset attributes.
static const int kInstanceTypeOffset = kInstanceAttributesOffset + 0;
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev