Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Issue 16450: Use unspilled virtual frames when compiling compare operations.... (Closed)

Created:
12 years ago by William Hesse
Modified:
9 years, 7 months ago
CC:
v8-dev
Visibility:
Public.

Description

Use unspilled virtual frames when compiling compare operations. Add xchg instruction to assembler and disassembler. Add jump targets with two Result arguments.

Patch Set 1 #

Total comments: 20
Unified diffs Side-by-side diffs Delta from patch set Stats (+137 lines, -30 lines) Patch
M src/assembler-ia32.h View 1 chunk +3 lines, -0 lines 0 comments Download
M src/assembler-ia32.cc View 1 chunk +15 lines, -0 lines 2 comments Download
M src/codegen-ia32.cc View 3 chunks +49 lines, -30 lines 12 comments Download
M src/disasm-ia32.cc View 2 chunks +2 lines, -0 lines 0 comments Download
M src/jump-target.h View 1 chunk +2 lines, -0 lines 4 comments Download
M src/jump-target-ia32.cc View 2 chunks +65 lines, -0 lines 1 comment Download
M src/virtual-frame-ia32.cc View 1 chunk +1 line, -0 lines 1 comment Download

Messages

Total messages: 4 (0 generated)
William Hesse
A Christmas changelist!
12 years ago (2008-12-23 14:53:31 UTC) #1
Kevin Millikin (Chromium)
Still needs some work. I think you've (uniformly) swapped the order of the frame elements ...
11 years, 12 months ago (2008-12-29 09:05:38 UTC) #2
William Hesse
http://codereview.chromium.org/16450/diff/1/7 File src/assembler-ia32.cc (right): http://codereview.chromium.org/16450/diff/1/7#newcode751 Line 751: dst = src; // No need to copy ...
11 years, 12 months ago (2008-12-29 11:47:42 UTC) #3
William Hesse
11 years, 12 months ago (2008-12-29 12:57:06 UTC) #4
This changelist has been copied to a new issue number, because edits were made
on a different checked-out copy of V8.  Further comments and work are at
http://codereview.chromium.org/16481


On 2008/12/29 11:47:42, William Hesse wrote:
> http://codereview.chromium.org/16450/diff/1/7
> File src/assembler-ia32.cc (right):
> 
> http://codereview.chromium.org/16450/diff/1/7#newcode751
> Line 751: dst = src;  // No need to copy eax to src, we assume src is eax.
> On 2008/12/29 09:05:38, Kevin Millikin wrote:
> > More straightforward:
> > EMIT(0x90 | (dst.is(eax) ? src.code() : dst.code()));
> 
> Done.
> 
> http://codereview.chromium.org/16450/diff/1/8
> File src/codegen-ia32.cc (right):
> 
> http://codereview.chromium.org/16450/diff/1/8#newcode1193
> Line 1193: right_side = frame_->Pop();
> On 2008/12/29 09:05:38, Kevin Millikin wrote:
> > I'm confused by this: the rhs is normally on top of the lhs on the stack, so
I
> > would expect the rhs to be popped first in the normal case and the lhs to be
> > popped first in the reversed case.
> 
> True.  Left and right were consistently flipped through the entire function. 
> Left has been renamed to right, and right to left, so now they are correct.
> 
> http://codereview.chromium.org/16450/diff/1/8#newcode1213
> Line 1213: __ cmp(right_side.reg(), Operand(left_side.reg()));
> On 2008/12/29 09:05:38, Kevin Millikin wrote:
> > Here is where the variable naming/popping order confusion manifests itself. 
> Why
> > is right_side on the left?
> 
> Done.
> 
> http://codereview.chromium.org/16450/diff/1/8#newcode1214
> Line 1214: // Fall through to |done|.
> On 2008/12/29 09:05:38, Kevin Millikin wrote:
> > Did we need to change the order we emit the smi and non-smi cases?  We've
now
> > grown an extra unconditional jump on the fast path.  We should instead work
> hard
> > to make merging work properly with the original basic block order (and leave
> the
> > original order for now even if its temporarily suboptimal).
> > 
> > If you leave it as you've changed it, please update the comments (here we're
> not
> > falling through to done, we're jumping to it....).
> 
> Changed back, so there is not an unconditional jump on the fast case.
> The JumpTarget "done" is bound to the slow case first, so we are probably
> suboptimal until we handle merges better.
> 
> http://codereview.chromium.org/16450/diff/1/8#newcode1222
> Line 1222: 
> On 2008/12/29 09:05:38, Kevin Millikin wrote:
> > Remove the extra blank line.
> 
> Done.
> 
> http://codereview.chromium.org/16450/diff/1/8#newcode4201
> Line 4201: frame_->Push(eax);  // push the result
> On 2008/12/29 09:05:38, Kevin Millikin wrote:
> > Get rid of this explicit (and non-counted) reference to eax in non-spilled
> code.
> >  Instead, VirtualFrame::InvokeBuiltin could return a result that can be used
> to
> > manage the result register resource (you should also get rid of the version
of
> > VirtualFrame::Push that takes a register).
> 
> I would like to make this a separate change, to be done immediately.
> 
> http://codereview.chromium.org/16450/diff/1/8#newcode4209
> Line 4209: __ test(eax, Operand(eax));
> On 2008/12/29 09:05:38, Kevin Millikin wrote:
> > Ditto.
> 
> To be done in separate change.
> 
> http://codereview.chromium.org/16450/diff/1/6
> File src/jump-target.h (right):
> 
> http://codereview.chromium.org/16450/diff/1/6#newcode101
> Line 101: void Branch(Condition cc, Result* arg_1, Result* arg_2, Hint hint =
> no_hint);
> On 2008/12/29 09:05:38, Kevin Millikin wrote:
> > Please call these arguments arg0 and arg1 (zero based indexing like C++ and
> > without the underscore).
> 
> Done.
> 
> http://codereview.chromium.org/16450/diff/1/6#newcode107
> Line 107: void Bind(Result* arg_1, Result* arg_2);
> On 2008/12/29 09:05:38, Kevin Millikin wrote:
> > Ditto.
> 
> Done.

Powered by Google App Engine
This is Rietveld 408576698