Index: src/x64/virtual-frame-x64.cc |
diff --git a/src/x64/virtual-frame-x64.cc b/src/x64/virtual-frame-x64.cc |
index 1787044cdd5bbb6b9066662bf5b9e9d66586ca6a..c4d7e65663e76a197df1ca2c280ac7ae9229e8d1 100644 |
--- a/src/x64/virtual-frame-x64.cc |
+++ b/src/x64/virtual-frame-x64.cc |
@@ -274,6 +274,24 @@ void VirtualFrame::Push(Expression* expr) { |
} |
+void VirtualFrame::Push(Handle<Object> value) { |
+ if (ConstantPoolOverflowed()) { |
+ Result temp = cgen()->allocator()->Allocate(); |
+ ASSERT(temp.is_valid()); |
+ if (value->IsSmi()) { |
+ __ Move(temp.reg(), Smi::cast(*value)); |
+ } else { |
+ __ movq(temp.reg(), value, RelocInfo::EMBEDDED_OBJECT); |
+ } |
+ Push(&temp); |
+ } else { |
+ FrameElement element = |
+ FrameElement::ConstantElement(value, FrameElement::NOT_SYNCED); |
+ elements_.Add(element); |
+ } |
+} |
+ |
+ |
void VirtualFrame::Drop(int count) { |
ASSERT(count >= 0); |
ASSERT(height() >= count); |