Index: runtime/vm/raw_object.h |
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h |
index 0c69b39f82d7178db69aacb59d41b6b695bf1fb0..0dc6aa381492b7f1b9cd68139ed6b843dd2dc03c 100644 |
--- a/runtime/vm/raw_object.h |
+++ b/runtime/vm/raw_object.h |
@@ -238,14 +238,27 @@ class RawObject { |
kCanonicalBit = 2, |
kFromSnapshotBit = 3, |
kRememberedBit = 4, |
- kReservedTagPos = 5, // kReservedBit{10K,100K,1M,10M} |
+#if defined(ARCH_IS_32_BIT) |
+ kReservedTagPos = 5, // kReservedBit{100K,1M,10M} |
kReservedTagSize = 3, |
kSizeTagPos = kReservedTagPos + kReservedTagSize, // = 8 |
kSizeTagSize = 8, |
kClassIdTagPos = kSizeTagPos + kSizeTagSize, // = 16 |
kClassIdTagSize = 16, |
+#elif defined(ARCH_IS_64_BIT) |
+ kReservedTagPos = 5, // kReservedBit{100K,1M,10M} |
+ kReservedTagSize = 11, |
+ kSizeTagPos = kReservedTagPos + kReservedTagSize, // = 16 |
+ kSizeTagSize = 16, |
+ kClassIdTagPos = kSizeTagPos + kSizeTagSize, // = 32 |
+ kClassIdTagSize = 32, |
+#else |
+#error Unexpected architecture word size |
+#endif |
}; |
+ COMPILE_ASSERT(kClassIdTagSize == (sizeof(classid_t) * kBitsPerByte)); |
+ |
// Encodes the object size in the tag in units of object alignment. |
class SizeTag { |
public: |