Revision: 6966
Author: [email protected]
Date: Mon Feb 28 04:32:02 2011
Log: Merge r6964 from the bleeding_edge to the 3.0 branch.

Review URL: http://codereview.chromium.org/6598036
http://code.google.com/p/v8/source/detail?r=6966

Modified:
 /branches/3.0/src/frame-element.h
 /branches/3.0/src/ia32/codegen-ia32.cc
 /branches/3.0/src/ia32/virtual-frame-ia32.cc
 /branches/3.0/src/ia32/virtual-frame-ia32.h
 /branches/3.0/src/version.cc
 /branches/3.0/src/virtual-frame-heavy-inl.h
 /branches/3.0/src/x64/codegen-x64.cc
 /branches/3.0/src/x64/virtual-frame-x64.h

=======================================
--- /branches/3.0/src/frame-element.h   Tue Dec  7 04:49:48 2010
+++ /branches/3.0/src/frame-element.h   Mon Feb 28 04:32:02 2011
@@ -113,6 +113,10 @@

   static ZoneObjectList* ConstantList();

+  static bool ConstantPoolOverflowed() {
+    return !DataField::is_valid(ConstantList()->length());
+  }
+
   // Clear the constants indirection table.
   static void ClearConstantList() {
     ConstantList()->Clear();
=======================================
--- /branches/3.0/src/ia32/codegen-ia32.cc      Wed Feb  9 23:21:03 2011
+++ /branches/3.0/src/ia32/codegen-ia32.cc      Mon Feb 28 04:32:02 2011
@@ -5360,10 +5360,20 @@

 void CodeGenerator::VisitLiteral(Literal* node) {
   Comment cmnt(masm_, "[ Literal");
-  if (in_safe_int32_mode()) {
-    frame_->PushUntaggedElement(node->handle());
+  if (frame_->ConstantPoolOverflowed()) {
+    Result temp = allocator_->Allocate();
+    ASSERT(temp.is_valid());
+    if (in_safe_int32_mode()) {
+      temp.set_untagged_int32(true);
+    }
+    __ Set(temp.reg(), Immediate(node->handle()));
+    frame_->Push(&temp);
   } else {
-    frame_->Push(node->handle());
+    if (in_safe_int32_mode()) {
+      frame_->PushUntaggedElement(node->handle());
+    } else {
+      frame_->Push(node->handle());
+    }
   }
 }

=======================================
--- /branches/3.0/src/ia32/virtual-frame-ia32.cc        Thu Nov 18 04:04:40 2010
+++ /branches/3.0/src/ia32/virtual-frame-ia32.cc        Mon Feb 28 04:32:02 2011
@@ -1298,6 +1298,7 @@


 void VirtualFrame::PushUntaggedElement(Handle<Object> value) {
+  ASSERT(!ConstantPoolOverflowed());
elements_.Add(FrameElement::ConstantElement(value, FrameElement::NOT_SYNCED));
   elements_[element_count() - 1].set_untagged_int32(true);
 }
=======================================
--- /branches/3.0/src/ia32/virtual-frame-ia32.h Wed Aug 11 06:41:03 2010
+++ /branches/3.0/src/ia32/virtual-frame-ia32.h Mon Feb 28 04:32:02 2011
@@ -418,6 +418,8 @@
   void EmitPush(Immediate immediate,
                 TypeInfo info = TypeInfo::Unknown());

+  inline bool ConstantPoolOverflowed();
+
   // Push an element on the virtual frame.
   inline void Push(Register reg, TypeInfo info = TypeInfo::Unknown());
   inline void Push(Handle<Object> value);
=======================================
--- /branches/3.0/src/version.cc        Mon Feb 28 02:23:51 2011
+++ /branches/3.0/src/version.cc        Mon Feb 28 04:32:02 2011
@@ -35,7 +35,7 @@
 #define MAJOR_VERSION     3
 #define MINOR_VERSION     0
 #define BUILD_NUMBER      12
-#define PATCH_LEVEL       26
+#define PATCH_LEVEL       27
 #define CANDIDATE_VERSION false

 // Define SONAME to have the SCons build the put a specific SONAME into the
=======================================
--- /branches/3.0/src/virtual-frame-heavy-inl.h Mon May 17 02:10:26 2010
+++ /branches/3.0/src/virtual-frame-heavy-inl.h Mon Feb 28 04:32:02 2011
@@ -80,9 +80,15 @@
     elements_.Add(element);
   }
 }
+
+
+bool VirtualFrame::ConstantPoolOverflowed() {
+  return FrameElement::ConstantPoolOverflowed();
+}


 void VirtualFrame::Push(Handle<Object> value) {
+  ASSERT(!ConstantPoolOverflowed());
   FrameElement element =
       FrameElement::ConstantElement(value, FrameElement::NOT_SYNCED);
   elements_.Add(element);
=======================================
--- /branches/3.0/src/x64/codegen-x64.cc        Wed Feb  9 23:21:03 2011
+++ /branches/3.0/src/x64/codegen-x64.cc        Mon Feb 28 04:32:02 2011
@@ -4694,7 +4694,18 @@

 void CodeGenerator::VisitLiteral(Literal* node) {
   Comment cmnt(masm_, "[ Literal");
-  frame_->Push(node->handle());
+  if (frame_->ConstantPoolOverflowed()) {
+    Result temp = allocator_->Allocate();
+    ASSERT(temp.is_valid());
+    if (node->handle()->IsSmi()) {
+      __ Move(temp.reg(), Smi::cast(*node->handle()));
+    } else {
+      __ movq(temp.reg(), node->handle(), RelocInfo::EMBEDDED_OBJECT);
+    }
+    frame_->Push(&temp);
+  } else {
+    frame_->Push(node->handle());
+  }
 }


=======================================
--- /branches/3.0/src/x64/virtual-frame-x64.h   Mon Jul 26 04:44:40 2010
+++ /branches/3.0/src/x64/virtual-frame-x64.h   Mon Feb 28 04:32:02 2011
@@ -399,6 +399,8 @@
   // Uses kScratchRegister, emits appropriate relocation info.
   void EmitPush(Handle<Object> value);

+  inline bool ConstantPoolOverflowed();
+
   // Push an element on the virtual frame.
   inline void Push(Register reg, TypeInfo info = TypeInfo::Unknown());
   inline void Push(Handle<Object> value);

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to