http://codereview.chromium.org/6263005/diff/6001/src/ia32/lithium-gap-resolver-ia32.cc File src/ia32/lithium-gap-resolver-ia32.cc (right):
http://codereview.chromium.org/6263005/diff/6001/src/ia32/lithium-gap-resolver-ia32.cc#newcode35 src/ia32/lithium-gap-resolver-ia32.cc:35: : cgen_(owner), moves_(32), spilled_register_(-1) { On 2011/01/17 10:43:43, William Hesse wrote:
Can we use no_reg, or no_reg.code(), for no spilled register?
That seems like a subtle type error. This is an allocation index, not a register code. http://codereview.chromium.org/6263005/diff/6001/src/ia32/lithium-gap-resolver-ia32.cc#newcode104 src/ia32/lithium-gap-resolver-ia32.cc:104: for (int i = moves_.length() - 1; i >= 0; --i) { On 2011/01/17 10:43:43, William Hesse wrote:
Do we have the source use counts at this point? I guess only for
registers.
Can we skip this loop if the destination is a register, and its use
count is 0? We have source use counts for the general purpose registers. I wanted to keep things simple: most gaps have 0, 1, or two moves. http://codereview.chromium.org/6263005/diff/6001/src/ia32/lithium-gap-resolver-ia32.cc#newcode217 src/ia32/lithium-gap-resolver-ia32.cc:217: moves_.Rewind(0); On 2011/01/17 10:43:43, William Hesse wrote:
Shouldn't we have a List::Clear for Rewind(0), and also shouldn't
Rewind()
assert that the new index < length_?
Obviously, this could go in a different change.
We have List::Clear but it does something different (deallocates the backing store). At this point List::Rewind(0) is a V8 idiom. http://codereview.chromium.org/6263005/diff/6001/src/ia32/lithium-gap-resolver-ia32.cc#newcode265 src/ia32/lithium-gap-resolver-ia32.cc:265: // combinations are possible. On 2011/01/17 10:43:43, William Hesse wrote:
Are only combinations prohibited by the double vs word size
difference, and
constants as destinations, prohibited, or are there other, hidden,
non-supported
cases?
The first. http://codereview.chromium.org/6263005/ -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
