History log of /art/runtime/interpreter/mterp/out/mterp_arm64.S
Revision Date Author Comments
1d011d9306fd4ff57d72411775d415a86f5ed398 04-Apr-2016 Bill Buzbee <buzbee@google.com> Revert "Revert "Revert "Revert "ART: Improve JitProfile perf in arm/arm64 mterp""""

Bug: 28081559

This reverts commit 961ea9fe42edcc2c57469bf451d1ca421da5cd59.

Change-Id: I98a5bb8112646706ae7bd73bf6393cb956466be3
961ea9fe42edcc2c57469bf451d1ca421da5cd59 01-Apr-2016 Hiroshi Yamauchi <yamauchi@google.com> Revert "Revert "Revert "ART: Improve JitProfile perf in arm/arm64 mterp"""

This reverts commit 4a8ac9cee4312ac910fabf31c64d28d4c8362836.

570-checker-osr intermittently failing.

Bug: 27939339
d6190dcdfb1f247ff0bf8268dacf413c93b58cf5 31-Mar-2016 Calin Juravle <calin@google.com> Revert "Revert "Revert "ART: Improve JitProfile perf in arm/arm64 mterp"""

This reverts commit 4a8ac9cee4312ac910fabf31c64d28d4c8362836.

Bug: 27939339
4a8ac9cee4312ac910fabf31c64d28d4c8362836 25-Mar-2016 Bill Buzbee <buzbee@google.com> Revert "Revert "ART: Improve JitProfile perf in arm/arm64 mterp""

Ready for review.

This reverts commit 6aef867f4d1a98a12bcdd65e9bf2ff894f0f2d7e.

Change-Id: I5d53ed2bedc7e429ce7d3cdf80b6696a9628740e
6aef867f4d1a98a12bcdd65e9bf2ff894f0f2d7e 25-Mar-2016 Calin Juravle <calin@google.com> Revert "ART: Improve JitProfile perf in arm/arm64 mterp"

This reverts commit c1d6b341eed646e5adafc6c4fd4e3748f0292368.
c1d6b341eed646e5adafc6c4fd4e3748f0292368 02-Mar-2016 buzbee <buzbee@google.com> ART: Improve JitProfile perf in arm/arm64 mterp

ART currently requires two profiling-related things from the
interpreters: hotness updates and OSR switch checks. The hotness
updates previously used the existing instrumentation framework - which
is flexible, but quite heavyweight. For most things, the
instrumentation framework overhead is acceptable, but because we do a
hotness update on every backwards branch the overhead is unacceptable.
Prior to this CL, branch profiling dominates interpreter cost.

Here, we bypass the instrumentation framework for hotness updates
and deliver a significant performance improvement. Running
interpreter-only (dalvikvm -Xint) on a Nexus 6, we see the logic
subtest of Caffeinemark improving from 2600 to 9200, and the
overall score going from 1979 to over 3000. Compared to the
C++ switch interpreter, we see a 6x improvement on the branchy logic
subtest and a 2.6x improvement overall.

Compared with the previous mterp which did not have support for
jit profiling, we see a few (1% to 5%) performance loss on the
standard command-line benchmarks. I consider this acceptable
(we could create an alternate non-profiling mterp which would
have no penalty, but I don't consider this overhead big enough to
justify that).

Change-Id: I50b5b8c5ed8ebda3c8b4e65d27ba7393c3feae04
058231ef584776ca4d5f800e8b10dc654107c029 16-Mar-2016 buzbee <buzbee@google.com> ART: Mterp arm64 2-operand double rem fix

An instruction ordering bug caused 2-operand double-precision
rem operations to be performed incorrectly on the arm64 fast
interpreter. Also, fixes the existing omnibus-opcodes smoke test
to better catch 2-operand float and double operation problems
(the problem was masked in the existing test).

Bug: 27604215

(cherry picked from commit 908c0b28517c2d21f9ddd231e91cdd2c339aeb16)

Change-Id: I1856d914a0cb76c6034d0c0e021525b095e33452
8b80f7174e8a780af938fbabd7e0ccfdd5ba4eeb 16-Mar-2016 buzbee <buzbee@google.com> ART: Mterp arm64 2-operand double rem fix

