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

Issue 7024047: [Arguments] Port fast arguments creation stubs to X64 and ARM. (Closed)

Created:
9 years, 6 months ago by Karl Klose
Modified:
9 years, 6 months ago
CC:
v8-dev
Visibility:
Public.

Description

[Arguments] Port fast arguments creation stubs to X64 and ARM. Also remove an unimpleted code assertion and add printing for arguments objects.

Patch Set 1 #

Patch Set 2 : Better ARM code. #

Total comments: 31

Patch Set 3 : Address comments. #

Total comments: 19

Patch Set 4 : Addres comments. #

Unified diffs Side-by-side diffs Delta from patch set Stats (+615 lines, -187 lines) Patch
M src/accessors.cc View 1 chunk +0 lines, -1 line 0 comments Download
M src/arm/code-stubs-arm.cc View 1 2 3 2 chunks +282 lines, -84 lines 0 comments Download
M src/arm/full-codegen-arm.cc View 1 2 3 1 chunk +9 lines, -3 lines 0 comments Download
M src/ia32/code-stubs-ia32.cc View 1 2 3 2 chunks +2 lines, -2 lines 0 comments Download
M src/objects-printer.cc View 1 2 3 1 chunk +9 lines, -0 lines 0 comments Download
M src/x64/code-stubs-x64.cc View 1 2 3 1 chunk +313 lines, -97 lines 0 comments Download

Messages

Total messages: 8 (0 generated)
Karl Klose
9 years, 6 months ago (2011-06-07 11:37:27 UTC) #1
Lasse Reichstein
Driveby comments on X64 code (style only, haven't checked what it does). http://codereview.chromium.org/7024047/diff/2007/src/x64/code-stubs-x64.cc File src/x64/code-stubs-x64.cc ...
9 years, 6 months ago (2011-06-07 12:20:19 UTC) #2
Kevin Millikin (Chromium)
I've just looked at the ARM code so far. I have a few suggestions for ...
9 years, 6 months ago (2011-06-07 13:54:10 UTC) #3
Karl Klose
http://codereview.chromium.org/7024047/diff/2007/src/arm/code-stubs-arm.cc File src/arm/code-stubs-arm.cc (right): http://codereview.chromium.org/7024047/diff/2007/src/arm/code-stubs-arm.cc#newcode3974 src/arm/code-stubs-arm.cc:3974: // r1 = parameter count (untagged) On 2011/06/07 13:54:10, ...
9 years, 6 months ago (2011-06-10 11:32:22 UTC) #4
Kevin Millikin (Chromium)
LGTM, with some small comments below. http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc File src/arm/code-stubs-arm.cc (right): http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc#newcode3975 src/arm/code-stubs-arm.cc:3975: // r1 = ...
9 years, 6 months ago (2011-06-10 11:51:52 UTC) #5
Lasse Reichstein
http://codereview.chromium.org/7024047/diff/8001/src/x64/code-stubs-x64.cc File src/x64/code-stubs-x64.cc (right): http://codereview.chromium.org/7024047/diff/8001/src/x64/code-stubs-x64.cc#newcode2006 src/x64/code-stubs-x64.cc:2006: __ push(rbx); Unless the stub uses them for something ...
9 years, 6 months ago (2011-06-10 12:15:22 UTC) #6
Karl Klose
http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc File src/arm/code-stubs-arm.cc (right): http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc#newcode3975 src/arm/code-stubs-arm.cc:3975: // r1 = parameter count (untagged) Should be done ...
9 years, 6 months ago (2011-06-14 12:56:28 UTC) #7
Alexandre
9 years, 6 months ago (2011-06-15 13:27:56 UTC) #8
A few small comments.

I haven't tested the patch yet. How does it behave on ARM?

Regards,

Alexandre

http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc
File src/arm/code-stubs-arm.cc (right):

http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc#ne...
src/arm/code-stubs-arm.cc:3956: __ add(r3, r3, Operand(r2, LSL, 1));
Here and below, '1' standing for 'kPointerSizeLog2 - kSmiTagSize' in shift
operations. Should we use the verbose description?

http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc#ne...
src/arm/code-stubs-arm.cc:4017: __ add(r1, r1,
Operand(FixedArray::kHeaderSize));
This add and the following one could be merged into only one instruction.

http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc#ne...
src/arm/code-stubs-arm.cc:4114: __ jmp(&parameters_test);
I don't know how performance sensitive this loop is, but I think it could be
optimized to something like this:


Label loop, end;

cmp r6, 0
beq end

// Setup.
// Use r6 as the counter, already shifted to kPointerSize.
mov r6, r6 LSL 1
// Compute base addresses of stores. (extracting loop invariant code)
add r5, r4, kParameterMapHeaderSize - kHeapObjectTag
add r3, r3, FixedArray::kHeaderSize - kHeapObjectTag

bind(loop);
subs r6, r6, kPointerSize   // Decrement the counter and set the flags.
// Stores.
str r1, [r5, r6]
add r1, r1, Smi::FromInt(1)
str r7, [r3, r6]
bgt, loop

// Restore address of backing store.
sub r3, r3, FixedArray::kHeaderSize - kHeapObjectTag

bind(end);

http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc#ne...
src/arm/code-stubs-arm.cc:4138: __ mov(r1, r9);
If necessary I think this loop could also be refactored.

- If r4 is not used outside the loop the test to enter the loop can be moved at
the very beginning.
- Using r1 as a counter
    - aligned on kPointerSize (with a 'sub' setting flags)
    - 'r1 LSL 1' shift can be moved to the initial 'mov(r1, r9)'

http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc#ne...
src/arm/code-stubs-arm.cc:4144: __ sub(r4, r4, Operand(kPointerSize));
The sub can be merged with the ldr using NegPreIndex.

http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc#ne...
src/arm/code-stubs-arm.cc:4239: __ mov(r1, Operand(r1, LSR, kSmiTagSize));
If r1 is only used as a counter and not used later there is no need to untag it.
It can be decremented by Smi::FromInt(1) instead.

http://codereview.chromium.org/7024047/diff/8001/src/arm/code-stubs-arm.cc#ne...
src/arm/code-stubs-arm.cc:4252: __ cmp(r1, Operand(0, RelocInfo::NONE));
Could merge the 'sub' and 'cmp' instructions into a 'subs'.

Powered by Google App Engine
This is Rietveld 408576698