Materializing a frame element on the stack by pushing it can cause the
authorkmillikin@chromium.org <kmillikin@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 24 Apr 2009 11:26:49 +0000 (11:26 +0000)
committerkmillikin@chromium.org <kmillikin@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 24 Apr 2009 11:26:49 +0000 (11:26 +0000)
commitcc0c8d178f0cab1806fc07db7ee41215e9c6199a
tree80092597f2d9d28f957cdc7d9f4cb16344c516de
parent1f7e96743ddb6753b1342ce97bae5a53a12f0e91
Materializing a frame element on the stack by pushing it can cause the
stack pointer to change by more than one in a corner case.  If we push
a constant smi larger than 16 bits, we push it via a temporary
register.  Allocating the temporary can cause a register to be spilled
from the frame somewhere above the stack pointer.

As a fix, do not use pushes to materialize ranges of elements of size
larger than one.

Review URL: http://codereview.chromium.org/92121

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1785 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
src/arm/virtual-frame-arm.cc
src/ia32/virtual-frame-ia32.cc
src/virtual-frame.cc
test/cctest/test-log-ia32.cc