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

Issue 601080: Change KeyedLoadIC interface on ia32 to take receiver and name in registers. (Closed)

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

Description

Change KeyedLoadIC interface on ia32 to take receiver and name in registers. Committed: http://code.google.com/p/v8/source/detail?r=3895

Patch Set 1 #

Patch Set 2 : '' #

Patch Set 3 : '' #

Patch Set 4 : '' #

Total comments: 25

Patch Set 5 : '' #

Total comments: 5

Patch Set 6 : '' #

Unified diffs Side-by-side diffs Delta from patch set Stats (+223 lines, -216 lines) Patch
M src/ia32/builtins-ia32.cc View 1 2 3 4 5 2 chunks +2 lines, -5 lines 0 comments Download
M src/ia32/codegen-ia32.cc View 1 2 3 4 5 5 chunks +25 lines, -11 lines 0 comments Download
M src/ia32/full-codegen-ia32.cc View 1 2 3 4 5 6 chunks +23 lines, -15 lines 0 comments Download
M src/ia32/ic-ia32.cc View 1 2 3 4 5 15 chunks +132 lines, -146 lines 0 comments Download
M src/ia32/stub-cache-ia32.cc View 1 2 3 4 5 9 chunks +22 lines, -36 lines 0 comments Download
M src/ia32/virtual-frame-ia32.cc View 1 2 3 4 5 1 chunk +19 lines, -3 lines 0 comments Download

Messages

Total messages: 4 (0 generated)
William Hesse
10 years, 10 months ago (2010-02-16 15:14:58 UTC) #1
Kevin Millikin (Chromium)
I'm not sure I like the (eax=receiver,ecx=key) calling convention. I definitely don't like changing the ...
10 years, 10 months ago (2010-02-17 12:50:52 UTC) #2
William Hesse
All recommended changes made. Interface changed to: key: eax receiver: edx Some uses of SmiTag, ...
10 years, 10 months ago (2010-02-17 17:01:09 UTC) #3
Kevin Millikin (Chromium)
10 years, 10 months ago (2010-02-18 09:46:25 UTC) #4
LGTM.

http://codereview.chromium.org/601080/diff/8001/9001
File src/ia32/codegen-ia32.cc (right):

http://codereview.chromium.org/601080/diff/8001/9001#newcode6478
src/ia32/codegen-ia32.cc:6478: if (!receiver_.is(eax)) {
These are pretty hairy to reverse engineer.  I think two simple comments help:

if (!receiver_.is(eax)) {
  // Register eax is available for key.
  ...
} else if (!key_.is(edx)) {
  // Register edx is available for receiver.
  ...
} ...

http://codereview.chromium.org/601080/diff/8001/9001#newcode6798
src/ia32/codegen-ia32.cc:6798: Variable* var =
expression_->AsVariableProxy()->AsVariable();
It's a separate change, but var is always NULL and is_global is always false.

http://codereview.chromium.org/601080/diff/8001/9006
File src/ia32/ic-ia32.cc (right):

http://codereview.chromium.org/601080/diff/8001/9006#newcode266
src/ia32/ic-ia32.cc:266: __ mov(eax, ecx);
I think this code can be streamlined a bit (as a TODO) if you allow eax to hold
values other than the key (obviously preserving the key in a known place).

For example, you might eliminate some moves on the fast path like the one just
above.

http://codereview.chromium.org/601080/diff/8001/9004
File src/ia32/virtual-frame-ia32.cc (right):

http://codereview.chromium.org/601080/diff/8001/9004#newcode932
src/ia32/virtual-frame-ia32.cc:932: if (!key.is_register() ||
!key.reg().is(edx)) {
// Register edx is available for receiver.

http://codereview.chromium.org/601080/diff/8001/9004#newcode935
src/ia32/virtual-frame-ia32.cc:935: } else if (!receiver.is_register() ||
!receiver.reg().is(eax)) {
// Register eax is available for key.

Powered by Google App Engine
This is Rietveld 408576698