Reviewers: William Hesse, Kasper Lund, Message: Kasper & Bill, can you take a look at this?
Two caveats: (1) Much of the complication is involved in correctly implementing VirtualFrame::MakeMergable, which is all going away shortly. It will be replaced with a function to calculate a target frame based on a set of incoming frames, and that makes the frame mergable in one-pass if needed. (2) There is a potential issue that I don't think arises in practice. Spilling or syncing a virtual frame element (which is used by merging, make mergable, and calling functions) can require (no more than) one free register to perform memory-to-memory moves. Obviously, we need to either ensure that this is always the case or detect when it isn't and fall back on something (spilling an arbitrary register to use, for instance). Description: Experimental: allow the virtual frame to explicitly indicate sharing of memory (as well as register) elements. A new type of frame element is introduced, which is a copy of a memory or register element. As a simple first implementation, sets of copies are backed by their lowest frame element. This requires adjusting the backing store when moving elements up and down in the frame. Copied elements have copy-on-write semantics---modifying the backing frame element requires finding the appropriate new backing element and updating all copies in the set. Please review this at http://codereview.chromium.org/19755 SVN Base: http://v8.googlecode.com/svn/branches/experimental/toiger/ Affected files: M src/disassembler.cc M src/virtual-frame-ia32.h M src/virtual-frame-ia32.cc --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---