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

Issue 6661022: ARM: Port r7089 to ARM... (Closed)

Created:
9 years, 9 months ago by Søren Thygesen Gjesse
Modified:
9 years, 7 months ago
Reviewers:
Lasse Reichstein, Rico
CC:
v8-dev
Visibility:
Public.

Description

ARM: Port r7089 to ARM Ensure that there is always enough bytes between consequtive calls in optimized code to write a call instruction at the return points without overlapping. Add a call to deoptimize all functions after running tests with --stress-opt. This will catch some issues with functions which cannot be forcefully deoptimized. Some of the tests failed on ARM with that change without the rest of the changes in this change. Committed: http://code.google.com/p/v8/source/detail?r=7132

Patch Set 1 #

Patch Set 2 : '' #

Total comments: 8
Unified diffs Side-by-side diffs Delta from patch set Stats (+204 lines, -40 lines) Patch
M include/v8-testing.h View 1 chunk +5 lines, -0 lines 0 comments Download
M samples/shell.cc View 2 chunks +7 lines, -0 lines 2 comments Download
M src/api.cc View 1 chunk +5 lines, -0 lines 0 comments Download
M src/arm/assembler-arm.h View 1 chunk +5 lines, -2 lines 0 comments Download
M src/arm/assembler-arm.cc View 1 chunk +27 lines, -3 lines 4 comments Download
M src/arm/deoptimizer-arm.cc View 1 3 chunks +6 lines, -2 lines 0 comments Download
M src/arm/lithium-codegen-arm.h View 1 chunk +3 lines, -0 lines 0 comments Download
M src/arm/lithium-codegen-arm.cc View 1 2 chunks +19 lines, -2 lines 0 comments Download
M src/arm/macro-assembler-arm.h View 8 chunks +17 lines, -9 lines 0 comments Download
M src/arm/macro-assembler-arm.cc View 1 8 chunks +98 lines, -22 lines 2 comments Download
M src/ia32/deoptimizer-ia32.cc View 1 2 chunks +6 lines, -0 lines 0 comments Download
M src/x64/deoptimizer-x64.cc View 1 2 chunks +6 lines, -0 lines 0 comments Download

Messages

Total messages: 4 (0 generated)
Søren Thygesen Gjesse
9 years, 9 months ago (2011-03-10 11:29:06 UTC) #1
Rico
Drive by: Maybe we should have a regression test for this? I actually thought Lasse ...
9 years, 9 months ago (2011-03-10 11:43:02 UTC) #2
Lasse Reichstein
LGTM http://codereview.chromium.org/6661022/diff/5003/samples/shell.cc File samples/shell.cc (right): http://codereview.chromium.org/6661022/diff/5003/samples/shell.cc#newcode70 samples/shell.cc:70: return 1; Thank you! Thank you! http://codereview.chromium.org/6661022/diff/5003/src/arm/assembler-arm.cc File ...
9 years, 9 months ago (2011-03-10 11:58:47 UTC) #3
Søren Thygesen Gjesse
9 years, 9 months ago (2011-03-10 12:47:02 UTC) #4
http://codereview.chromium.org/6661022/diff/5003/samples/shell.cc
File samples/shell.cc (right):

http://codereview.chromium.org/6661022/diff/5003/samples/shell.cc#newcode148
samples/shell.cc:148: v8::Testing::DeoptimizeAll();
Regarding regression tests this added deoptimization of all functions did
trigger an assert in deoptimizer-arm.cc on a handful of tests.

http://codereview.chromium.org/6661022/diff/5003/src/arm/assembler-arm.cc
File src/arm/assembler-arm.cc (right):

http://codereview.chromium.org/6661022/diff/5003/src/arm/assembler-arm.cc#new...
src/arm/assembler-arm.cc:772: uint32_t dummy1, dummy2;
On 2011/03/10 11:58:48, Lasse Reichstein wrote:
> So the change here is that even if must_use_constant_pool(), it may be a
single
> instruction if it's just the load, whereas before it was assumed that it was
> never a single instruction?

Before this was never used to check a mov instruction, and actually gave the
wrong answer if it was. A mov using the constant pool is always a single
instruction where the mov is transformed to an ldr.

http://codereview.chromium.org/6661022/diff/5003/src/arm/assembler-arm.cc#new...
src/arm/assembler-arm.cc:779: if (must_use_constant_pool() ||
!CpuFeatures::IsSupported(ARMv7)) {
On 2011/03/10 11:58:48, Lasse Reichstein wrote:
> Could you force using the constant pool for some instructions, to disable the
> movw/t sequence?
> It might be useful in cases like this?

The only case where movw and movt will be used is when romde is RlocInfo::NONE
or romde is RlocInfo::EXTERNAL_REFERENCE and we are not serializing.

We could, but I think it is better to use movw/movt whenever possible.

http://codereview.chromium.org/6661022/diff/5003/src/arm/macro-assembler-arm.cc
File src/arm/macro-assembler-arm.cc (right):

http://codereview.chromium.org/6661022/diff/5003/src/arm/macro-assembler-arm....
src/arm/macro-assembler-arm.cc:142: size += kInstrSize;
On 2011/03/10 11:58:48, Lasse Reichstein wrote:
> Is this always one instruction to add? Or could it be two (movw,movt,op)?

The initial size is two and the +1 here accounts for the operand taking up an
additional instruction making the total size 2 or 3. And only if rmode is not
RelocInfo::NONE can it be 3 as otherwise the constant pool is used.

Powered by Google App Engine
This is Rietveld 408576698