An instruction ordering bug caused 2-operand double-precision
rem operations to be performed incorrectly on the arm64 fast
interpreter. Also, fixes the existing omnibus-opcodes smoke test
to better catch 2-operand float and double operation problems
(the problem was masked in the existing test).

Bug: 27604215

(cherry picked from commit 908c0b28517c2d21f9ddd231e91cdd2c339aeb16)

Change-Id: I1856d914a0cb76c6034d0c0e021525b095e33452
908c0b28517c2d21f9ddd231e91cdd2c339aeb16 16-Mar-2016 buzbee <buzbee@google.com> ART: Mterp arm64 2-operand double rem fix

An instruction ordering bug caused 2-operand double-precision
rem operations to be performed incorrectly on the arm64 fast
interpreter. Also, fixes the existing omnibus-opcodes smoke test
to better catch 2-operand float and double operation problems
(the problem was masked in the existing test).

Bug: 27604215
Change-Id: I9fac1e61d9defe7d623c611406c35921abb65b04
ace690f5e440930d7bbad97fdbfdc3eb65e230be 11-Mar-2016 buzbee <buzbee@google.com> ART: mterp arm/arm64 cleanup

Assembly code cleanup in response to comments from already-submitted
CL: https://android-review.googlesource.com/#/c/188977/

Change-Id: I0ea85c5759a08cb50ef3e97dc5cf79b3ba041640
f1dcaccfac4a9e022ea49752a774552b2f791489 24-Feb-2016 buzbee <buzbee@google.com> ART: Profile all branches for on-stack replacement

Change the switch, goto and mterp interpreters to profile
not-taken as well as taken branches. This allows for on-stack
replacement when the cfg has been rearranged such that the loop
header was originally the fallthrough of a Dalvik byte-code branch.

Note that this increases the already-heavy cost of branch profiling.
Measuring on a Nexus 6 using a very branchy benchmark (logic subtest
from Caffeinemark), we see:

No profiling Taken only Taken & not-taken
mterp 9728 3434 2384
C++ goto 3914 2422 2037
C++ switch 2986 2411 2112

As measured, the cost of branch profiling is dominating execution
time. This will be addressed in follow-up CLs.

Change-Id: Ibc858f317398dd991ed8e4f3c3d72bd4c9a60594
fd522f9039befff986701ff05054ffdd1be1dd33 11-Feb-2016 Bill Buzbee <buzbee@google.com> Revert "Revert "Revert "Revert "ART: Enable Jit Profiling in Mterp for arm/arm64""""

This reverts commit 5d03317a834efdf3b5240c401f1bc2ceac7a2f25.

We need to catch all possible cases in which new instrumentation appears
or the debugger is attached, and then switch to the reference interpreter
if necessary. We may, in a future CL, use the alt-mterp mechanism to accompish
this (as did Dalvik).

Only enables Arm64 for now. Once it survives extended testing, will enable
arm and update x86.

Updated OSR handling to match other interpreters.

Change-Id: I076f1d752d6f59899876bab26b18e2221cd92f69
5d03317a834efdf3b5240c401f1bc2ceac7a2f25 11-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Revert "Revert "Revert "ART: Enable Jit Profiling in Mterp for arm/arm64"""

Unfortunately, run-test interpreter on arm32 are still timing out, and the following jdwp tests on armv8 are failing:

org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testBreakpoint_BeforeException (no test history available)
org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testFieldAccess (no test history available)
org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testFieldModification (no test history available)
org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testMethodExit (no test history available)
org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testMethodExitWithReturnValue (no test history available)
org.apache.harmony.jpda.tests.jdwp.Events.FieldAccessTest#testFieldAccessEvent (no test history available)
org.apache.harmony.jpda.tests.jdwp.Events.FieldModification002Test#testFieldModifyEvent (no test history available)
org.apache.harmony.jpda.tests.jdwp.Events.FieldModificationTest#testFieldModifyEvent (no test history available)
org.apache.harmony.jpda.tests.jdwp.Events.MethodExitWithReturnValueTest#testMethodExitWithReturnValueException (no test history available)

This reverts commit 9687f244bdb5dd0b4d9dd804a7c8c7b4a911d364.

Change-Id: Iadac4902ab8d7eb574cc4abeba5f93388d59dcb4
9687f244bdb5dd0b4d9dd804a7c8c7b4a911d364 05-Feb-2016 Bill Buzbee <buzbee@google.com> Revert "Revert "ART: Enable Jit Profiling in Mterp for arm/arm64""

