Revision: 22409
Author:   [email protected]
Date:     Tue Jul 15 12:22:38 2014 UTC
Log:      Revert "Remove failure tag.".

[email protected]

Review URL: https://codereview.chromium.org/398473002
http://code.google.com/p/v8/source/detail?r=22409

Modified:
 /branches/bleeding_edge/src/globals.h
 /branches/bleeding_edge/src/spaces.h

=======================================
--- /branches/bleeding_edge/src/globals.h       Tue Jul 15 11:11:15 2014 UTC
+++ /branches/bleeding_edge/src/globals.h       Tue Jul 15 12:22:38 2014 UTC
@@ -216,6 +216,12 @@
 const intptr_t kCodeAlignment = 1 << kCodeAlignmentBits;
 const intptr_t kCodeAlignmentMask = kCodeAlignment - 1;

+// Tag information for Failure.
+// TODO(yangguo): remove this from space owner calculation.
+const int kFailureTag = 3;
+const int kFailureTagSize = 2;
+const intptr_t kFailureTagMask = (1 << kFailureTagSize) - 1;
+

 // Zap-value: The value used for zapping dead objects.
 // Should be a recognizable hex value tagged as a failure.
@@ -531,6 +537,9 @@
 #define HAS_SMI_TAG(value) \
   ((reinterpret_cast<intptr_t>(value) & kSmiTagMask) == kSmiTag)

+#define HAS_FAILURE_TAG(value) \
+  ((reinterpret_cast<intptr_t>(value) & kFailureTagMask) == kFailureTag)
+
 // OBJECT_POINTER_ALIGN returns the value aligned as a HeapObject pointer
 #define OBJECT_POINTER_ALIGN(value)                             \
   (((value) + kObjectAlignmentMask) & ~kObjectAlignmentMask)
=======================================
--- /branches/bleeding_edge/src/spaces.h        Tue Jul 15 11:11:15 2014 UTC
+++ /branches/bleeding_edge/src/spaces.h        Tue Jul 15 12:22:38 2014 UTC
@@ -312,11 +312,20 @@
   }

   Space* owner() const {
-    return owner_;
+    if ((reinterpret_cast<intptr_t>(owner_) & kFailureTagMask) ==
+        kFailureTag) {
+      return reinterpret_cast<Space*>(reinterpret_cast<intptr_t>(owner_) -
+                                      kFailureTag);
+    } else {
+      return NULL;
+    }
   }

   void set_owner(Space* space) {
-    owner_ = space;
+    ASSERT((reinterpret_cast<intptr_t>(space) & kFailureTagMask) == 0);
+    owner_ = reinterpret_cast<Address>(space) + kFailureTag;
+    ASSERT((reinterpret_cast<intptr_t>(owner_) & kFailureTagMask) ==
+           kFailureTag);
   }

   base::VirtualMemory* reserved_memory() {
@@ -682,7 +691,10 @@

// If the chunk needs to remember its memory reservation, it is stored here.
   base::VirtualMemory reservation_;
-  Space* owner_;
+ // The identity of the owning space. This is tagged as a failure pointer, but + // no failure can be in an object, so this can be distinguished from any entry
+  // in a fixed array.
+  Address owner_;
   Heap* heap_;
   // Used by the store buffer to keep track of which pages to mark scan-on-
   // scavenge.

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to