Fixes: missing sign extension in iget template
Call to wrong branch profiling helper in arm/goto_16 and arm/goto_32
Missing export PCs
Reworks: Branch handlers to reduce cost of branch profiling.

Re-enables Jit profiling for both Arm and Arm64.

Performance note:
Branch profiling is relatively expensive, though the real
cost will depend on branch frequency. Taking a very
branch intensive benchmark, CaffeineMark's logic test, we
see the following scores (higher is better):

Mterp (profiling off) 6187
Mterp (profiling on) 4305

Switch (profiling off) 3931
Switch (profiling on) 2032

This reverts commit 95717f0010e7a9445450f4d39babfaf3a83e29b5.

Change-Id: Ia2ef8b54ce95bfa86178b89c43f8a703316b2944
95717f0010e7a9445450f4d39babfaf3a83e29b5 05-Feb-2016 Nicolas Geoffray <ngeoffray@google.com> Revert "ART: Enable Jit Profiling in Mterp for arm/arm64"

Not super happy to revert this, but unfortunately, too many problems when testing:

arm: tests timeout when running run-tests with the interpreter.

arm64 failures:
test-art-target-run-test-ndebug-prebuild-jit-relocate-ntrace-cms-checkjni-image-npictest-ndebuggable-003-omnibus-opcodes64
test-art-target-run-test-ndebug-prebuild-jit-relocate-ntrace-cms-checkjni-image-npictest-ndebuggable-005-annotations64
test-art-target-run-test-ndebug-prebuild-jit-relocate-ntrace-cms-checkjni-image-npictest-ndebuggable-064-field-access64
test-art-target-run-test-ndebug-prebuild-jit-relocate-ntrace-cms-checkjni-image-npictest-ndebuggable-406-fields64

org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testBreakpoint_BeforeException
org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testFieldAccess
org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testFieldModification
org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testMethodExit
org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testMethodExitWithReturnValue
org.apache.harmony.jpda.tests.jdwp.Events.FieldAccessTest#testFieldAccessEvent
org.apache.harmony.jpda.tests.jdwp.Events.FieldModification002Test#testFieldModifyEvent
org.apache.harmony.jpda.tests.jdwp.Events.FieldModificationTest#testFieldModifyEvent
org.apache.harmony.jpda.tests.jdwp.Events.MethodExitWithReturnValueTest#testMethodExitWithReturnValueException

This reverts commit a0a16105423459287497a98129dcba2828ccd7f0.

Change-Id: I8ff0512265ed0a422be67e7410998ad02639509c
a0a16105423459287497a98129dcba2828ccd7f0 04-Feb-2016 buzbee <buzbee@google.com> ART: Enable Jit Profiling in Mterp for arm/arm64

Adds the hooks for branch profiling to arm and arm64. The
other Jit profiling modes are handled in common code.

Stubbed out support for on-stack replacement.

Change-Id: Ic298a81139108c3d7f1325b59d97e14a9de08de6
3b0b4b9d09baae7234fc26b7970b3ec55560735e 02-Feb-2016 Bill Buzbee <buzbee@google.com> Revert "Revert "ART: Mterp for arm64""

Looks like some of our assemblers disagree on valid arm64 assembly syntax
Force use of clang for art runtime. In a subsequent CL, will use form
that both gcc and clang accept.

This reverts commit 43f3fb960bce978df699c8a68a972be2a0d0d221.

Change-Id: Ice83072171ab502c43d492e2238b446c4814ea67
43f3fb960bce978df699c8a68a972be2a0d0d221 02-Feb-2016 Sebastien Hertz <shertz@google.com> Revert "ART: Mterp for arm64"

This reverts commit e0c269e0a5f50b1a551ddba1205f6e5b4b5e6c98.

The CL is causing build breakages on arm64 targets.

Change-Id: I7402fe34869258ae870c57308b2062e50d801bdd
e0c269e0a5f50b1a551ddba1205f6e5b4b5e6c98 27-Jan-2016 buzbee <buzbee@google.com> ART: Mterp for arm64

Ready for review. All opcodes handled. All applicable run-tests pass.
Device boots to desktop in interpret-only mode.

Change-Id: I937d8bcf848a831e04d4b9de8d1914667a197d75